-Mon Jul 20 07:23:45 CEST 2020
+Sat Aug 1 07:23:42 CEST 2020
set g_balance_rifle_primary_burstcost 0
set g_balance_rifle_primary_damage 80
set g_balance_rifle_primary_force 100
+set g_balance_rifle_primary_headshot_multiplier 0
set g_balance_rifle_primary_refire 1.2
set g_balance_rifle_primary_shots 1
set g_balance_rifle_primary_solidpenetration 62.2
set g_balance_rifle_secondary_burstcost 0
set g_balance_rifle_secondary_damage 20
set g_balance_rifle_secondary_force 50
+set g_balance_rifle_secondary_headshot_multiplier 0
set g_balance_rifle_secondary_refire 0.9
set g_balance_rifle_secondary_reload 0
set g_balance_rifle_secondary_shots 4
set g_balance_rifle_primary_burstcost 0
set g_balance_rifle_primary_damage 80
set g_balance_rifle_primary_force 100
+set g_balance_rifle_primary_headshot_multiplier 1.25
set g_balance_rifle_primary_refire 1.2
set g_balance_rifle_primary_shots 1
set g_balance_rifle_primary_solidpenetration 62.2
set g_balance_rifle_secondary_burstcost 0
set g_balance_rifle_secondary_damage 20
set g_balance_rifle_secondary_force 50
+set g_balance_rifle_secondary_headshot_multiplier 0.1875
set g_balance_rifle_secondary_refire 0.9
set g_balance_rifle_secondary_reload 0
set g_balance_rifle_secondary_shots 4
set g_balance_rifle_primary_burstcost 0
set g_balance_rifle_primary_damage 80
set g_balance_rifle_primary_force 100
+set g_balance_rifle_primary_headshot_multiplier 0
set g_balance_rifle_primary_refire 1.2
set g_balance_rifle_primary_shots 1
set g_balance_rifle_primary_solidpenetration 62.2
set g_balance_rifle_secondary_bullethail 0
set g_balance_rifle_secondary_burstcost 0
set g_balance_rifle_secondary_damage 20
+set g_balance_rifle_secondary_headshot_multiplier 0
set g_balance_rifle_secondary_force 50
set g_balance_rifle_secondary_refire 0.9
set g_balance_rifle_secondary_reload 0
set g_balance_rifle_primary_burstcost 0
set g_balance_rifle_primary_damage 80
set g_balance_rifle_primary_force 100
+set g_balance_rifle_primary_headshot_multiplier 0
set g_balance_rifle_primary_refire 1.2
set g_balance_rifle_primary_shots 1
set g_balance_rifle_primary_solidpenetration 62.2
set g_balance_rifle_secondary_burstcost 0
set g_balance_rifle_secondary_damage 20
set g_balance_rifle_secondary_force 50
+set g_balance_rifle_secondary_headshot_multiplier 0
set g_balance_rifle_secondary_refire 0.9
set g_balance_rifle_secondary_reload 0
set g_balance_rifle_secondary_shots 4
set g_balance_rifle_primary_burstcost 0
set g_balance_rifle_primary_damage 80
set g_balance_rifle_primary_force 100
+set g_balance_rifle_primary_headshot_multiplier 0
set g_balance_rifle_primary_refire 1.2
set g_balance_rifle_primary_shots 1
set g_balance_rifle_primary_solidpenetration 62.2
set g_balance_rifle_secondary_bullethail 0
set g_balance_rifle_secondary_burstcost 0
set g_balance_rifle_secondary_damage 20
+set g_balance_rifle_secondary_headshot_multiplier 0
set g_balance_rifle_secondary_force 50
set g_balance_rifle_secondary_refire 0.9
set g_balance_rifle_secondary_reload 0
# Translators:
# 411370735b8ef90fa32c21e58a50941e_d905c03 <7784313cf022f885419b74f26eaf98f3_541595>, 2016-2017
# set_killer <mettall@abv.bg>, 2014
+# Nik Dim <lilo@abv.bg>, 2020
# ubone <van_ds_ff@mail.bg>, 2016
# set_killer <mettall@abv.bg>, 2014
# ubone <van_ds_ff@mail.bg>, 2016
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-07 07:23+0200\n"
-"PO-Revision-Date: 2020-06-07 05:23+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"PO-Revision-Date: 2020-07-29 08:59+0000\n"
+"Last-Translator: Nik Dim <lilo@abv.bg>\n"
"Language-Team: Bulgarian (http://www.transifex.com/team-xonotic/xonotic/"
"language/bg/)\n"
"Language: bg\n"
#: qcsrc/client/hud/panel/infomessages.qc:108
#: qcsrc/menu/xonotic/keybinder.qc:47
msgid "primary fire"
-msgstr ""
+msgstr "Основна стрелба"
#: qcsrc/client/hud/panel/infomessages.qc:110
#, c-format
#: qcsrc/client/hud/panel/infomessages.qc:116
#: qcsrc/menu/xonotic/keybinder.qc:48
msgid "secondary fire"
-msgstr ""
+msgstr "Второстепенна стрелба"
#: qcsrc/client/hud/panel/infomessages.qc:119
#, c-format
#: qcsrc/client/hud/panel/infomessages.qc:217
msgid "^1Spectating this player:"
-msgstr ""
+msgstr "^1Наблюдаващи този играч:"
#: qcsrc/client/hud/panel/infomessages.qc:217
msgid "^1Spectating you:"
-msgstr ""
+msgstr "^1Наблюдаващи теб:"
#: qcsrc/client/hud/panel/infomessages.qc:233
msgid "^7Press ^3ESC ^7to show HUD options."
#: qcsrc/client/hud/panel/quickmenu.qc:787
#: qcsrc/client/hud/panel/quickmenu.qc:794
msgid "Chat"
-msgstr ""
+msgstr "Чат"
#: qcsrc/client/hud/panel/quickmenu.qc:788
msgid "QMCMD^Send public message to"
#: qcsrc/client/hud/panel/quickmenu.qc:790
msgid "QMCMD^good game"
-msgstr ""
+msgstr "QMCMD^добра игра"
#: qcsrc/client/hud/panel/quickmenu.qc:791
msgid "QMCMD^hi / good luck"
#: qcsrc/client/hud/panel/quickmenu.qc:798
#: qcsrc/client/hud/panel/quickmenu.qc:814
msgid "QMCMD^Team chat"
-msgstr ""
+msgstr "QMCMD^Отборен чат"
#: qcsrc/client/hud/panel/quickmenu.qc:799
msgid "QMCMD^strength soon"
#: qcsrc/client/hud/panel/quickmenu.qc:802
msgid "QMCMD^negative"
-msgstr ""
+msgstr "QMCMD^отрицателен"
#: qcsrc/client/hud/panel/quickmenu.qc:803
msgid "QMCMD^positive"
-msgstr ""
+msgstr "QMCMD^положителен"
#: qcsrc/client/hud/panel/quickmenu.qc:804
msgid "QMCMD^need help (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:817
msgid "QMCMD^Send private message to"
-msgstr ""
+msgstr "QMCMD^Изпрати лично съобщение до"
#: qcsrc/client/hud/panel/quickmenu.qc:819
#: qcsrc/client/hud/panel/quickmenu.qc:849
msgid "QMCMD^Settings"
-msgstr ""
+msgstr "QMCMD^Настройки"
#: qcsrc/client/hud/panel/quickmenu.qc:820
#: qcsrc/client/hud/panel/quickmenu.qc:827
#: qcsrc/client/hud/panel/quickmenu.qc:842
msgid "QMCMD^Increase speed"
-msgstr ""
+msgstr "QMCMD^Увеличи скоростта"
#: qcsrc/client/hud/panel/quickmenu.qc:843
msgid "QMCMD^Decrease speed"
-msgstr ""
+msgstr "QMCMD^Намали скоростта"
#: qcsrc/client/hud/panel/quickmenu.qc:844
msgid "QMCMD^Wall collision"
#: qcsrc/client/hud/panel/quickmenu.qc:848
msgid "QMCMD^Fullscreen"
-msgstr ""
+msgstr "QMCMD^Цял екран"
#: qcsrc/client/hud/panel/quickmenu.qc:851
#: qcsrc/client/hud/panel/quickmenu.qc:861
#: qcsrc/client/hud/panel/quickmenu.qc:852
msgid "QMCMD^Restart the map"
-msgstr ""
+msgstr "QMCMD^Рестартиране на картата"
#: qcsrc/client/hud/panel/quickmenu.qc:853
msgid "QMCMD^End match"
#: qcsrc/client/hud/panel/racetimer.qc:159 qcsrc/client/main.qc:1102
msgid "missing a checkpoint"
-msgstr ""
+msgstr "пропуснат чекпойнт"
#: qcsrc/client/hud/panel/radar.qc:386
msgid "Click to select teleport destination"
#: qcsrc/client/hud/panel/scoreboard.qc:109
msgid "Number of deaths"
-msgstr ""
+msgstr "Брой умирания"
#: qcsrc/client/hud/panel/scoreboard.qc:109
msgid "SCO^deaths"
#: qcsrc/client/hud/panel/scoreboard.qc:111
msgid "The total damage done"
-msgstr ""
+msgstr "Общa нанесена щета"
#: qcsrc/client/hud/panel/scoreboard.qc:112
msgid "SCO^dmgtaken"
#: qcsrc/client/hud/panel/scoreboard.qc:119
msgid "Number of kills minus suicides"
-msgstr ""
+msgstr "Брой убийства без самоубийствата"
#: qcsrc/client/hud/panel/scoreboard.qc:119
msgid "SCO^frags"
#: qcsrc/client/hud/panel/scoreboard.qc:125
msgid "Number of kills"
-msgstr ""
+msgstr "Брой убийства"
#: qcsrc/client/hud/panel/scoreboard.qc:125
msgid "SCO^kills"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "Number of times a key was lost"
-msgstr ""
+msgstr "Колко пъти ключа е бил изгубен"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "SCO^losses"
#: qcsrc/client/hud/panel/scoreboard.qc:129
#: qcsrc/client/hud/panel/scoreboard.qc:130
msgid "Player name"
-msgstr ""
+msgstr "Име на играч"
#: qcsrc/client/hud/panel/scoreboard.qc:129
msgid "SCO^name"
#: qcsrc/client/hud/panel/scoreboard.qc:131
msgid "Number of objectives destroyed"
-msgstr ""
+msgstr "Брой унищожени цели"
#: qcsrc/client/hud/panel/scoreboard.qc:131
msgid "SCO^objectives"
#: qcsrc/client/hud/panel/scoreboard.qc:134
msgid "Packet loss"
-msgstr ""
+msgstr "Загубени пакети"
#: qcsrc/client/hud/panel/scoreboard.qc:134
msgid "SCO^pl"
#: qcsrc/client/hud/panel/scoreboard.qc:138
msgid "Number of revivals"
-msgstr ""
+msgstr "Брой съживявания"
#: qcsrc/client/hud/panel/scoreboard.qc:138
msgid "SCO^revivals"
#: qcsrc/client/hud/panel/scoreboard.qc:139
msgid "Number of rounds won"
-msgstr ""
+msgstr "Брой спечелени рундове"
#: qcsrc/client/hud/panel/scoreboard.qc:139
msgid "SCO^rounds won"
-msgstr ""
+msgstr "SCO^спечелени рундове"
#: qcsrc/client/hud/panel/scoreboard.qc:140
msgid "SCO^score"
#: qcsrc/client/hud/panel/scoreboard.qc:140
msgid "Total score"
-msgstr ""
+msgstr "Общ резултат"
#: qcsrc/client/hud/panel/scoreboard.qc:141
msgid "Number of suicides"
#: qcsrc/client/hud/panel/scoreboard.qc:331
msgid "Usage:"
-msgstr ""
+msgstr "Употреба:"
#: qcsrc/client/hud/panel/scoreboard.qc:333
msgid "^2scoreboard_columns_set ^3field1 field2 ..."
#: qcsrc/client/hud/panel/timer.qc:72
msgid "WARMUP"
-msgstr ""
+msgstr "ЗАГРЯВКА"
#: qcsrc/client/hud/panel/vote.qc:33
msgid "^1You must answer before entering hud configure mode"
#: qcsrc/common/items/item/armor.qh:42
msgid "Small armor"
-msgstr ""
+msgstr "Малка броня"
#: qcsrc/common/items/item/armor.qh:80
msgid "Medium armor"
-msgstr ""
+msgstr "Средна броня"
#: qcsrc/common/items/item/armor.qh:118 qcsrc/common/items/item/armor.qh:121
msgid "Big armor"
-msgstr ""
+msgstr "Голяма броня"
#: qcsrc/common/items/item/armor.qh:158 qcsrc/common/items/item/armor.qh:161
msgid "Mega armor"
-msgstr ""
+msgstr "Мега броня"
#: qcsrc/common/items/item/health.qh:42
msgid "Small health"
-msgstr ""
+msgstr "Малка аптечка"
#: qcsrc/common/items/item/health.qh:80
msgid "Medium health"
-msgstr ""
+msgstr "Средна аптечка"
#: qcsrc/common/items/item/health.qh:118 qcsrc/common/items/item/health.qh:121
msgid "Big health"
-msgstr ""
+msgstr "Голяма аптечка"
#: qcsrc/common/items/item/health.qh:158 qcsrc/common/items/item/health.qh:161
msgid "Mega health"
-msgstr ""
+msgstr "Мега аптечка"
#: qcsrc/common/items/item/jetpack.qh:38 qcsrc/common/items/item/jetpack.qh:41
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:91
#: qcsrc/common/mapinfo.qh:590
msgid "Duel"
-msgstr ""
+msgstr "Дуел"
#: qcsrc/common/mapinfo.qh:590
msgid "Fight in a one versus one arena battle to decide the winner"
#: qcsrc/common/minigames/minigame/pong.qc:589
#: qcsrc/common/minigames/minigame/ttt.qc:299
msgid "AI"
-msgstr ""
+msgstr "ИИ"
#: qcsrc/common/minigames/minigame/pong.qc:606
msgid "Press ^1Start Match^7 to start the match with the current players"
#: qcsrc/common/minigames/minigame/ttt.qc:672
msgid "Single Player"
-msgstr ""
+msgstr "Солова Игра"
#: qcsrc/common/monsters/monster/mage.qh:17
#: qcsrc/menu/xonotic/dialog_monstertools.qc:18
#: qcsrc/common/mutators/mutator/buffs/all.inc:87
msgid "Jump"
-msgstr ""
+msgstr "Скок"
#: qcsrc/common/mutators/mutator/buffs/all.inc:96
msgid "Invisible"
#: qcsrc/common/mutators/mutator/buffs/all.inc:129
msgid "Luck"
-msgstr ""
+msgstr "Късмет"
#: qcsrc/common/mutators/mutator/buffs/all.inc:137
msgid "Flight"
#: qcsrc/common/mutators/mutator/nades/nades.inc:18
msgid "Napalm grenade"
-msgstr ""
+msgstr "Напалмова граната"
#: qcsrc/common/mutators/mutator/nades/nades.inc:26
msgid "Ice grenade"
-msgstr ""
+msgstr "Ледена граната"
#: qcsrc/common/mutators/mutator/nades/nades.inc:34
msgid "Translocate grenade"
#: qcsrc/common/mutators/mutator/nades/nades.qh:33
msgid "Grenade"
-msgstr ""
+msgstr "Граната"
#: qcsrc/common/mutators/mutator/overkill/okhmg.qh:20
msgid "Overkill Heavy Machine Gun"
#: qcsrc/common/notifications/all.inc:561
msgid "^BGYou got the flag!"
-msgstr ""
+msgstr "^BGТи взе флага!"
#: qcsrc/common/notifications/all.inc:562
#, c-format
msgid "^BGYou got your %steam^BG's flag, return it!"
-msgstr ""
+msgstr "^BGТи взе твоя %s team^BG's флаг, върни го!"
#: qcsrc/common/notifications/all.inc:563
#, c-format
#: qcsrc/common/notifications/all.qh:419
msgid "point"
-msgstr ""
+msgstr "точка"
#: qcsrc/common/notifications/all.qh:419
msgid "points"
-msgstr ""
+msgstr "точки"
#: qcsrc/common/notifications/all.qh:428
msgid "drop flag"
#: qcsrc/common/util.qc:1451 qcsrc/common/util.qc:1508
#, c-format
msgid "UPARROW"
-msgstr ""
+msgstr "СТРЕЛКА НАГОРЕ"
#: qcsrc/common/util.qc:1452 qcsrc/common/util.qc:1503
#, c-format
msgid "DOWNARROW"
-msgstr ""
+msgstr "СТРЕЛКА НАДОЛУ"
#: qcsrc/common/util.qc:1453 qcsrc/common/util.qc:1505
#, c-format
msgid "LEFTARROW"
-msgstr ""
+msgstr "СТРЕЛКА НАЛЯВО"
#: qcsrc/common/util.qc:1454 qcsrc/common/util.qc:1506
#, c-format
msgid "RIGHTARROW"
-msgstr ""
+msgstr "СТРЕЛКА НАДЯСНО"
#: qcsrc/common/util.qc:1456
msgid "ALT"
#: qcsrc/common/util.qc:1477
msgid "APOSTROPHE"
-msgstr ""
+msgstr "АПОСТРОФ"
#: qcsrc/common/util.qc:1478
msgid "BACKSLASH"
#: qcsrc/common/util.qc:1510
#, c-format
msgid "PERIOD"
-msgstr ""
+msgstr "ТОЧКА"
#: qcsrc/common/util.qc:1512
#, c-format
#: qcsrc/common/util.qc:1515
#, c-format
msgid "MINUS"
-msgstr ""
+msgstr "МИНУС"
#: qcsrc/common/util.qc:1516
#, c-format
msgid "PLUS"
-msgstr ""
+msgstr "ПЛЮС"
#: qcsrc/common/util.qc:1518
#, c-format
msgid "EQUALS"
-msgstr ""
+msgstr "РАВНО"
#: qcsrc/common/util.qc:1523
msgid "PRINTSCREEN"
#: qcsrc/common/util.qc:1546
#, c-format
msgid "START"
-msgstr ""
+msgstr "СТАРТ"
#: qcsrc/common/util.qc:1547
#, c-format
#: qcsrc/common/util.qc:1571
#, c-format
msgid "UP"
-msgstr ""
+msgstr "НАГОРЕ"
#: qcsrc/common/util.qc:1572
#, c-format
#: qcsrc/menu/xonotic/credits.qc:158
msgid "Bulgarian"
-msgstr ""
+msgstr "Български"
#: qcsrc/menu/xonotic/credits.qc:165
msgid "Chinese (China)"
#: qcsrc/menu/xonotic/credits.qc:179
msgid "Czech"
-msgstr ""
+msgstr "Чешки"
#: qcsrc/menu/xonotic/credits.qc:184
msgid "Dutch"
#: qcsrc/menu/xonotic/credits.qc:201
msgid "French"
-msgstr ""
+msgstr "Френски"
#: qcsrc/menu/xonotic/credits.qc:209
msgid "German"
-msgstr ""
+msgstr "Немски"
#: qcsrc/menu/xonotic/credits.qc:220
msgid "Greek"
-msgstr ""
+msgstr "Гръцки"
#: qcsrc/menu/xonotic/credits.qc:226
msgid "Hungarian"
-msgstr ""
+msgstr "Унгарски"
#: qcsrc/menu/xonotic/credits.qc:230
msgid "Irish"
#: qcsrc/menu/xonotic/credits.qc:233
msgid "Italian"
-msgstr ""
+msgstr "Италиански"
#: qcsrc/menu/xonotic/credits.qc:239
msgid "Kazakh"
#: qcsrc/menu/xonotic/credits.qc:242
msgid "Korean"
-msgstr ""
+msgstr "Корейски"
#: qcsrc/menu/xonotic/credits.qc:246
msgid "Polish"
-msgstr ""
+msgstr "Полски"
#: qcsrc/menu/xonotic/credits.qc:254
msgid "Portuguese"
#: qcsrc/menu/xonotic/credits.qc:260
msgid "Romanian"
-msgstr ""
+msgstr "Румънски"
#: qcsrc/menu/xonotic/credits.qc:267
msgid "Russian"
-msgstr ""
+msgstr "Руски"
#: qcsrc/menu/xonotic/credits.qc:278
msgid "Scottish Gaelic"
#: qcsrc/menu/xonotic/credits.qc:281
msgid "Serbian"
-msgstr ""
+msgstr "Сръбски"
#: qcsrc/menu/xonotic/credits.qc:287
msgid "Spanish"
-msgstr ""
+msgstr "Испански"
#: qcsrc/menu/xonotic/credits.qc:298
msgid "Swedish"
#: qcsrc/menu/xonotic/credits.qc:302
msgid "Ukrainian"
-msgstr ""
+msgstr "Украински"
#: qcsrc/menu/xonotic/credits.qc:309
msgid "Past Contributors"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:40
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:60
msgid "Unlimited"
-msgstr ""
+msgstr "Неограничен"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:74
msgid "Gametype"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:142
msgid "Previous"
-msgstr ""
+msgstr "Предходен"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:145
msgid "Next"
-msgstr ""
+msgstr "Следващ"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:150
msgid "Slide show"
#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:156
msgid "Select language..."
-msgstr ""
+msgstr "Избери език..."
#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:172
msgid "Gender:"
#: qcsrc/menu/xonotic/keybinder.qc:56
msgid "reload"
-msgstr ""
+msgstr "презареждане"
#: qcsrc/menu/xonotic/keybinder.qc:57
msgid "drop weapon / throw nade"
#: qcsrc/menu/xonotic/keybinder.qc:102
msgid "Client"
-msgstr ""
+msgstr "Клиент"
#: qcsrc/menu/xonotic/keybinder.qc:106 qcsrc/menu/xonotic/keybinder.qc:108
msgid "enter console"
#: qcsrc/menu/xonotic/statslist.qc:29
msgid "January"
-msgstr ""
+msgstr "Януари"
#: qcsrc/menu/xonotic/statslist.qc:30
msgid "February"
-msgstr ""
+msgstr "Февруари"
#: qcsrc/menu/xonotic/statslist.qc:31
msgid "March"
-msgstr ""
+msgstr "Март"
#: qcsrc/menu/xonotic/statslist.qc:32
msgid "April"
-msgstr ""
+msgstr "Април"
#: qcsrc/menu/xonotic/statslist.qc:33
msgid "May"
-msgstr ""
+msgstr "Май"
#: qcsrc/menu/xonotic/statslist.qc:34
msgid "June"
-msgstr ""
+msgstr "Юни"
#: qcsrc/menu/xonotic/statslist.qc:35
msgid "July"
-msgstr ""
+msgstr "Юли"
#: qcsrc/menu/xonotic/statslist.qc:36
msgid "August"
-msgstr ""
+msgstr "Август"
#: qcsrc/menu/xonotic/statslist.qc:37
msgid "September"
-msgstr ""
+msgstr "Септември"
#: qcsrc/menu/xonotic/statslist.qc:38
msgid "October"
-msgstr ""
+msgstr "Октомври"
#: qcsrc/menu/xonotic/statslist.qc:39
msgid "November"
-msgstr ""
+msgstr "Ноември"
#: qcsrc/menu/xonotic/statslist.qc:40
msgid "December"
-msgstr ""
+msgstr "Декември"
#: qcsrc/menu/xonotic/statslist.qc:46
#, no-c-format
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# LegendGuard, 2020
+# LegendGuard, 2020
# Roi Asher Gerszkoviez <gerszkoviez@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-07 07:23+0200\n"
-"PO-Revision-Date: 2020-06-07 05:23+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"PO-Revision-Date: 2020-07-31 22:16+0000\n"
+"Last-Translator: LegendGuard\n"
"Language-Team: Catalan (http://www.transifex.com/team-xonotic/xonotic/"
"language/ca/)\n"
"Language: ca\n"
#: qcsrc/client/hud/hud_config.qc:81
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)"
-msgstr ""
+msgstr "^2Exportat amb èxit a %s! (Nota: Està guardat en data/data/)"
#: qcsrc/client/hud/hud_config.qc:85
#, c-format
msgid "^1Couldn't write to %s"
-msgstr ""
+msgstr "^1No s'ha pogut escriure a %s"
#: qcsrc/client/hud/panel/centerprint.qc:174
#, c-format
msgid "^3Countdown message at time %s, seconds left: ^COUNT"
-msgstr ""
+msgstr "^3Missatge de compte enrere a l'hora %s, segons restants: ^COUNT"
#: qcsrc/client/hud/panel/centerprint.qc:176
#, c-format
"^1Multiline message at time %s that\n"
"^1lasts longer than normal"
msgstr ""
+"^1Missatge de múltiples línies a l'hora %s\n"
+"^1dura més del normal"
#: qcsrc/client/hud/panel/centerprint.qc:178
#, c-format
msgid "Message at time %s"
-msgstr ""
+msgstr "Missatge a l’hora %s"
#: qcsrc/client/hud/panel/centerprint.qc:183
msgid "Generic message"
-msgstr ""
+msgstr "Missatge genèric"
#: qcsrc/client/hud/panel/chat.qc:89
msgid "^3Player^7: This is the chat area."
-msgstr ""
+msgstr "^3Jugador^7: Això és l'àrea del xat."
#: qcsrc/client/hud/panel/engineinfo.qc:76
#, c-format
#: qcsrc/client/hud/panel/infomessages.qc:95
msgid "^1Observing"
-msgstr ""
+msgstr "^1Observant"
#: qcsrc/client/hud/panel/infomessages.qc:97
#, c-format
msgid "^1Spectating: ^7%s"
-msgstr ""
+msgstr "^1Espectant: ^7%s"
#: qcsrc/client/hud/panel/infomessages.qc:108
#, c-format
msgid "^1Press ^3%s^1 to spectate"
-msgstr ""
+msgstr "^1Premeu ^3%s^1 per a observar"
#: qcsrc/client/hud/panel/infomessages.qc:108
#: qcsrc/menu/xonotic/keybinder.qc:47
msgid "primary fire"
-msgstr ""
+msgstr "tret primari"
#: qcsrc/client/hud/panel/infomessages.qc:110
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
-msgstr ""
+msgstr "^1Premeu ^3%s^1 o ^3%s^1 per al jugador següent o anterior"
#: qcsrc/client/hud/panel/infomessages.qc:110
#: qcsrc/client/hud/panel/infomessages.qc:114
msgid "next weapon"
-msgstr ""
+msgstr "següent arma"
#: qcsrc/client/hud/panel/infomessages.qc:110
#: qcsrc/client/hud/panel/infomessages.qc:114
msgid "previous weapon"
-msgstr ""
+msgstr "anterior arma"
#: qcsrc/client/hud/panel/infomessages.qc:114
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
-msgstr ""
+msgstr "^1Utilitzeu ^3%s^1 o ^3%s^1 per canviar la velocitat"
#: qcsrc/client/hud/panel/infomessages.qc:116
#, c-format
msgid "^1Press ^3%s^1 to observe, ^3%s^1 to change camera mode"
-msgstr ""
+msgstr "^1Premeu ^3%s^1 per a observar, ^3%s^1 per canviar el mode de càmera"
#: qcsrc/client/hud/panel/infomessages.qc:116
#: qcsrc/common/vehicles/cl_vehicles.qc:190
msgid "drop weapon"
-msgstr ""
+msgstr "amollar arma"
#: qcsrc/client/hud/panel/infomessages.qc:116
#: qcsrc/menu/xonotic/keybinder.qc:48
msgid "secondary fire"
-msgstr ""
+msgstr "tret secundari"
#: qcsrc/client/hud/panel/infomessages.qc:119
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
-msgstr ""
+msgstr "^1Prem ^3%s^1 per a informació del mode de joc"
#: qcsrc/client/hud/panel/infomessages.qc:119
#: qcsrc/menu/xonotic/keybinder.qc:103
msgid "server info"
-msgstr ""
+msgstr "informació del servidor"
#: qcsrc/client/hud/panel/infomessages.qc:132
msgid "^1Match has already begun"
-msgstr ""
+msgstr "^1La partida ja ha començat"
#: qcsrc/client/hud/panel/infomessages.qc:134
msgid "^1You have no more lives left"
-msgstr ""
+msgstr "^1No tens cap vida restant"
#: qcsrc/client/hud/panel/infomessages.qc:136
#: qcsrc/client/hud/panel/infomessages.qc:139
#, c-format
msgid "^1Press ^3%s^1 to join"
-msgstr ""
+msgstr "^1Prem ^3%s^1 per a unir-te"
#: qcsrc/client/hud/panel/infomessages.qc:136
#: qcsrc/client/hud/panel/infomessages.qc:139
#: qcsrc/common/notifications/all.qh:430
msgid "jump"
-msgstr ""
+msgstr "saltar"
#: qcsrc/client/hud/panel/infomessages.qc:147
#, c-format
#: qcsrc/client/hud/panel/infomessages.qc:153
msgid "^2Currently in ^1warmup^2 stage!"
-msgstr ""
+msgstr "^2Actualment en etapa d'^1escalfament^2!"
#: qcsrc/client/hud/panel/infomessages.qc:168
#, c-format
msgid "%sPress ^3%s%s to end warmup"
-msgstr ""
+msgstr "%sPrem ^3%s%s per acabar l'escalfament"
#: qcsrc/client/hud/panel/infomessages.qc:168
#: qcsrc/client/hud/panel/infomessages.qc:170
#: qcsrc/client/hud/panel/infomessages.qc:183
#: qcsrc/menu/xonotic/keybinder.qc:99
msgid "ready"
-msgstr ""
+msgstr "preparat"
#: qcsrc/client/hud/panel/infomessages.qc:170
#, c-format
msgid "%sPress ^3%s%s once you are ready"
-msgstr ""
+msgstr "%sPrem ^3%s%s quan estiguis llest"
#: qcsrc/client/hud/panel/infomessages.qc:175
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
+"^2Esperant a que els altres estiguin llestos per acabar l'escalfament..."
#: qcsrc/client/hud/panel/infomessages.qc:177
msgid "^2Waiting for others to ready up..."
-msgstr ""
+msgstr "^2Esperant a que els altres estiguin llestos..."
#: qcsrc/client/hud/panel/infomessages.qc:183
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
-msgstr ""
+msgstr "^2Prem ^3%s^2 per acabar l'escalfament"
#: qcsrc/client/hud/panel/infomessages.qc:204
msgid "Teamnumbers are unbalanced!"
-msgstr ""
+msgstr "Els números d'equip estan desequilibrats!"
#: qcsrc/client/hud/panel/infomessages.qc:207
#, c-format
msgid " Press ^3%s%s to adjust"
-msgstr ""
+msgstr " Prem ^3%s%s per ajustar"
#: qcsrc/client/hud/panel/infomessages.qc:207
#: qcsrc/menu/xonotic/keybinder.qc:115
msgid "team menu"
-msgstr ""
+msgstr "menú d'equip"
#: qcsrc/client/hud/panel/infomessages.qc:217
msgid "^1Spectating this player:"
-msgstr ""
+msgstr "^1Espectant a aquest jugador:"
#: qcsrc/client/hud/panel/infomessages.qc:217
msgid "^1Spectating you:"
-msgstr ""
+msgstr "^1Espectant-te a tu:"
#: qcsrc/client/hud/panel/infomessages.qc:233
msgid "^7Press ^3ESC ^7to show HUD options."
-msgstr ""
+msgstr "^7Prem ^3ESC ^7per veure les opcions de HUD."
#: qcsrc/client/hud/panel/infomessages.qc:234
msgid "^3Doubleclick ^7a panel for panel-specific options."
-msgstr ""
+msgstr "^3Doble clic ^7en un panell per a opcions específiques del panell."
#: qcsrc/client/hud/panel/infomessages.qc:235
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
-msgstr ""
+msgstr "^3CTRL ^7per desactivar la prova de col·lisions, ^3SHIFT ^7i"
#: qcsrc/client/hud/panel/infomessages.qc:236
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
-msgstr ""
+msgstr "^3ALT ^7+ ^3TECLES DE DIRECCIÓ ^7per ajustaments fins."
#: qcsrc/client/hud/panel/modicons.qc:183
msgid "Personal best"
-msgstr ""
+msgstr "Rècord personal"
#: qcsrc/client/hud/panel/modicons.qc:193
msgid "Server best"
-msgstr ""
+msgstr "Rècord del servidor"
#: qcsrc/client/hud/panel/notify.qc:127 qcsrc/client/hud/panel/notify.qc:128
#: qcsrc/client/hud/panel/score.qc:69
#, c-format
msgid "Player %d"
-msgstr ""
+msgstr "Jugador %d"
#: qcsrc/client/hud/panel/quickmenu.qc:597
#: qcsrc/client/hud/panel/quickmenu.qc:599
#, c-format
msgid "Submenu%d"
-msgstr ""
+msgstr "Submenú%d"
#: qcsrc/client/hud/panel/quickmenu.qc:604
#, c-format
msgid "Command%d"
-msgstr ""
+msgstr "Ordre%d"
#: qcsrc/client/hud/panel/quickmenu.qc:630
msgid "Continue..."
-msgstr ""
+msgstr "Continuar..."
#: qcsrc/client/hud/panel/quickmenu.qc:787
#: qcsrc/client/hud/panel/quickmenu.qc:794
msgid "Chat"
-msgstr ""
+msgstr "Xat"
#: qcsrc/client/hud/panel/quickmenu.qc:788
msgid "QMCMD^Send public message to"
-msgstr ""
+msgstr "QMCMD^Enviar missatge públic a"
#: qcsrc/client/hud/panel/quickmenu.qc:789
msgid "QMCMD^:-) / nice one"
-msgstr ""
+msgstr "QMCMD^:-) / bona"
#: qcsrc/client/hud/panel/quickmenu.qc:789
msgid "QMCMD^nice one"
-msgstr ""
+msgstr "QMCMD^bona"
#: qcsrc/client/hud/panel/quickmenu.qc:790
msgid "QMCMD^good game"
-msgstr ""
+msgstr "QMCMD^ben jugat"
#: qcsrc/client/hud/panel/quickmenu.qc:791
msgid "QMCMD^hi / good luck"
-msgstr ""
+msgstr "QMCMD^hola / bona sort"
#: qcsrc/client/hud/panel/quickmenu.qc:791
msgid "QMCMD^hi / good luck and have fun"
-msgstr ""
+msgstr "QMCMD^hola / bona sort i diverteix"
#: qcsrc/client/hud/panel/quickmenu.qc:793
msgid "QMCMD^Send in English"
-msgstr ""
+msgstr "QMCMD^Enviar en anglès"
#: qcsrc/client/hud/panel/quickmenu.qc:798
#: qcsrc/client/hud/panel/quickmenu.qc:814
msgid "QMCMD^Team chat"
-msgstr ""
+msgstr "QMCMD^Xat de l'equip"
#: qcsrc/client/hud/panel/quickmenu.qc:799
msgid "QMCMD^strength soon"
-msgstr ""
+msgstr "QMCMD^la força apareixerà aviat"
#: qcsrc/client/hud/panel/quickmenu.qc:800
msgid "QMCMD^free item %x^7 (l:%y^7)"
-msgstr ""
+msgstr "QMCMD^objecte gratuït %x^7 (l:%y^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:800
msgid "QMCMD^free item, icon"
-msgstr ""
+msgstr "QMCMD^objecte gratuït, icona"
#: qcsrc/client/hud/panel/quickmenu.qc:801
msgid "QMCMD^took item (l:%l^7)"
-msgstr ""
+msgstr "QMCMD^va prendre l'objecte (l:% l ^ 7)"
#: qcsrc/client/hud/panel/quickmenu.qc:801
msgid "QMCMD^took item, icon"
-msgstr ""
+msgstr "QMCMD^va prendre l'objecte, icona"
#: qcsrc/client/hud/panel/quickmenu.qc:802
msgid "QMCMD^negative"
-msgstr ""
+msgstr "QMCMD^negatiu"
#: qcsrc/client/hud/panel/quickmenu.qc:803
msgid "QMCMD^positive"
-msgstr ""
+msgstr "QMCMD^positiu"
#: qcsrc/client/hud/panel/quickmenu.qc:804
msgid "QMCMD^need help (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr ""
+msgstr "QMCMD^necessito ajuda (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:804
msgid "QMCMD^need help, icon"
-msgstr ""
+msgstr "QMCMD^necessito ajuda, icona"
#: qcsrc/client/hud/panel/quickmenu.qc:805
msgid "QMCMD^enemy seen (l:%y^7)"
-msgstr ""
+msgstr "QMCMD^enemic vist (l:%y^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:805
msgid "QMCMD^enemy seen, icon"
-msgstr ""
+msgstr "QMCMD^enemic vist, icona"
#: qcsrc/client/hud/panel/quickmenu.qc:806
msgid "QMCMD^flag seen (l:%y^7)"
-msgstr ""
+msgstr "QMCMD^bandera vista (l:%y^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:806
msgid "QMCMD^flag seen, icon"
-msgstr ""
+msgstr "QMCMD^bandera vista, icona"
#: qcsrc/client/hud/panel/quickmenu.qc:807
msgid "QMCMD^defending (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr ""
+msgstr "QMCMD^defensant (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:807
msgid "QMCMD^defending, icon"
-msgstr ""
+msgstr "QMCMD^defensant, icona"
#: qcsrc/client/hud/panel/quickmenu.qc:808
msgid "QMCMD^roaming (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr ""
+msgstr "QMCMD^movent-me (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:808
msgid "QMCMD^roaming, icon"
-msgstr ""
+msgstr "QMCMD^movent-me, icona"
#: qcsrc/client/hud/panel/quickmenu.qc:809
msgid "QMCMD^attacking (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr ""
+msgstr "QMCMD^atacant (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:809
msgid "QMCMD^attacking, icon"
-msgstr ""
+msgstr "QMCMD^atacant, icona"
#: qcsrc/client/hud/panel/quickmenu.qc:810
msgid "QMCMD^killed flagcarrier (l:%y^7)"
-msgstr ""
+msgstr "QMCMD^el portador de la bandera ha estat assassinat (l:%y^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:810
msgid "QMCMD^killed flagcarrier, icon"
-msgstr ""
+msgstr "QMCMD^el portador de la bandera ha estat assassinat, icona"
#: qcsrc/client/hud/panel/quickmenu.qc:811
#, c-format
msgid "QMCMD^dropped flag (l:%d^7)"
-msgstr ""
+msgstr "QMCMD^bandera tirada (l:%d^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:811
msgid "QMCMD^dropped flag, icon"
-msgstr ""
+msgstr "QMCMD^bandera tirada, icona"
#: qcsrc/client/hud/panel/quickmenu.qc:812
msgid "QMCMD^drop weapon, icon"
-msgstr ""
+msgstr "QMCMD^tirar arma, icona"
#: qcsrc/client/hud/panel/quickmenu.qc:812
msgid "QMCMD^dropped weapon %w^7 (l:%l^7)"
-msgstr ""
+msgstr "QMCMD^arma tirada %w^7 (l:%l^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:813
msgid "QMCMD^drop flag/key, icon"
-msgstr ""
+msgstr "QMCMD^tirar bandera/clau, icona"
#: qcsrc/client/hud/panel/quickmenu.qc:813
msgid "QMCMD^dropped flag/key %w^7 (l:%l^7)"
-msgstr ""
+msgstr "QMCMD^bandera/clau tirada %w^7 (l:%l^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:817
msgid "QMCMD^Send private message to"
-msgstr ""
+msgstr "QMCMD^Enviar missatge privat a"
#: qcsrc/client/hud/panel/quickmenu.qc:819
#: qcsrc/client/hud/panel/quickmenu.qc:849
msgid "QMCMD^Settings"
-msgstr ""
+msgstr "QMCMD^Ajustaments"
#: qcsrc/client/hud/panel/quickmenu.qc:820
#: qcsrc/client/hud/panel/quickmenu.qc:827
msgid "QMCMD^View/HUD settings"
-msgstr ""
+msgstr "QMCMD^Ajustaments de Vista/HUD"
#: qcsrc/client/hud/panel/quickmenu.qc:821
msgid "QMCMD^3rd person view"
-msgstr ""
+msgstr "QMCMD^Vista en 3ª persona"
#: qcsrc/client/hud/panel/quickmenu.qc:822
msgid "QMCMD^Player models like mine"
-msgstr ""
+msgstr "QMCMD^Models de el jugador com el meu"
#: qcsrc/client/hud/panel/quickmenu.qc:823
msgid "QMCMD^Names above players"
-msgstr ""
+msgstr "QMCMD^Noms per sobre dels jugadors"
#: qcsrc/client/hud/panel/quickmenu.qc:824
msgid "QMCMD^Crosshair per weapon"
-msgstr ""
+msgstr "QMCMD^Punt de mira per arma"
#: qcsrc/client/hud/panel/quickmenu.qc:825
msgid "QMCMD^FPS"
-msgstr ""
+msgstr "QMCMD^FPS"
#: qcsrc/client/hud/panel/quickmenu.qc:826
msgid "QMCMD^Net graph"
-msgstr ""
+msgstr "QMCMD^Gràfic de xarxa"
#: qcsrc/client/hud/panel/quickmenu.qc:829
#: qcsrc/client/hud/panel/quickmenu.qc:832
msgid "QMCMD^Sound settings"
-msgstr ""
+msgstr "QMCMD^Ajustaments de so"
#: qcsrc/client/hud/panel/quickmenu.qc:830
msgid "QMCMD^Hit sound"
-msgstr ""
+msgstr "QMCMD^So dels cops"
#: qcsrc/client/hud/panel/quickmenu.qc:831
msgid "QMCMD^Chat sound"
-msgstr ""
+msgstr "QMCMD^So del xat"
#: qcsrc/client/hud/panel/quickmenu.qc:836
msgid "QMCMD^Change spectator camera"
-msgstr ""
+msgstr "QMCMD^Canviar càmera d'espectador"
#: qcsrc/client/hud/panel/quickmenu.qc:841
#: qcsrc/client/hud/panel/quickmenu.qc:845
msgid "QMCMD^Observer camera"
-msgstr ""
+msgstr "QMCMD^Càmera d'observador"
#: qcsrc/client/hud/panel/quickmenu.qc:842
msgid "QMCMD^Increase speed"
-msgstr ""
+msgstr "QMCMD^Incrementar velocitat"
#: qcsrc/client/hud/panel/quickmenu.qc:843
msgid "QMCMD^Decrease speed"
-msgstr ""
+msgstr "QMCMD^Reduir velocitat"
#: qcsrc/client/hud/panel/quickmenu.qc:844
msgid "QMCMD^Wall collision"
-msgstr ""
+msgstr "QMCMD^Col·lisió del mur"
#: qcsrc/client/hud/panel/quickmenu.qc:848
msgid "QMCMD^Fullscreen"
-msgstr ""
+msgstr "QMCMD^Pantalla completa"
#: qcsrc/client/hud/panel/quickmenu.qc:851
#: qcsrc/client/hud/panel/quickmenu.qc:861
msgid "QMCMD^Call a vote"
-msgstr ""
+msgstr "QMCMD^Demanar vot"
#: qcsrc/client/hud/panel/quickmenu.qc:852
msgid "QMCMD^Restart the map"
-msgstr ""
+msgstr "QMCMD^Reiniciar el mapa"
#: qcsrc/client/hud/panel/quickmenu.qc:853
msgid "QMCMD^End match"
-msgstr ""
+msgstr "QMCMD^Acabar partida"
#: qcsrc/client/hud/panel/quickmenu.qc:856
msgid "QMCMD^Reduce match time"
-msgstr ""
+msgstr "QMCMD^Reduir temps de partida"
#: qcsrc/client/hud/panel/quickmenu.qc:857
msgid "QMCMD^Extend match time"
-msgstr ""
+msgstr "QMCMD^Estendre temps de partida"
#: qcsrc/client/hud/panel/quickmenu.qc:860
msgid "QMCMD^Shuffle teams"
-msgstr ""
+msgstr "QMCMD^Barrejar equips"
#: qcsrc/client/hud/panel/quickmenu.qc:865
msgid "QMCMD^Spectate a player"
-msgstr ""
+msgstr "QMCMD^Espectar a un jugador"
#: qcsrc/client/hud/panel/racetimer.qc:59
#, c-format
msgid " (-%dL)"
-msgstr ""
+msgstr " (-%dL)"
#: qcsrc/client/hud/panel/racetimer.qc:64
#, c-format
msgid " (+%dL)"
-msgstr ""
+msgstr " (+%dL)"
#: qcsrc/client/hud/panel/racetimer.qc:83
msgid "Start line"
-msgstr ""
+msgstr "Línia de sortida"
#: qcsrc/client/hud/panel/racetimer.qc:85
#: qcsrc/client/hud/panel/racetimer.qc:89
msgid "Finish line"
-msgstr ""
+msgstr "Línia de meta"
#: qcsrc/client/hud/panel/racetimer.qc:87
#: qcsrc/client/hud/panel/racetimer.qc:156
#, c-format
msgid "Intermediate %d"
-msgstr ""
+msgstr "Intermedi %d"
#: qcsrc/client/hud/panel/racetimer.qc:159
#: qcsrc/client/hud/panel/racetimer.qc:206
#: qcsrc/client/hud/panel/racetimer.qc:267
#, c-format
msgid "PENALTY: %.1f (%s)"
-msgstr ""
+msgstr "SANCIÓ: %.1f (%s)"
#: qcsrc/client/hud/panel/racetimer.qc:159 qcsrc/client/main.qc:1102
msgid "missing a checkpoint"
-msgstr ""
+msgstr "falta un punt de control"
#: qcsrc/client/hud/panel/radar.qc:386
msgid "Click to select teleport destination"
-msgstr ""
+msgstr "Fes clic per seleccionar la destinació de teletransport"
#: qcsrc/client/hud/panel/radar.qc:390
msgid "Click to select spawn location"
-msgstr ""
+msgstr "Fes clic per seleccionar el lloc de reaparició"
#: qcsrc/client/hud/panel/scoreboard.qc:105
msgid "Number of ball carrier kills"
-msgstr ""
+msgstr "Nombre d'assassinats de portador de pilota"
#: qcsrc/client/hud/panel/scoreboard.qc:105
msgid "SCO^bckills"
-msgstr ""
+msgstr "assassi.p.pi"
#: qcsrc/client/hud/panel/scoreboard.qc:106
msgid "SCO^bctime"
-msgstr ""
+msgstr "temps p.pi"
#: qcsrc/client/hud/panel/scoreboard.qc:106
msgid "Total amount of time holding the ball in Keepaway"
-msgstr ""
+msgstr "Temps total retenint la pilota al Keepaway"
#: qcsrc/client/hud/panel/scoreboard.qc:107
msgid "How often a flag (CTF) or a key (KeyHunt) was captured"
msgstr ""
+"Freqüència amb la qual una bandera (CTF) o clau (KeyHunt) ha estat capturada"
#: qcsrc/client/hud/panel/scoreboard.qc:107
msgid "SCO^caps"
-msgstr ""
+msgstr "captures"
#: qcsrc/client/hud/panel/scoreboard.qc:108
msgid "SCO^captime"
-msgstr ""
+msgstr "temps de captura"
#: qcsrc/client/hud/panel/scoreboard.qc:108
msgid "Time of fastest capture (CTF)"
-msgstr ""
+msgstr "Temps de la captura més ràpida (CTF)"
#: qcsrc/client/hud/panel/scoreboard.qc:109
msgid "Number of deaths"
-msgstr ""
+msgstr "Nombre de morts"
#: qcsrc/client/hud/panel/scoreboard.qc:109
msgid "SCO^deaths"
-msgstr ""
+msgstr "morts"
#: qcsrc/client/hud/panel/scoreboard.qc:110
msgid "Number of keys destroyed by pushing them into void"
-msgstr ""
+msgstr "Nombre de claus destruïdes sent llançades al buit"
#: qcsrc/client/hud/panel/scoreboard.qc:110
msgid "SCO^destroyed"
-msgstr ""
+msgstr "destruït"
#: qcsrc/client/hud/panel/scoreboard.qc:111
msgid "SCO^damage"
-msgstr ""
+msgstr "dany"
#: qcsrc/client/hud/panel/scoreboard.qc:111
msgid "The total damage done"
-msgstr ""
+msgstr "Dany total realitzat"
#: qcsrc/client/hud/panel/scoreboard.qc:112
msgid "SCO^dmgtaken"
-msgstr ""
+msgstr "dany rebut"
#: qcsrc/client/hud/panel/scoreboard.qc:112
msgid "The total damage taken"
-msgstr ""
+msgstr "Dany total rebut"
#: qcsrc/client/hud/panel/scoreboard.qc:113
msgid "Number of flag drops"
-msgstr ""
+msgstr "Nombre de banderes caigudes"
#: qcsrc/client/hud/panel/scoreboard.qc:113
msgid "SCO^drops"
-msgstr ""
+msgstr "caigudes"
#: qcsrc/client/hud/panel/scoreboard.qc:114
msgid "Player ELO"
-msgstr ""
+msgstr "ELO del jugador"
#: qcsrc/client/hud/panel/scoreboard.qc:114
msgid "SCO^elo"
-msgstr ""
+msgstr "elo"
#: qcsrc/client/hud/panel/scoreboard.qc:115
msgid "SCO^fastest"
-msgstr ""
+msgstr "el més ràpid"
#: qcsrc/client/hud/panel/scoreboard.qc:115
msgid "Time of fastest lap (Race/CTS)"
-msgstr ""
+msgstr "Temps de la volta més ràpida (Carrera/CTS)"
#: qcsrc/client/hud/panel/scoreboard.qc:116
msgid "Number of faults committed"
-msgstr ""
+msgstr "Nombre de faltes comeses"
#: qcsrc/client/hud/panel/scoreboard.qc:116
msgid "SCO^faults"
-msgstr ""
+msgstr "faltes"
#: qcsrc/client/hud/panel/scoreboard.qc:117
msgid "Number of flag carrier kills"
-msgstr ""
+msgstr "Nombre d'assassinats de portadors de bandera"
#: qcsrc/client/hud/panel/scoreboard.qc:117
msgid "SCO^fckills"
-msgstr ""
+msgstr "assassi.p.ba"
#: qcsrc/client/hud/panel/scoreboard.qc:118
msgid "FPS"
-msgstr ""
+msgstr "FPS"
#: qcsrc/client/hud/panel/scoreboard.qc:118
msgid "SCO^fps"
-msgstr ""
+msgstr "fps"
#: qcsrc/client/hud/panel/scoreboard.qc:119
msgid "Number of kills minus suicides"
-msgstr ""
+msgstr "Nombre d'assassinats menys suïcidis"
#: qcsrc/client/hud/panel/scoreboard.qc:119
msgid "SCO^frags"
-msgstr ""
+msgstr "eliminacions"
#: qcsrc/client/hud/panel/scoreboard.qc:120
msgid "Number of goals scored"
-msgstr ""
+msgstr "Nombre de gols encertats"
#: qcsrc/client/hud/panel/scoreboard.qc:120
msgid "SCO^goals"
-msgstr ""
+msgstr "gols"
#: qcsrc/client/hud/panel/scoreboard.qc:121
msgid "Number of keys carrier kills"
-msgstr ""
+msgstr "Nombre d'assassinats de portador de claus"
#: qcsrc/client/hud/panel/scoreboard.qc:121
msgid "SCO^kckills"
-msgstr ""
+msgstr "assassi.p.cl"
#: qcsrc/client/hud/panel/scoreboard.qc:122
msgid "SCO^k/d"
-msgstr ""
+msgstr "a/m"
#: qcsrc/client/hud/panel/scoreboard.qc:122
#: qcsrc/client/hud/panel/scoreboard.qc:123
#: qcsrc/client/hud/panel/scoreboard.qc:124
msgid "The kill-death ratio"
-msgstr ""
+msgstr "La raó assassinat-mort"
#: qcsrc/client/hud/panel/scoreboard.qc:123
msgid "SCO^kdr"
-msgstr ""
+msgstr "amr"
#: qcsrc/client/hud/panel/scoreboard.qc:124
msgid "SCO^kdratio"
-msgstr ""
+msgstr "amratio"
#: qcsrc/client/hud/panel/scoreboard.qc:125
msgid "Number of kills"
-msgstr ""
+msgstr "Nombre d'assassinats"
#: qcsrc/client/hud/panel/scoreboard.qc:125
msgid "SCO^kills"
-msgstr ""
+msgstr "assassinats"
#: qcsrc/client/hud/panel/scoreboard.qc:126
msgid "Number of laps finished (Race/CTS)"
-msgstr ""
+msgstr "Nombre de voltes acabades (Carrera/CTS)"
#: qcsrc/client/hud/panel/scoreboard.qc:126
msgid "SCO^laps"
-msgstr ""
+msgstr "voltes"
#: qcsrc/client/hud/panel/scoreboard.qc:127
msgid "Number of lives (LMS)"
-msgstr ""
+msgstr "Nombre de vides (LMS)"
#: qcsrc/client/hud/panel/scoreboard.qc:127
msgid "SCO^lives"
-msgstr ""
+msgstr "vides"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "Number of times a key was lost"
-msgstr ""
+msgstr "Nombre de vegades que es va perdre la clau"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "SCO^losses"
-msgstr ""
+msgstr "perdudes"
#: qcsrc/client/hud/panel/scoreboard.qc:129
#: qcsrc/client/hud/panel/scoreboard.qc:130
msgid "Player name"
-msgstr ""
+msgstr "Nom del jugador"
#: qcsrc/client/hud/panel/scoreboard.qc:129
msgid "SCO^name"
-msgstr ""
+msgstr "nom"
#: qcsrc/client/hud/panel/scoreboard.qc:130
msgid "SCO^nick"
-msgstr ""
+msgstr "sobrenom"
#: qcsrc/client/hud/panel/scoreboard.qc:131
msgid "Number of objectives destroyed"
-msgstr ""
+msgstr "Nombre d'objectius destruïts"
#: qcsrc/client/hud/panel/scoreboard.qc:131
msgid "SCO^objectives"
-msgstr ""
+msgstr "objectius"
#: qcsrc/client/hud/panel/scoreboard.qc:132
msgid ""
"How often a flag (CTF) or a key (KeyHunt) or a ball (Keepaway) was picked up"
msgstr ""
+"Freqüència amb què una bandera (CTF) o clau (KeyHunt) o pilota (Keepaway) va "
+"ser presa"
#: qcsrc/client/hud/panel/scoreboard.qc:132
msgid "SCO^pickups"
-msgstr ""
+msgstr "recollides"
#: qcsrc/client/hud/panel/scoreboard.qc:133
msgid "Ping time"
-msgstr ""
+msgstr "Temps del ping"
#: qcsrc/client/hud/panel/scoreboard.qc:133
msgid "SCO^ping"
-msgstr ""
+msgstr "ping"
#: qcsrc/client/hud/panel/scoreboard.qc:134
msgid "Packet loss"
-msgstr ""
+msgstr "Pèrdua de paquets"
#: qcsrc/client/hud/panel/scoreboard.qc:134
msgid "SCO^pl"
-msgstr ""
+msgstr "pl"
#: qcsrc/client/hud/panel/scoreboard.qc:135
msgid "Number of players pushed into void"
-msgstr ""
+msgstr "Nombre de jugadors empesos a el buit"
#: qcsrc/client/hud/panel/scoreboard.qc:135
msgid "SCO^pushes"
-msgstr ""
+msgstr "ofensives"
#: qcsrc/client/hud/panel/scoreboard.qc:136
msgid "Player rank"
-msgstr ""
+msgstr "Rang de el jugador"
#: qcsrc/client/hud/panel/scoreboard.qc:136
msgid "SCO^rank"
-msgstr ""
+msgstr "rang"
#: qcsrc/client/hud/panel/scoreboard.qc:137
msgid "Number of flag returns"
-msgstr ""
+msgstr "Nombre de retorns de bandera"
#: qcsrc/client/hud/panel/scoreboard.qc:137
msgid "SCO^returns"
-msgstr ""
+msgstr "retorns"
#: qcsrc/client/hud/panel/scoreboard.qc:138
msgid "Number of revivals"
-msgstr ""
+msgstr "Nombre de reanimacions"
#: qcsrc/client/hud/panel/scoreboard.qc:138
msgid "SCO^revivals"
-msgstr ""
+msgstr "reanimacions"
#: qcsrc/client/hud/panel/scoreboard.qc:139
msgid "Number of rounds won"
-msgstr ""
+msgstr "Nombre de rondes guanyades"
#: qcsrc/client/hud/panel/scoreboard.qc:139
msgid "SCO^rounds won"
-msgstr ""
+msgstr "rondes guanyades"
#: qcsrc/client/hud/panel/scoreboard.qc:140
msgid "SCO^score"
-msgstr ""
+msgstr "puntuació"
#: qcsrc/client/hud/panel/scoreboard.qc:140
msgid "Total score"
-msgstr ""
+msgstr "Puntuació total"
#: qcsrc/client/hud/panel/scoreboard.qc:141
msgid "Number of suicides"
-msgstr ""
+msgstr "Nombre de suïcidis"
#: qcsrc/client/hud/panel/scoreboard.qc:141
msgid "SCO^suicides"
-msgstr ""
+msgstr "suïcidis"
#: qcsrc/client/hud/panel/scoreboard.qc:142
msgid "Number of kills minus deaths"
-msgstr ""
+msgstr "Nombre d'assassinats menys morts"
#: qcsrc/client/hud/panel/scoreboard.qc:142
msgid "SCO^sum"
-msgstr ""
+msgstr "suma"
#: qcsrc/client/hud/panel/scoreboard.qc:143
msgid "Number of domination points taken (Domination)"
-msgstr ""
+msgstr "Nombre de punts de dominació presos (Dominació)"
#: qcsrc/client/hud/panel/scoreboard.qc:143
msgid "SCO^takes"
-msgstr ""
+msgstr "presos"
#: qcsrc/client/hud/panel/scoreboard.qc:144
msgid "Number of teamkills"
-msgstr ""
+msgstr "Nombre d'assassinats de companys"
#: qcsrc/client/hud/panel/scoreboard.qc:144
msgid "SCO^teamkills"
-msgstr ""
+msgstr "assassinats de companys"
#: qcsrc/client/hud/panel/scoreboard.qc:145
msgid "Number of ticks (Domination)"
-msgstr ""
+msgstr "Nombre de ticks (Dominació)"
#: qcsrc/client/hud/panel/scoreboard.qc:145
msgid "SCO^ticks"
-msgstr ""
+msgstr "ticks"
#: qcsrc/client/hud/panel/scoreboard.qc:146
msgid "SCO^time"
-msgstr ""
+msgstr "temps"
#: qcsrc/client/hud/panel/scoreboard.qc:146
msgid "Total time raced (Race/CTS)"
-msgstr ""
+msgstr "Temps total de carrera (Carrera/CTS)"
#: qcsrc/client/hud/panel/scoreboard.qc:330
msgid ""
"You can modify the scoreboard using the ^2scoreboard_columns_set command."
msgstr ""
+"Pots modificar la taula de puntuacions amb la comanda "
+"^2scoreboard_columns_set"
#: qcsrc/client/hud/panel/scoreboard.qc:331
msgid "Usage:"
-msgstr ""
+msgstr "Ús:"
#: qcsrc/client/hud/panel/scoreboard.qc:333
msgid "^2scoreboard_columns_set ^3field1 field2 ..."
-msgstr ""
+msgstr "^2scoreboard_columns_set ^3field1 field2 ..."
#: qcsrc/client/hud/panel/scoreboard.qc:334
msgid ""
"^2scoreboard_columns_set ^7without arguments reads the arguments from the "
"cvar scoreboard_columns"
msgstr ""
+"^2scoreboard_columns_set ^7sense arguments es llegeixen els arguments del "
+"cvar scoreboard_columns"
#: qcsrc/client/hud/panel/scoreboard.qc:335
msgid ""
" ^5Note: ^7scoreboard_columns_set without arguments is executed on every "
"map start"
msgstr ""
+"^5Nota: ^7scoreboard_columns_set sense arguments és executat en el "
+"començament de cada partida"
#: qcsrc/client/hud/panel/scoreboard.qc:336
msgid ""
"^2scoreboard_columns_set ^3expand_default ^7loads default layout and expands "
"it into the cvar scoreboard_columns so you can edit it"
msgstr ""
+"^2scoreboard_columns_set ^3expand_default ^7carrega el disseny actual i el "
+"s'expandeix en la cvar scoreboard_columns per a què el puguis editar"
#: qcsrc/client/hud/panel/scoreboard.qc:337
msgid "You can use a ^3|^7 to start the right-aligned fields."
-msgstr ""
+msgstr "Pots utilitzar un ^3|^7 per començar els camps alineats a la dreta."
#: qcsrc/client/hud/panel/scoreboard.qc:338
msgid "The following field names are recognized (case insensitive):"
-msgstr ""
+msgstr "Els següents noms de camp són reconeguts (sensible a majúscules):"
#: qcsrc/client/hud/panel/scoreboard.qc:344
msgid ""
"or in all but these game types. You can also specify 'all' as a\n"
"field to show all fields available for the current game mode."
msgstr ""
+"Després d'un camp pots posar un signe + o -, i després una llista de \n"
+"tipus de joc separats per comes, després una barra diagonal, per fer \n"
+"que el camp es mostri només en aquests o en tots menys en aquests \n"
+"tipus de jocs. També pots especificar 'all' com a camp per a mostrar \n"
+"tots els camps disponibles per a la manera de joc actual."
#: qcsrc/client/hud/panel/scoreboard.qc:350
msgid ""
"The special game type names 'teams' and 'noteams' can be used to\n"
"include/exclude ALL teams/noteams game modes."
msgstr ""
+"Els noms especials de tipus de joc 'teams' i 'noteams' poden ser \n"
+"utilitzats per a incloure/excloure TOTS els modes de joc teams/noteams."
#: qcsrc/client/hud/panel/scoreboard.qc:354
msgid "Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4"
-msgstr ""
+msgstr "Exemple: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4"
#: qcsrc/client/hud/panel/scoreboard.qc:355
msgid ""
"will display name, ping and pl aligned to the left, and the fields\n"
"right of the vertical bar aligned to the right."
msgstr ""
+"mostrarà el nom, ping i pl alineats a l'esquerra, i els camps a la \n"
+"dreta de la barra vertical alineada a la dreta."
#: qcsrc/client/hud/panel/scoreboard.qc:357
msgid ""
"'field3' will only be shown in CTF, and 'field4' will be shown in all\n"
"other gamemodes except DM."
msgstr ""
+"'field3' només serà mostrat en CTF, i 'field4' serà mostrat en tots \n"
+"els altres modes de joc excepte DM."
#: qcsrc/client/hud/panel/scoreboard.qc:621
#: qcsrc/client/hud/panel/scoreboard.qc:628
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:164
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:169
msgid "N/A"
-msgstr ""
+msgstr "N/A"
#: qcsrc/client/hud/panel/scoreboard.qc:1206
#, c-format
msgid "Accuracy stats (average %d%%)"
-msgstr ""
+msgstr "Estadístiques de precisió (mitjana %d%%)"
#: qcsrc/client/hud/panel/scoreboard.qc:1354
msgid "Map stats:"
-msgstr ""
+msgstr "Estadístiques de mapa:"
#: qcsrc/client/hud/panel/scoreboard.qc:1384
msgid "Monsters killed:"
-msgstr ""
+msgstr "Monstres assassinats:"
#: qcsrc/client/hud/panel/scoreboard.qc:1391
msgid "Secrets found:"
-msgstr ""
+msgstr "Secrets trobats:"
#: qcsrc/client/hud/panel/scoreboard.qc:1413
msgid "Capture time rankings"
-msgstr ""
+msgstr "Classificacions de temps de captura"
#: qcsrc/client/hud/panel/scoreboard.qc:1413
msgid "Rankings"
-msgstr ""
+msgstr "Classificacions"
#: qcsrc/client/hud/panel/scoreboard.qc:1631
#, c-format
msgid "^3%1.0f minutes"
-msgstr ""
+msgstr "^3%1.0f minuts"
#: qcsrc/client/hud/panel/scoreboard.qc:1640
#: qcsrc/client/hud/panel/scoreboard.qc:1647
#, c-format
msgid "^5%s %s"
-msgstr ""
+msgstr "^5%s %s"
#: qcsrc/client/hud/panel/scoreboard.qc:1641
#: qcsrc/client/hud/panel/scoreboard.qc:1648
#: qcsrc/client/hud/panel/scoreboard.qc:1667
#: qcsrc/client/hud/panel/scoreboard.qc:1674
msgid "SCO^points"
-msgstr ""
+msgstr "punts"
#: qcsrc/client/hud/panel/scoreboard.qc:1666
#: qcsrc/client/hud/panel/scoreboard.qc:1673
#, c-format
msgid "^2+%s %s"
-msgstr ""
+msgstr "^2+%s %s"
#: qcsrc/client/hud/panel/scoreboard.qc:1684
#, c-format
msgid "^7Map: ^2%s"
-msgstr ""
+msgstr "^7Mapa: ^2%s"
#: qcsrc/client/hud/panel/scoreboard.qc:1823
#, c-format
msgid "Speed award: %d%s ^7(%s^7)"
-msgstr ""
+msgstr "Premi de velocitat: %d%s ^7(%s^7)"
#: qcsrc/client/hud/panel/scoreboard.qc:1827
#, c-format
msgid "All-time fastest: %d%s ^7(%s^7)"
-msgstr ""
+msgstr "El més ràpid de tots els temps: %d%s ^7(%s^7)"
#: qcsrc/client/hud/panel/scoreboard.qc:1843
#, c-format
msgid "Spectators"
-msgstr ""
+msgstr "Espectadors"
#: qcsrc/client/hud/panel/scoreboard.qc:1870
#, c-format
msgid "^1Respawning in ^3%s^1..."
-msgstr ""
+msgstr "^1Reapareixent en ^3%s^1..."
#: qcsrc/client/hud/panel/scoreboard.qc:1880
#, c-format
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Xonotic\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-06-07 07:23+0200\n"
+"PO-Revision-Date: 2013-09-12 16:53+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Danish (http://www.transifex.com/team-xonotic/xonotic/"
+"language/da/)\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: qcsrc/client/hud/hud_config.qc:81
+#, c-format
+msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)"
+msgstr ""
+
+#: qcsrc/client/hud/hud_config.qc:85
+#, c-format
+msgid "^1Couldn't write to %s"
+msgstr ""
+
+#: qcsrc/client/hud/panel/centerprint.qc:174
+#, c-format
+msgid "^3Countdown message at time %s, seconds left: ^COUNT"
+msgstr ""
+
+#: qcsrc/client/hud/panel/centerprint.qc:176
+#, c-format
+msgid ""
+"^1Multiline message at time %s that\n"
+"^1lasts longer than normal"
+msgstr ""
+
+#: qcsrc/client/hud/panel/centerprint.qc:178
+#, c-format
+msgid "Message at time %s"
+msgstr ""
+
+#: qcsrc/client/hud/panel/centerprint.qc:183
+msgid "Generic message"
+msgstr ""
+
+#: qcsrc/client/hud/panel/chat.qc:89
+msgid "^3Player^7: This is the chat area."
+msgstr ""
+
+#: qcsrc/client/hud/panel/engineinfo.qc:76
+#, c-format
+msgid "FPS: %.*f"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:95
+msgid "^1Observing"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:97
+#, c-format
+msgid "^1Spectating: ^7%s"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:108
+#, c-format
+msgid "^1Press ^3%s^1 to spectate"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:108
+#: qcsrc/menu/xonotic/keybinder.qc:47
+msgid "primary fire"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:110
+#, c-format
+msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:110
+#: qcsrc/client/hud/panel/infomessages.qc:114
+msgid "next weapon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:110
+#: qcsrc/client/hud/panel/infomessages.qc:114
+msgid "previous weapon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:114
+#, c-format
+msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:116
+#, c-format
+msgid "^1Press ^3%s^1 to observe, ^3%s^1 to change camera mode"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:116
+#: qcsrc/common/vehicles/cl_vehicles.qc:190
+msgid "drop weapon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:116
+#: qcsrc/menu/xonotic/keybinder.qc:48
+msgid "secondary fire"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:119
+#, c-format
+msgid "^1Press ^3%s^1 for gamemode info"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:119
+#: qcsrc/menu/xonotic/keybinder.qc:103
+msgid "server info"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:132
+msgid "^1Match has already begun"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:134
+msgid "^1You have no more lives left"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:136
+#: qcsrc/client/hud/panel/infomessages.qc:139
+#, c-format
+msgid "^1Press ^3%s^1 to join"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:136
+#: qcsrc/client/hud/panel/infomessages.qc:139
+#: qcsrc/common/notifications/all.qh:430
+msgid "jump"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:147
+#, c-format
+msgid "^1Game starts in ^3%d^1 seconds"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:153
+msgid "^2Currently in ^1warmup^2 stage!"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:168
+#, c-format
+msgid "%sPress ^3%s%s to end warmup"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:168
+#: qcsrc/client/hud/panel/infomessages.qc:170
+#: qcsrc/client/hud/panel/infomessages.qc:183
+#: qcsrc/menu/xonotic/keybinder.qc:99
+msgid "ready"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:170
+#, c-format
+msgid "%sPress ^3%s%s once you are ready"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:175
+msgid "^2Waiting for others to ready up to end warmup..."
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:177
+msgid "^2Waiting for others to ready up..."
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:183
+#, c-format
+msgid "^2Press ^3%s^2 to end warmup"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:204
+msgid "Teamnumbers are unbalanced!"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:207
+#, c-format
+msgid " Press ^3%s%s to adjust"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:207
+#: qcsrc/menu/xonotic/keybinder.qc:115
+msgid "team menu"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:217
+msgid "^1Spectating this player:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:217
+msgid "^1Spectating you:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:233
+msgid "^7Press ^3ESC ^7to show HUD options."
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:234
+msgid "^3Doubleclick ^7a panel for panel-specific options."
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:235
+msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:236
+msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
+msgstr ""
+
+#: qcsrc/client/hud/panel/modicons.qc:183
+msgid "Personal best"
+msgstr ""
+
+#: qcsrc/client/hud/panel/modicons.qc:193
+msgid "Server best"
+msgstr ""
+
+#: qcsrc/client/hud/panel/notify.qc:127 qcsrc/client/hud/panel/notify.qc:128
+#: qcsrc/client/hud/panel/score.qc:69
+#, c-format
+msgid "Player %d"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:597
+#: qcsrc/client/hud/panel/quickmenu.qc:599
+#, c-format
+msgid "Submenu%d"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:604
+#, c-format
+msgid "Command%d"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:630
+msgid "Continue..."
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:787
+#: qcsrc/client/hud/panel/quickmenu.qc:794
+msgid "Chat"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:788
+msgid "QMCMD^Send public message to"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:789
+msgid "QMCMD^:-) / nice one"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:789
+msgid "QMCMD^nice one"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:790
+msgid "QMCMD^good game"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:791
+msgid "QMCMD^hi / good luck"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:791
+msgid "QMCMD^hi / good luck and have fun"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:793
+msgid "QMCMD^Send in English"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:798
+#: qcsrc/client/hud/panel/quickmenu.qc:814
+msgid "QMCMD^Team chat"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:799
+msgid "QMCMD^strength soon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:800
+msgid "QMCMD^free item %x^7 (l:%y^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:800
+msgid "QMCMD^free item, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:801
+msgid "QMCMD^took item (l:%l^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:801
+msgid "QMCMD^took item, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:802
+msgid "QMCMD^negative"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:803
+msgid "QMCMD^positive"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:804
+msgid "QMCMD^need help (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:804
+msgid "QMCMD^need help, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:805
+msgid "QMCMD^enemy seen (l:%y^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:805
+msgid "QMCMD^enemy seen, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:806
+msgid "QMCMD^flag seen (l:%y^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:806
+msgid "QMCMD^flag seen, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:807
+msgid "QMCMD^defending (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:807
+msgid "QMCMD^defending, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:808
+msgid "QMCMD^roaming (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:808
+msgid "QMCMD^roaming, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:809
+msgid "QMCMD^attacking (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:809
+msgid "QMCMD^attacking, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:810
+msgid "QMCMD^killed flagcarrier (l:%y^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:810
+msgid "QMCMD^killed flagcarrier, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:811
+#, c-format
+msgid "QMCMD^dropped flag (l:%d^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:811
+msgid "QMCMD^dropped flag, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:812
+msgid "QMCMD^drop weapon, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:812
+msgid "QMCMD^dropped weapon %w^7 (l:%l^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:813
+msgid "QMCMD^drop flag/key, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:813
+msgid "QMCMD^dropped flag/key %w^7 (l:%l^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:817
+msgid "QMCMD^Send private message to"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:819
+#: qcsrc/client/hud/panel/quickmenu.qc:849
+msgid "QMCMD^Settings"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:820
+#: qcsrc/client/hud/panel/quickmenu.qc:827
+msgid "QMCMD^View/HUD settings"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:821
+msgid "QMCMD^3rd person view"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:822
+msgid "QMCMD^Player models like mine"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:823
+msgid "QMCMD^Names above players"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:824
+msgid "QMCMD^Crosshair per weapon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:825
+msgid "QMCMD^FPS"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:826
+msgid "QMCMD^Net graph"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:829
+#: qcsrc/client/hud/panel/quickmenu.qc:832
+msgid "QMCMD^Sound settings"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:830
+msgid "QMCMD^Hit sound"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:831
+msgid "QMCMD^Chat sound"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:836
+msgid "QMCMD^Change spectator camera"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:841
+#: qcsrc/client/hud/panel/quickmenu.qc:845
+msgid "QMCMD^Observer camera"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:842
+msgid "QMCMD^Increase speed"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:843
+msgid "QMCMD^Decrease speed"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:844
+msgid "QMCMD^Wall collision"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:848
+msgid "QMCMD^Fullscreen"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:851
+#: qcsrc/client/hud/panel/quickmenu.qc:861
+msgid "QMCMD^Call a vote"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:852
+msgid "QMCMD^Restart the map"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:853
+msgid "QMCMD^End match"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:856
+msgid "QMCMD^Reduce match time"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:857
+msgid "QMCMD^Extend match time"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:860
+msgid "QMCMD^Shuffle teams"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:865
+msgid "QMCMD^Spectate a player"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:59
+#, c-format
+msgid " (-%dL)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:64
+#, c-format
+msgid " (+%dL)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:83
+msgid "Start line"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:85
+#: qcsrc/client/hud/panel/racetimer.qc:89
+msgid "Finish line"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:87
+#: qcsrc/client/hud/panel/racetimer.qc:156
+#, c-format
+msgid "Intermediate %d"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:159
+#: qcsrc/client/hud/panel/racetimer.qc:206
+#: qcsrc/client/hud/panel/racetimer.qc:267
+#, c-format
+msgid "PENALTY: %.1f (%s)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:159 qcsrc/client/main.qc:1102
+msgid "missing a checkpoint"
+msgstr ""
+
+#: qcsrc/client/hud/panel/radar.qc:386
+msgid "Click to select teleport destination"
+msgstr ""
+
+#: qcsrc/client/hud/panel/radar.qc:390
+msgid "Click to select spawn location"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:105
+msgid "Number of ball carrier kills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:105
+msgid "SCO^bckills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:106
+msgid "SCO^bctime"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:106
+msgid "Total amount of time holding the ball in Keepaway"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:107
+msgid "How often a flag (CTF) or a key (KeyHunt) was captured"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:107
+msgid "SCO^caps"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:108
+msgid "SCO^captime"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:108
+msgid "Time of fastest capture (CTF)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:109
+msgid "Number of deaths"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:109
+msgid "SCO^deaths"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:110
+msgid "Number of keys destroyed by pushing them into void"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:110
+msgid "SCO^destroyed"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:111
+msgid "SCO^damage"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:111
+msgid "The total damage done"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:112
+msgid "SCO^dmgtaken"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:112
+msgid "The total damage taken"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:113
+msgid "Number of flag drops"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:113
+msgid "SCO^drops"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:114
+msgid "Player ELO"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:114
+msgid "SCO^elo"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:115
+msgid "SCO^fastest"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:115
+msgid "Time of fastest lap (Race/CTS)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:116
+msgid "Number of faults committed"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:116
+msgid "SCO^faults"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:117
+msgid "Number of flag carrier kills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:117
+msgid "SCO^fckills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:118
+msgid "FPS"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:118
+msgid "SCO^fps"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:119
+msgid "Number of kills minus suicides"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:119
+msgid "SCO^frags"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:120
+msgid "Number of goals scored"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:120
+msgid "SCO^goals"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:121
+msgid "Number of keys carrier kills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:121
+msgid "SCO^kckills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:122
+msgid "SCO^k/d"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:122
+#: qcsrc/client/hud/panel/scoreboard.qc:123
+#: qcsrc/client/hud/panel/scoreboard.qc:124
+msgid "The kill-death ratio"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:123
+msgid "SCO^kdr"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:124
+msgid "SCO^kdratio"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:125
+msgid "Number of kills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:125
+msgid "SCO^kills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:126
+msgid "Number of laps finished (Race/CTS)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:126
+msgid "SCO^laps"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:127
+msgid "Number of lives (LMS)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:127
+msgid "SCO^lives"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:128
+msgid "Number of times a key was lost"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:128
+msgid "SCO^losses"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:129
+#: qcsrc/client/hud/panel/scoreboard.qc:130
+msgid "Player name"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:129
+msgid "SCO^name"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:130
+msgid "SCO^nick"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:131
+msgid "Number of objectives destroyed"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:131
+msgid "SCO^objectives"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:132
+msgid ""
+"How often a flag (CTF) or a key (KeyHunt) or a ball (Keepaway) was picked up"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:132
+msgid "SCO^pickups"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:133
+msgid "Ping time"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:133
+msgid "SCO^ping"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:134
+msgid "Packet loss"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:134
+msgid "SCO^pl"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:135
+msgid "Number of players pushed into void"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:135
+msgid "SCO^pushes"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:136
+msgid "Player rank"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:136
+msgid "SCO^rank"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:137
+msgid "Number of flag returns"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:137
+msgid "SCO^returns"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:138
+msgid "Number of revivals"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:138
+msgid "SCO^revivals"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:139
+msgid "Number of rounds won"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:139
+msgid "SCO^rounds won"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:140
+msgid "SCO^score"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:140
+msgid "Total score"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:141
+msgid "Number of suicides"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:141
+msgid "SCO^suicides"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:142
+msgid "Number of kills minus deaths"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:142
+msgid "SCO^sum"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:143
+msgid "Number of domination points taken (Domination)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:143
+msgid "SCO^takes"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:144
+msgid "Number of teamkills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:144
+msgid "SCO^teamkills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:145
+msgid "Number of ticks (Domination)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:145
+msgid "SCO^ticks"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:146
+msgid "SCO^time"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:146
+msgid "Total time raced (Race/CTS)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:330
+msgid ""
+"You can modify the scoreboard using the ^2scoreboard_columns_set command."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:331
+msgid "Usage:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:333
+msgid "^2scoreboard_columns_set ^3field1 field2 ..."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:334
+msgid ""
+"^2scoreboard_columns_set ^7without arguments reads the arguments from the "
+"cvar scoreboard_columns"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:335
+msgid ""
+" ^5Note: ^7scoreboard_columns_set without arguments is executed on every "
+"map start"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:336
+msgid ""
+"^2scoreboard_columns_set ^3expand_default ^7loads default layout and expands "
+"it into the cvar scoreboard_columns so you can edit it"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:337
+msgid "You can use a ^3|^7 to start the right-aligned fields."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:338
+msgid "The following field names are recognized (case insensitive):"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:344
+msgid ""
+"Before a field you can put a + or - sign, then a comma separated list\n"
+"of game types, then a slash, to make the field show up only in these\n"
+"or in all but these game types. You can also specify 'all' as a\n"
+"field to show all fields available for the current game mode."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:350
+msgid ""
+"The special game type names 'teams' and 'noteams' can be used to\n"
+"include/exclude ALL teams/noteams game modes."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:354
+msgid "Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:355
+msgid ""
+"will display name, ping and pl aligned to the left, and the fields\n"
+"right of the vertical bar aligned to the right."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:357
+msgid ""
+"'field3' will only be shown in CTF, and 'field4' will be shown in all\n"
+"other gamemodes except DM."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:621
+#: qcsrc/client/hud/panel/scoreboard.qc:628
+#: qcsrc/client/hud/panel/scoreboard.qc:680
+#: qcsrc/client/hud/panel/scoreboard.qc:691
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:46
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:47
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:121
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:164
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:169
+msgid "N/A"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1206
+#, c-format
+msgid "Accuracy stats (average %d%%)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1354
+msgid "Map stats:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1384
+msgid "Monsters killed:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1391
+msgid "Secrets found:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1413
+msgid "Capture time rankings"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1413
+msgid "Rankings"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1631
+#, c-format
+msgid "^3%1.0f minutes"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1640
+#: qcsrc/client/hud/panel/scoreboard.qc:1647
+#, c-format
+msgid "^5%s %s"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1641
+#: qcsrc/client/hud/panel/scoreboard.qc:1648
+#: qcsrc/client/hud/panel/scoreboard.qc:1667
+#: qcsrc/client/hud/panel/scoreboard.qc:1674
+msgid "SCO^points"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1666
+#: qcsrc/client/hud/panel/scoreboard.qc:1673
+#, c-format
+msgid "^2+%s %s"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1684
+#, c-format
+msgid "^7Map: ^2%s"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1823
+#, c-format
+msgid "Speed award: %d%s ^7(%s^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1827
+#, c-format
+msgid "All-time fastest: %d%s ^7(%s^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1843
+#, c-format
+msgid "Spectators"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1870
+#, c-format
+msgid "^1Respawning in ^3%s^1..."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1880
+#, c-format
+msgid "You are dead, wait ^3%s^7 before respawning"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1889
+#, c-format
+msgid "You are dead, press ^2%s^7 to respawn"
+msgstr ""
+
+#: qcsrc/client/hud/panel/timer.qc:72
+msgid "WARMUP"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:33
+msgid "^1You must answer before entering hud configure mode"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:36
+msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:122
+msgid "A vote has been called for:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:124
+msgid "Allow servers to store and display your name?"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:128
+msgid "^1Configure the HUD"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:132
+#: qcsrc/menu/xonotic/dialog_disconnect.qc:19
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:82
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:18
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qc:18
+#: qcsrc/menu/xonotic/dialog_quit.qc:14
+#: qcsrc/menu/xonotic/dialog_settings_bindings_reset.qc:14
+#: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qc:26
+#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:16
+#: qcsrc/menu/xonotic/dialog_uid2name.qc:15
+msgid "Yes"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:134
+#: qcsrc/menu/xonotic/dialog_disconnect.qc:22
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:83
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:21
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qc:21
+#: qcsrc/menu/xonotic/dialog_quit.qc:16
+#: qcsrc/menu/xonotic/dialog_settings_bindings_reset.qc:17
+#: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qc:29
+#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:17
+#: qcsrc/menu/xonotic/dialog_uid2name.qc:17
+msgid "No"
+msgstr ""
+
+#: qcsrc/client/hud/panel/weapons.qc:584
+msgid "Out of ammo"
+msgstr ""
+
+#: qcsrc/client/hud/panel/weapons.qc:588
+msgid "Don't have"
+msgstr ""
+
+#: qcsrc/client/hud/panel/weapons.qc:592
+msgid "Unavailable"
+msgstr ""
+
+#: qcsrc/client/main.qc:1000
+msgid " qu/s"
+msgstr ""
+
+#: qcsrc/client/main.qc:1002
+msgid " m/s"
+msgstr ""
+
+#: qcsrc/client/main.qc:1004
+msgid " km/h"
+msgstr ""
+
+#: qcsrc/client/main.qc:1006
+msgid " mph"
+msgstr ""
+
+#: qcsrc/client/main.qc:1008
+msgid " knots"
+msgstr ""
+
+#: qcsrc/client/main.qc:1255
+#, c-format
+msgid "%s (not bound)"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:59
+msgid " (1 vote)"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:61
+#, c-format
+msgid " (%d votes)"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:281
+msgid "Don't care"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:382
+msgid "Decide the gametype"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:382
+msgid "Vote for a map"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:399
+#, c-format
+msgid "%d seconds left"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:512
+msgid "mv_mapdownload: ^3You're not supposed to use this command on your own!"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:522
+msgid "^1Error:^7 Couldn't find pak index."
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:531
+msgid "Requesting preview..."
+msgstr ""
+
+#: qcsrc/client/miscfunctions.qc:111
+msgid "Trying to remove a team which is not in the teamlist!"
+msgstr ""
+
+#: qcsrc/client/view.qc:939
+msgid "Nade timer"
+msgstr ""
+
+#: qcsrc/client/view.qc:944
+msgid "Capture progress"
+msgstr ""
+
+#: qcsrc/client/view.qc:949
+msgid "Revival progress"
+msgstr ""
+
+#: qcsrc/common/command/generic.qc:156
+msgid "error creating curl handle"
+msgstr ""
+
+#: qcsrc/common/command/generic.qc:412
+msgid "Notification restart command only works with cl_cmd and sv_cmd."
+msgstr ""
+
+#: qcsrc/common/gamemodes/gamemode/nexball/weapon.qh:7
+msgid "Ball Stealer"
+msgstr ""
+
+#: qcsrc/common/items/item/ammo.qh:66
+msgid "bullets"
+msgstr ""
+
+#: qcsrc/common/items/item/ammo.qh:96
+msgid "cells"
+msgstr ""
+
+#: qcsrc/common/items/item/ammo.qh:126
+msgid "plasma"
+msgstr ""
+
+#: qcsrc/common/items/item/ammo.qh:156
+msgid "rockets"
+msgstr ""
+
+#: qcsrc/common/items/item/ammo.qh:190
+msgid "shells"
+msgstr ""
+
+#: qcsrc/common/items/item/armor.qh:42
+msgid "Small armor"
+msgstr ""
+
+#: qcsrc/common/items/item/armor.qh:80
+msgid "Medium armor"
+msgstr ""
+
+#: qcsrc/common/items/item/armor.qh:118 qcsrc/common/items/item/armor.qh:121
+msgid "Big armor"
+msgstr ""
+
+#: qcsrc/common/items/item/armor.qh:158 qcsrc/common/items/item/armor.qh:161
+msgid "Mega armor"
+msgstr ""
+
+#: qcsrc/common/items/item/health.qh:42
+msgid "Small health"
+msgstr ""
+
+#: qcsrc/common/items/item/health.qh:80
+msgid "Medium health"
+msgstr ""
+
+#: qcsrc/common/items/item/health.qh:118 qcsrc/common/items/item/health.qh:121
+msgid "Big health"
+msgstr ""
+
+#: qcsrc/common/items/item/health.qh:158 qcsrc/common/items/item/health.qh:161
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/common/items/item/jetpack.qh:38 qcsrc/common/items/item/jetpack.qh:41
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:91
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:215
+msgid "Jetpack"
+msgstr ""
+
+#: qcsrc/common/items/item/jetpack.qh:71
+msgid "fuel"
+msgstr ""
+
+#: qcsrc/common/items/item/jetpack.qh:96
+msgid "Fuel regenerator"
+msgstr ""
+
+#: qcsrc/common/items/item/jetpack.qh:99
+msgid "Fuel regen"
+msgstr ""
+
+#: qcsrc/common/items/item/powerup.qh:43 qcsrc/common/items/item/powerup.qh:46
+msgid "Strength"
+msgstr ""
+
+#: qcsrc/common/items/item/powerup.qh:79 qcsrc/common/items/item/powerup.qh:82
+msgid "Shield"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qc:626
+#, no-c-format
+msgid "@!#%'n Tuba Throwing"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:72 qcsrc/common/mapinfo.qh:334
+#: qcsrc/common/mapinfo.qh:529
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:105
+msgid "Frag limit:"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:72 qcsrc/common/mapinfo.qh:334
+#: qcsrc/common/mapinfo.qh:529
+msgid "The amount of frags needed before the match will end"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:115
+msgid "Deathmatch"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:115
+msgid "Score as many frags as you can"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:128
+msgid "Last Man Standing"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:128
+msgid "Survive and kill until the enemies have no lives left"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:137
+msgid "Lives:"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:149
+msgid "Race"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:149
+msgid "Race against other players to the finish line"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:176
+msgid "Laps:"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:189
+msgid "Race CTS"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:189
+msgid "Race for fastest time."
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:206 qcsrc/common/mapinfo.qh:257
+#: qcsrc/common/mapinfo.qh:373 qcsrc/common/mapinfo.qh:416
+#: qcsrc/common/mapinfo.qh:442 qcsrc/common/mapinfo.qh:462
+#: qcsrc/common/mapinfo.qh:582
+msgid "Point limit:"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:219
+msgid "Help your team score the most frags against the enemy team"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:219
+msgid "Team Deathmatch"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:257 qcsrc/common/mapinfo.qh:373
+#: qcsrc/common/mapinfo.qh:416
+msgid "The amount of points needed before the match will end"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:271
+msgid "Capture the Flag"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:271
+msgid ""
+"Find and bring the enemy flag to your base to capture it, defend your base "
+"from the other team"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:289
+msgid "Capture limit:"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:289
+msgid "The amount of captures needed before the match will end"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:306
+msgid "Clan Arena"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:306
+msgid "Kill all enemy teammates to win the round"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:350
+msgid "Capture and defend all the control points to win"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:350
+msgid "Domination"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:388
+msgid "Gather all the keys to win the round"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:388
+msgid "Key Hunt"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:428
+msgid "Assault"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:428
+msgid ""
+"Destroy obstacles to find and destroy the enemy power core before time runs "
+"out"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:452
+msgid "Capture control points to reach and destroy the enemy generator"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:452
+msgid "Onslaught"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:474
+msgid "Nexball"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:474
+msgid "Shoot and kick the ball into the enemies goal, keep your goal clean"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:488
+msgid "Goals:"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:488
+msgid "The amount of goals needed before the match will end"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:501
+msgid "Freeze Tag"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:501
+msgid ""
+"Kill enemies to freeze them, stand next to frozen teammates to revive them; "
+"freeze all enemies to win"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:545
+msgid "Hold the ball to get points for kills"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:545
+msgid "Keepaway"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:560
+msgid "Invasion"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:560
+msgid "Survive against waves of monsters"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:590
+msgid "Duel"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:590
+msgid "Fight in a one versus one arena battle to decide the winner"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames.qc:383
+msgid "It's your turn"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:366
+#: qcsrc/menu/xonotic/dialog_quit.qh:6
+msgid "Quit"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:371
+msgid "Invite"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:410
+msgid "Current Game"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:435
+msgid "Exit Menu"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:447
+#: qcsrc/menu/xonotic/dialog_multiplayer.qc:16
+msgid "Create"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:450
+msgid "Join"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:526
+msgid "Minigames"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:587
+msgid "Minigame message"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:2
+msgid "Bulldozer"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1092
+#: qcsrc/common/minigames/minigame/ps.qc:421
+#: qcsrc/common/minigames/minigame/ps.qc:427
+msgid "Game over!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1095
+msgid "Well done! Click 'Next Level' to continue"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1162
+msgid "Better luck next time!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1167
+msgid "Tubular! Press \"Next Level\" to continue!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1169
+msgid "Wicked! Press \"Next Level\" to continue!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1173
+msgid "Press the space bar to change your currently selected tile"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1176
+msgid "Push the boulders onto the targets"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1403
+msgid "Next Level"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1404
+msgid "Restart"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1405
+msgid "Editor"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1406
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:37
+msgid "Save"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:2
+msgid "Connect Four"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:311
+#: qcsrc/common/minigames/minigame/c4.qc:317
+#: qcsrc/common/minigames/minigame/nmm.qc:491
+#: qcsrc/common/minigames/minigame/nmm.qc:497
+#: qcsrc/common/minigames/minigame/pp.qc:362
+#: qcsrc/common/minigames/minigame/pp.qc:368
+#, c-format
+msgid "%s^7 won the game!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:373
+#: qcsrc/common/minigames/minigame/pp.qc:438
+#: qcsrc/common/minigames/minigame/ttt.qc:319
+msgid "Draw"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:378
+#: qcsrc/common/minigames/minigame/nmm.qc:606
+#: qcsrc/common/minigames/minigame/pp.qc:444
+#: qcsrc/common/minigames/minigame/ttt.qc:326
+msgid "You lost the game!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:379
+#: qcsrc/common/minigames/minigame/nmm.qc:607
+#: qcsrc/common/minigames/minigame/pp.qc:445
+#: qcsrc/common/minigames/minigame/ttt.qc:327
+msgid "You win!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:383
+#: qcsrc/common/minigames/minigame/nmm.qc:611
+#: qcsrc/common/minigames/minigame/pp.qc:456
+#: qcsrc/common/minigames/minigame/ttt.qc:338
+msgid "Wait for your opponent to make their move"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:386
+#: qcsrc/common/minigames/minigame/nmm.qc:613
+#: qcsrc/common/minigames/minigame/pp.qc:459
+#: qcsrc/common/minigames/minigame/ttt.qc:341
+msgid "Click on the game board to place your piece"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/nmm.qc:7
+msgid "Nine Men's Morris"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/nmm.qc:615
+msgid ""
+"You can select one of your pieces to move it in one of the surrounding places"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/nmm.qc:617
+msgid "You can select one of your pieces to move it anywhere on the board"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/nmm.qc:619
+msgid "You can take one of the opponent's pieces"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pong.qc:2
+msgid "Pong"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pong.qc:589
+#: qcsrc/common/minigames/minigame/ttt.qc:299
+msgid "AI"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pong.qc:606
+msgid "Press ^1Start Match^7 to start the match with the current players"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pong.qc:679
+msgid "Start Match"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pong.qc:680
+msgid "Add AI player"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pong.qc:681
+msgid "Remove AI player"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pp.qc:2
+msgid "Push-Pull"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pp.qc:444
+#: qcsrc/common/minigames/minigame/ttt.qc:326
+msgid "Select \"^1Next Match^7\" on the menu for a rematch!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pp.qc:445
+#: qcsrc/common/minigames/minigame/pp.qc:451
+#: qcsrc/common/minigames/minigame/ttt.qc:327
+#: qcsrc/common/minigames/minigame/ttt.qc:333
+msgid "Select \"^1Next Match^7\" on the menu to start a new match!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pp.qc:452
+#: qcsrc/common/minigames/minigame/ttt.qc:334
+msgid "Wait for your opponent to confirm the rematch"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pp.qc:587
+#: qcsrc/common/minigames/minigame/ttt.qc:671
+msgid "Next Match"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:2
+msgid "Peg Solitaire"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:414
+msgid "All pieces cleared!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:416
+msgid "Remaining pieces:"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:481
+#, c-format
+msgid "Pieces left: %s"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:491
+msgid "No more valid moves"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:494
+msgid "Well done, you win!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:497
+msgid "Jump a piece over another to capture it"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ttt.qc:2
+msgid "Tic Tac Toe"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ttt.qc:672
+msgid "Single Player"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/mage.qh:17
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:18
+msgid "Mage"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/mage.qh:29
+msgid "Mage spike"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/shambler.qh:17
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:17
+msgid "Shambler"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/spider.qh:17
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:16
+msgid "Spider"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/spider.qh:28
+msgid "Spider attack"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/wyvern.qh:17
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:19
+msgid "Wyvern"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/wyvern.qh:28
+msgid "Wyvern attack"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/zombie.qh:17
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:15
+msgid "Zombie"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:16
+msgid "Ammo"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:25
+msgid "Resistance"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:34
+#: qcsrc/common/mutators/mutator/instagib/items.qh:126
+#: qcsrc/common/mutators/mutator/instagib/items.qh:129
+msgid "Speed"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:44
+msgid "Medic"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:54
+msgid "Bash"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:63
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:83
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:184
+msgid "Vampire"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:71
+msgid "Disability"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:79
+msgid "Vengeance"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:87
+msgid "Jump"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:96
+msgid "Invisible"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:105
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:113
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:121
+msgid "Magnet"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:129
+msgid "Luck"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:137
+msgid "Flight"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/buffs.qh:11
+msgid "Buff"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:8
+msgid "Damage text"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:18
+msgid "Draw damage numbers"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:20
+msgid "Font size minimum:"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:25
+msgid "Font size maximum:"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:30
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:55
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:102
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:60
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:109
+#: qcsrc/menu/xonotic/util.qc:775
+msgid "Color:"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:36
+msgid "Draw damage numbers for friendly fire"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/instagib/items.qh:33
+msgid "Vaporizer ammo"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/instagib/items.qh:59
+#: qcsrc/common/mutators/mutator/instagib/items.qh:62
+msgid "Extra life"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/instagib/items.qh:91
+#: qcsrc/common/mutators/mutator/instagib/items.qh:94
+msgid "Invisibility"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:18
+msgid "Napalm grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:26
+msgid "Ice grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:34
+msgid "Translocate grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:42
+msgid "Spawn grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:50
+msgid "Heal grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:58
+msgid "Monster grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:66
+msgid "Entrap grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:74
+msgid "Veil grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.qh:33
+msgid "Grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/overkill/okhmg.qh:20
+msgid "Overkill Heavy Machine Gun"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/overkill/okmachinegun.qh:18
+msgid "Overkill MachineGun"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/overkill/oknex.qh:19
+msgid "Overkill Nex"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/overkill/okrpc.qh:20
+msgid "Overkill Rocket Propelled Chainsaw"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/overkill/okshotgun.qh:18
+msgid "Overkill Shotgun"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:3
+msgid "Waypoint"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:4
+msgid "Help me!"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:5
+msgid "Here"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:6
+msgid "DANGER"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:8
+msgid "Frozen!"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:10
+msgid "Item"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:12
+msgid "Checkpoint"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:13
+#: qcsrc/common/mutators/mutator/waypoints/waypointsprites.qc:240
+msgid "Finish"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:14
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:15
+#: qcsrc/common/mutators/mutator/waypoints/waypointsprites.qc:240
+msgid "Start"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:17
+msgid "Defend"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:18
+msgid "Destroy"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:19
+msgid "Push"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:21
+msgid "Flag carrier"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:22
+msgid "Enemy carrier"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:23
+msgid "Dropped flag"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:24
+msgid "White base"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:25
+msgid "Red base"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:26
+msgid "Blue base"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:27
+msgid "Yellow base"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:28
+msgid "Pink base"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:29
+msgid "Return flag here"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:31
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:32
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:33
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:34
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:35
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:51
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:52
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:53
+msgid "Control point"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:37
+msgid "Dropped key"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:38
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:40
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:41
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:42
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:43
+msgid "Key carrier"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:39
+msgid "Run here"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:45
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:48
+msgid "Ball"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:46
+msgid "Ball carrier"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:49
+msgid "Goal"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:54
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:55
+msgid "Generator"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:57
+msgid "Weapon"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:59
+msgid "Monster"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:61
+msgid "Vehicle"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:62
+msgid "Intruder!"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:64
+msgid "Tagged"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/waypointsprites.qc:697
+#, c-format
+msgid "%s needing help!"
+msgstr ""
+
+#: qcsrc/common/net_notice.qc:90
+msgid "^1Server notices:"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:230
+msgid "^F4NOTE: ^BGSpectator chat is not sent to players during the match"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:232
+#, c-format
+msgid "^BG%s^BG captured the ^TC^TT^BG flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:233
+#, c-format
+msgid ""
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
+"%s^BG's previous record of ^F2%s^BG seconds"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:234
+#, c-format
+msgid "^BG%s^BG captured the flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:235
+#, c-format
+msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:236
+#, c-format
+msgid ""
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
+"^BG%s^BG's previous record of ^F1%s^BG seconds"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:237
+msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:238
+msgid "^BGThe flag was returned by its owner"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:239
+msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:240
+msgid "^BGThe flag was destroyed and returned to base"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:241
+msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:242
+msgid "^BGThe flag was dropped in the base and returned itself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:243
+msgid ""
+"^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
+"base"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:244
+msgid "^BGThe flag fell somewhere it couldn't be reached and returned to base"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:245
+#, c-format
+msgid ""
+"^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
+"itself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:246
+#, c-format
+msgid ""
+"^BGThe flag became impatient after ^F1%.2f^BG seconds and returned itself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:247
+msgid "^BGThe ^TC^TT^BG flag has returned to the base"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:248
+msgid "^BGThe flag has returned to the base"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:249
+#, c-format
+msgid "^BG%s^BG lost the ^TC^TT^BG flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:250
+#, c-format
+msgid "^BG%s^BG lost the flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:251
+#, c-format
+msgid "^BG%s^BG got the ^TC^TT^BG flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:252
+#, c-format
+msgid "^BG%s^BG got the flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:253
+#: qcsrc/common/notifications/all.inc:254
+#, c-format
+msgid "^BG%s^BG returned the ^TC^TT^BG flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:256
+#: qcsrc/common/notifications/all.inc:544
+#, c-format
+msgid "^F2Throwing coin... Result: %s^F2!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:258
+msgid "^BGYou don't have any fuel for the ^F1Jetpack"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:260
+msgid "^F2You lack a UID, superspec options will not be saved/restored"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:262
+msgid "^F1Round already started, you will join the game in the next round"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:263
+msgid "^F2You will spectate in the next round"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:265
+#, c-format
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:265
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:266
+#, c-format
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:267
+#, c-format
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:268
+#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:269
+#, c-format
+msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:269
+#, c-format
+msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:270
+#, c-format
+msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:271
+#, c-format
+msgid "^BG%s%s^K1 was pushed in front of a monster by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:272
+#, c-format
+msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:273
+#, c-format
+msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:273
+#, c-format
+msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:274
+#, c-format
+msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:275
+#, c-format
+msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:276
+#, c-format
+msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:277
+#, c-format
+msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:278
+#, c-format
+msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:279
+#, c-format
+msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:280
+#, c-format
+msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:280
+#, c-format
+msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:281
+#, c-format
+msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:282
+#, c-format
+msgid ""
+"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:283
+#, c-format
+msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:284
+#, c-format
+msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:285
+#, c-format
+msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:286
+#, c-format
+msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:287
+#, c-format
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:288
+#, c-format
+msgid ""
+"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:289
+#, c-format
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:290
+#, c-format
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:291
+#, c-format
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:292
+#, c-format
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:293
+#, c-format
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:294
+#, c-format
+msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:296
+#, c-format
+msgid "^BG%s^K1 was moved into the %s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:297
+#, c-format
+msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:298
+#, c-format
+msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:299
+#, c-format
+msgid "^BG%s^K1 unfairly eliminated themself%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:301
+#, c-format
+msgid "^BG%s^K1 couldn't catch their breath%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:301
+#, c-format
+msgid "^BG%s^K1 was in the water for too long%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:302
+#, c-format
+msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:302
+#, c-format
+msgid "^BG%s^K1 hit the ground with a crunch%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:303
+#, c-format
+msgid "^BG%s^K1 became a bit too crispy%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:303
+#, c-format
+msgid "^BG%s^K1 felt a little hot%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:304
+#, c-format
+msgid "^BG%s^K1 died%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:305
+#, c-format
+msgid "^BG%s^K1 found a hot place%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:305
+#, c-format
+msgid "^BG%s^K1 turned into hot slag%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:306
+#, c-format
+msgid "^BG%s^K1 was exploded by a Mage%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:307
+#, c-format
+msgid "^BG%s^K1's innards became outwards by a Shambler%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:308
+#, c-format
+msgid "^BG%s^K1 was smashed by a Shambler%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:309
+#, c-format
+msgid "^BG%s^K1 was zapped to death by a Shambler%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:310
+#, c-format
+msgid "^BG%s^K1 was bitten by a Spider%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:311
+#, c-format
+msgid "^BG%s^K1 was fireballed by a Wyvern%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:312
+#, c-format
+msgid "^BG%s^K1 joins the Zombies%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:313
+#, c-format
+msgid "^BG%s^K1 was given kung fu lessons by a Zombie%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:314
+#: qcsrc/common/notifications/all.inc:316
+#, c-format
+msgid "^BG%s^K1 mastered the art of self-nading%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:315
+#, c-format
+msgid ""
+"^BG%s^K1 decided to take a look at the results of their napalm explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:315
+#, c-format
+msgid "^BG%s^K1 was burned to death by their own Napalm Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:317
+#, c-format
+msgid "^BG%s^K1 felt a little chilly%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:317
+#, c-format
+msgid "^BG%s^K1 was frozen to death by their own Ice Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:318
+#, c-format
+msgid "^BG%s^K1's Healing Nade didn't quite heal them%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:319
+#, c-format
+msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:319
+#, c-format
+msgid "^BG%s^K1 ran out of ammo%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:320
+#, c-format
+msgid "^BG%s^K1 rotted away%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:321
+#, c-format
+msgid "^BG%s^K1 became a shooting star%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:322
+#, c-format
+msgid "^BG%s^K1 was slimed%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:323
+#, c-format
+msgid "^BG%s^K1 couldn't take it anymore%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:324
+#, c-format
+msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:325
+#, c-format
+msgid "^BG%s^K1 switched to the %s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:326
+#, c-format
+msgid "^BG%s^K1 died in an accident%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:327
+#, c-format
+msgid "^BG%s^K1 ran into a turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:328
+#, c-format
+msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:329
+#, c-format
+msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:330
+#, c-format
+msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:331
+#, c-format
+msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:332
+#, c-format
+msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:333
+#, c-format
+msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:334
+#, c-format
+msgid "^BG%s^K1 was phased out by a turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:335
+#, c-format
+msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:336
+#, c-format
+msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:337
+#, c-format
+msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:338
+#, c-format
+msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:339
+#, c-format
+msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:340
+#, c-format
+msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:341
+#, c-format
+msgid "^BG%s^K1 was crushed by a vehicle%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:342
+#, c-format
+msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:343
+#, c-format
+msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:344
+#, c-format
+msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:345
+#, c-format
+msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:346
+#, c-format
+msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:347
+#, c-format
+msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:350
+#, c-format
+msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:352
+#, c-format
+msgid "^BG%s^BG%s^BG (%s %s every %s seconds)"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:354
+#, c-format
+msgid "^BG%s^K1 was frozen by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:355
+#, c-format
+msgid "^BG%s^K3 was revived by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:356
+#, c-format
+msgid "^BG%s^K3 was revived by falling"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:357
+#, c-format
+msgid "^BG%s^K3 was revived by their Nade explosion"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:358
+#, c-format
+msgid "^BG%s^K3 was automatically revived after %s seconds"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:359
+#, c-format
+msgid "^BG%s^K1 froze themself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:361
+#: qcsrc/common/notifications/all.inc:675
+msgid "^TC^TT^BG team wins the round"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:362
+#: qcsrc/common/notifications/all.inc:676
+#, c-format
+msgid "^BG%s^BG wins the round"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:363
+#: qcsrc/common/notifications/all.inc:539
+msgid "^BGRound tied"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:364
+#: qcsrc/common/notifications/all.inc:540
+msgid "^BGRound over, there's no winner"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:366
+#, c-format
+msgid "^BGGodmode saved you %s units of damage, cheater!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:368
+#, c-format
+msgid "^BG%s^BG got the %s^BG buff!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:369
+#, c-format
+msgid "^BG%s^BG lost the %s^BG buff!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:370
+#: qcsrc/common/notifications/all.inc:683
+#, c-format
+msgid "^BGYou dropped the %s^BG buff!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:371
+#: qcsrc/common/notifications/all.inc:684
+#, c-format
+msgid "^BGYou got the %s^BG buff!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:373
+#: qcsrc/common/notifications/all.inc:687
+#, c-format
+msgid "^BGYou do not have the ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:374
+#: qcsrc/common/notifications/all.inc:688
+#, c-format
+msgid "^BGYou dropped the ^F1%s^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:375
+#: qcsrc/common/notifications/all.inc:689
+#, c-format
+msgid "^BGYou got the ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:376
+#: qcsrc/common/notifications/all.inc:690
+#, c-format
+msgid "^BGYou don't have enough ammo for the ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:377
+#: qcsrc/common/notifications/all.inc:691
+#, c-format
+msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:378
+#: qcsrc/common/notifications/all.inc:692
+#, c-format
+msgid "^F1%s^BG is ^F4not available^BG on this map"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:380
+#, c-format
+msgid "^BG%s^BG is connecting..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:381
+#, c-format
+msgid "^BG%s^F3 connected"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:382
+#, c-format
+msgid "^BG%s^F3 is now playing"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:383
+#, c-format
+msgid "^BG%s^F3 is now playing on the ^TC^TT team"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:385
+#: qcsrc/common/notifications/all.inc:697
+#, c-format
+msgid "^BG%s^BG has dropped the ball!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:386
+#: qcsrc/common/notifications/all.inc:698
+#, c-format
+msgid "^BG%s^BG has picked up the ball!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:388
+#, c-format
+msgid "^BG%s^BG captured the keys for the ^TC^TT team"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:389
+#, c-format
+msgid "^BG%s^BG dropped the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:390
+#, c-format
+msgid "^BG%s^BG lost the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:391
+#, c-format
+msgid "^BG%s^BG pushed %s^BG causing the ^TC^TT Key ^BGdestruction"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:392
+#, c-format
+msgid "^BG%s^BG destroyed the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:393
+#, c-format
+msgid "^BG%s^BG picked up the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:395
+#, c-format
+msgid "^BG%s^F3 forfeited"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:396
+#, c-format
+msgid "^BG%s^F3 has no more lives left"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:398
+msgid "^BGMonsters are currently disabled"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:400
+msgid "^BGThe ^TC^TT^BG team held the ball for too long"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:402
+#, c-format
+msgid "^BG%s^BG captured %s^BG control point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:403
+#, c-format
+msgid "^BG%s^BG captured a control point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:404
+#, c-format
+msgid "^TC^TT^BG team %s^BG control point has been destroyed by %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:405
+#, c-format
+msgid "^TC^TT^BG team control point has been destroyed by %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:406
+msgid "^TC^TT^BG generator has been destroyed"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:407
+msgid "^TC^TT^BG generator spontaneously combusted due to overtime!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:409
+#, c-format
+msgid "^BG%s^K1 picked up Invisibility"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:410
+#, c-format
+msgid "^BG%s^K1 picked up Shield"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:411
+#, c-format
+msgid "^BG%s^K1 picked up Speed"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:412
+#, c-format
+msgid "^BG%s^K1 picked up Strength"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:414
+#, c-format
+msgid "^BG%s^F3 disconnected"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:415
+#, c-format
+msgid "^BG%s^F3 was kicked for idling"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:416
+msgid ""
+"^F2You were kicked from the server because you are a spectator and "
+"spectators aren't allowed at the moment."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:417
+#, c-format
+msgid "^BG%s^F3 was kicked for excessive teamkilling"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:418
+#, c-format
+msgid "^BG%s^F3 is now spectating"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:420
+#, c-format
+msgid "^BG%s^BG has abandoned the race"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:421
+#, c-format
+msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:422
+#, c-format
+msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:423
+#, c-format
+msgid "^BG%s^BG has finished the race"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:424
+#, c-format
+msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:425
+#, c-format
+msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:426
+#, c-format
+msgid ""
+"^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
+"and will be lost."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:427
+#, c-format
+msgid ""
+"^BG%s^BG scored a new record with ^F2%s^BG, but is anonymous and will be "
+"lost."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:428
+#, c-format
+msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:430
+#, c-format
+msgid ""
+"^F4You have been invited by ^BG%s^F4 to join their game of ^F2%s^F4 "
+"(^F1%s^F4)"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:432
+msgid "^TC^TT ^BGteam scores!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:434
+#, c-format
+msgid ""
+"^F2You have to become a player within the next %s, otherwise you will be "
+"kicked, because spectating isn't allowed at this time!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:436
+#, c-format
+msgid "^BG%s^K1 picked up a Superweapon"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:438
+msgid "^BGYou cannot change to a larger team"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:439
+msgid "^BGYou are not allowed to change teams"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:441
+#, c-format
+msgid ""
+"^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
+"^F2Xonotic %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:442
+#, c-format
+msgid ""
+"^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:443
+#, c-format
+msgid ""
+"^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
+"the update from ^F3http://www.xonotic.org/^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:445
+#, c-format
+msgid "^F3SVQC Build information: ^F4%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:447
+#, c-format
+msgid ""
+"^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:448
+#, c-format
+msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:449
+#, c-format
+msgid "^BG%s%s^K1 was electrocuted by ^BG%s^K1's Arc%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:450
+#, c-format
+msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Arc bolts%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:451
+#, c-format
+msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Blaster%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:452
+#, c-format
+msgid "^BG%s^K1 shot themself to hell with their Blaster%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:453
+#, c-format
+msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:454
+#, c-format
+msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:455
+#, c-format
+msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:456
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's rocket%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:457
+#, c-format
+msgid "^BG%s^K1 blew themself up with their Devastator%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:458
+#, c-format
+msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:459
+#, c-format
+msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:460
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro orb%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:461
+#, c-format
+msgid "^BG%s^K1 played with Electro bolts%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:462
+#, c-format
+msgid "^BG%s^K1 could not remember where they put their Electro orb%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:463
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:464
+#, c-format
+msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:465
+#, c-format
+msgid "^BG%s^K1 should have used a smaller gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:466
+#, c-format
+msgid "^BG%s^K1 forgot about their firemine%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:467
+#, c-format
+msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:468
+#, c-format
+msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:469
+#, c-format
+msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:470
+#, c-format
+msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:471
+#, c-format
+msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:472
+#, c-format
+msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:473
+#, c-format
+msgid ""
+"^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:474
+#, c-format
+msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:475
+#, c-format
+msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:476
+#, c-format
+msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:477
+#: qcsrc/common/notifications/all.inc:782
+#, c-format
+msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:478
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:479
+#, c-format
+msgid "^BG%s^K1 forgot about their mine%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:480
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:481
+#, c-format
+msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:482
+#, c-format
+msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:483
+#, c-format
+msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:484
+#, c-format
+msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Overkill Heavy Machine Gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:485
+#, c-format
+msgid ""
+"^BG%s%s^K1 was torn to bits by ^BG%s^K1's Overkill Heavy Machine Gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:486
+#, c-format
+msgid ""
+"^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Overkill Machine Gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:487
+#, c-format
+msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Overkill Nex%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:488
+#, c-format
+msgid ""
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
+"%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:489
+#, c-format
+msgid ""
+"^BG%s%s^K1 almost dodged ^BG%s^K1's Overkill Rocket Propelled Chainsaw%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:490
+#, c-format
+msgid ""
+"^BG%s^K1 was sawn in half by their own Overkill Rocket Propelled Chainsaw%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:491
+#, c-format
+msgid ""
+"^BG%s^K1 blew themself up with their Overkill Rocket Propelled Chainsaw%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:493
+#, c-format
+msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Overkill Shotgun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:494
+#, c-format
+msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:495
+#, c-format
+msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:496
+#, c-format
+msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:497
+#, c-format
+msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:498
+#, c-format
+msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:499
+#, c-format
+msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:500
+#, c-format
+msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:501
+#, c-format
+msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shockwave%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:502
+#, c-format
+msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shockwave%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:503
+#, c-format
+msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:504
+#, c-format
+msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:505
+#, c-format
+msgid "^BG%s^K1 is now thinking with portals%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:506
+#, c-format
+msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:507
+#, c-format
+msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:508
+#, c-format
+msgid "^BG%s%s^K1 has been sublimated by ^BG%s^K1's Vaporizer%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:509
+#, c-format
+msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Vortex%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:528
+msgid "^F4You are now alone!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:530
+msgid "^BGYou are attacking!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:531
+msgid "^BGYou are defending!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:532
+#, c-format
+msgid "^BGObjective destroyed in ^F4%s^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:534
+msgid "^F4Begin!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:535
+msgid "^F4Game starts in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:536
+msgid "^F4Round starts in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:537
+msgid "^F4Round cannot start"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:542
+msgid "^F2Don't camp!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:546
+msgid ""
+"^BGYou are now free.\n"
+"^BGFeel free to ^F2try to capture^BG the flag again\n"
+"^BGif you think you will succeed."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:547
+msgid "^BGThis flag is currently inactive"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:548
+msgid ""
+"^BGYou are now ^F1shielded^BG from the flag(s)\n"
+"^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
+"^BGMake some defensive scores before trying again."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:549
+msgid "^BGYou captured the ^TC^TT^BG flag!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:550
+msgid "^BGYou captured the flag!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:551
+#, c-format
+msgid "^BGToo many flag throws! Throwing disabled for %s."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:552
+#, c-format
+msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:553
+#, c-format
+msgid "^BG%s^BG passed the flag to %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:554
+#, c-format
+msgid "^BGYou received the ^TC^TT^BG flag from %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:555
+#, c-format
+msgid "^BGYou received the flag from %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:556
+#, c-format
+msgid "^BGPress ^F2%s^BG to receive the flag from %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:557
+#, c-format
+msgid "^BGRequesting %s^BG to pass you the flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:558
+#, c-format
+msgid "^BGYou passed the ^TC^TT^BG flag to %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:559
+#, c-format
+msgid "^BGYou passed the flag to %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:560
+msgid "^BGYou got the ^TC^TT^BG flag!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:561
+msgid "^BGYou got the flag!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:562
+#, c-format
+msgid "^BGYou got your %steam^BG's flag, return it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:563
+#, c-format
+msgid "^BGYou got the %senemy^BG's flag, return it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:564
+#, c-format
+msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:565
+#, c-format
+msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:566
+#, c-format
+msgid "^BGThe %senemy^BG got the flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:567
+#, c-format
+msgid "^BGThe %senemy (^BG%s%s)^BG got the flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:568
+#, c-format
+msgid "^BGThe %senemy^BG got their flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:569
+#, c-format
+msgid "^BGThe %senemy (^BG%s%s)^BG got their flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:570
+#, c-format
+msgid "^BGYour %steam mate^BG got the ^TC^TT^BG flag! Protect them!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:571
+#, c-format
+msgid "^BGYour %steam mate (^BG%s%s)^BG got the ^TC^TT^BG flag! Protect them!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:572
+#, c-format
+msgid "^BGYour %steam mate^BG got the flag! Protect them!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:573
+#, c-format
+msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:574
+msgid "^BGEnemies can now see you on radar!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:575
+msgid "^BGYou returned the ^TC^TT^BG flag!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:576
+msgid "^BGStalemate! Enemies can now see you on radar!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:577
+msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:581
+#, c-format
+msgid "^K3%sYou fragged ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:582
+#: qcsrc/common/notifications/all.inc:591
+#: qcsrc/common/notifications/all.inc:600
+#, c-format
+msgid "^K3%sYou scored against ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:583
+#, c-format
+msgid "^K1%sYou were fragged by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:584
+#: qcsrc/common/notifications/all.inc:593
+#: qcsrc/common/notifications/all.inc:602
+#, c-format
+msgid "^K1%sYou were scored against by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:590
+#, c-format
+msgid "^K3%sYou burned ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:592
+#, c-format
+msgid "^K1%sYou were burned by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:599
+#, c-format
+msgid "^K3%sYou froze ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:601
+#, c-format
+msgid "^K1%sYou were frozen by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:608
+#, c-format
+msgid "^K1%sYou typefragged ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:609
+#, c-format
+msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:610
+#, c-format
+msgid "^K1%sYou were typefragged by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:611
+#, c-format
+msgid "^K1%sYou were scored against by ^BG%s^K1 while typing"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:617
+#, c-format
+msgid "^BGPress ^F2%s^BG again to toss the nade!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:618
+msgid "^F2You got a ^K1BONUS GRENADE^F2!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:620
+#, c-format
+msgid ""
+"^BGYou have been moved into a different team\n"
+"You are now on: %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:621
+msgid "^K1Don't go against your team mates!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:621
+msgid "^K1Don't shoot your team mates!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:622
+msgid "^K1Die camper!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:622
+msgid "^K1Reconsider your tactics, camper!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:623
+msgid "^K1You unfairly eliminated yourself!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:624
+#, c-format
+msgid "^K1You were %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:625
+msgid "^K1You couldn't catch your breath!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:626
+msgid "^K1You hit the ground with a crunch!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:627
+msgid "^K1You felt a little too hot!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:627
+msgid "^K1You got a little bit too crispy!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:628
+msgid "^K1You killed your own dumb self!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:628
+msgid "^K1You need to be more careful!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:629
+msgid "^K1You couldn't stand the heat!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:630
+msgid "^K1You need to watch out for monsters!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:630
+msgid "^K1You were killed by a monster!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:631
+msgid "^K1Tastes like chicken!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:631
+msgid "^K1You forgot to put the pin back in!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:632
+msgid "^K1Hanging around a napalm explosion is bad!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:633
+msgid "^K1You felt a little chilly!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:633
+msgid "^K1You got a little bit too cold!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:634
+msgid "^K1Your Healing Nade is a bit defective"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:635
+msgid "^K1You are respawning for running out of ammo..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:635
+msgid "^K1You were killed for running out of ammo..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:636
+msgid "^K1You grew too old without taking your medicine"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:636
+msgid "^K1You need to preserve your health"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:637
+msgid "^K1You became a shooting star!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:638
+msgid "^K1You melted away in slime!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:639
+msgid "^K1You committed suicide!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:639
+msgid "^K1You ended it all!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:640
+msgid "^K1You got stuck in a swamp!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:641
+#, c-format
+msgid "^BGYou are now on: %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:642
+msgid "^K1You died in an accident!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:643
+msgid "^K1You had an unfortunate run in with a turret!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:643
+msgid "^K1You were fragged by a turret!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:644
+msgid "^K1You had an unfortunate run in with an eWheel turret!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:644
+msgid "^K1You were fragged by an eWheel turret!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:645
+msgid "^K1You had an unfortunate run in with a Walker turret!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:645
+msgid "^K1You were fragged by a Walker turret!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:646
+msgid "^K1You got caught in the blast of a Bumblebee explosion!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:647
+msgid "^K1You were crushed by a vehicle!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:648
+msgid "^K1You were caught in a Raptor cluster bomb!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:649
+msgid "^K1You got caught in the blast of a Raptor explosion!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:650
+msgid "^K1You got caught in the blast of a Spiderbot explosion!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:651
+msgid "^K1You were blasted to bits by a Spiderbot rocket!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:652
+msgid "^K1You got caught in the blast of a Racer explosion!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:653
+msgid "^K1You couldn't find shelter from a Racer rocket!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:654
+msgid "^K1Watch your step!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:656
+#, c-format
+msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:656
+#, c-format
+msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:657
+#, c-format
+msgid "^K1You were fragged by ^BG%s^K1, a team mate"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:657
+#, c-format
+msgid "^K1You were scored against by ^BG%s^K1, a team mate"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:659
+msgid ""
+"^K1Stop idling!\n"
+"^BGDisconnecting in ^COUNT..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:661
+#, c-format
+msgid "^BGYou need %s^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:662
+#, c-format
+msgid "^BGYou also need %s^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:663
+msgid "^BGDoor unlocked!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:665
+#, c-format
+msgid "^F2Extra lives taken: ^K1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:667
+#, c-format
+msgid "^K3You revived ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:668
+msgid "^K3You revived yourself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:669
+#, c-format
+msgid "^K3You were revived by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:670
+#, c-format
+msgid "^K3You were automatically revived after %s seconds"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:672
+msgid "^BGThe generator is under attack!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:674
+msgid "^TC^TT^BG team loses the round"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:678
+msgid "^K1You froze yourself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:679
+msgid "^K1Round already started, you spawn as frozen"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:681
+#, c-format
+msgid "^K1A %s has arrived!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:685
+msgid "^BGYou got the ^F1Fuel regenerator"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:686
+msgid "^BGYou got the ^F1Jetpack"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:694
+msgid ""
+"^K1No spawnpoints available!\n"
+"Hope your team can fix it..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:695
+msgid ""
+"^K1You may not join the game at this time.\n"
+"The player limit reached maximum capacity."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:699
+msgid "^BGYou picked up the ball"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:700
+msgid "^BGKilling people while you don't have the ball gives no points!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:702
+msgid ""
+"^BGAll keys are in your team's hands!\n"
+"Help the key carriers to meet!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:703
+msgid ""
+"^BGAll keys are in ^TC^TT team^BG's hands!\n"
+"Interfere ^F4NOW^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:704
+msgid ""
+"^BGAll keys are in your team's hands!\n"
+"Meet the other key carriers ^F4NOW^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:705
+msgid "^F4Round will start in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:706
+msgid "^BGScanning frequency range..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:707
+msgid "^BGYou are starting with the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:709
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:711
+#, c-format
+msgid ""
+"^BGWaiting for players to join...\n"
+"Need active players for: %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:712
+#, c-format
+msgid "^BGWaiting for %s player(s) to join..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:714
+msgid "^BGYour weapon has been downgraded until you find some ammo!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:715
+msgid "^F4^COUNT^BG left to find some ammo!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:716
+msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:716
+msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:717
+#, c-format
+msgid "^F2Extra lives remaining: ^K1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:719 qcsrc/menu/xonotic/campaign.qc:244
+#, c-format
+msgid "Level %s: "
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:719
+#, c-format
+msgid "^BGPress ^F2%s^BG to enter the game"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:722
+#, c-format
+msgid ""
+"^F2^COUNT^BG until weapon change...\n"
+"Next weapon: ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:723
+#, c-format
+msgid "^F2Active weapon: ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:725
+#, c-format
+msgid "^BGYou captured %s^BG control point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:726
+msgid "^BGYou captured a control point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:727
+#, c-format
+msgid "^TC^TT^BG team captured %s^BG control point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:728
+msgid "^TC^TT^BG team captured a control point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:729
+msgid "^BGThis control point currently cannot be captured"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:730
+msgid ""
+"^BGThe enemy generator cannot be destroyed yet\n"
+"^F2Capture some control points to unshield it"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:731
+msgid "^BGThe ^TCenemy^BG generator is no longer shielded!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:732
+msgid ""
+"^K1Your generator is NOT shielded!\n"
+"^BGRe-capture control points to shield it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:733
+#, c-format
+msgid "^BGPress ^F2%s^BG to teleport"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:734
+#, c-format
+msgid "^BGTeleporting disabled for %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:736
+msgid ""
+"^F2Now playing ^F4OVERTIME^F2!\n"
+"Keep fragging until we have a winner!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:736
+msgid ""
+"^F2Now playing ^F4OVERTIME^F2!\n"
+"Keep scoring until we have a winner!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:737
+msgid ""
+"^F2Now playing ^F4OVERTIME^F2!\n"
+"\n"
+"Generators are now decaying.\n"
+"The more control points your team holds,\n"
+"the faster the enemy generator decays"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:738
+#, c-format
+msgid ""
+"^F2Now playing ^F4OVERTIME^F2!\n"
+"^BGAdded ^F4%s^BG to the game!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:740
+msgid "^K1In^BG-portal created"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:741
+msgid "^F3Out^BG-portal created"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:742
+msgid "^F1Portal creation failed"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:744
+msgid "^F2Strength infuses your weapons with devastating power"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:745
+msgid "^F2Strength has worn off"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:747
+msgid "^F2Shield surrounds you"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:748
+msgid "^F2Shield has worn off"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:750
+msgid "^F2You are on speed"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:751
+msgid "^F2Speed has worn off"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:753
+msgid "^F2You are invisible"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:754
+msgid "^F2Invisibility has worn off"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:756
+msgid "^F2The race is over, finish your lap!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:758
+msgid "^BGSequence completed!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:759
+msgid "^BGThere are more to go..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:760
+#, c-format
+msgid "^BGOnly %s^BG more to go..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:762
+msgid "^F2Superweapons have broken down"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:763
+msgid "^F2Superweapons have been lost"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:764
+msgid "^F2You now have a superweapon"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:766
+msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:767
+msgid "^K1Changing team in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:768
+msgid "^K1Spectating in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:769
+msgid "^K1Suicide in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:771
+msgid "^F4Timeout begins in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:772
+msgid "^F4Timeout ends in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:774
+msgid "^K1Cannot join given minigame session!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:776
+#, c-format
+msgid "^BGPress ^F2%s^BG to enter/exit the vehicle"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:777
+#, c-format
+msgid "^BGPress ^F2%s^BG to enter the vehicle gunner"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:778
+#, c-format
+msgid "^BGPress ^F2%s^BG to steal this vehicle"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:779
+msgid ""
+"^F2The enemy is stealing one of your vehicles!\n"
+"^F4Stop them!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:780
+msgid "^F2Intruder detected, disabling shields!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:198
+msgid "Notification dump command only works with cl_cmd and sv_cmd."
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:408 qcsrc/common/notifications/all.qh:409
+#, c-format
+msgid " (near %s)"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:416 qcsrc/common/notifications/all.qh:417
+msgid "primary"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:416 qcsrc/common/notifications/all.qh:417
+msgid "secondary"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:419
+msgid "point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:419
+msgid "points"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:428
+msgid "drop flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:429
+msgid "throw nade"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:455
+#, c-format
+msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:455
+#, c-format
+msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:455
+msgid "TRIPLE FRAG! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:456
+#, c-format
+msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:456
+#, c-format
+msgid "%s^K1 unlocked RAGE! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:456
+msgid "RAGE! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:457
+#, c-format
+msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:457
+#, c-format
+msgid "%s^K1 started a MASSACRE! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:457
+msgid "MASSACRE! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:458
+#, c-format
+msgid "%s^K1 executed MAYHEM! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:458
+#, c-format
+msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:458
+msgid "MAYHEM! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:459
+#, c-format
+msgid "%s^K1 is a BERSERKER! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:459
+#, c-format
+msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:459
+msgid "BERSERKER! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:460
+#, c-format
+msgid "%s^K1 inflicts CARNAGE! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:460
+#, c-format
+msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:460
+msgid "CARNAGE! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:461
+#, c-format
+msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:461
+#, c-format
+msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:461
+msgid "ARMAGEDDON! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:468
+#, c-format
+msgid "%s(^F1Bot^BG)"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:470
+#, c-format
+msgid "%s(Ping ^F1%d^BG)"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:477
+#, c-format
+msgid ""
+"\n"
+"(Health ^1%d^BG / Armor ^2%d^BG)%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:479
+#, c-format
+msgid ""
+"\n"
+"(^F4Dead^BG)%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:500 qcsrc/common/notifications/all.qh:513
+#, c-format
+msgid "%d score spree! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:512
+#, c-format
+msgid "%d frag spree! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:525
+msgid "First blood! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:525
+msgid "First score! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:529
+msgid "First casualty! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:529
+msgid "First victim! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:570
+#, c-format
+msgid "%s^K1 has %d frags in a row! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:571
+#, c-format
+msgid "%s^K1 made %d scores in a row! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:589
+#, c-format
+msgid "%s^K1 drew first blood! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:590
+#, c-format
+msgid "%s^K1 got the first score! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:606
+#, c-format
+msgid ", ending their %d frag spree"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:607
+#, c-format
+msgid ", ending their %d score spree"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:621
+#, c-format
+msgid ", losing their %d frag spree"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:622
+#, c-format
+msgid ", losing their %d score spree"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:647
+#, c-format
+msgid " with %d %s"
+msgstr ""
+
+#: qcsrc/common/teams.qh:31
+msgid "TEAM^Red"
+msgstr ""
+
+#: qcsrc/common/teams.qh:32
+msgid "TEAM^Blue"
+msgstr ""
+
+#: qcsrc/common/teams.qh:33
+msgid "TEAM^Yellow"
+msgstr ""
+
+#: qcsrc/common/teams.qh:34
+msgid "TEAM^Pink"
+msgstr ""
+
+#: qcsrc/common/teams.qh:35
+msgid "Team"
+msgstr ""
+
+#: qcsrc/common/teams.qh:36
+msgid "Neutral"
+msgstr ""
+
+#: qcsrc/common/teams.qh:39
+msgid "KEY^Red"
+msgstr ""
+
+#: qcsrc/common/teams.qh:40
+msgid "KEY^Blue"
+msgstr ""
+
+#: qcsrc/common/teams.qh:41
+msgid "KEY^Yellow"
+msgstr ""
+
+#: qcsrc/common/teams.qh:42
+msgid "KEY^Pink"
+msgstr ""
+
+#: qcsrc/common/teams.qh:43
+msgid "FLAG^Red"
+msgstr ""
+
+#: qcsrc/common/teams.qh:44
+msgid "FLAG^Blue"
+msgstr ""
+
+#: qcsrc/common/teams.qh:45
+msgid "FLAG^Yellow"
+msgstr ""
+
+#: qcsrc/common/teams.qh:46
+msgid "FLAG^Pink"
+msgstr ""
+
+#: qcsrc/common/teams.qh:47
+msgid "GENERATOR^Red"
+msgstr ""
+
+#: qcsrc/common/teams.qh:48
+msgid "GENERATOR^Blue"
+msgstr ""
+
+#: qcsrc/common/teams.qh:49
+msgid "GENERATOR^Yellow"
+msgstr ""
+
+#: qcsrc/common/teams.qh:50
+msgid "GENERATOR^Pink"
+msgstr ""
+
+#: qcsrc/common/turrets/all.qh:95
+msgid "Turrets dump command only works with sv_cmd."
+msgstr ""
+
+#: qcsrc/common/turrets/cl_turrets.qc:125
+#, c-format
+msgid "%s under attack!"
+msgstr ""
+
+#: qcsrc/common/turrets/turret.qh:11
+msgid "Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/ewheel.qh:15
+msgid "eWheel Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/ewheel_weapon.qh:7
+msgid "eWheel"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/flac.qh:13
+msgid "FLAC Cannon"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/flac_weapon.qh:7
+msgid "FLAC"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/fusionreactor.qh:11
+msgid "Fusion Reactor"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/hellion.qh:13
+msgid "Hellion Missile Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/hellion_weapon.qh:7
+msgid "Hellion"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/hk.qh:15
+msgid "Hunter-Killer Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/hk_weapon.qh:7
+msgid "Hunter-Killer"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/machinegun.qh:13
+msgid "Machinegun Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/machinegun_weapon.qh:7
+msgid "Machinegun"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/mlrs.qh:13
+msgid "MLRS Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/mlrs_weapon.qh:7
+msgid "MLRS"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/phaser.qh:13
+msgid "Phaser Cannon"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/phaser_weapon.qh:7
+msgid "Phaser"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/plasma.qh:13
+msgid "Plasma Cannon"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/plasma_dual.qh:8
+msgid "Dual plasma"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/plasma_dual.qh:20
+msgid "Dual Plasma Cannon"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/plasma_weapon.qh:7
+msgid "Plasma"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/tesla.qh:13
+#: qcsrc/common/turrets/turret/tesla_weapon.qh:7
+msgid "Tesla Coil"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/walker.qh:15
+msgid "Walker Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/walker_weapon.qh:7
+msgid "Walker"
+msgstr ""
+
+#: qcsrc/common/util.qc:1390
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:176
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:186
+msgid "Male"
+msgstr ""
+
+#: qcsrc/common/util.qc:1391
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:175
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:185
+msgid "Female"
+msgstr ""
+
+#: qcsrc/common/util.qc:1392
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:174
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:187
+msgid "Undisclosed"
+msgstr ""
+
+#: qcsrc/common/util.qc:1439
+msgid "<KEY NOT FOUND>"
+msgstr ""
+
+#: qcsrc/common/util.qc:1440
+msgid "<UNKNOWN KEYNUM>"
+msgstr ""
+
+#: qcsrc/common/util.qc:1445
+msgid "TAB"
+msgstr ""
+
+#: qcsrc/common/util.qc:1446 qcsrc/common/util.qc:1517
+#, c-format
+msgid "ENTER"
+msgstr ""
+
+#: qcsrc/common/util.qc:1447
+msgid "ESCAPE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1448
+msgid "SPACE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1450
+msgid "BACKSPACE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1451 qcsrc/common/util.qc:1508
+#, c-format
+msgid "UPARROW"
+msgstr ""
+
+#: qcsrc/common/util.qc:1452 qcsrc/common/util.qc:1503
+#, c-format
+msgid "DOWNARROW"
+msgstr ""
+
+#: qcsrc/common/util.qc:1453 qcsrc/common/util.qc:1505
+#, c-format
+msgid "LEFTARROW"
+msgstr ""
+
+#: qcsrc/common/util.qc:1454 qcsrc/common/util.qc:1506
+#, c-format
+msgid "RIGHTARROW"
+msgstr ""
+
+#: qcsrc/common/util.qc:1456
+msgid "ALT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1457
+msgid "CTRL"
+msgstr ""
+
+#: qcsrc/common/util.qc:1458
+msgid "SHIFT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1460 qcsrc/common/util.qc:1501
+#, c-format
+msgid "INS"
+msgstr ""
+
+#: qcsrc/common/util.qc:1461 qcsrc/common/util.qc:1511
+#, c-format
+msgid "DEL"
+msgstr ""
+
+#: qcsrc/common/util.qc:1462 qcsrc/common/util.qc:1504
+#, c-format
+msgid "PGDN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1463 qcsrc/common/util.qc:1509
+#, c-format
+msgid "PGUP"
+msgstr ""
+
+#: qcsrc/common/util.qc:1464 qcsrc/common/util.qc:1507
+#, c-format
+msgid "HOME"
+msgstr ""
+
+#: qcsrc/common/util.qc:1465 qcsrc/common/util.qc:1502
+#, c-format
+msgid "END"
+msgstr ""
+
+#: qcsrc/common/util.qc:1467
+msgid "PAUSE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1469
+msgid "NUMLOCK"
+msgstr ""
+
+#: qcsrc/common/util.qc:1470
+msgid "CAPSLOCK"
+msgstr ""
+
+#: qcsrc/common/util.qc:1471
+msgid "SCROLLOCK"
+msgstr ""
+
+#: qcsrc/common/util.qc:1473
+msgid "SEMICOLON"
+msgstr ""
+
+#: qcsrc/common/util.qc:1474
+msgid "TILDE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1475
+msgid "BACKQUOTE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1476
+msgid "QUOTE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1477
+msgid "APOSTROPHE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1478
+msgid "BACKSLASH"
+msgstr ""
+
+#: qcsrc/common/util.qc:1486
+#, c-format
+msgid "F%d"
+msgstr ""
+
+#: qcsrc/common/util.qc:1496
+#, c-format
+msgid "KP_%d"
+msgstr ""
+
+#: qcsrc/common/util.qc:1501 qcsrc/common/util.qc:1502
+#: qcsrc/common/util.qc:1503 qcsrc/common/util.qc:1504
+#: qcsrc/common/util.qc:1505 qcsrc/common/util.qc:1506
+#: qcsrc/common/util.qc:1507 qcsrc/common/util.qc:1508
+#: qcsrc/common/util.qc:1509 qcsrc/common/util.qc:1510
+#: qcsrc/common/util.qc:1511 qcsrc/common/util.qc:1512
+#: qcsrc/common/util.qc:1513 qcsrc/common/util.qc:1514
+#: qcsrc/common/util.qc:1515 qcsrc/common/util.qc:1516
+#: qcsrc/common/util.qc:1517 qcsrc/common/util.qc:1518
+#, c-format
+msgid "KP_%s"
+msgstr ""
+
+#: qcsrc/common/util.qc:1510
+#, c-format
+msgid "PERIOD"
+msgstr ""
+
+#: qcsrc/common/util.qc:1512
+#, c-format
+msgid "DIVIDE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1513
+#, c-format
+msgid "SLASH"
+msgstr ""
+
+#: qcsrc/common/util.qc:1514
+#, c-format
+msgid "MULTIPLY"
+msgstr ""
+
+#: qcsrc/common/util.qc:1515
+#, c-format
+msgid "MINUS"
+msgstr ""
+
+#: qcsrc/common/util.qc:1516
+#, c-format
+msgid "PLUS"
+msgstr ""
+
+#: qcsrc/common/util.qc:1518
+#, c-format
+msgid "EQUALS"
+msgstr ""
+
+#: qcsrc/common/util.qc:1523
+msgid "PRINTSCREEN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1526
+#, c-format
+msgid "MOUSE%d"
+msgstr ""
+
+#: qcsrc/common/util.qc:1528
+msgid "MWHEELUP"
+msgstr ""
+
+#: qcsrc/common/util.qc:1529
+msgid "MWHEELDOWN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1532
+#, c-format
+msgid "JOY%d"
+msgstr ""
+
+#: qcsrc/common/util.qc:1535
+#, c-format
+msgid "AUX%d"
+msgstr ""
+
+#: qcsrc/common/util.qc:1542
+#, c-format
+msgid "DPAD_UP"
+msgstr ""
+
+#: qcsrc/common/util.qc:1542 qcsrc/common/util.qc:1543
+#: qcsrc/common/util.qc:1544 qcsrc/common/util.qc:1545
+#: qcsrc/common/util.qc:1546 qcsrc/common/util.qc:1547
+#: qcsrc/common/util.qc:1548 qcsrc/common/util.qc:1549
+#: qcsrc/common/util.qc:1550 qcsrc/common/util.qc:1551
+#: qcsrc/common/util.qc:1552 qcsrc/common/util.qc:1553
+#: qcsrc/common/util.qc:1554 qcsrc/common/util.qc:1555
+#: qcsrc/common/util.qc:1556 qcsrc/common/util.qc:1557
+#: qcsrc/common/util.qc:1558 qcsrc/common/util.qc:1559
+#: qcsrc/common/util.qc:1560 qcsrc/common/util.qc:1561
+#, c-format
+msgid "X360_%s"
+msgstr ""
+
+#: qcsrc/common/util.qc:1543
+#, c-format
+msgid "DPAD_DOWN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1544
+#, c-format
+msgid "DPAD_LEFT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1545
+#, c-format
+msgid "DPAD_RIGHT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1546
+#, c-format
+msgid "START"
+msgstr ""
+
+#: qcsrc/common/util.qc:1547
+#, c-format
+msgid "BACK"
+msgstr ""
+
+#: qcsrc/common/util.qc:1548
+#, c-format
+msgid "LEFT_THUMB"
+msgstr ""
+
+#: qcsrc/common/util.qc:1549
+#, c-format
+msgid "RIGHT_THUMB"
+msgstr ""
+
+#: qcsrc/common/util.qc:1550
+#, c-format
+msgid "LEFT_SHOULDER"
+msgstr ""
+
+#: qcsrc/common/util.qc:1551
+#, c-format
+msgid "RIGHT_SHOULDER"
+msgstr ""
+
+#: qcsrc/common/util.qc:1552
+#, c-format
+msgid "LEFT_TRIGGER"
+msgstr ""
+
+#: qcsrc/common/util.qc:1553
+#, c-format
+msgid "RIGHT_TRIGGER"
+msgstr ""
+
+#: qcsrc/common/util.qc:1554
+#, c-format
+msgid "LEFT_THUMB_UP"
+msgstr ""
+
+#: qcsrc/common/util.qc:1555
+#, c-format
+msgid "LEFT_THUMB_DOWN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1556
+#, c-format
+msgid "LEFT_THUMB_LEFT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1557
+#, c-format
+msgid "LEFT_THUMB_RIGHT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1558
+#, c-format
+msgid "RIGHT_THUMB_UP"
+msgstr ""
+
+#: qcsrc/common/util.qc:1559
+#, c-format
+msgid "RIGHT_THUMB_DOWN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1560
+#, c-format
+msgid "RIGHT_THUMB_LEFT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1561
+#, c-format
+msgid "RIGHT_THUMB_RIGHT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1571 qcsrc/common/util.qc:1572
+#: qcsrc/common/util.qc:1573 qcsrc/common/util.qc:1574
+#, c-format
+msgid "JOY_%s"
+msgstr ""
+
+#: qcsrc/common/util.qc:1571
+#, c-format
+msgid "UP"
+msgstr ""
+
+#: qcsrc/common/util.qc:1572
+#, c-format
+msgid "DOWN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1573
+#, c-format
+msgid "LEFT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1574
+#, c-format
+msgid "RIGHT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1580
+#, c-format
+msgid "MIDINOTE%d"
+msgstr ""
+
+#: qcsrc/common/vehicles/cl_vehicles.qc:190
+#, c-format
+msgid "Press %s"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/bumblebee.qc:954
+msgid "No right gunner!"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/bumblebee.qc:960
+msgid "No left gunner!"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/bumblebee.qh:19
+msgid "Bumblebee"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/racer.qh:19
+msgid "Racer"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/racer_weapon.qh:9
+msgid "Racer cannon"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/raptor.qh:19
+msgid "Raptor"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/raptor_weapons.qh:9
+msgid "Raptor cannon"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/raptor_weapons.qh:17
+msgid "Raptor bomb"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/raptor_weapons.qh:25
+msgid "Raptor flare"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/spiderbot.qh:19
+msgid "Spiderbot"
+msgstr ""
+
+#: qcsrc/common/weapons/all.qh:76
+msgid "Weapons dump command only works with sv_cmd."
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/arc.qh:18
+msgid "Arc"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/blaster.qh:18
+msgid "Blaster"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/crylink.qh:18
+msgid "Crylink"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/devastator.qh:18
+msgid "Devastator"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/electro.qh:18
+msgid "Electro"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/fireball.qh:18
+msgid "Fireball"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/hagar.qh:18
+msgid "Hagar"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/hlac.qh:18
+msgid "Heavy Laser Assault Cannon"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/hook.qh:18
+msgid "Grappling Hook"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/machinegun.qh:18
+msgid "MachineGun"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/minelayer.qh:18
+msgid "Mine Layer"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/mortar.qh:18
+msgid "Mortar"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/porto.qh:18
+msgid "Port-O-Launch"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/rifle.qh:19
+msgid "Rifle"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/seeker.qh:18
+msgid "T.A.G. Seeker"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/shockwave.qh:18
+msgid "Shockwave"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/shotgun.qh:18
+msgid "Shotgun"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/tuba.qh:18
+#, no-c-format
+msgid "@!#%'n Tuba"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/vaporizer.qh:19
+msgid "Vaporizer"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/vortex.qh:19
+msgid "Vortex"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:9
+#, c-format
+msgid "CI_DEC^%s years"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:12
+#, c-format
+msgid "CI_ZER^%d years"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:13
+#, c-format
+msgid "CI_FIR^%d year"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:14
+#, c-format
+msgid "CI_SEC^%d years"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:15
+#, c-format
+msgid "CI_THI^%d years"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:16
+#, c-format
+msgid "CI_MUL^%d years"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:18
+#, c-format
+msgid "CI_DEC^%s weeks"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:21
+#, c-format
+msgid "CI_ZER^%d weeks"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:22
+#, c-format
+msgid "CI_FIR^%d week"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:23
+#, c-format
+msgid "CI_SEC^%d weeks"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:24
+#, c-format
+msgid "CI_THI^%d weeks"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:25
+#, c-format
+msgid "CI_MUL^%d weeks"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:27
+#, c-format
+msgid "CI_DEC^%s days"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:30
+#, c-format
+msgid "CI_ZER^%d days"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:31
+#, c-format
+msgid "CI_FIR^%d day"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:32
+#, c-format
+msgid "CI_SEC^%d days"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:33
+#, c-format
+msgid "CI_THI^%d days"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:34
+#, c-format
+msgid "CI_MUL^%d days"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:36
+#, c-format
+msgid "CI_DEC^%s hours"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:39
+#, c-format
+msgid "CI_ZER^%d hours"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:40
+#, c-format
+msgid "CI_FIR^%d hour"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:41
+#, c-format
+msgid "CI_SEC^%d hours"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:42
+#, c-format
+msgid "CI_THI^%d hours"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:43
+#, c-format
+msgid "CI_MUL^%d hours"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:46
+#, c-format
+msgid "CI_DEC^%s minutes"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:49
+#, c-format
+msgid "CI_ZER^%d minutes"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:50
+#, c-format
+msgid "CI_FIR^%d minute"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:51
+#, c-format
+msgid "CI_SEC^%d minutes"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:52
+#, c-format
+msgid "CI_THI^%d minutes"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:53
+#, c-format
+msgid "CI_MUL^%d minutes"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:55
+#, c-format
+msgid "CI_DEC^%s seconds"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:58
+#, c-format
+msgid "CI_ZER^%d seconds"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:59
+#, c-format
+msgid "CI_FIR^%d second"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:60
+#, c-format
+msgid "CI_SEC^%d seconds"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:61
+#, c-format
+msgid "CI_THI^%d seconds"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:62
+#, c-format
+msgid "CI_MUL^%d seconds"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:79
+#, c-format
+msgid "%dst"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:80
+#, c-format
+msgid "%dnd"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:81
+#, c-format
+msgid "%drd"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:85
+#, c-format
+msgid "%dth"
+msgstr ""
+
+#: qcsrc/lib/oo.qh:324
+msgid "No description"
+msgstr ""
+
+#: qcsrc/lib/spawnfunc.qh:248
+#, c-format
+msgid ""
+"Entity field %s.%s (%s) is not whitelisted. If you believe this is an error, "
+"please file an issue."
+msgstr ""
+
+#: qcsrc/lib/string.qh:81
+#, c-format
+msgid "%d days, %02d:%02d:%02d"
+msgstr ""
+
+#: qcsrc/lib/string.qh:82
+#, c-format
+msgid "%02d:%02d:%02d"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:48
+msgid "Usage: menu_cmd command..., where possible commands are:"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:49
+msgid " sync - reloads all cvars on the current menu page"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:50
+msgid " directmenu ITEM - select a menu item as main item"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:51
+msgid " dumptree - dump the state of the menu as a tree to the console"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:81
+msgid "Available options:"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:130
+msgid "Invalid command. For a list of supported commands, try menu_cmd help."
+msgstr ""
+
+#: qcsrc/menu/item/listbox.qc:413
+#, c-format
+msgid "Item %d"
+msgstr ""
+
+#: qcsrc/menu/item/textslider.qc:11 qcsrc/menu/item/textslider.qc:12
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:37
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:68
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:115
+msgid "Custom"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:4
+msgid "Core Team"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:15
+msgid "Extended Team"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:46
+msgid "Website"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:51
+msgid "Stats"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:55
+msgid "Art"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:63
+msgid "Animation"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:67
+msgid "Level Design"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:90
+msgid "Music / Sound FX"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:106
+msgid "Game Code"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:114
+msgid "Marketing / PR"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:120
+msgid "Legal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:125
+msgid "Game Engine"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:129
+msgid "Engine Additions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:135
+msgid "Compiler"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:141
+msgid "Other Active Contributors"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:148
+msgid "Translators"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:150
+msgid "Asturian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:155
+msgid "Belarusian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:158
+msgid "Bulgarian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:165
+msgid "Chinese (China)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:171
+msgid "Chinese (Taiwan)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:176
+msgid "Cornish"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:179
+msgid "Czech"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:184
+msgid "Dutch"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:191
+msgid "English (Australia)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:196
+msgid "Finnish"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:201
+msgid "French"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:209
+msgid "German"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:220
+msgid "Greek"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:226
+msgid "Hungarian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:230
+msgid "Irish"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:233
+msgid "Italian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:239
+msgid "Kazakh"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:242
+msgid "Korean"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:246
+msgid "Polish"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:254
+msgid "Portuguese"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:260
+msgid "Romanian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:267
+msgid "Russian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:278
+msgid "Scottish Gaelic"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:281
+msgid "Serbian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:287
+msgid "Spanish"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:298
+msgid "Swedish"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:302
+msgid "Ukrainian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:309
+msgid "Past Contributors"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.qc:73
+msgid "forced to be saved to config.cfg"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.qc:79 qcsrc/menu/xonotic/cvarlist.qc:89
+msgid "will not be saved"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.qc:84
+msgid "will be saved to config.cfg"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.qc:93
+msgid "private"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.qc:95
+msgid "engine setting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.qc:97
+msgid "read only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_credits.qc:13
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:38
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:303
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:85
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:75
+#: qcsrc/menu/xonotic/dialog_singleplayer_winner.qc:14
+msgid "OK"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_credits.qh:7
+msgid "Credits"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_credits.qh:8
+msgid "The Xonotic credits"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_disconnect.qc:16
+msgid "Are you sure to disconnect from server?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_disconnect.qc:19
+msgid "I would disconnect from server..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_disconnect.qc:22
+msgid "I would play more!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_disconnect.qh:6
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qh:6
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qh:6
+msgid "Disconnect"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_disconnect.qh:7
+msgid "Disconnect from the server you are connected to"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:39
+msgid ""
+"Welcome to Xonotic, please select your language preference and enter your "
+"player name to get started. You can change these options later through the "
+"menu system."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:45
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:28
+msgid "Name:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:62
+msgid "Name under which you will appear in the game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:69
+msgid "Text language:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:78
+msgid "Allow player statistics to use your nickname at stats.xonotic.org?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:84
+msgid "Undecided"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:88
+msgid "Save settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qh:6
+msgid "Welcome"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:18
+msgid "Ammunition display:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:21
+msgid "Show only current ammo type"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:46
+msgid "Noncurrent alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:50
+msgid "Noncurrent scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "Align icon:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qc:21
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:57
+msgid "Left"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qc:23
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:59
+msgid "Right"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qh:6
+msgid "Ammo Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:19
+msgid "Message duration:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:23
+msgid "Fade time:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:27
+msgid "Flip messages order"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qc:18
+msgid "Text alignment:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qc:22
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:70
+msgid "Center"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:37
+msgid "Font scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qh:6
+msgid "Centerprint Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:17
+msgid "Chat entries:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:20
+msgid "Chat size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:24
+msgid "Chat lifetime:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:28
+msgid "Chat beep sound"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qh:6
+msgid "Chat Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.qc:16
+msgid "Engine info:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.qc:19
+msgid "Use an averaging algorithm for fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.qh:6
+msgid "Engine Info Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:17
+msgid "Combine health and armor"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:19
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:17
+msgid "Enable status bar"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:19
+msgid "Status bar alignment:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:37
+msgid "Inward"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:38
+msgid "Outward"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:32
+msgid "Icon alignment:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:42
+msgid "Flip health and armor positions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qh:6
+msgid "Health/Armor Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.qc:16
+msgid "Info messages:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.qc:19
+msgid "Flip align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.qh:6
+msgid "Info Messages Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:16
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:15
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:14
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:15
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:50
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:62
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:77
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:116
+#: qcsrc/menu/xonotic/util.qc:770 qcsrc/menu/xonotic/util.qc:786
+#: qcsrc/menu/xonotic/util.qc:803
+msgid "Disable"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:17
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:15
+msgid "Enable spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:18
+msgid "Enable even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:29
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:37
+msgid "Hide big armor and health"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Dynamic size"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qh:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qh:6
+msgid "Mod Icons Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:17
+msgid "Notifications:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:20
+msgid "Also print notifications to the console"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:23
+msgid "Flip notify order"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:26
+msgid "Entry lifetime:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:30
+msgid "Entry fadetime:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qh:6
+msgid "Notification Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:16
+#: qcsrc/menu/xonotic/util.qc:758
+msgid "Enable"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:17
+msgid "Enable even observing"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:18
+msgid "Enable only in Race/CTS"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:24
+msgid "Status bar"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:26
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:67
+msgid "Left align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:27
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:73
+msgid "Right align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:28
+msgid "Inward align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:29
+msgid "Outward align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:33
+msgid "Flip speed/acceleration positions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:37
+msgid "Speed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:38
+msgid "Include vertical speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:49
+msgid "Speed unit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:51
+msgid "qu/s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:52
+msgid "m/s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:53
+msgid "km/h"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:54
+msgid "mph"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:55
+msgid "knots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:57
+msgid "Show"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:60
+msgid "Top speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:66
+msgid "Acceleration:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:67
+msgid "Include vertical acceleration"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qh:6
+msgid "Physics Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qh:6
+msgid "Powerups Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:16
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:17
+msgid "Always enable"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:23
+msgid "Forced aspect:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qh:6
+msgid "Pressed Keys Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qh:6
+msgid "Quick Menu Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_racetimer.qh:6
+msgid "Race Timer Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:16
+msgid "Enable in team games"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:23
+msgid "Radar:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:26
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:107
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:54
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:87
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:103
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:45
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:70
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:124
+#: qcsrc/menu/xonotic/util.qc:792
+msgid "Alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:30
+msgid "Rotation:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:32
+msgid "Forward"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:33
+msgid "West"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:34
+msgid "South"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:35
+msgid "East"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:36
+msgid "North"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:40
+msgid "Scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:44
+msgid "Zoom mode:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:46
+msgid "Zoomed in"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:47
+msgid "Zoomed out"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:48
+msgid "Always zoomed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:49
+msgid "Never zoomed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qh:6
+msgid "Radar Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:17
+msgid "Score:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:20
+msgid "Rankings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:21
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:58
+msgid "Off"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:22
+msgid "And me"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:23
+msgid "Pure"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.qh:6
+msgid "Score Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.qc:16
+msgid "Timer:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.qc:19
+msgid "Show elapsed time"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.qh:6
+msgid "Timer Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.qc:17
+msgid "Alpha after voting:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.qh:6
+msgid "Vote Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:22
+msgid "Fade out after:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:24
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:167
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:145
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:55
+msgid "Never"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:26
+#, c-format
+msgid "%ds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:30
+msgid "Fade effect:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:33
+msgid "EF^None"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:34
+msgid "Alpha"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:35
+msgid "Slide"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:36
+msgid "EF^Both"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:40
+msgid "Weapon icons:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:43
+msgid "Show only owned weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:54
+msgid "Show weapon ID as:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:55
+msgid "SHOWAS^None"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:56
+msgid "Number"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:57
+msgid "Bind"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:60
+msgid "Weapon ID scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:66
+msgid "Show Accuracy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:67
+msgid "Show Ammo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:70
+msgid "Ammo bar alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:76
+msgid "Ammo bar color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qh:6
+msgid "Weapons Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:19
+msgid "HUD skins"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:22
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:173
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:32
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:42
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:25
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:33
+msgid "Filter:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:30
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:54
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:49
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:43
+msgid "Refresh"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:33
+#: qcsrc/menu/xonotic/dialog_settings_user.qc:28
+msgid "Set skin"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:37
+msgid "Save current skin"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:46
+msgid "Panel background defaults:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:48
+#: qcsrc/menu/xonotic/util.qc:767
+msgid "Background:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:60
+#: qcsrc/menu/xonotic/util.qc:783
+msgid "Border size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:75
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:114
+msgid "Team color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:83
+#: qcsrc/menu/xonotic/util.qc:809
+msgid "Test team color in configure mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:86
+#: qcsrc/menu/xonotic/util.qc:812
+msgid "Padding:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:93
+msgid "HUD Dock:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:95
+msgid "DOCK^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:96
+msgid "DOCK^Small"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:97
+msgid "DOCK^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:98
+msgid "DOCK^Large"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:121
+msgid "Grid settings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:124
+msgid "Snap panels to grid"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:127
+msgid "Grid size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:129
+msgid "X:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:136
+msgid "Y:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:145
+msgid "Exit setup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qh:6
+msgid "Panel HUD Setup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:13
+msgid "Monster:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:22
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:20
+msgid "Spawn"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
+msgid "Remove"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
+msgid "Move target:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
+msgid "Follow"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
+msgid "Wander"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:28
+msgid "Spawnpoint"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:29
+msgid "No moving"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
+msgid "Colors:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:33
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:39
+msgid "Set skin:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qh:6
+msgid "Monster Tools"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qc:14
+msgid "Servers"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qc:15
+msgid "Find servers to play on"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qc:17
+msgid "Host your own game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qc:18
+msgid "Media"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qc:19
+msgid "Profile"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qh:6
+msgid "Multiplayer"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qh:7
+msgid ""
+"Play online, against your friends in LAN, view demos or change player "
+"settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:38
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:111
+#: qcsrc/menu/xonotic/skinlist.qc:88 qcsrc/menu/xonotic/util.qc:769
+#: qcsrc/menu/xonotic/util.qc:785 qcsrc/menu/xonotic/util.qc:794
+#: qcsrc/menu/xonotic/util.qc:802 qcsrc/menu/xonotic/util.qc:814
+msgid "Default"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:40
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:60
+msgid "Unlimited"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:74
+msgid "Gametype"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:79
+msgid "Time limit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:81
+msgid "Timelimit in minutes that when hit, will end the match"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:82
+#, c-format
+msgid "%d minutes"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:83
+msgid "TIMLIM^Default"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:84
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:159
+msgid "1 minute"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:101
+msgid "TIMLIM^Infinite"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:109
+msgid "Teams:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:112
+msgid "2 teams"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:113
+msgid "3 teams"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:114
+msgid "4 teams"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:117
+msgid "Player slots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:119
+msgid ""
+"The maximum amount of players or bots that can be connected to your server "
+"at once"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:121
+msgid "Number of bots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:123
+msgid "Amount of bots on your server"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:125
+msgid "Bot skill:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:128
+msgid "Specify how experienced the bots will be"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:129
+msgid "Botlike"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:130
+msgid "Beginner"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:131
+msgid "You will win"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:132
+msgid "You can win"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:133
+msgid "You might win"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:134
+msgid "Advanced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:135
+msgid "Expert"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:136
+msgid "Pro"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:137
+msgid "Assassin"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:138
+msgid "Unhuman"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:139
+msgid "Godlike"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:155
+msgid "Mutators..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:156
+msgid "Mutators and weapon arenas"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:165
+msgid "Maplist"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:175
+msgid ""
+"Click here or Ctrl-F to provide a keyword to narrow down the map list. Ctrl-"
+"Delete to clear; Enter when done."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:184
+msgid "Add shown"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:185
+msgid "Add the maps shown in the list to your selection"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:188
+msgid "Remove shown"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:189
+msgid "Remove the maps shown in the list from your selection"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:194
+msgid "Add all"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:195
+msgid "Add every available map to your selection"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:198
+msgid "Remove all"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:199
+msgid "Remove all the maps from your selection"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:206
+msgid "Start Multiplayer!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:50
+msgid "Title:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:56
+msgid "Author:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:62
+msgid "Game types:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:85
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:257
+msgid "Close"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:88
+msgid "MAP^Play"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qh:7
+msgid "Map Information"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:28
+msgid "All Weapons Arena"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:30
+msgid "Most Weapons Arena"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:46
+#, c-format
+msgid "%s Arena"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:57
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:163
+msgid "Dodging"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:59
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:283
+msgid "InstaGib"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:61
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:224
+msgid "New Toys"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:63
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:288
+msgid "NIX"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:65
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:229
+msgid "Rocket Flying"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:67
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:219
+msgid "Invincible Projectiles"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:71
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:298
+msgid "No start weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:73
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:202
+msgid "Low gravity"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:75
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:171
+msgid "Cloaked"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:77
+msgid "Hook"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:79
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:180
+msgid "Midair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:81
+msgid "Melee only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:85
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:234
+msgid "Piñata"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:87
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:239
+msgid "Weapons stay"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:89
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:191
+msgid "Blood loss"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:93
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:175
+msgid "Buffs"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:95
+msgid "Overkill"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:97
+msgid "No powerups"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:99
+msgid "Powerups"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:101
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:167
+msgid "Touch explode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:103
+msgid "Wall jumping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:105
+msgid "MUT^None"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:160
+msgid "Gameplay mutators:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:164
+msgid ""
+"Enable dodging (quick acceleration in a given direction). Double-tap a "
+"directional key to dodge"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:168
+msgid "An explosion occurs when two players collide"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:172
+msgid "All players are almost invisible"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:176
+msgid ""
+"Enable buff pickups (random bonuses like Medic, Invisible, etc.) on the maps "
+"that support it"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:181
+msgid "Only possible to inflict damage on your enemy while they're airborne"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
+msgid "Damage done to your enemy gets added to your own health"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:190
+msgid ""
+"Amount of health below which players start bleeding out (health rots and "
+"they can't jump)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:199
+msgid "Make things fall to the ground slower (percentage of normal gravity)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:208
+msgid "Weapon & item mutators:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:211
+msgid "Grappling hook"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:212
+msgid "Players spawn with the grappling hook. Press the 'hook' key to use it"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:216
+msgid ""
+"Players spawn with the jetpack. Double-tap 'jump' or press the 'jetpack' key "
+"to use it"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:220
+msgid ""
+"Projectiles can't be destroyed. However, you can still explode Electro orbs "
+"with the Electro primary fire"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:225
+msgid ""
+"Some weapon spawns will be randomly replaced with new weapons: Heavy Laser "
+"Assault Cannon, Mine Layer, Rifle, T.A.G. Seeker"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:230
+msgid ""
+"Devastator rockets can be detonated instantly (otherwise, there's a short "
+"delay). This allows players to fire and detonate a Devastator rocket while "
+"in the air for a strong mid-air boost even while moving fast"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:235
+msgid "Players will drop all weapons they possessed when they are killed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:240
+msgid "Weapons stay after they are picked up"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:245
+msgid "Regular (no arena)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:246
+msgid ""
+"Players will be given a set of weapons at spawn as well as unlimited ammo, "
+"without weapon pickups"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:248
+msgid "Weapon arenas:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:251
+msgid "Custom weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:273
+msgid "Most weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:277
+msgid "All weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:280
+msgid "Special arenas:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:284
+msgid ""
+"Players will be given only one weapon, which can instantly kill the opponent "
+"with a single shot. If the player runs out of ammo, he will have 10 seconds "
+"to find some or if he fails to do so, face death. The secondary fire mode "
+"does not inflict any damage but is good for doing trickjumps."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:289
+msgid ""
+"No items Xonotic - instead of pickup items, everyone plays with the same "
+"weapon. After some time, a countdown will start, after which everyone will "
+"switch to another weapon."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:293
+msgid "with blaster"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:294
+msgid "Always carry the blaster as an additional weapon in Nix"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qh:9
+msgid "Mutators"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:39
+msgid "SRVS^Categories"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:42
+msgid "SRVS^Empty"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:43
+msgid "Show empty servers"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:47
+msgid "SRVS^Full"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:48
+msgid "Show full servers that have no slots available"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:52
+msgid "Pause"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:53
+msgid ""
+"Pause updating the server list to prevent servers from \"jumping around\""
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:54
+msgid "Reload the server list"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:68
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:184
+msgid "Address:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:79
+msgid "Info..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:80
+msgid "Show more information about the currently highlighted server"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:92
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:264
+msgid "Join!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:114
+#: qcsrc/menu/xonotic/serverlist.qc:1020
+msgid "MOD^Default"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:121
+#, c-format
+msgid "%d modified"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:121
+msgid "Official"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:129
+msgid "N/A (auth library missing, can't connect)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:131
+msgid "N/A (auth library missing)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:137
+msgid "Not supported (can't connect)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:139
+msgid "Not supported (won't encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:143
+msgid "Supported (will encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:145
+msgid "Supported (won't encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:149
+msgid "Requested (will encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:151
+msgid "Requested (won't encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:155
+msgid "Required (can't connect)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:157
+msgid "Required (will encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:161
+msgid "Use the `crypto_aeslevel` cvar to change your preferences"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:178
+msgid "Hostname:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:192
+msgid "Gametype:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:197
+msgid "Map:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:202
+msgid "Mod:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:207
+msgid "Version:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:212
+msgid "Settings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:219
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:251
+msgid "Players:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:224
+msgid "Bots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:229
+msgid "Free slots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:235
+msgid "Encryption:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:240
+msgid "ID:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:245
+msgid "Key:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qh:7
+msgid "Server Information"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media.qc:25
+msgid "Demos"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media.qc:26
+msgid "Screenshots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media.qc:27
+msgid "Music Player"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:48
+msgid "Auto record demos"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:57
+msgid "Timedemo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:58
+msgid "Benchmark how fast your computer can run the highlighted demo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:62
+msgid "DEMO^Play"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:13
+msgid "Playing a demo will disconnect you from the current match."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:15
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qc:15
+msgid "Do you really wish to disconnect now?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qc:13
+msgid "Timing a demo will disconnect you from the current match."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:37
+msgid "MUSICPL^Add"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:40
+msgid "MUSICPL^Add all"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:44
+msgid "Set as menu track"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:48
+msgid "Reset default menu track"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:54
+msgid "Playlist:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:55
+msgid "Random order"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:60
+msgid "MUSICPL^Stop"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:63
+msgid "MUSICPL^Play"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:66
+msgid "MUSICPL^Pause"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:69
+msgid "MUSICPL^Prev"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:72
+msgid "MUSICPL^Next"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:76
+msgid "MUSICPL^Remove"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:79
+msgid "MUSICPL^Remove all"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:41
+msgid "Auto screenshot scoreboard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:62
+msgid "Open in the viewer"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:137
+msgid "Reset"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:142
+msgid "Previous"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:145
+msgid "Next"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:150
+msgid "Slide show"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:38
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:21
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:37
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:26
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:21
+msgid "Apply immediately"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:50
+msgid "Name"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:79
+msgid "Model"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:98
+msgid "Glowing color"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:108
+msgid "Detail color"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:123
+msgid "Statistics"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:127
+msgid "Allow player statistics to track your client"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:131
+msgid "Allow player statistics to use your nickname"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:136
+msgid "Allow player statistics to rank you in leaderboards"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:152
+msgid "Country"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:156
+msgid "Select language..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:172
+msgid "Gender:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:179
+msgid "Gender"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_quit.qc:11
+msgid "Are you sure you want to quit?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_quit.qc:15
+msgid "Back to work..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_quit.qc:17
+msgid "I got some more fragging to do!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_quit.qh:7
+msgid "Quit the game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:15
+msgid "Model:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:21
+msgid "Remove *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:23
+msgid "Copy *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:24
+msgid "Paste"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:26
+msgid "Bone:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:31
+msgid "Set * as child"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:32
+msgid "Attach to *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:34
+msgid "Detach from *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:37
+msgid "Visual object properties for *:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:41
+msgid "Set alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:44
+msgid "Set color main:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:46
+msgid "Set color glow:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:50
+msgid "Set frame:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:54
+msgid "Physical object properties for *:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:56
+msgid "Set material:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:62
+msgid "Set solidity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:63
+msgid "Non-solid"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:64
+msgid "Solid"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:65
+msgid "Set physics:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:66
+msgid "Static"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:67
+msgid "Movable"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:68
+msgid "Physical"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:70
+msgid "Set scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:72
+msgid "Set force:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:76
+msgid "Claim *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:78
+msgid "* object info"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:79
+msgid "* mesh info"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:80
+msgid "* attachment info"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:81
+msgid "Show help"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:82
+msgid "* is the object you are facing"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qh:6
+msgid "Sandbox Tools"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:18
+msgid "Video"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:19
+msgid "Effects"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:20
+msgid "Audio"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:22
+msgid "Game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:23
+msgid "Input"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:24
+msgid "User"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:25
+#: qcsrc/menu/xonotic/keybinder.qc:119
+msgid "Misc"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qh:6
+msgid "Settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qh:7
+msgid "Change the game settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:29
+msgid "Master:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:35
+msgid "Music:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:43
+msgid "VOL^Ambient:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:50
+msgid "Info:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:57
+msgid "Items:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:64
+msgid "Pain:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:71
+msgid "Player:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:78
+msgid "Shots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:85
+msgid "Voice:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:93
+msgid "Weapons:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:99
+msgid "New style sound attenuation"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:102
+msgid "Mute sounds when not active"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:105
+msgid "Frequency:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:107
+msgid "Sound output frequency"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:108
+msgid "8 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:109
+msgid "11.025 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:110
+msgid "16 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:111
+msgid "22.05 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:112
+msgid "24 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:113
+msgid "32 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:114
+msgid "44.1 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:115
+msgid "48 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:119
+msgid "Channels:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:121
+msgid "Number of channels for the sound output"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:122
+msgid "Mono"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:123
+msgid "Stereo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:124
+msgid "2.1"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:125
+msgid "4"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:126
+msgid "5"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:127
+msgid "5.1"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:128
+msgid "6.1"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:129
+msgid "7.1"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:134
+msgid "Swap stereo output channels"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:135
+msgid "Swap left/right channels"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:138
+msgid "Headphone friendly mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:139
+msgid ""
+"Enable spatialization (blend the right and left channel slightly to decrease "
+"stereo separation a bit for headphones)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:143
+msgid "Hit indication sound"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:144
+msgid "Play a hit indicator sound when your shot hits an enemy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:147
+msgid "Chat message sound"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:149
+msgid "Menu sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:150
+msgid "Play sounds when clicking menu items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:151
+msgid "Focus sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:152
+msgid "Play sounds when hovering over menu items too"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:156
+msgid "Time announcer:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:158
+msgid "WRN^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:160
+msgid "5 minutes"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:161
+msgid "WRN^Both"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:164
+msgid "Automatic taunts:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:166
+msgid "Automatically taunt enemies after fragging them"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:168
+msgid "Sometimes"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:169
+msgid "Often"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:170
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:147
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:57
+msgid "Always"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:176
+msgid "Debug info about sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_bindings_reset.qc:11
+msgid "Are you sure you want to reset all key bindings?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_bindings_reset.qh:6
+msgid "Reset key bindings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:41
+msgid "Quality preset:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:45
+msgid "PRE^OMG!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:48
+msgid "PRE^Low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:50
+msgid "PRE^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:52
+msgid "PRE^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:54
+msgid "PRE^High"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:56
+msgid "PRE^Ultra"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:60
+msgid "PRE^Ultimate"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:65
+msgid "Geometry detail:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:67
+msgid "Change the smoothness of the curves on the map"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:68
+msgid "DET^Lowest"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:69
+msgid "DET^Low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:70
+msgid "DET^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:71
+msgid "DET^Good"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:72
+msgid "DET^Best"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:73
+msgid "DET^Insane"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:77
+msgid "Player detail:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:79
+msgid "PDET^Low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:80
+msgid "PDET^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:81
+msgid "PDET^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:82
+msgid "PDET^Good"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:83
+msgid "PDET^Best"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:87
+msgid "Texture resolution:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:91
+msgid "RES^Leet"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:92
+msgid "RES^Lowest"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:93
+msgid "RES^Very low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:94
+msgid "RES^Low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:95
+msgid "RES^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:96
+msgid "RES^Good"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:97
+msgid "RES^Best"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:110
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:115
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:120
+msgid "Avoid lossy texture compression"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:129
+msgid "Disable sky for performance and visibility"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:129
+msgid "Show sky"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:132
+msgid "Show surfaces"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:133
+msgid ""
+"Disable textures completely for very slow hardware. This gives a huge "
+"performance boost, but looks very ugly."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:136
+msgid "Use lightmaps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:137
+msgid ""
+"Use high resolution lightmaps, which will look pretty but use up some extra "
+"video memory"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:139
+msgid "Deluxe mapping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:140
+msgid "Use per-pixel lighting effects"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:142
+msgid "Gloss"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:143
+msgid "Enable the use of glossmaps on textures supporting it"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:146
+msgid "Offset mapping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:147
+msgid ""
+"Offset mapping effect that will make textures with bumpmaps appear like they "
+"\"pop out\" of the flat 2D surface"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:149
+msgid "Relief mapping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:150
+msgid ""
+"Higher quality offset mapping, which also has a huge impact on performance"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:153
+msgid "Reflections:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:154
+msgid ""
+"Reflection and refraction quality, has a huge impact on performance on maps "
+"with reflecting surfaces"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:157
+msgid "Resolution of reflections/refractions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:158
+msgid "Blurred"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:159
+msgid "REFL^Good"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:160
+msgid "Sharp"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:164
+msgid "Decals"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:165
+msgid "Enable decals (bullet holes and blood)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:166
+msgid "Decals on models"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:170
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:254
+msgid "Distance:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:173
+msgid "Decals further away than this will not be drawn"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:177
+msgid "Time:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:180
+msgid "Time in seconds before decals fade away"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:184
+msgid "Damage effects:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:186
+msgid "DMGFX^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:187
+msgid "Skeletal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:188
+msgid "DMGFX^All"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:192
+msgid "No dynamic lighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:193
+msgid "Enable corona flares around certain lights"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:195
+msgid "Fake corona lighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:196
+msgid ""
+"Enable faster but uglier dynamic lights by rendering bright coronas instead "
+"of real dynamic lights"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:199
+msgid "Realtime dynamic lighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:200
+msgid "Enable rendering of dynamic lights such as explosions and rocket lights"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:202
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:208
+msgid "Shadows"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:203
+msgid "Enable rendering of shadows from dynamic lights"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:206
+msgid "Realtime world lighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:207
+msgid ""
+"Enable rendering of full realtime world lighting on maps that support it. "
+"Note that this might have a big impact on performance."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:209
+msgid "Enable rendering of shadows from realtime world lights"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:213
+msgid "Use normal maps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:214
+msgid "Enable use of directional shading on textures"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:216
+msgid "Soft shadows"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:220
+msgid "Fade corona according to visibility"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:221
+msgid "Fade coronas according to visibility"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:225
+msgid "Bloom"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:226
+msgid ""
+"Enable bloom effect, which brightens the neighboring pixels of very bright "
+"pixels. Has a big impact on performance."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:227
+msgid "Extra postprocessing effects"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:228
+msgid ""
+"Enables special postprocessing effects for when damaged or under water or "
+"using a powerup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:233
+msgid "Motion blur strength - 0.4 recommended"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:234
+msgid "Motion blur:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:240
+msgid "Particles"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:241
+msgid "Spawnpoint effects"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:242
+msgid "Particles effects at all spawn points and whenever a player spawns"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:247
+msgid "Quality:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:250
+#: qcsrc/menu/xonotic/slider_particles.qc:13
+msgid ""
+"Multiplier for amount of particles. Less means less particles, which in turn "
+"gives for better performance"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:257
+msgid "Particles further away than this will not be drawn"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:31
+msgid "No crosshair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:33
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:62
+msgid "Per weapon"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:34
+msgid ""
+"Set a different crosshair for each weapon, good if you play without weapon "
+"models"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:48
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:81
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:97
+msgid "Size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:64
+msgid "By health"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:76
+msgid "Use rings to indicate weapon status"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:93
+msgid "Enable center crosshair dot"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:111
+msgid "Use normal crosshair color"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:122
+msgid "Smooth effects of crosshairs"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:125
+msgid "Hit testing:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:128
+msgid ""
+"None: do not do hit tests for the crosshair; TrueAim: blur the crosshair "
+"when there's an obstacle between your gun and the target; Enemies: also "
+"enlarge the crosshair when you would hit an enemy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:129
+msgid "HTTST^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:130
+msgid "HTTST^TrueAim"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:131
+msgid "HTTST^Enemies"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:136
+msgid "Blur crosshair if the shot is obstructed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:140
+msgid "Enlarge crosshair if targeting an enemy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:143
+msgid "Animate crosshair when hitting an enemy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:146
+msgid "Animate crosshair when picking up an item"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qh:7
+msgid "Crosshair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:43
+msgid "Scoreboard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:48
+msgid "Fading speed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:51
+msgid "Enable rows / columns highlighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:53
+msgid "Show accuracy underneath scoreboard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:55
+msgid "Show team sizes:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:56
+msgid ""
+"Team size position: Off=do not show; Left=on the left side of the scoreboard "
+"and move team scores to the right; Right=on the right of the scoreboard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:64
+msgid "Waypoints"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:66
+msgid "Display waypoint markers for objectives on the map"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:67
+msgid "Show various gametype specific waypoints"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:73
+msgid "Control transparency of the waypoints"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:77
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:130
+msgid "Fontsize:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:83
+msgid "Edge offset:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:91
+msgid "Fade when near the crosshair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:95
+msgid "Display names instead of icons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:100
+msgid "Damage"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:102
+msgid "Overlay:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:105
+msgid "Factor:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:110
+msgid "Fade rate:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:118
+msgid "Player Names"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:120
+msgid "Show names above players"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:136
+msgid "Max distance:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:142
+msgid "Decolorize:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:146
+#: qcsrc/menu/xonotic/keybinder.qc:113
+msgid "Teamplay"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:154
+msgid "Only when near crosshair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:158
+msgid "Display health and armor"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:163
+msgid "Damage overlay:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:166
+msgid "Dynamic HUD"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:167
+msgid "HUD moves around following player's movement"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:169
+msgid "Shake the HUD when hurt"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:173
+#: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qh:6
+msgid "Enter HUD editor"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qh:7
+msgid "HUD"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qc:21
+msgid "In order for the HUD editor to show, you must first be in game."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qc:23
+msgid "Do you wish to start a local game to set up the HUD?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:24
+msgid "Frag Information"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:26
+msgid "Display information about killing sprees"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:29
+msgid "Only display sprees if they are achievements"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:34
+msgid "Show spree information in centerprints"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:38
+msgid "Show spree information in death messages"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:43
+msgid "Sprees in info messages:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:46
+msgid "SPREES^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:47
+msgid "Target"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:48
+msgid "Attacker"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:49
+msgid "SPREES^Both"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:55
+msgid "Print on a seperate line"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:58
+msgid "Add extra frag information to centerprint when available"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:62
+msgid "Add frag location to death messages when available"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:65
+msgid "Gamemode Settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:67
+msgid "Display capture times in Capture The Flag"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:71
+msgid "Display name of flag stealer in Capture The Flag"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:76
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:92
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:126
+msgid "Other"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:78
+msgid "Display console messages in the top left corner"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:80
+msgid "Display all info messages in the chatbox"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:82
+msgid "Display player statuses in the chatbox"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:86
+msgid "Powerup notifications"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:89
+msgid "Weapon centerprint notifications"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:92
+msgid "Weapon info message notifications"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:96
+msgid "Announcers"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:98
+msgid "Respawn countdown sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:101
+msgid "Killstreak sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:104
+msgid "Achievement sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qh:7
+msgid "Messages"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:30
+msgid "Items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:32
+msgid "Use simple 2D images instead of item models"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:34
+msgid "Unavailable alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:37
+msgid "Unavailable color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:39
+msgid "GHOITEMS^Black"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:40
+msgid "GHOITEMS^Dark"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:41
+msgid "GHOITEMS^Tinted"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:42
+msgid "GHOITEMS^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:43
+msgid "GHOITEMS^Blue"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:49
+#: qcsrc/menu/xonotic/serverlist.qc:737
+msgid "Players"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:51
+msgid "Force player models to mine"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:53
+msgid "Force player colors to mine"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
+msgid "In non teamplay modes only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:60
+msgid "Body fading:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:63
+msgid "Gibs:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:65
+msgid "GIBS^None"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:66
+msgid "GIBS^Few"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:67
+msgid "GIBS^Many"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:68
+msgid "GIBS^Lots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qh:7
+msgid "Models"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qh:8
+msgid "Customize how players and items are displayed in game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:26
+msgid "1st person perspective"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:29
+msgid "Slide to third person upon death"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:33
+msgid "Smooth the view when landing from a jump"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:37
+msgid "Smooth the view while crouching"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:41
+msgid "View waving while idle"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:45
+msgid "View bobbing while walking around"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:50
+msgid "3rd person perspective"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:53
+msgid "Back distance"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:59
+msgid "Up distance"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:65
+msgid "Allow passing through walls while spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:69
+msgid "Field of view:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:71
+msgid "Field of vision in degrees"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:75
+msgid "ZOOM^Zoom factor:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:77
+msgid "How big the zoom factor is when the zoom button is pressed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:80
+msgid "ZOOM^Zoom speed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:82
+msgid "How fast the view will be zoomed, disable to zoom instantly"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:91
+msgid "ZOOM^Instant"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:95
+msgid "ZOOM^Zoom sensitivity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:97
+msgid ""
+"How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no "
+"sensitivity change)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:100
+msgid "Velocity zoom"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:101
+msgid "Forward movement only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:105
+msgid "VZOOM^Factor"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:112
+msgid "Display reticle 2D overlay while zooming"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:115
+msgid "Release zoom when you die or respawn"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:119
+msgid "Release zoom when you switch weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qh:7
+#: qcsrc/menu/xonotic/keybinder.qc:83
+msgid "View"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:33
+msgid "Weapon Priority List (* = mutator weapon)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:39
+msgid "Up"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:43
+msgid "Down"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:49
+msgid "Use priority list for weapon cycling"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:50
+msgid ""
+"Make use of the list above when cycling through weapons with the mouse wheel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:52
+msgid "Cycle through only usable weapon selections"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:56
+msgid "Auto switch weapons on pickup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:57
+msgid ""
+"Automatically switch to newly picked up weapons if they are better than what "
+"you are carrying"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:60
+msgid "Release attack buttons when you switch weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:63
+msgid "Draw 1st person weapon model"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:64
+msgid "Draw the weapon model"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:68
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:71
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:74
+msgid "Position of the weapon model; requires reconnect"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:77
+msgid "Weapon model opacity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:91
+msgid "Gun model swaying"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:96
+msgid "Gun model bobbing"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qh:7
+#: qcsrc/menu/xonotic/keybinder.qc:51
+msgid "Weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:34
+msgid "Key Bindings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:38
+msgid "Change key..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:42
+msgid "Edit..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:48
+msgid "Clear"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:53
+msgid "Reset all"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:58
+msgid "Mouse"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:60
+msgid "Sensitivity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:62
+msgid "Mouse speed multiplier"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:64
+msgid "Smooth aiming"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:65
+msgid "Smoothes the mouse movement, but makes aiming slightly less responsive"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:67
+msgid "Invert aiming"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:68
+msgid "Invert mouse movement on the Y-axis"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:70
+msgid "Use system mouse positioning"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:75
+msgid "Enable built in mouse acceleration"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:79
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:83
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:86
+msgid "Disable system mouse acceleration"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:80
+msgid "Make use of DGA mouse input"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:94
+msgid "Pressing \"enter console\" key also closes it"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:95
+msgid "Allow the console toggling bind to also close the console"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:97
+msgid "Automatically repeat jumping if holding jump"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:100
+msgid "Jetpack on jump:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:102
+msgid "JPJUMP^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:103
+msgid "Air only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:104
+msgid "JPJUMP^All"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:110
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:115
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:120
+msgid "Use joystick input"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:31
+msgid "Command when pressed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:34
+msgid "Command when released:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:40
+msgid "Cancel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qh:7
+msgid "User defined key bind"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:11
+#, c-format
+msgid "%d fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:12
+#, c-format
+msgid "%d KB/s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:13
+#, c-format
+msgid "%d MB/s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:27
+msgid "Network"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:29
+msgid "Client UDP port:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:31
+msgid "Force client to use chosen port unless it is set to 0"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:34
+msgid "Bandwidth:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:36
+msgid "Specify your network speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:37
+msgid "56k"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:38
+msgid "ISDN"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:39
+msgid "Slow ADSL"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:40
+msgid "Fast ADSL"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:41
+msgid "Broadband"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:44
+msgid "Server queries/s:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:48
+msgid "Downloads:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:50
+msgid "Maximum number of concurrent HTTP/FTP downloads"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:52
+msgid "Download speed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:65
+msgid "Local latency:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:69
+msgid "Show netgraph"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:70
+msgid "Show a graph of packet sizes and other information"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:72
+msgid "Client-side movement prediction"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:74
+msgid "Movement error compensation"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:78
+msgid "Use encryption (AES) when available"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:81
+msgid "Framerate"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:83
+msgid "Maximum:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:93
+msgid "MAXFPS^Unlimited"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:96
+msgid "Target:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:98
+msgid "TRGT^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:109
+msgid "Idle limit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:115
+msgid "IDLFPS^Unlimited"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:119
+msgid "Save processing time for other apps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:122
+msgid "Show frames per second"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:123
+msgid "Show your rendered frames per second"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:128
+msgid "Menu tooltips:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:130
+msgid ""
+"Menu tooltips: disabled, standard or advanced (also shows cvar or console "
+"command bound to the menu item)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:131
+msgid "TLTIP^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:132
+msgid "TLTIP^Standard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:133
+msgid "TLTIP^Advanced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:136
+msgid "Show current date and time"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:137
+msgid "Show current date and time of day, useful on screenshots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:140
+msgid "Enable developer mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:144
+msgid "Advanced settings..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:145
+msgid "Advanced settings where you can tweak every single variable of the game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:150
+#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qh:6
+msgid "Factory reset"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:31
+msgid "Cvar filter:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:38
+msgid "Modified cvars only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:45
+msgid "Setting:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:49
+msgid "Type:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:53
+msgid "Value:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:70
+msgid "Description:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qh:7
+msgid "Advanced settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:11
+msgid "Are you sure you want to reset all settings?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:13
+msgid "This will create a backup config in your data directory"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.qc:23
+msgid "Menu Skins"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.qc:62
+msgid "Text Language"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.qc:67
+msgid "Set language"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.qc:72
+msgid "Disable gore effects and harsh language"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.qc:73
+msgid "Replace blood and gibs with content that does not have any gore effects"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:10
+msgid "While connected language changes will be applied only to the menu,"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:12
+msgid "full language changes will take effect starting from the next game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:16
+msgid "Disconnect now"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:17
+msgid "Switch language"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qh:6
+msgid "Warning"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:33
+msgid "Resolution:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:37
+msgid "Font/UI size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:39
+msgid "SZ^Unreadable"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:40
+msgid "SZ^Tiny"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:41
+msgid "SZ^Little"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:42
+msgid "SZ^Small"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:43
+msgid "SZ^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:44
+msgid "SZ^Large"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:45
+msgid "SZ^Huge"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:46
+msgid "SZ^Gigantic"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:47
+msgid "SZ^Colossal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:51
+msgid "Color depth:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:53
+msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:54
+msgid "16bit"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:55
+msgid "32bit"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:59
+msgid "Full screen"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:61
+msgid "Vertical Synchronization"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:62
+msgid ""
+"Enable vertical synchronization to prevent tearing, will cap your fps to the "
+"screen refresh rate"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:67
+msgid "Flip view horizontally"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:68
+msgid "Poor man's left handed mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:71
+msgid "Anisotropy:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:73
+msgid "Anisotropic filtering quality"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:74
+msgid "ANISO^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:75
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:86
+msgid "2x"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:76
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:87
+msgid "4x"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:77
+msgid "8x"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:78
+msgid "16x"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:81
+msgid "Antialiasing:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:84
+msgid ""
+"Enable antialiasing, which smooths the edges of 3D geometry. Note that it "
+"might decrease performance by quite a lot"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:85
+msgid "AA^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:92
+msgid "High-quality frame buffer"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:97
+msgid "Depth first:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:99
+msgid ""
+"Eliminate overdraw by rendering a depth-only version of the scene before the "
+"normal rendering starts"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:100
+msgid "DF^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:101
+msgid "DF^World"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:102
+msgid "DF^All"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:105
+msgid "Vertex Buffer Objects (VBOs)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:108
+msgid "VBO^Off"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:109
+msgid "Vertices, some Tris (compatible)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:110
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:114
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:116
+msgid ""
+"Make use of Vertex Buffer Objects to store static geometry in video memory "
+"for faster rendering"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:113
+msgid "Vertices"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:115
+msgid "Vertices and Triangles"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:119
+msgid "Brightness:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:121
+msgid "Brightness of black"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:123
+msgid "Contrast:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:125
+msgid "Brightness of white"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:127
+msgid "Gamma:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:130
+msgid ""
+"Inverse gamma correction value, a brightness effect that does not affect "
+"white or black"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:133
+msgid "Contrast boost:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:136
+msgid "By how much to multiply the contrast in dark areas"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:139
+msgid "Saturation:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:142
+msgid ""
+"Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), "
+"requires GLSL color control"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:146
+msgid "LIT^Ambient:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:148
+msgid ""
+"Ambient lighting, if set too high it tends to make light on maps look dull "
+"and flat"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:150
+msgid "Intensity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:152
+msgid "Global rendering brightness"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:155
+msgid "Wait for GPU to finish each frame"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:156
+msgid ""
+"Make the CPU wait for the GPU to finish each frame, can help with some "
+"strange input or video lag on some machines"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:158
+msgid "Use OpenGL 2.0 shaders (GLSL)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:163
+msgid "Psycho coloring (easter egg)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:166
+msgid "Trippy vertices (easter egg)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:109
+msgid "Instant action! (random map with bots)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:116
+msgid "???"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:129
+msgid "Campaign Difficulty:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:130
+msgid "CSKL^Easy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:131
+msgid "CSKL^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:132
+msgid "CSKL^Hard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:134
+msgid "Start Singleplayer!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qh:6
+msgid "Singleplayer"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qh:7
+msgid "Play the singleplayer campaign or instant action matches against bots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer_winner.qh:7
+msgid "Winner"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:32
+msgid "join 'best' team (auto-select)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:33
+msgid "Autoselect team (recommended)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:37
+msgid "red"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:38
+msgid "blue"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:39
+msgid "yellow"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:40
+msgid "pink"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:43
+#: qcsrc/menu/xonotic/keybinder.qc:116
+msgid "spectate"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qh:7
+msgid "Team Selection"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_uid2name.qc:10
+msgid "Allow player statistics to use your nickname?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_uid2name.qc:12
+msgid "Answering \"No\" you will appear as \"Anonymous player\""
+msgstr ""
+
+#: qcsrc/menu/xonotic/gametypelist.qc:87
+msgid "teamplay"
+msgstr ""
+
+#: qcsrc/menu/xonotic/gametypelist.qc:89
+msgid "free for all"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:35
+msgid "Moving"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:36
+msgid "forward"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:37
+msgid "backpedal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:38
+msgid "strafe left"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:39
+msgid "strafe right"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:40
+msgid "jump / swim"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:41
+msgid "crouch / sink"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:42
+msgid "off-hand hook"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:43
+msgid "jetpack"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:46
+msgid "Attacking"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:52
+msgid "WEAPON^previous"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:53
+msgid "WEAPON^next"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:54
+msgid "WEAPON^previously used"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:55
+msgid "WEAPON^best"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:56
+msgid "reload"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:57
+msgid "drop weapon / throw nade"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:84
+msgid "hold zoom"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:85
+msgid "toggle zoom"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:86
+msgid "show scores"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:87
+msgid "screen shot"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:88
+msgid "maximize radar"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:89
+msgid "3rd person view"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:90
+msgid "enter spectator mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:93
+msgid "Communication"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:94
+msgid "public chat"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:95
+msgid "team chat"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:96
+msgid "show chat history"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:97
+msgid "vote YES"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:98
+msgid "vote NO"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:102
+msgid "Client"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:106 qcsrc/menu/xonotic/keybinder.qc:108
+msgid "enter console"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:109
+msgid "disconnect"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:110
+msgid "quit"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:114
+msgid "auto-join team"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:120
+msgid "drop key/flag, exit vehicle"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:121
+msgid "suicide / respawn"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:122
+msgid "quick menu"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:125
+msgid "User defined"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:132
+msgid "Development"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:133
+msgid "sandbox menu"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:134
+msgid "drag object (sandbox)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:135
+msgid "waypoint editor menu"
+msgstr ""
+
+#: qcsrc/menu/xonotic/mainwindow.qc:96 qcsrc/menu/xonotic/mainwindow.qc:99
+msgid "Do not press this button again!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/maplist.qc:288
+msgid ""
+"Huh? Can't play this (m is NULL). Refiltering so this won't happen again."
+msgstr ""
+
+#: qcsrc/menu/xonotic/maplist.qc:296
+#, c-format
+msgid "%s's Xonotic Server"
+msgstr ""
+
+#: qcsrc/menu/xonotic/maplist.qc:301
+msgid ""
+"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
+"again."
+msgstr ""
+
+#: qcsrc/menu/xonotic/playerlist.qc:102 qcsrc/menu/xonotic/playerlist.qc:112
+msgid "spectator"
+msgstr ""
+
+#: qcsrc/menu/xonotic/playermodel.qc:161
+msgid "<no model found>"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:256
+msgid "SERVER^Remove favorite"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:257
+msgid "Remove the currently highlighted server from bookmarks"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:261
+msgid "SERVER^Favorite"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:262
+msgid ""
+"Bookmark the currently highlighted server so that it's faster to find in the "
+"future"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:733
+msgid "Ping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:734
+msgid "Hostname"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:735
+msgid "Map"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:736
+msgid "Type"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1019
+#, c-format
+msgid "AES level %d"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1019
+msgid "ENC^none"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1019
+msgid "encryption:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1020
+#, c-format
+msgid "mod: %s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1022
+#, c-format
+msgid "modified settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1022
+#, c-format
+msgid "official settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1024
+msgid "stats disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1024
+msgid "stats enabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:152
+msgid "SLCAT^Favorites"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:153
+msgid "SLCAT^Recommended"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:154
+msgid "SLCAT^Normal Servers"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:155
+msgid "SLCAT^Servers"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:156
+msgid "SLCAT^Competitive Mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:157
+msgid "SLCAT^Modified Servers"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:158
+msgid "SLCAT^Overkill"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:159
+msgid "SLCAT^InstaGib"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:160
+msgid "SLCAT^Defrag Mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/skinlist.qc:70
+msgid "<TITLE>"
+msgstr ""
+
+#: qcsrc/menu/xonotic/skinlist.qc:71
+msgid "<AUTHOR>"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_decibels.qc:72
+msgid "VOL^MAX"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_decibels.qc:74
+msgid "VOL^OFF"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_decibels.qc:82
+#, c-format
+msgid "%s dB"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:14
+msgid "PART^OMG"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:15
+msgid "PART^Low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:16
+msgid "PART^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:17
+#: qcsrc/menu/xonotic/slider_sbfadetime.qc:14
+msgid "PART^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:18
+msgid "PART^High"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:19
+msgid "PART^Ultra"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:20
+msgid "PART^Ultimate"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_picmip.qc:13
+msgid ""
+"Change the sharpness of the textures. Lowering it will effectively reduce "
+"texture memory usage, but make the textures appear very blurry."
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.qc:115
+msgid "Screen resolution"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_sbfadetime.qc:13
+msgid "PART^Slow"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_sbfadetime.qc:15
+msgid "PART^Fast"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_sbfadetime.qc:16
+msgid "PART^Instant"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:29
+msgid "January"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:30
+msgid "February"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:31
+msgid "March"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:32
+msgid "April"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:33
+msgid "May"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:34
+msgid "June"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:35
+msgid "July"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:36
+msgid "August"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:37
+msgid "September"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:38
+msgid "October"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:39
+msgid "November"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:40
+msgid "December"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:46
+#, no-c-format
+msgid "DATE^%m %d, %Y"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:97
+msgid "Joined:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:104
+msgid "Last match:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:111
+msgid "Time played:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:118 qcsrc/menu/xonotic/statslist.qc:231
+msgid "Favorite map:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:150 qcsrc/menu/xonotic/statslist.qc:202
+#: qcsrc/menu/xonotic/statslist.qc:245
+#, c-format
+msgid "Matches:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:155
+#, c-format
+msgid "Wins/Losses:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:156
+#, c-format
+msgid "Win percentage:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:167
+#, c-format
+msgid "Kills/Deaths:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:173
+#, c-format
+msgid "Kill ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:208
+msgid "ELO:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:215
+msgid "Rank:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:222
+msgid "Percentile:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:247
+#, c-format
+msgid "%d (unranked)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:420
+msgid "Update can be downloaded at:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:528
+msgid "Autogenerating mapinfo for newly added maps..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:566
+#, c-format
+msgid "Update to %s now!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:650
+msgid ""
+"^1ERROR: Texture compression is required but not supported.\n"
+"^1Expect visual problems."
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:780
+msgid "Use default"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:800
+msgid "Team Color:"
+msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-07 07:23+0200\n"
-"PO-Revision-Date: 2020-07-19 19:54+0000\n"
+"PO-Revision-Date: 2020-07-24 22:49+0000\n"
"Last-Translator: LegendGuard\n"
"Language-Team: Spanish (http://www.transifex.com/team-xonotic/xonotic/"
"language/es/)\n"
#: qcsrc/client/hud/panel/infomessages.qc:116
#, c-format
msgid "^1Press ^3%s^1 to observe, ^3%s^1 to change camera mode"
-msgstr "^1Pulsa ^3%s^1 para observar o ^3%s^1 para cambiar el modo de cámara."
+msgstr "^1Pulsa ^3%s^1 para observar o ^3%s^1 para cambiar el modo de cámara"
#: qcsrc/client/hud/panel/infomessages.qc:116
#: qcsrc/common/vehicles/cl_vehicles.qc:190
#: qcsrc/client/hud/panel/infomessages.qc:153
msgid "^2Currently in ^1warmup^2 stage!"
-msgstr "^2¡Actualmente en etapa de ^1calentamiento^2 !"
+msgstr "^2¡Actualmente en etapa de ^1calentamiento^2!"
#: qcsrc/client/hud/panel/infomessages.qc:168
#, c-format
#: qcsrc/client/hud/panel/quickmenu.qc:813
msgid "QMCMD^dropped flag/key %w^7 (l:%l^7)"
-msgstr "QMCMD^tirada bandera/llave %w^7 (l:%l^7)"
+msgstr "QMCMD^bandera/llave tirada %w^7 (l:%l^7)"
#: qcsrc/client/hud/panel/quickmenu.qc:817
msgid "QMCMD^Send private message to"
#: qcsrc/client/hud/panel/quickmenu.qc:830
msgid "QMCMD^Hit sound"
-msgstr "QMCMD^Sonido de golpes"
+msgstr "QMCMD^Sonido de los golpes"
#: qcsrc/client/hud/panel/quickmenu.qc:831
msgid "QMCMD^Chat sound"
-msgstr "QMCMD^Sonido de chat"
+msgstr "QMCMD^Sonido del chat"
#: qcsrc/client/hud/panel/quickmenu.qc:836
msgid "QMCMD^Change spectator camera"
#: qcsrc/client/hud/panel/radar.qc:386
msgid "Click to select teleport destination"
-msgstr "Haz click para seleccionar el destino de teletransporte"
+msgstr "Haz clic para seleccionar el destino de teletransporte"
#: qcsrc/client/hud/panel/radar.qc:390
msgid "Click to select spawn location"
-msgstr "Haz click para seleccionar el lugar de reaparición"
+msgstr "Haz clic para seleccionar el lugar de reaparición"
#: qcsrc/client/hud/panel/scoreboard.qc:105
msgid "Number of ball carrier kills"
-msgstr "Número de asesinatos de portadores de bolas"
+msgstr "Número de asesinatos de portador de pelota"
#: qcsrc/client/hud/panel/scoreboard.qc:105
msgid "SCO^bckills"
-msgstr "asesin.p.bo"
+msgstr "asesin.p.pe"
#: qcsrc/client/hud/panel/scoreboard.qc:106
msgid "SCO^bctime"
-msgstr "tiempo p.bo"
+msgstr "tiempo p.pe"
#: qcsrc/client/hud/panel/scoreboard.qc:106
msgid "Total amount of time holding the ball in Keepaway"
-msgstr "Tiempo total reteniendo la bola en Keepaway"
+msgstr "Tiempo total reteniendo la pelota en Keepaway"
#: qcsrc/client/hud/panel/scoreboard.qc:107
msgid "How often a flag (CTF) or a key (KeyHunt) was captured"
#: qcsrc/client/hud/panel/scoreboard.qc:113
msgid "Number of flag drops"
-msgstr "Número de banderas soltadas"
+msgstr "Número de banderas caídas"
#: qcsrc/client/hud/panel/scoreboard.qc:113
msgid "SCO^drops"
#: qcsrc/client/hud/panel/scoreboard.qc:117
msgid "Number of flag carrier kills"
-msgstr "Número de asesinatos de portadores de bandera"
+msgstr "Número de asesinatos de portador de bandera"
#: qcsrc/client/hud/panel/scoreboard.qc:117
msgid "SCO^fckills"
#: qcsrc/client/hud/panel/scoreboard.qc:121
msgid "Number of keys carrier kills"
-msgstr "Número de asesinatos de portadores de llaves"
+msgstr "Número de asesinatos de portador de llaves"
#: qcsrc/client/hud/panel/scoreboard.qc:121
msgid "SCO^kckills"
#: qcsrc/client/hud/panel/scoreboard.qc:125
msgid "SCO^kills"
-msgstr "muertes"
+msgstr "asesinatos"
#: qcsrc/client/hud/panel/scoreboard.qc:126
msgid "Number of laps finished (Race/CTS)"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "SCO^losses"
-msgstr "derrotas"
+msgstr "perdidas"
#: qcsrc/client/hud/panel/scoreboard.qc:129
#: qcsrc/client/hud/panel/scoreboard.qc:130
msgid ""
"How often a flag (CTF) or a key (KeyHunt) or a ball (Keepaway) was picked up"
msgstr ""
-"Frecuencia con qué una bandera (CTF) o llave(KeyHunt) o bola (Keepaway) fue "
-"tomada"
+"Frecuencia con qué una bandera (CTF) o llave (KeyHunt) o pelota (Keepaway) "
+"fue tomada"
#: qcsrc/client/hud/panel/scoreboard.qc:132
msgid "SCO^pickups"
#: qcsrc/client/hud/panel/scoreboard.qc:143
msgid "SCO^takes"
-msgstr "tomas"
+msgstr "tomados"
#: qcsrc/client/hud/panel/scoreboard.qc:144
msgid "Number of teamkills"
" ^5Note: ^7scoreboard_columns_set without arguments is executed on every "
"map start"
msgstr ""
-" ^5Note: ^7scoreboard_columns_set sin argumentos es ejecutado en el "
+" ^5Nota: ^7scoreboard_columns_set sin argumentos es ejecutado en el "
"comienzo de cada partida"
#: qcsrc/client/hud/panel/scoreboard.qc:336
#: qcsrc/client/hud/panel/scoreboard.qc:338
msgid "The following field names are recognized (case insensitive):"
msgstr ""
-"Los siguientes nombres de campo son reconocidos (sensible a mayúsculas): "
+"Los siguientes nombres de campo son reconocidos (sensible a mayúsculas):"
#: qcsrc/client/hud/panel/scoreboard.qc:344
msgid ""
#: qcsrc/common/gamemodes/gamemode/nexball/weapon.qh:7
msgid "Ball Stealer"
-msgstr "Ladrón de Bola"
+msgstr "Ladrón de Pelota"
#: qcsrc/common/items/item/ammo.qh:66
msgid "bullets"
#: qcsrc/common/mapinfo.qh:474
msgid "Shoot and kick the ball into the enemies goal, keep your goal clean"
msgstr ""
-"Dispara y golpea la bola dentro de la portería enemiga, mantén tu portería "
+"Dispara y golpea la pelota dentro de la portería enemiga, mantén tu portería "
"limpia"
#: qcsrc/common/mapinfo.qh:488
#: qcsrc/common/mapinfo.qh:545
msgid "Hold the ball to get points for kills"
-msgstr "Mantén la bola para ganar puntos por asesinatos"
+msgstr "Retén la pelota para ganar puntos por asesinatos"
#: qcsrc/common/mapinfo.qh:545
msgid "Keepaway"
#: qcsrc/common/minigames/minigame/bd.qc:1095
msgid "Well done! Click 'Next Level' to continue"
-msgstr "¡Bien hecho! Haz click en 'Próximo Nivel' para continuar"
+msgstr "¡Bien hecho! Haz clic en 'Siguiente nivel' para continuar"
#: qcsrc/common/minigames/minigame/bd.qc:1162
msgid "Better luck next time!"
#: qcsrc/common/minigames/minigame/bd.qc:1167
msgid "Tubular! Press \"Next Level\" to continue!"
-msgstr "Tubular! ¡Pulsa \"Próximo Nivel\" para continuar!"
+msgstr "Tubular! ¡Pulsa \"Siguiente nivel\" para continuar!"
#: qcsrc/common/minigames/minigame/bd.qc:1169
msgid "Wicked! Press \"Next Level\" to continue!"
-msgstr "¡Mal! ¡Pulsa \"Próximo Nivel\" para continuar!"
+msgstr "¡Mal! ¡Pulsa \"Siguiente nivel\" para continuar!"
#: qcsrc/common/minigames/minigame/bd.qc:1173
msgid "Press the space bar to change your currently selected tile"
#: qcsrc/common/mutators/mutator/waypoints/all.inc:45
#: qcsrc/common/mutators/mutator/waypoints/all.inc:48
msgid "Ball"
-msgstr "Bola"
+msgstr "Pelota"
#: qcsrc/common/mutators/mutator/waypoints/all.inc:46
msgid "Ball carrier"
-msgstr "Portador de la bola"
+msgstr "Portador de la pelota"
#: qcsrc/common/mutators/mutator/waypoints/all.inc:49
msgid "Goal"
#: qcsrc/common/notifications/all.inc:697
#, c-format
msgid "^BG%s^BG has dropped the ball!"
-msgstr "^BG¡%s^BG ha tirado la bola!"
+msgstr "^BG¡%s^BG ha tirado la pelota!"
#: qcsrc/common/notifications/all.inc:386
#: qcsrc/common/notifications/all.inc:698
#, c-format
msgid "^BG%s^BG has picked up the ball!"
-msgstr "^BG¡%s^BG ha recogido la bola!"
+msgstr "^BG¡%s^BG ha recogido la pelota!"
#: qcsrc/common/notifications/all.inc:388
#, c-format
#: qcsrc/common/notifications/all.inc:400
msgid "^BGThe ^TC^TT^BG team held the ball for too long"
-msgstr "^BGEl equipo ^TC^TT^BG mantuvo la bola demasiado tiempo"
+msgstr "^BGEl equipo ^TC^TT^BG mantuvo la pelota demasiado tiempo"
#: qcsrc/common/notifications/all.inc:402
#, c-format
#: qcsrc/common/notifications/all.inc:699
msgid "^BGYou picked up the ball"
-msgstr "^BGHas recogido la bola"
+msgstr "^BGHas recogido la pelota"
#: qcsrc/common/notifications/all.inc:700
msgid "^BGKilling people while you don't have the ball gives no points!"
-msgstr "^BG¡Eliminar a otros mientras no tienes la bola no da puntos!"
+msgstr "^BG¡Eliminar a otros mientras no tienes la pelota no da puntos!"
#: qcsrc/common/notifications/all.inc:702
msgid ""
"Click here or Ctrl-F to provide a keyword to narrow down the map list. Ctrl-"
"Delete to clear; Enter when done."
msgstr ""
-"Haz click aquí o pulsa Ctrl-F para proveer una palabra clave para reducir la "
+"Haz clic aquí o pulsa Ctrl-F para proveer una palabra clave para reducir la "
"lista de mapas. Ctrl-Suprimir para despejar; Pulse Entrar cuando haya "
"acabado."
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:144
msgid "Play a hit indicator sound when your shot hits an enemy"
msgstr ""
-"Reproduce un sonido indicador de anotación cuando disparas a un enemigo"
+"Reproduce un sonido indicador de los golpes cuando disparas a un enemigo"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:147
msgid "Chat message sound"
-msgstr "Sonido de mensaje chat"
+msgstr "Sonido del mensaje de chat"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:149
msgid "Menu sounds"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:150
msgid "Play sounds when clicking menu items"
-msgstr "Reproducir sonidos al hacer click en items del menú"
+msgstr "Reproducir sonidos al hacer clic en items del menú"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:151
msgid "Focus sounds"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:26
msgid "1st person perspective"
-msgstr "Perspectiva en primera persona"
+msgstr "Perspectiva en 1ª persona"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:29
msgid "Slide to third person upon death"
"Automatically switch to newly picked up weapons if they are better than what "
"you are carrying"
msgstr ""
-"Cambia automáticamente al arma recogida si es mejor que la que está llevando"
+"Cambiar automáticamente al arma recogida si es mejor que la que está llevando"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:60
msgid "Release attack buttons when you switch weapons"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:63
msgid "Draw 1st person weapon model"
-msgstr "Dibujar modelo de arma en primera persona"
+msgstr "Dibujar modelo de arma en 1ª persona"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:64
msgid "Draw the weapon model"
#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qh:7
msgid "User defined key bind"
-msgstr "Usar teclas definidas"
+msgstr "Teclas definidas por el usuario"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:11
#, c-format
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# LegendGuard, 2020
+# LegendGuard, 2020
+msgid ""
+msgstr ""
+"Project-Id-Version: Xonotic\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-06-07 07:23+0200\n"
+"PO-Revision-Date: 2020-07-30 22:37+0000\n"
+"Last-Translator: LegendGuard\n"
+"Language-Team: Galician (http://www.transifex.com/team-xonotic/xonotic/"
+"language/gl/)\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: qcsrc/client/hud/hud_config.qc:81
+#, c-format
+msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)"
+msgstr ""
+
+#: qcsrc/client/hud/hud_config.qc:85
+#, c-format
+msgid "^1Couldn't write to %s"
+msgstr ""
+
+#: qcsrc/client/hud/panel/centerprint.qc:174
+#, c-format
+msgid "^3Countdown message at time %s, seconds left: ^COUNT"
+msgstr ""
+
+#: qcsrc/client/hud/panel/centerprint.qc:176
+#, c-format
+msgid ""
+"^1Multiline message at time %s that\n"
+"^1lasts longer than normal"
+msgstr ""
+
+#: qcsrc/client/hud/panel/centerprint.qc:178
+#, c-format
+msgid "Message at time %s"
+msgstr ""
+
+#: qcsrc/client/hud/panel/centerprint.qc:183
+msgid "Generic message"
+msgstr "Mensaxe xenérica"
+
+#: qcsrc/client/hud/panel/chat.qc:89
+msgid "^3Player^7: This is the chat area."
+msgstr "^3Xogador^7: Esta é a área de chat."
+
+#: qcsrc/client/hud/panel/engineinfo.qc:76
+#, c-format
+msgid "FPS: %.*f"
+msgstr "FPS: %.*f"
+
+#: qcsrc/client/hud/panel/infomessages.qc:95
+msgid "^1Observing"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:97
+#, c-format
+msgid "^1Spectating: ^7%s"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:108
+#, c-format
+msgid "^1Press ^3%s^1 to spectate"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:108
+#: qcsrc/menu/xonotic/keybinder.qc:47
+msgid "primary fire"
+msgstr "tiro principal"
+
+#: qcsrc/client/hud/panel/infomessages.qc:110
+#, c-format
+msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:110
+#: qcsrc/client/hud/panel/infomessages.qc:114
+msgid "next weapon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:110
+#: qcsrc/client/hud/panel/infomessages.qc:114
+msgid "previous weapon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:114
+#, c-format
+msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:116
+#, c-format
+msgid "^1Press ^3%s^1 to observe, ^3%s^1 to change camera mode"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:116
+#: qcsrc/common/vehicles/cl_vehicles.qc:190
+msgid "drop weapon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:116
+#: qcsrc/menu/xonotic/keybinder.qc:48
+msgid "secondary fire"
+msgstr "tiro secundario"
+
+#: qcsrc/client/hud/panel/infomessages.qc:119
+#, c-format
+msgid "^1Press ^3%s^1 for gamemode info"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:119
+#: qcsrc/menu/xonotic/keybinder.qc:103
+msgid "server info"
+msgstr "información do servidor"
+
+#: qcsrc/client/hud/panel/infomessages.qc:132
+msgid "^1Match has already begun"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:134
+msgid "^1You have no more lives left"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:136
+#: qcsrc/client/hud/panel/infomessages.qc:139
+#, c-format
+msgid "^1Press ^3%s^1 to join"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:136
+#: qcsrc/client/hud/panel/infomessages.qc:139
+#: qcsrc/common/notifications/all.qh:430
+msgid "jump"
+msgstr "saltar"
+
+#: qcsrc/client/hud/panel/infomessages.qc:147
+#, c-format
+msgid "^1Game starts in ^3%d^1 seconds"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:153
+msgid "^2Currently in ^1warmup^2 stage!"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:168
+#, c-format
+msgid "%sPress ^3%s%s to end warmup"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:168
+#: qcsrc/client/hud/panel/infomessages.qc:170
+#: qcsrc/client/hud/panel/infomessages.qc:183
+#: qcsrc/menu/xonotic/keybinder.qc:99
+msgid "ready"
+msgstr "listo"
+
+#: qcsrc/client/hud/panel/infomessages.qc:170
+#, c-format
+msgid "%sPress ^3%s%s once you are ready"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:175
+msgid "^2Waiting for others to ready up to end warmup..."
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:177
+msgid "^2Waiting for others to ready up..."
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:183
+#, c-format
+msgid "^2Press ^3%s^2 to end warmup"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:204
+msgid "Teamnumbers are unbalanced!"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:207
+#, c-format
+msgid " Press ^3%s%s to adjust"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:207
+#: qcsrc/menu/xonotic/keybinder.qc:115
+msgid "team menu"
+msgstr "menú do equipo"
+
+#: qcsrc/client/hud/panel/infomessages.qc:217
+msgid "^1Spectating this player:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:217
+msgid "^1Spectating you:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:233
+msgid "^7Press ^3ESC ^7to show HUD options."
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:234
+msgid "^3Doubleclick ^7a panel for panel-specific options."
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:235
+msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
+msgstr ""
+
+#: qcsrc/client/hud/panel/infomessages.qc:236
+msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
+msgstr ""
+
+#: qcsrc/client/hud/panel/modicons.qc:183
+msgid "Personal best"
+msgstr ""
+
+#: qcsrc/client/hud/panel/modicons.qc:193
+msgid "Server best"
+msgstr ""
+
+#: qcsrc/client/hud/panel/notify.qc:127 qcsrc/client/hud/panel/notify.qc:128
+#: qcsrc/client/hud/panel/score.qc:69
+#, c-format
+msgid "Player %d"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:597
+#: qcsrc/client/hud/panel/quickmenu.qc:599
+#, c-format
+msgid "Submenu%d"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:604
+#, c-format
+msgid "Command%d"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:630
+msgid "Continue..."
+msgstr "Continúa..."
+
+#: qcsrc/client/hud/panel/quickmenu.qc:787
+#: qcsrc/client/hud/panel/quickmenu.qc:794
+msgid "Chat"
+msgstr "Chat"
+
+#: qcsrc/client/hud/panel/quickmenu.qc:788
+msgid "QMCMD^Send public message to"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:789
+msgid "QMCMD^:-) / nice one"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:789
+msgid "QMCMD^nice one"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:790
+msgid "QMCMD^good game"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:791
+msgid "QMCMD^hi / good luck"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:791
+msgid "QMCMD^hi / good luck and have fun"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:793
+msgid "QMCMD^Send in English"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:798
+#: qcsrc/client/hud/panel/quickmenu.qc:814
+msgid "QMCMD^Team chat"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:799
+msgid "QMCMD^strength soon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:800
+msgid "QMCMD^free item %x^7 (l:%y^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:800
+msgid "QMCMD^free item, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:801
+msgid "QMCMD^took item (l:%l^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:801
+msgid "QMCMD^took item, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:802
+msgid "QMCMD^negative"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:803
+msgid "QMCMD^positive"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:804
+msgid "QMCMD^need help (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:804
+msgid "QMCMD^need help, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:805
+msgid "QMCMD^enemy seen (l:%y^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:805
+msgid "QMCMD^enemy seen, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:806
+msgid "QMCMD^flag seen (l:%y^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:806
+msgid "QMCMD^flag seen, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:807
+msgid "QMCMD^defending (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:807
+msgid "QMCMD^defending, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:808
+msgid "QMCMD^roaming (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:808
+msgid "QMCMD^roaming, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:809
+msgid "QMCMD^attacking (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:809
+msgid "QMCMD^attacking, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:810
+msgid "QMCMD^killed flagcarrier (l:%y^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:810
+msgid "QMCMD^killed flagcarrier, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:811
+#, c-format
+msgid "QMCMD^dropped flag (l:%d^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:811
+msgid "QMCMD^dropped flag, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:812
+msgid "QMCMD^drop weapon, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:812
+msgid "QMCMD^dropped weapon %w^7 (l:%l^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:813
+msgid "QMCMD^drop flag/key, icon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:813
+msgid "QMCMD^dropped flag/key %w^7 (l:%l^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:817
+msgid "QMCMD^Send private message to"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:819
+#: qcsrc/client/hud/panel/quickmenu.qc:849
+msgid "QMCMD^Settings"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:820
+#: qcsrc/client/hud/panel/quickmenu.qc:827
+msgid "QMCMD^View/HUD settings"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:821
+msgid "QMCMD^3rd person view"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:822
+msgid "QMCMD^Player models like mine"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:823
+msgid "QMCMD^Names above players"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:824
+msgid "QMCMD^Crosshair per weapon"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:825
+msgid "QMCMD^FPS"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:826
+msgid "QMCMD^Net graph"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:829
+#: qcsrc/client/hud/panel/quickmenu.qc:832
+msgid "QMCMD^Sound settings"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:830
+msgid "QMCMD^Hit sound"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:831
+msgid "QMCMD^Chat sound"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:836
+msgid "QMCMD^Change spectator camera"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:841
+#: qcsrc/client/hud/panel/quickmenu.qc:845
+msgid "QMCMD^Observer camera"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:842
+msgid "QMCMD^Increase speed"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:843
+msgid "QMCMD^Decrease speed"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:844
+msgid "QMCMD^Wall collision"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:848
+msgid "QMCMD^Fullscreen"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:851
+#: qcsrc/client/hud/panel/quickmenu.qc:861
+msgid "QMCMD^Call a vote"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:852
+msgid "QMCMD^Restart the map"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:853
+msgid "QMCMD^End match"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:856
+msgid "QMCMD^Reduce match time"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:857
+msgid "QMCMD^Extend match time"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:860
+msgid "QMCMD^Shuffle teams"
+msgstr ""
+
+#: qcsrc/client/hud/panel/quickmenu.qc:865
+msgid "QMCMD^Spectate a player"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:59
+#, c-format
+msgid " (-%dL)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:64
+#, c-format
+msgid " (+%dL)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:83
+msgid "Start line"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:85
+#: qcsrc/client/hud/panel/racetimer.qc:89
+msgid "Finish line"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:87
+#: qcsrc/client/hud/panel/racetimer.qc:156
+#, c-format
+msgid "Intermediate %d"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:159
+#: qcsrc/client/hud/panel/racetimer.qc:206
+#: qcsrc/client/hud/panel/racetimer.qc:267
+#, c-format
+msgid "PENALTY: %.1f (%s)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/racetimer.qc:159 qcsrc/client/main.qc:1102
+msgid "missing a checkpoint"
+msgstr ""
+
+#: qcsrc/client/hud/panel/radar.qc:386
+msgid "Click to select teleport destination"
+msgstr ""
+
+#: qcsrc/client/hud/panel/radar.qc:390
+msgid "Click to select spawn location"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:105
+msgid "Number of ball carrier kills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:105
+msgid "SCO^bckills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:106
+msgid "SCO^bctime"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:106
+msgid "Total amount of time holding the ball in Keepaway"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:107
+msgid "How often a flag (CTF) or a key (KeyHunt) was captured"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:107
+msgid "SCO^caps"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:108
+msgid "SCO^captime"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:108
+msgid "Time of fastest capture (CTF)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:109
+msgid "Number of deaths"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:109
+msgid "SCO^deaths"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:110
+msgid "Number of keys destroyed by pushing them into void"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:110
+msgid "SCO^destroyed"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:111
+msgid "SCO^damage"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:111
+msgid "The total damage done"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:112
+msgid "SCO^dmgtaken"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:112
+msgid "The total damage taken"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:113
+msgid "Number of flag drops"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:113
+msgid "SCO^drops"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:114
+msgid "Player ELO"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:114
+msgid "SCO^elo"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:115
+msgid "SCO^fastest"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:115
+msgid "Time of fastest lap (Race/CTS)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:116
+msgid "Number of faults committed"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:116
+msgid "SCO^faults"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:117
+msgid "Number of flag carrier kills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:117
+msgid "SCO^fckills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:118
+msgid "FPS"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:118
+msgid "SCO^fps"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:119
+msgid "Number of kills minus suicides"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:119
+msgid "SCO^frags"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:120
+msgid "Number of goals scored"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:120
+msgid "SCO^goals"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:121
+msgid "Number of keys carrier kills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:121
+msgid "SCO^kckills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:122
+msgid "SCO^k/d"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:122
+#: qcsrc/client/hud/panel/scoreboard.qc:123
+#: qcsrc/client/hud/panel/scoreboard.qc:124
+msgid "The kill-death ratio"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:123
+msgid "SCO^kdr"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:124
+msgid "SCO^kdratio"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:125
+msgid "Number of kills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:125
+msgid "SCO^kills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:126
+msgid "Number of laps finished (Race/CTS)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:126
+msgid "SCO^laps"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:127
+msgid "Number of lives (LMS)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:127
+msgid "SCO^lives"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:128
+msgid "Number of times a key was lost"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:128
+msgid "SCO^losses"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:129
+#: qcsrc/client/hud/panel/scoreboard.qc:130
+msgid "Player name"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:129
+msgid "SCO^name"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:130
+msgid "SCO^nick"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:131
+msgid "Number of objectives destroyed"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:131
+msgid "SCO^objectives"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:132
+msgid ""
+"How often a flag (CTF) or a key (KeyHunt) or a ball (Keepaway) was picked up"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:132
+msgid "SCO^pickups"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:133
+msgid "Ping time"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:133
+msgid "SCO^ping"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:134
+msgid "Packet loss"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:134
+msgid "SCO^pl"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:135
+msgid "Number of players pushed into void"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:135
+msgid "SCO^pushes"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:136
+msgid "Player rank"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:136
+msgid "SCO^rank"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:137
+msgid "Number of flag returns"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:137
+msgid "SCO^returns"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:138
+msgid "Number of revivals"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:138
+msgid "SCO^revivals"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:139
+msgid "Number of rounds won"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:139
+msgid "SCO^rounds won"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:140
+msgid "SCO^score"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:140
+msgid "Total score"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:141
+msgid "Number of suicides"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:141
+msgid "SCO^suicides"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:142
+msgid "Number of kills minus deaths"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:142
+msgid "SCO^sum"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:143
+msgid "Number of domination points taken (Domination)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:143
+msgid "SCO^takes"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:144
+msgid "Number of teamkills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:144
+msgid "SCO^teamkills"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:145
+msgid "Number of ticks (Domination)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:145
+msgid "SCO^ticks"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:146
+msgid "SCO^time"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:146
+msgid "Total time raced (Race/CTS)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:330
+msgid ""
+"You can modify the scoreboard using the ^2scoreboard_columns_set command."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:331
+msgid "Usage:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:333
+msgid "^2scoreboard_columns_set ^3field1 field2 ..."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:334
+msgid ""
+"^2scoreboard_columns_set ^7without arguments reads the arguments from the "
+"cvar scoreboard_columns"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:335
+msgid ""
+" ^5Note: ^7scoreboard_columns_set without arguments is executed on every "
+"map start"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:336
+msgid ""
+"^2scoreboard_columns_set ^3expand_default ^7loads default layout and expands "
+"it into the cvar scoreboard_columns so you can edit it"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:337
+msgid "You can use a ^3|^7 to start the right-aligned fields."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:338
+msgid "The following field names are recognized (case insensitive):"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:344
+msgid ""
+"Before a field you can put a + or - sign, then a comma separated list\n"
+"of game types, then a slash, to make the field show up only in these\n"
+"or in all but these game types. You can also specify 'all' as a\n"
+"field to show all fields available for the current game mode."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:350
+msgid ""
+"The special game type names 'teams' and 'noteams' can be used to\n"
+"include/exclude ALL teams/noteams game modes."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:354
+msgid "Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:355
+msgid ""
+"will display name, ping and pl aligned to the left, and the fields\n"
+"right of the vertical bar aligned to the right."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:357
+msgid ""
+"'field3' will only be shown in CTF, and 'field4' will be shown in all\n"
+"other gamemodes except DM."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:621
+#: qcsrc/client/hud/panel/scoreboard.qc:628
+#: qcsrc/client/hud/panel/scoreboard.qc:680
+#: qcsrc/client/hud/panel/scoreboard.qc:691
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:46
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:47
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:121
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:164
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:169
+msgid "N/A"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1206
+#, c-format
+msgid "Accuracy stats (average %d%%)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1354
+msgid "Map stats:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1384
+msgid "Monsters killed:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1391
+msgid "Secrets found:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1413
+msgid "Capture time rankings"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1413
+msgid "Rankings"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1631
+#, c-format
+msgid "^3%1.0f minutes"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1640
+#: qcsrc/client/hud/panel/scoreboard.qc:1647
+#, c-format
+msgid "^5%s %s"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1641
+#: qcsrc/client/hud/panel/scoreboard.qc:1648
+#: qcsrc/client/hud/panel/scoreboard.qc:1667
+#: qcsrc/client/hud/panel/scoreboard.qc:1674
+msgid "SCO^points"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1666
+#: qcsrc/client/hud/panel/scoreboard.qc:1673
+#, c-format
+msgid "^2+%s %s"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1684
+#, c-format
+msgid "^7Map: ^2%s"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1823
+#, c-format
+msgid "Speed award: %d%s ^7(%s^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1827
+#, c-format
+msgid "All-time fastest: %d%s ^7(%s^7)"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1843
+#, c-format
+msgid "Spectators"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1870
+#, c-format
+msgid "^1Respawning in ^3%s^1..."
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1880
+#, c-format
+msgid "You are dead, wait ^3%s^7 before respawning"
+msgstr ""
+
+#: qcsrc/client/hud/panel/scoreboard.qc:1889
+#, c-format
+msgid "You are dead, press ^2%s^7 to respawn"
+msgstr ""
+
+#: qcsrc/client/hud/panel/timer.qc:72
+msgid "WARMUP"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:33
+msgid "^1You must answer before entering hud configure mode"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:36
+msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:122
+msgid "A vote has been called for:"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:124
+msgid "Allow servers to store and display your name?"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:128
+msgid "^1Configure the HUD"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:132
+#: qcsrc/menu/xonotic/dialog_disconnect.qc:19
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:82
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:18
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qc:18
+#: qcsrc/menu/xonotic/dialog_quit.qc:14
+#: qcsrc/menu/xonotic/dialog_settings_bindings_reset.qc:14
+#: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qc:26
+#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:16
+#: qcsrc/menu/xonotic/dialog_uid2name.qc:15
+msgid "Yes"
+msgstr ""
+
+#: qcsrc/client/hud/panel/vote.qc:134
+#: qcsrc/menu/xonotic/dialog_disconnect.qc:22
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:83
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:21
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qc:21
+#: qcsrc/menu/xonotic/dialog_quit.qc:16
+#: qcsrc/menu/xonotic/dialog_settings_bindings_reset.qc:17
+#: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qc:29
+#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:17
+#: qcsrc/menu/xonotic/dialog_uid2name.qc:17
+msgid "No"
+msgstr ""
+
+#: qcsrc/client/hud/panel/weapons.qc:584
+msgid "Out of ammo"
+msgstr ""
+
+#: qcsrc/client/hud/panel/weapons.qc:588
+msgid "Don't have"
+msgstr ""
+
+#: qcsrc/client/hud/panel/weapons.qc:592
+msgid "Unavailable"
+msgstr ""
+
+#: qcsrc/client/main.qc:1000
+msgid " qu/s"
+msgstr ""
+
+#: qcsrc/client/main.qc:1002
+msgid " m/s"
+msgstr ""
+
+#: qcsrc/client/main.qc:1004
+msgid " km/h"
+msgstr ""
+
+#: qcsrc/client/main.qc:1006
+msgid " mph"
+msgstr ""
+
+#: qcsrc/client/main.qc:1008
+msgid " knots"
+msgstr ""
+
+#: qcsrc/client/main.qc:1255
+#, c-format
+msgid "%s (not bound)"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:59
+msgid " (1 vote)"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:61
+#, c-format
+msgid " (%d votes)"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:281
+msgid "Don't care"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:382
+msgid "Decide the gametype"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:382
+msgid "Vote for a map"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:399
+#, c-format
+msgid "%d seconds left"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:512
+msgid "mv_mapdownload: ^3You're not supposed to use this command on your own!"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:522
+msgid "^1Error:^7 Couldn't find pak index."
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:531
+msgid "Requesting preview..."
+msgstr ""
+
+#: qcsrc/client/miscfunctions.qc:111
+msgid "Trying to remove a team which is not in the teamlist!"
+msgstr ""
+
+#: qcsrc/client/view.qc:939
+msgid "Nade timer"
+msgstr ""
+
+#: qcsrc/client/view.qc:944
+msgid "Capture progress"
+msgstr ""
+
+#: qcsrc/client/view.qc:949
+msgid "Revival progress"
+msgstr ""
+
+#: qcsrc/common/command/generic.qc:156
+msgid "error creating curl handle"
+msgstr ""
+
+#: qcsrc/common/command/generic.qc:412
+msgid "Notification restart command only works with cl_cmd and sv_cmd."
+msgstr ""
+
+#: qcsrc/common/gamemodes/gamemode/nexball/weapon.qh:7
+msgid "Ball Stealer"
+msgstr ""
+
+#: qcsrc/common/items/item/ammo.qh:66
+msgid "bullets"
+msgstr ""
+
+#: qcsrc/common/items/item/ammo.qh:96
+msgid "cells"
+msgstr ""
+
+#: qcsrc/common/items/item/ammo.qh:126
+msgid "plasma"
+msgstr ""
+
+#: qcsrc/common/items/item/ammo.qh:156
+msgid "rockets"
+msgstr ""
+
+#: qcsrc/common/items/item/ammo.qh:190
+msgid "shells"
+msgstr ""
+
+#: qcsrc/common/items/item/armor.qh:42
+msgid "Small armor"
+msgstr ""
+
+#: qcsrc/common/items/item/armor.qh:80
+msgid "Medium armor"
+msgstr ""
+
+#: qcsrc/common/items/item/armor.qh:118 qcsrc/common/items/item/armor.qh:121
+msgid "Big armor"
+msgstr ""
+
+#: qcsrc/common/items/item/armor.qh:158 qcsrc/common/items/item/armor.qh:161
+msgid "Mega armor"
+msgstr ""
+
+#: qcsrc/common/items/item/health.qh:42
+msgid "Small health"
+msgstr ""
+
+#: qcsrc/common/items/item/health.qh:80
+msgid "Medium health"
+msgstr ""
+
+#: qcsrc/common/items/item/health.qh:118 qcsrc/common/items/item/health.qh:121
+msgid "Big health"
+msgstr ""
+
+#: qcsrc/common/items/item/health.qh:158 qcsrc/common/items/item/health.qh:161
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/common/items/item/jetpack.qh:38 qcsrc/common/items/item/jetpack.qh:41
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:91
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:215
+msgid "Jetpack"
+msgstr ""
+
+#: qcsrc/common/items/item/jetpack.qh:71
+msgid "fuel"
+msgstr ""
+
+#: qcsrc/common/items/item/jetpack.qh:96
+msgid "Fuel regenerator"
+msgstr ""
+
+#: qcsrc/common/items/item/jetpack.qh:99
+msgid "Fuel regen"
+msgstr ""
+
+#: qcsrc/common/items/item/powerup.qh:43 qcsrc/common/items/item/powerup.qh:46
+msgid "Strength"
+msgstr ""
+
+#: qcsrc/common/items/item/powerup.qh:79 qcsrc/common/items/item/powerup.qh:82
+msgid "Shield"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qc:626
+#, no-c-format
+msgid "@!#%'n Tuba Throwing"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:72 qcsrc/common/mapinfo.qh:334
+#: qcsrc/common/mapinfo.qh:529
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:105
+msgid "Frag limit:"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:72 qcsrc/common/mapinfo.qh:334
+#: qcsrc/common/mapinfo.qh:529
+msgid "The amount of frags needed before the match will end"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:115
+msgid "Deathmatch"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:115
+msgid "Score as many frags as you can"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:128
+msgid "Last Man Standing"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:128
+msgid "Survive and kill until the enemies have no lives left"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:137
+msgid "Lives:"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:149
+msgid "Race"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:149
+msgid "Race against other players to the finish line"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:176
+msgid "Laps:"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:189
+msgid "Race CTS"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:189
+msgid "Race for fastest time."
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:206 qcsrc/common/mapinfo.qh:257
+#: qcsrc/common/mapinfo.qh:373 qcsrc/common/mapinfo.qh:416
+#: qcsrc/common/mapinfo.qh:442 qcsrc/common/mapinfo.qh:462
+#: qcsrc/common/mapinfo.qh:582
+msgid "Point limit:"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:219
+msgid "Help your team score the most frags against the enemy team"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:219
+msgid "Team Deathmatch"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:257 qcsrc/common/mapinfo.qh:373
+#: qcsrc/common/mapinfo.qh:416
+msgid "The amount of points needed before the match will end"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:271
+msgid "Capture the Flag"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:271
+msgid ""
+"Find and bring the enemy flag to your base to capture it, defend your base "
+"from the other team"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:289
+msgid "Capture limit:"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:289
+msgid "The amount of captures needed before the match will end"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:306
+msgid "Clan Arena"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:306
+msgid "Kill all enemy teammates to win the round"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:350
+msgid "Capture and defend all the control points to win"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:350
+msgid "Domination"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:388
+msgid "Gather all the keys to win the round"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:388
+msgid "Key Hunt"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:428
+msgid "Assault"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:428
+msgid ""
+"Destroy obstacles to find and destroy the enemy power core before time runs "
+"out"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:452
+msgid "Capture control points to reach and destroy the enemy generator"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:452
+msgid "Onslaught"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:474
+msgid "Nexball"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:474
+msgid "Shoot and kick the ball into the enemies goal, keep your goal clean"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:488
+msgid "Goals:"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:488
+msgid "The amount of goals needed before the match will end"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:501
+msgid "Freeze Tag"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:501
+msgid ""
+"Kill enemies to freeze them, stand next to frozen teammates to revive them; "
+"freeze all enemies to win"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:545
+msgid "Hold the ball to get points for kills"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:545
+msgid "Keepaway"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:560
+msgid "Invasion"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:560
+msgid "Survive against waves of monsters"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:590
+msgid "Duel"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:590
+msgid "Fight in a one versus one arena battle to decide the winner"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames.qc:383
+msgid "It's your turn"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:366
+#: qcsrc/menu/xonotic/dialog_quit.qh:6
+msgid "Quit"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:371
+msgid "Invite"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:410
+msgid "Current Game"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:435
+msgid "Exit Menu"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:447
+#: qcsrc/menu/xonotic/dialog_multiplayer.qc:16
+msgid "Create"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:450
+msgid "Join"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:526
+msgid "Minigames"
+msgstr ""
+
+#: qcsrc/common/minigames/cl_minigames_hud.qc:587
+msgid "Minigame message"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:2
+msgid "Bulldozer"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1092
+#: qcsrc/common/minigames/minigame/ps.qc:421
+#: qcsrc/common/minigames/minigame/ps.qc:427
+msgid "Game over!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1095
+msgid "Well done! Click 'Next Level' to continue"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1162
+msgid "Better luck next time!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1167
+msgid "Tubular! Press \"Next Level\" to continue!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1169
+msgid "Wicked! Press \"Next Level\" to continue!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1173
+msgid "Press the space bar to change your currently selected tile"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1176
+msgid "Push the boulders onto the targets"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1403
+msgid "Next Level"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1404
+msgid "Restart"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1405
+msgid "Editor"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/bd.qc:1406
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:37
+msgid "Save"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:2
+msgid "Connect Four"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:311
+#: qcsrc/common/minigames/minigame/c4.qc:317
+#: qcsrc/common/minigames/minigame/nmm.qc:491
+#: qcsrc/common/minigames/minigame/nmm.qc:497
+#: qcsrc/common/minigames/minigame/pp.qc:362
+#: qcsrc/common/minigames/minigame/pp.qc:368
+#, c-format
+msgid "%s^7 won the game!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:373
+#: qcsrc/common/minigames/minigame/pp.qc:438
+#: qcsrc/common/minigames/minigame/ttt.qc:319
+msgid "Draw"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:378
+#: qcsrc/common/minigames/minigame/nmm.qc:606
+#: qcsrc/common/minigames/minigame/pp.qc:444
+#: qcsrc/common/minigames/minigame/ttt.qc:326
+msgid "You lost the game!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:379
+#: qcsrc/common/minigames/minigame/nmm.qc:607
+#: qcsrc/common/minigames/minigame/pp.qc:445
+#: qcsrc/common/minigames/minigame/ttt.qc:327
+msgid "You win!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:383
+#: qcsrc/common/minigames/minigame/nmm.qc:611
+#: qcsrc/common/minigames/minigame/pp.qc:456
+#: qcsrc/common/minigames/minigame/ttt.qc:338
+msgid "Wait for your opponent to make their move"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/c4.qc:386
+#: qcsrc/common/minigames/minigame/nmm.qc:613
+#: qcsrc/common/minigames/minigame/pp.qc:459
+#: qcsrc/common/minigames/minigame/ttt.qc:341
+msgid "Click on the game board to place your piece"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/nmm.qc:7
+msgid "Nine Men's Morris"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/nmm.qc:615
+msgid ""
+"You can select one of your pieces to move it in one of the surrounding places"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/nmm.qc:617
+msgid "You can select one of your pieces to move it anywhere on the board"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/nmm.qc:619
+msgid "You can take one of the opponent's pieces"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pong.qc:2
+msgid "Pong"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pong.qc:589
+#: qcsrc/common/minigames/minigame/ttt.qc:299
+msgid "AI"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pong.qc:606
+msgid "Press ^1Start Match^7 to start the match with the current players"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pong.qc:679
+msgid "Start Match"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pong.qc:680
+msgid "Add AI player"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pong.qc:681
+msgid "Remove AI player"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pp.qc:2
+msgid "Push-Pull"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pp.qc:444
+#: qcsrc/common/minigames/minigame/ttt.qc:326
+msgid "Select \"^1Next Match^7\" on the menu for a rematch!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pp.qc:445
+#: qcsrc/common/minigames/minigame/pp.qc:451
+#: qcsrc/common/minigames/minigame/ttt.qc:327
+#: qcsrc/common/minigames/minigame/ttt.qc:333
+msgid "Select \"^1Next Match^7\" on the menu to start a new match!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pp.qc:452
+#: qcsrc/common/minigames/minigame/ttt.qc:334
+msgid "Wait for your opponent to confirm the rematch"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/pp.qc:587
+#: qcsrc/common/minigames/minigame/ttt.qc:671
+msgid "Next Match"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:2
+msgid "Peg Solitaire"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:414
+msgid "All pieces cleared!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:416
+msgid "Remaining pieces:"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:481
+#, c-format
+msgid "Pieces left: %s"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:491
+msgid "No more valid moves"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:494
+msgid "Well done, you win!"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ps.qc:497
+msgid "Jump a piece over another to capture it"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ttt.qc:2
+msgid "Tic Tac Toe"
+msgstr ""
+
+#: qcsrc/common/minigames/minigame/ttt.qc:672
+msgid "Single Player"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/mage.qh:17
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:18
+msgid "Mage"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/mage.qh:29
+msgid "Mage spike"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/shambler.qh:17
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:17
+msgid "Shambler"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/spider.qh:17
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:16
+msgid "Spider"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/spider.qh:28
+msgid "Spider attack"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/wyvern.qh:17
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:19
+msgid "Wyvern"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/wyvern.qh:28
+msgid "Wyvern attack"
+msgstr ""
+
+#: qcsrc/common/monsters/monster/zombie.qh:17
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:15
+msgid "Zombie"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:16
+msgid "Ammo"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:25
+msgid "Resistance"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:34
+#: qcsrc/common/mutators/mutator/instagib/items.qh:126
+#: qcsrc/common/mutators/mutator/instagib/items.qh:129
+msgid "Speed"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:44
+msgid "Medic"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:54
+msgid "Bash"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:63
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:83
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:184
+msgid "Vampire"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:71
+msgid "Disability"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:79
+msgid "Vengeance"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:87
+msgid "Jump"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:96
+msgid "Invisible"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:105
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:113
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:121
+msgid "Magnet"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:129
+msgid "Luck"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/all.inc:137
+msgid "Flight"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/buffs/buffs.qh:11
+msgid "Buff"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:8
+msgid "Damage text"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:18
+msgid "Draw damage numbers"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:20
+msgid "Font size minimum:"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:25
+msgid "Font size maximum:"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:30
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:55
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:102
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:60
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:109
+#: qcsrc/menu/xonotic/util.qc:775
+msgid "Color:"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:36
+msgid "Draw damage numbers for friendly fire"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/instagib/items.qh:33
+msgid "Vaporizer ammo"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/instagib/items.qh:59
+#: qcsrc/common/mutators/mutator/instagib/items.qh:62
+msgid "Extra life"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/instagib/items.qh:91
+#: qcsrc/common/mutators/mutator/instagib/items.qh:94
+msgid "Invisibility"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:18
+msgid "Napalm grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:26
+msgid "Ice grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:34
+msgid "Translocate grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:42
+msgid "Spawn grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:50
+msgid "Heal grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:58
+msgid "Monster grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:66
+msgid "Entrap grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.inc:74
+msgid "Veil grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/nades/nades.qh:33
+msgid "Grenade"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/overkill/okhmg.qh:20
+msgid "Overkill Heavy Machine Gun"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/overkill/okmachinegun.qh:18
+msgid "Overkill MachineGun"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/overkill/oknex.qh:19
+msgid "Overkill Nex"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/overkill/okrpc.qh:20
+msgid "Overkill Rocket Propelled Chainsaw"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/overkill/okshotgun.qh:18
+msgid "Overkill Shotgun"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:3
+msgid "Waypoint"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:4
+msgid "Help me!"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:5
+msgid "Here"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:6
+msgid "DANGER"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:8
+msgid "Frozen!"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:10
+msgid "Item"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:12
+msgid "Checkpoint"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:13
+#: qcsrc/common/mutators/mutator/waypoints/waypointsprites.qc:240
+msgid "Finish"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:14
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:15
+#: qcsrc/common/mutators/mutator/waypoints/waypointsprites.qc:240
+msgid "Start"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:17
+msgid "Defend"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:18
+msgid "Destroy"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:19
+msgid "Push"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:21
+msgid "Flag carrier"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:22
+msgid "Enemy carrier"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:23
+msgid "Dropped flag"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:24
+msgid "White base"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:25
+msgid "Red base"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:26
+msgid "Blue base"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:27
+msgid "Yellow base"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:28
+msgid "Pink base"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:29
+msgid "Return flag here"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:31
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:32
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:33
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:34
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:35
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:51
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:52
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:53
+msgid "Control point"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:37
+msgid "Dropped key"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:38
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:40
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:41
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:42
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:43
+msgid "Key carrier"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:39
+msgid "Run here"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:45
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:48
+msgid "Ball"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:46
+msgid "Ball carrier"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:49
+msgid "Goal"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:54
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:55
+msgid "Generator"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:57
+msgid "Weapon"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:59
+msgid "Monster"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:61
+msgid "Vehicle"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:62
+msgid "Intruder!"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/all.inc:64
+msgid "Tagged"
+msgstr ""
+
+#: qcsrc/common/mutators/mutator/waypoints/waypointsprites.qc:697
+#, c-format
+msgid "%s needing help!"
+msgstr ""
+
+#: qcsrc/common/net_notice.qc:90
+msgid "^1Server notices:"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:230
+msgid "^F4NOTE: ^BGSpectator chat is not sent to players during the match"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:232
+#, c-format
+msgid "^BG%s^BG captured the ^TC^TT^BG flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:233
+#, c-format
+msgid ""
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
+"%s^BG's previous record of ^F2%s^BG seconds"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:234
+#, c-format
+msgid "^BG%s^BG captured the flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:235
+#, c-format
+msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:236
+#, c-format
+msgid ""
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
+"^BG%s^BG's previous record of ^F1%s^BG seconds"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:237
+msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:238
+msgid "^BGThe flag was returned by its owner"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:239
+msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:240
+msgid "^BGThe flag was destroyed and returned to base"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:241
+msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:242
+msgid "^BGThe flag was dropped in the base and returned itself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:243
+msgid ""
+"^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
+"base"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:244
+msgid "^BGThe flag fell somewhere it couldn't be reached and returned to base"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:245
+#, c-format
+msgid ""
+"^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
+"itself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:246
+#, c-format
+msgid ""
+"^BGThe flag became impatient after ^F1%.2f^BG seconds and returned itself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:247
+msgid "^BGThe ^TC^TT^BG flag has returned to the base"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:248
+msgid "^BGThe flag has returned to the base"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:249
+#, c-format
+msgid "^BG%s^BG lost the ^TC^TT^BG flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:250
+#, c-format
+msgid "^BG%s^BG lost the flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:251
+#, c-format
+msgid "^BG%s^BG got the ^TC^TT^BG flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:252
+#, c-format
+msgid "^BG%s^BG got the flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:253
+#: qcsrc/common/notifications/all.inc:254
+#, c-format
+msgid "^BG%s^BG returned the ^TC^TT^BG flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:256
+#: qcsrc/common/notifications/all.inc:544
+#, c-format
+msgid "^F2Throwing coin... Result: %s^F2!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:258
+msgid "^BGYou don't have any fuel for the ^F1Jetpack"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:260
+msgid "^F2You lack a UID, superspec options will not be saved/restored"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:262
+msgid "^F1Round already started, you will join the game in the next round"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:263
+msgid "^F2You will spectate in the next round"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:265
+#, c-format
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:265
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:266
+#, c-format
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:267
+#, c-format
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:268
+#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:269
+#, c-format
+msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:269
+#, c-format
+msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:270
+#, c-format
+msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:271
+#, c-format
+msgid "^BG%s%s^K1 was pushed in front of a monster by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:272
+#, c-format
+msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:273
+#, c-format
+msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:273
+#, c-format
+msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:274
+#, c-format
+msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:275
+#, c-format
+msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:276
+#, c-format
+msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:277
+#, c-format
+msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:278
+#, c-format
+msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:279
+#, c-format
+msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:280
+#, c-format
+msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:280
+#, c-format
+msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:281
+#, c-format
+msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:282
+#, c-format
+msgid ""
+"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:283
+#, c-format
+msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:284
+#, c-format
+msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:285
+#, c-format
+msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:286
+#, c-format
+msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:287
+#, c-format
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:288
+#, c-format
+msgid ""
+"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:289
+#, c-format
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:290
+#, c-format
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:291
+#, c-format
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:292
+#, c-format
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:293
+#, c-format
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:294
+#, c-format
+msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:296
+#, c-format
+msgid "^BG%s^K1 was moved into the %s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:297
+#, c-format
+msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:298
+#, c-format
+msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:299
+#, c-format
+msgid "^BG%s^K1 unfairly eliminated themself%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:301
+#, c-format
+msgid "^BG%s^K1 couldn't catch their breath%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:301
+#, c-format
+msgid "^BG%s^K1 was in the water for too long%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:302
+#, c-format
+msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:302
+#, c-format
+msgid "^BG%s^K1 hit the ground with a crunch%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:303
+#, c-format
+msgid "^BG%s^K1 became a bit too crispy%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:303
+#, c-format
+msgid "^BG%s^K1 felt a little hot%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:304
+#, c-format
+msgid "^BG%s^K1 died%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:305
+#, c-format
+msgid "^BG%s^K1 found a hot place%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:305
+#, c-format
+msgid "^BG%s^K1 turned into hot slag%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:306
+#, c-format
+msgid "^BG%s^K1 was exploded by a Mage%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:307
+#, c-format
+msgid "^BG%s^K1's innards became outwards by a Shambler%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:308
+#, c-format
+msgid "^BG%s^K1 was smashed by a Shambler%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:309
+#, c-format
+msgid "^BG%s^K1 was zapped to death by a Shambler%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:310
+#, c-format
+msgid "^BG%s^K1 was bitten by a Spider%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:311
+#, c-format
+msgid "^BG%s^K1 was fireballed by a Wyvern%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:312
+#, c-format
+msgid "^BG%s^K1 joins the Zombies%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:313
+#, c-format
+msgid "^BG%s^K1 was given kung fu lessons by a Zombie%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:314
+#: qcsrc/common/notifications/all.inc:316
+#, c-format
+msgid "^BG%s^K1 mastered the art of self-nading%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:315
+#, c-format
+msgid ""
+"^BG%s^K1 decided to take a look at the results of their napalm explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:315
+#, c-format
+msgid "^BG%s^K1 was burned to death by their own Napalm Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:317
+#, c-format
+msgid "^BG%s^K1 felt a little chilly%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:317
+#, c-format
+msgid "^BG%s^K1 was frozen to death by their own Ice Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:318
+#, c-format
+msgid "^BG%s^K1's Healing Nade didn't quite heal them%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:319
+#, c-format
+msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:319
+#, c-format
+msgid "^BG%s^K1 ran out of ammo%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:320
+#, c-format
+msgid "^BG%s^K1 rotted away%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:321
+#, c-format
+msgid "^BG%s^K1 became a shooting star%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:322
+#, c-format
+msgid "^BG%s^K1 was slimed%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:323
+#, c-format
+msgid "^BG%s^K1 couldn't take it anymore%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:324
+#, c-format
+msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:325
+#, c-format
+msgid "^BG%s^K1 switched to the %s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:326
+#, c-format
+msgid "^BG%s^K1 died in an accident%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:327
+#, c-format
+msgid "^BG%s^K1 ran into a turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:328
+#, c-format
+msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:329
+#, c-format
+msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:330
+#, c-format
+msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:331
+#, c-format
+msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:332
+#, c-format
+msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:333
+#, c-format
+msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:334
+#, c-format
+msgid "^BG%s^K1 was phased out by a turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:335
+#, c-format
+msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:336
+#, c-format
+msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:337
+#, c-format
+msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:338
+#, c-format
+msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:339
+#, c-format
+msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:340
+#, c-format
+msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:341
+#, c-format
+msgid "^BG%s^K1 was crushed by a vehicle%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:342
+#, c-format
+msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:343
+#, c-format
+msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:344
+#, c-format
+msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:345
+#, c-format
+msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:346
+#, c-format
+msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:347
+#, c-format
+msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:350
+#, c-format
+msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:352
+#, c-format
+msgid "^BG%s^BG%s^BG (%s %s every %s seconds)"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:354
+#, c-format
+msgid "^BG%s^K1 was frozen by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:355
+#, c-format
+msgid "^BG%s^K3 was revived by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:356
+#, c-format
+msgid "^BG%s^K3 was revived by falling"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:357
+#, c-format
+msgid "^BG%s^K3 was revived by their Nade explosion"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:358
+#, c-format
+msgid "^BG%s^K3 was automatically revived after %s seconds"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:359
+#, c-format
+msgid "^BG%s^K1 froze themself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:361
+#: qcsrc/common/notifications/all.inc:675
+msgid "^TC^TT^BG team wins the round"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:362
+#: qcsrc/common/notifications/all.inc:676
+#, c-format
+msgid "^BG%s^BG wins the round"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:363
+#: qcsrc/common/notifications/all.inc:539
+msgid "^BGRound tied"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:364
+#: qcsrc/common/notifications/all.inc:540
+msgid "^BGRound over, there's no winner"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:366
+#, c-format
+msgid "^BGGodmode saved you %s units of damage, cheater!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:368
+#, c-format
+msgid "^BG%s^BG got the %s^BG buff!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:369
+#, c-format
+msgid "^BG%s^BG lost the %s^BG buff!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:370
+#: qcsrc/common/notifications/all.inc:683
+#, c-format
+msgid "^BGYou dropped the %s^BG buff!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:371
+#: qcsrc/common/notifications/all.inc:684
+#, c-format
+msgid "^BGYou got the %s^BG buff!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:373
+#: qcsrc/common/notifications/all.inc:687
+#, c-format
+msgid "^BGYou do not have the ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:374
+#: qcsrc/common/notifications/all.inc:688
+#, c-format
+msgid "^BGYou dropped the ^F1%s^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:375
+#: qcsrc/common/notifications/all.inc:689
+#, c-format
+msgid "^BGYou got the ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:376
+#: qcsrc/common/notifications/all.inc:690
+#, c-format
+msgid "^BGYou don't have enough ammo for the ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:377
+#: qcsrc/common/notifications/all.inc:691
+#, c-format
+msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:378
+#: qcsrc/common/notifications/all.inc:692
+#, c-format
+msgid "^F1%s^BG is ^F4not available^BG on this map"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:380
+#, c-format
+msgid "^BG%s^BG is connecting..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:381
+#, c-format
+msgid "^BG%s^F3 connected"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:382
+#, c-format
+msgid "^BG%s^F3 is now playing"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:383
+#, c-format
+msgid "^BG%s^F3 is now playing on the ^TC^TT team"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:385
+#: qcsrc/common/notifications/all.inc:697
+#, c-format
+msgid "^BG%s^BG has dropped the ball!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:386
+#: qcsrc/common/notifications/all.inc:698
+#, c-format
+msgid "^BG%s^BG has picked up the ball!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:388
+#, c-format
+msgid "^BG%s^BG captured the keys for the ^TC^TT team"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:389
+#, c-format
+msgid "^BG%s^BG dropped the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:390
+#, c-format
+msgid "^BG%s^BG lost the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:391
+#, c-format
+msgid "^BG%s^BG pushed %s^BG causing the ^TC^TT Key ^BGdestruction"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:392
+#, c-format
+msgid "^BG%s^BG destroyed the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:393
+#, c-format
+msgid "^BG%s^BG picked up the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:395
+#, c-format
+msgid "^BG%s^F3 forfeited"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:396
+#, c-format
+msgid "^BG%s^F3 has no more lives left"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:398
+msgid "^BGMonsters are currently disabled"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:400
+msgid "^BGThe ^TC^TT^BG team held the ball for too long"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:402
+#, c-format
+msgid "^BG%s^BG captured %s^BG control point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:403
+#, c-format
+msgid "^BG%s^BG captured a control point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:404
+#, c-format
+msgid "^TC^TT^BG team %s^BG control point has been destroyed by %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:405
+#, c-format
+msgid "^TC^TT^BG team control point has been destroyed by %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:406
+msgid "^TC^TT^BG generator has been destroyed"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:407
+msgid "^TC^TT^BG generator spontaneously combusted due to overtime!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:409
+#, c-format
+msgid "^BG%s^K1 picked up Invisibility"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:410
+#, c-format
+msgid "^BG%s^K1 picked up Shield"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:411
+#, c-format
+msgid "^BG%s^K1 picked up Speed"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:412
+#, c-format
+msgid "^BG%s^K1 picked up Strength"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:414
+#, c-format
+msgid "^BG%s^F3 disconnected"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:415
+#, c-format
+msgid "^BG%s^F3 was kicked for idling"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:416
+msgid ""
+"^F2You were kicked from the server because you are a spectator and "
+"spectators aren't allowed at the moment."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:417
+#, c-format
+msgid "^BG%s^F3 was kicked for excessive teamkilling"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:418
+#, c-format
+msgid "^BG%s^F3 is now spectating"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:420
+#, c-format
+msgid "^BG%s^BG has abandoned the race"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:421
+#, c-format
+msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:422
+#, c-format
+msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:423
+#, c-format
+msgid "^BG%s^BG has finished the race"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:424
+#, c-format
+msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:425
+#, c-format
+msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:426
+#, c-format
+msgid ""
+"^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
+"and will be lost."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:427
+#, c-format
+msgid ""
+"^BG%s^BG scored a new record with ^F2%s^BG, but is anonymous and will be "
+"lost."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:428
+#, c-format
+msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:430
+#, c-format
+msgid ""
+"^F4You have been invited by ^BG%s^F4 to join their game of ^F2%s^F4 "
+"(^F1%s^F4)"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:432
+msgid "^TC^TT ^BGteam scores!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:434
+#, c-format
+msgid ""
+"^F2You have to become a player within the next %s, otherwise you will be "
+"kicked, because spectating isn't allowed at this time!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:436
+#, c-format
+msgid "^BG%s^K1 picked up a Superweapon"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:438
+msgid "^BGYou cannot change to a larger team"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:439
+msgid "^BGYou are not allowed to change teams"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:441
+#, c-format
+msgid ""
+"^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
+"^F2Xonotic %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:442
+#, c-format
+msgid ""
+"^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:443
+#, c-format
+msgid ""
+"^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
+"the update from ^F3http://www.xonotic.org/^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:445
+#, c-format
+msgid "^F3SVQC Build information: ^F4%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:447
+#, c-format
+msgid ""
+"^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:448
+#, c-format
+msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:449
+#, c-format
+msgid "^BG%s%s^K1 was electrocuted by ^BG%s^K1's Arc%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:450
+#, c-format
+msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Arc bolts%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:451
+#, c-format
+msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Blaster%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:452
+#, c-format
+msgid "^BG%s^K1 shot themself to hell with their Blaster%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:453
+#, c-format
+msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:454
+#, c-format
+msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:455
+#, c-format
+msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:456
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's rocket%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:457
+#, c-format
+msgid "^BG%s^K1 blew themself up with their Devastator%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:458
+#, c-format
+msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:459
+#, c-format
+msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:460
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro orb%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:461
+#, c-format
+msgid "^BG%s^K1 played with Electro bolts%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:462
+#, c-format
+msgid "^BG%s^K1 could not remember where they put their Electro orb%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:463
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:464
+#, c-format
+msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:465
+#, c-format
+msgid "^BG%s^K1 should have used a smaller gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:466
+#, c-format
+msgid "^BG%s^K1 forgot about their firemine%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:467
+#, c-format
+msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:468
+#, c-format
+msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:469
+#, c-format
+msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:470
+#, c-format
+msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:471
+#, c-format
+msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:472
+#, c-format
+msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:473
+#, c-format
+msgid ""
+"^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:474
+#, c-format
+msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:475
+#, c-format
+msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:476
+#, c-format
+msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:477
+#: qcsrc/common/notifications/all.inc:782
+#, c-format
+msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:478
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:479
+#, c-format
+msgid "^BG%s^K1 forgot about their mine%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:480
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:481
+#, c-format
+msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:482
+#, c-format
+msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:483
+#, c-format
+msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:484
+#, c-format
+msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Overkill Heavy Machine Gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:485
+#, c-format
+msgid ""
+"^BG%s%s^K1 was torn to bits by ^BG%s^K1's Overkill Heavy Machine Gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:486
+#, c-format
+msgid ""
+"^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Overkill Machine Gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:487
+#, c-format
+msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Overkill Nex%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:488
+#, c-format
+msgid ""
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
+"%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:489
+#, c-format
+msgid ""
+"^BG%s%s^K1 almost dodged ^BG%s^K1's Overkill Rocket Propelled Chainsaw%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:490
+#, c-format
+msgid ""
+"^BG%s^K1 was sawn in half by their own Overkill Rocket Propelled Chainsaw%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:491
+#, c-format
+msgid ""
+"^BG%s^K1 blew themself up with their Overkill Rocket Propelled Chainsaw%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:493
+#, c-format
+msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Overkill Shotgun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:494
+#, c-format
+msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:495
+#, c-format
+msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:496
+#, c-format
+msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:497
+#, c-format
+msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:498
+#, c-format
+msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:499
+#, c-format
+msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:500
+#, c-format
+msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:501
+#, c-format
+msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shockwave%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:502
+#, c-format
+msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shockwave%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:503
+#, c-format
+msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:504
+#, c-format
+msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:505
+#, c-format
+msgid "^BG%s^K1 is now thinking with portals%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:506
+#, c-format
+msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:507
+#, c-format
+msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:508
+#, c-format
+msgid "^BG%s%s^K1 has been sublimated by ^BG%s^K1's Vaporizer%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:509
+#, c-format
+msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Vortex%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:528
+msgid "^F4You are now alone!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:530
+msgid "^BGYou are attacking!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:531
+msgid "^BGYou are defending!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:532
+#, c-format
+msgid "^BGObjective destroyed in ^F4%s^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:534
+msgid "^F4Begin!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:535
+msgid "^F4Game starts in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:536
+msgid "^F4Round starts in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:537
+msgid "^F4Round cannot start"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:542
+msgid "^F2Don't camp!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:546
+msgid ""
+"^BGYou are now free.\n"
+"^BGFeel free to ^F2try to capture^BG the flag again\n"
+"^BGif you think you will succeed."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:547
+msgid "^BGThis flag is currently inactive"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:548
+msgid ""
+"^BGYou are now ^F1shielded^BG from the flag(s)\n"
+"^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
+"^BGMake some defensive scores before trying again."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:549
+msgid "^BGYou captured the ^TC^TT^BG flag!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:550
+msgid "^BGYou captured the flag!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:551
+#, c-format
+msgid "^BGToo many flag throws! Throwing disabled for %s."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:552
+#, c-format
+msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:553
+#, c-format
+msgid "^BG%s^BG passed the flag to %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:554
+#, c-format
+msgid "^BGYou received the ^TC^TT^BG flag from %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:555
+#, c-format
+msgid "^BGYou received the flag from %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:556
+#, c-format
+msgid "^BGPress ^F2%s^BG to receive the flag from %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:557
+#, c-format
+msgid "^BGRequesting %s^BG to pass you the flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:558
+#, c-format
+msgid "^BGYou passed the ^TC^TT^BG flag to %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:559
+#, c-format
+msgid "^BGYou passed the flag to %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:560
+msgid "^BGYou got the ^TC^TT^BG flag!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:561
+msgid "^BGYou got the flag!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:562
+#, c-format
+msgid "^BGYou got your %steam^BG's flag, return it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:563
+#, c-format
+msgid "^BGYou got the %senemy^BG's flag, return it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:564
+#, c-format
+msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:565
+#, c-format
+msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:566
+#, c-format
+msgid "^BGThe %senemy^BG got the flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:567
+#, c-format
+msgid "^BGThe %senemy (^BG%s%s)^BG got the flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:568
+#, c-format
+msgid "^BGThe %senemy^BG got their flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:569
+#, c-format
+msgid "^BGThe %senemy (^BG%s%s)^BG got their flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:570
+#, c-format
+msgid "^BGYour %steam mate^BG got the ^TC^TT^BG flag! Protect them!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:571
+#, c-format
+msgid "^BGYour %steam mate (^BG%s%s)^BG got the ^TC^TT^BG flag! Protect them!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:572
+#, c-format
+msgid "^BGYour %steam mate^BG got the flag! Protect them!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:573
+#, c-format
+msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:574
+msgid "^BGEnemies can now see you on radar!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:575
+msgid "^BGYou returned the ^TC^TT^BG flag!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:576
+msgid "^BGStalemate! Enemies can now see you on radar!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:577
+msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:581
+#, c-format
+msgid "^K3%sYou fragged ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:582
+#: qcsrc/common/notifications/all.inc:591
+#: qcsrc/common/notifications/all.inc:600
+#, c-format
+msgid "^K3%sYou scored against ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:583
+#, c-format
+msgid "^K1%sYou were fragged by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:584
+#: qcsrc/common/notifications/all.inc:593
+#: qcsrc/common/notifications/all.inc:602
+#, c-format
+msgid "^K1%sYou were scored against by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:590
+#, c-format
+msgid "^K3%sYou burned ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:592
+#, c-format
+msgid "^K1%sYou were burned by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:599
+#, c-format
+msgid "^K3%sYou froze ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:601
+#, c-format
+msgid "^K1%sYou were frozen by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:608
+#, c-format
+msgid "^K1%sYou typefragged ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:609
+#, c-format
+msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:610
+#, c-format
+msgid "^K1%sYou were typefragged by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:611
+#, c-format
+msgid "^K1%sYou were scored against by ^BG%s^K1 while typing"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:617
+#, c-format
+msgid "^BGPress ^F2%s^BG again to toss the nade!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:618
+msgid "^F2You got a ^K1BONUS GRENADE^F2!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:620
+#, c-format
+msgid ""
+"^BGYou have been moved into a different team\n"
+"You are now on: %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:621
+msgid "^K1Don't go against your team mates!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:621
+msgid "^K1Don't shoot your team mates!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:622
+msgid "^K1Die camper!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:622
+msgid "^K1Reconsider your tactics, camper!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:623
+msgid "^K1You unfairly eliminated yourself!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:624
+#, c-format
+msgid "^K1You were %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:625
+msgid "^K1You couldn't catch your breath!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:626
+msgid "^K1You hit the ground with a crunch!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:627
+msgid "^K1You felt a little too hot!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:627
+msgid "^K1You got a little bit too crispy!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:628
+msgid "^K1You killed your own dumb self!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:628
+msgid "^K1You need to be more careful!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:629
+msgid "^K1You couldn't stand the heat!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:630
+msgid "^K1You need to watch out for monsters!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:630
+msgid "^K1You were killed by a monster!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:631
+msgid "^K1Tastes like chicken!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:631
+msgid "^K1You forgot to put the pin back in!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:632
+msgid "^K1Hanging around a napalm explosion is bad!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:633
+msgid "^K1You felt a little chilly!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:633
+msgid "^K1You got a little bit too cold!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:634
+msgid "^K1Your Healing Nade is a bit defective"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:635
+msgid "^K1You are respawning for running out of ammo..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:635
+msgid "^K1You were killed for running out of ammo..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:636
+msgid "^K1You grew too old without taking your medicine"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:636
+msgid "^K1You need to preserve your health"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:637
+msgid "^K1You became a shooting star!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:638
+msgid "^K1You melted away in slime!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:639
+msgid "^K1You committed suicide!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:639
+msgid "^K1You ended it all!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:640
+msgid "^K1You got stuck in a swamp!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:641
+#, c-format
+msgid "^BGYou are now on: %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:642
+msgid "^K1You died in an accident!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:643
+msgid "^K1You had an unfortunate run in with a turret!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:643
+msgid "^K1You were fragged by a turret!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:644
+msgid "^K1You had an unfortunate run in with an eWheel turret!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:644
+msgid "^K1You were fragged by an eWheel turret!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:645
+msgid "^K1You had an unfortunate run in with a Walker turret!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:645
+msgid "^K1You were fragged by a Walker turret!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:646
+msgid "^K1You got caught in the blast of a Bumblebee explosion!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:647
+msgid "^K1You were crushed by a vehicle!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:648
+msgid "^K1You were caught in a Raptor cluster bomb!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:649
+msgid "^K1You got caught in the blast of a Raptor explosion!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:650
+msgid "^K1You got caught in the blast of a Spiderbot explosion!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:651
+msgid "^K1You were blasted to bits by a Spiderbot rocket!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:652
+msgid "^K1You got caught in the blast of a Racer explosion!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:653
+msgid "^K1You couldn't find shelter from a Racer rocket!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:654
+msgid "^K1Watch your step!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:656
+#, c-format
+msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:656
+#, c-format
+msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:657
+#, c-format
+msgid "^K1You were fragged by ^BG%s^K1, a team mate"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:657
+#, c-format
+msgid "^K1You were scored against by ^BG%s^K1, a team mate"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:659
+msgid ""
+"^K1Stop idling!\n"
+"^BGDisconnecting in ^COUNT..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:661
+#, c-format
+msgid "^BGYou need %s^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:662
+#, c-format
+msgid "^BGYou also need %s^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:663
+msgid "^BGDoor unlocked!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:665
+#, c-format
+msgid "^F2Extra lives taken: ^K1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:667
+#, c-format
+msgid "^K3You revived ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:668
+msgid "^K3You revived yourself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:669
+#, c-format
+msgid "^K3You were revived by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:670
+#, c-format
+msgid "^K3You were automatically revived after %s seconds"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:672
+msgid "^BGThe generator is under attack!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:674
+msgid "^TC^TT^BG team loses the round"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:678
+msgid "^K1You froze yourself"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:679
+msgid "^K1Round already started, you spawn as frozen"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:681
+#, c-format
+msgid "^K1A %s has arrived!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:685
+msgid "^BGYou got the ^F1Fuel regenerator"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:686
+msgid "^BGYou got the ^F1Jetpack"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:694
+msgid ""
+"^K1No spawnpoints available!\n"
+"Hope your team can fix it..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:695
+msgid ""
+"^K1You may not join the game at this time.\n"
+"The player limit reached maximum capacity."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:699
+msgid "^BGYou picked up the ball"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:700
+msgid "^BGKilling people while you don't have the ball gives no points!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:702
+msgid ""
+"^BGAll keys are in your team's hands!\n"
+"Help the key carriers to meet!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:703
+msgid ""
+"^BGAll keys are in ^TC^TT team^BG's hands!\n"
+"Interfere ^F4NOW^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:704
+msgid ""
+"^BGAll keys are in your team's hands!\n"
+"Meet the other key carriers ^F4NOW^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:705
+msgid "^F4Round will start in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:706
+msgid "^BGScanning frequency range..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:707
+msgid "^BGYou are starting with the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:709
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:711
+#, c-format
+msgid ""
+"^BGWaiting for players to join...\n"
+"Need active players for: %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:712
+#, c-format
+msgid "^BGWaiting for %s player(s) to join..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:714
+msgid "^BGYour weapon has been downgraded until you find some ammo!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:715
+msgid "^F4^COUNT^BG left to find some ammo!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:716
+msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:716
+msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:717
+#, c-format
+msgid "^F2Extra lives remaining: ^K1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:719 qcsrc/menu/xonotic/campaign.qc:244
+#, c-format
+msgid "Level %s: "
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:719
+#, c-format
+msgid "^BGPress ^F2%s^BG to enter the game"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:722
+#, c-format
+msgid ""
+"^F2^COUNT^BG until weapon change...\n"
+"Next weapon: ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:723
+#, c-format
+msgid "^F2Active weapon: ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:725
+#, c-format
+msgid "^BGYou captured %s^BG control point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:726
+msgid "^BGYou captured a control point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:727
+#, c-format
+msgid "^TC^TT^BG team captured %s^BG control point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:728
+msgid "^TC^TT^BG team captured a control point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:729
+msgid "^BGThis control point currently cannot be captured"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:730
+msgid ""
+"^BGThe enemy generator cannot be destroyed yet\n"
+"^F2Capture some control points to unshield it"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:731
+msgid "^BGThe ^TCenemy^BG generator is no longer shielded!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:732
+msgid ""
+"^K1Your generator is NOT shielded!\n"
+"^BGRe-capture control points to shield it!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:733
+#, c-format
+msgid "^BGPress ^F2%s^BG to teleport"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:734
+#, c-format
+msgid "^BGTeleporting disabled for %s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:736
+msgid ""
+"^F2Now playing ^F4OVERTIME^F2!\n"
+"Keep fragging until we have a winner!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:736
+msgid ""
+"^F2Now playing ^F4OVERTIME^F2!\n"
+"Keep scoring until we have a winner!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:737
+msgid ""
+"^F2Now playing ^F4OVERTIME^F2!\n"
+"\n"
+"Generators are now decaying.\n"
+"The more control points your team holds,\n"
+"the faster the enemy generator decays"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:738
+#, c-format
+msgid ""
+"^F2Now playing ^F4OVERTIME^F2!\n"
+"^BGAdded ^F4%s^BG to the game!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:740
+msgid "^K1In^BG-portal created"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:741
+msgid "^F3Out^BG-portal created"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:742
+msgid "^F1Portal creation failed"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:744
+msgid "^F2Strength infuses your weapons with devastating power"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:745
+msgid "^F2Strength has worn off"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:747
+msgid "^F2Shield surrounds you"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:748
+msgid "^F2Shield has worn off"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:750
+msgid "^F2You are on speed"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:751
+msgid "^F2Speed has worn off"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:753
+msgid "^F2You are invisible"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:754
+msgid "^F2Invisibility has worn off"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:756
+msgid "^F2The race is over, finish your lap!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:758
+msgid "^BGSequence completed!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:759
+msgid "^BGThere are more to go..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:760
+#, c-format
+msgid "^BGOnly %s^BG more to go..."
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:762
+msgid "^F2Superweapons have broken down"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:763
+msgid "^F2Superweapons have been lost"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:764
+msgid "^F2You now have a superweapon"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:766
+msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:767
+msgid "^K1Changing team in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:768
+msgid "^K1Spectating in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:769
+msgid "^K1Suicide in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:771
+msgid "^F4Timeout begins in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:772
+msgid "^F4Timeout ends in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:774
+msgid "^K1Cannot join given minigame session!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:776
+#, c-format
+msgid "^BGPress ^F2%s^BG to enter/exit the vehicle"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:777
+#, c-format
+msgid "^BGPress ^F2%s^BG to enter the vehicle gunner"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:778
+#, c-format
+msgid "^BGPress ^F2%s^BG to steal this vehicle"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:779
+msgid ""
+"^F2The enemy is stealing one of your vehicles!\n"
+"^F4Stop them!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.inc:780
+msgid "^F2Intruder detected, disabling shields!"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:198
+msgid "Notification dump command only works with cl_cmd and sv_cmd."
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:408 qcsrc/common/notifications/all.qh:409
+#, c-format
+msgid " (near %s)"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:416 qcsrc/common/notifications/all.qh:417
+msgid "primary"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:416 qcsrc/common/notifications/all.qh:417
+msgid "secondary"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:419
+msgid "point"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:419
+msgid "points"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:428
+msgid "drop flag"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:429
+msgid "throw nade"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:455
+#, c-format
+msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:455
+#, c-format
+msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:455
+msgid "TRIPLE FRAG! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:456
+#, c-format
+msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:456
+#, c-format
+msgid "%s^K1 unlocked RAGE! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:456
+msgid "RAGE! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:457
+#, c-format
+msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:457
+#, c-format
+msgid "%s^K1 started a MASSACRE! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:457
+msgid "MASSACRE! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:458
+#, c-format
+msgid "%s^K1 executed MAYHEM! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:458
+#, c-format
+msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:458
+msgid "MAYHEM! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:459
+#, c-format
+msgid "%s^K1 is a BERSERKER! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:459
+#, c-format
+msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:459
+msgid "BERSERKER! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:460
+#, c-format
+msgid "%s^K1 inflicts CARNAGE! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:460
+#, c-format
+msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:460
+msgid "CARNAGE! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:461
+#, c-format
+msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:461
+#, c-format
+msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:461
+msgid "ARMAGEDDON! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:468
+#, c-format
+msgid "%s(^F1Bot^BG)"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:470
+#, c-format
+msgid "%s(Ping ^F1%d^BG)"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:477
+#, c-format
+msgid ""
+"\n"
+"(Health ^1%d^BG / Armor ^2%d^BG)%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:479
+#, c-format
+msgid ""
+"\n"
+"(^F4Dead^BG)%s"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:500 qcsrc/common/notifications/all.qh:513
+#, c-format
+msgid "%d score spree! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:512
+#, c-format
+msgid "%d frag spree! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:525
+msgid "First blood! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:525
+msgid "First score! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:529
+msgid "First casualty! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:529
+msgid "First victim! "
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:570
+#, c-format
+msgid "%s^K1 has %d frags in a row! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:571
+#, c-format
+msgid "%s^K1 made %d scores in a row! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:589
+#, c-format
+msgid "%s^K1 drew first blood! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:590
+#, c-format
+msgid "%s^K1 got the first score! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:606
+#, c-format
+msgid ", ending their %d frag spree"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:607
+#, c-format
+msgid ", ending their %d score spree"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:621
+#, c-format
+msgid ", losing their %d frag spree"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:622
+#, c-format
+msgid ", losing their %d score spree"
+msgstr ""
+
+#: qcsrc/common/notifications/all.qh:647
+#, c-format
+msgid " with %d %s"
+msgstr ""
+
+#: qcsrc/common/teams.qh:31
+msgid "TEAM^Red"
+msgstr ""
+
+#: qcsrc/common/teams.qh:32
+msgid "TEAM^Blue"
+msgstr ""
+
+#: qcsrc/common/teams.qh:33
+msgid "TEAM^Yellow"
+msgstr ""
+
+#: qcsrc/common/teams.qh:34
+msgid "TEAM^Pink"
+msgstr ""
+
+#: qcsrc/common/teams.qh:35
+msgid "Team"
+msgstr ""
+
+#: qcsrc/common/teams.qh:36
+msgid "Neutral"
+msgstr ""
+
+#: qcsrc/common/teams.qh:39
+msgid "KEY^Red"
+msgstr ""
+
+#: qcsrc/common/teams.qh:40
+msgid "KEY^Blue"
+msgstr ""
+
+#: qcsrc/common/teams.qh:41
+msgid "KEY^Yellow"
+msgstr ""
+
+#: qcsrc/common/teams.qh:42
+msgid "KEY^Pink"
+msgstr ""
+
+#: qcsrc/common/teams.qh:43
+msgid "FLAG^Red"
+msgstr ""
+
+#: qcsrc/common/teams.qh:44
+msgid "FLAG^Blue"
+msgstr ""
+
+#: qcsrc/common/teams.qh:45
+msgid "FLAG^Yellow"
+msgstr ""
+
+#: qcsrc/common/teams.qh:46
+msgid "FLAG^Pink"
+msgstr ""
+
+#: qcsrc/common/teams.qh:47
+msgid "GENERATOR^Red"
+msgstr ""
+
+#: qcsrc/common/teams.qh:48
+msgid "GENERATOR^Blue"
+msgstr ""
+
+#: qcsrc/common/teams.qh:49
+msgid "GENERATOR^Yellow"
+msgstr ""
+
+#: qcsrc/common/teams.qh:50
+msgid "GENERATOR^Pink"
+msgstr ""
+
+#: qcsrc/common/turrets/all.qh:95
+msgid "Turrets dump command only works with sv_cmd."
+msgstr ""
+
+#: qcsrc/common/turrets/cl_turrets.qc:125
+#, c-format
+msgid "%s under attack!"
+msgstr ""
+
+#: qcsrc/common/turrets/turret.qh:11
+msgid "Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/ewheel.qh:15
+msgid "eWheel Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/ewheel_weapon.qh:7
+msgid "eWheel"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/flac.qh:13
+msgid "FLAC Cannon"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/flac_weapon.qh:7
+msgid "FLAC"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/fusionreactor.qh:11
+msgid "Fusion Reactor"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/hellion.qh:13
+msgid "Hellion Missile Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/hellion_weapon.qh:7
+msgid "Hellion"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/hk.qh:15
+msgid "Hunter-Killer Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/hk_weapon.qh:7
+msgid "Hunter-Killer"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/machinegun.qh:13
+msgid "Machinegun Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/machinegun_weapon.qh:7
+msgid "Machinegun"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/mlrs.qh:13
+msgid "MLRS Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/mlrs_weapon.qh:7
+msgid "MLRS"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/phaser.qh:13
+msgid "Phaser Cannon"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/phaser_weapon.qh:7
+msgid "Phaser"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/plasma.qh:13
+msgid "Plasma Cannon"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/plasma_dual.qh:8
+msgid "Dual plasma"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/plasma_dual.qh:20
+msgid "Dual Plasma Cannon"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/plasma_weapon.qh:7
+msgid "Plasma"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/tesla.qh:13
+#: qcsrc/common/turrets/turret/tesla_weapon.qh:7
+msgid "Tesla Coil"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/walker.qh:15
+msgid "Walker Turret"
+msgstr ""
+
+#: qcsrc/common/turrets/turret/walker_weapon.qh:7
+msgid "Walker"
+msgstr ""
+
+#: qcsrc/common/util.qc:1390
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:176
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:186
+msgid "Male"
+msgstr ""
+
+#: qcsrc/common/util.qc:1391
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:175
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:185
+msgid "Female"
+msgstr ""
+
+#: qcsrc/common/util.qc:1392
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:174
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:187
+msgid "Undisclosed"
+msgstr ""
+
+#: qcsrc/common/util.qc:1439
+msgid "<KEY NOT FOUND>"
+msgstr ""
+
+#: qcsrc/common/util.qc:1440
+msgid "<UNKNOWN KEYNUM>"
+msgstr ""
+
+#: qcsrc/common/util.qc:1445
+msgid "TAB"
+msgstr ""
+
+#: qcsrc/common/util.qc:1446 qcsrc/common/util.qc:1517
+#, c-format
+msgid "ENTER"
+msgstr ""
+
+#: qcsrc/common/util.qc:1447
+msgid "ESCAPE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1448
+msgid "SPACE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1450
+msgid "BACKSPACE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1451 qcsrc/common/util.qc:1508
+#, c-format
+msgid "UPARROW"
+msgstr ""
+
+#: qcsrc/common/util.qc:1452 qcsrc/common/util.qc:1503
+#, c-format
+msgid "DOWNARROW"
+msgstr ""
+
+#: qcsrc/common/util.qc:1453 qcsrc/common/util.qc:1505
+#, c-format
+msgid "LEFTARROW"
+msgstr ""
+
+#: qcsrc/common/util.qc:1454 qcsrc/common/util.qc:1506
+#, c-format
+msgid "RIGHTARROW"
+msgstr ""
+
+#: qcsrc/common/util.qc:1456
+msgid "ALT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1457
+msgid "CTRL"
+msgstr ""
+
+#: qcsrc/common/util.qc:1458
+msgid "SHIFT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1460 qcsrc/common/util.qc:1501
+#, c-format
+msgid "INS"
+msgstr ""
+
+#: qcsrc/common/util.qc:1461 qcsrc/common/util.qc:1511
+#, c-format
+msgid "DEL"
+msgstr ""
+
+#: qcsrc/common/util.qc:1462 qcsrc/common/util.qc:1504
+#, c-format
+msgid "PGDN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1463 qcsrc/common/util.qc:1509
+#, c-format
+msgid "PGUP"
+msgstr ""
+
+#: qcsrc/common/util.qc:1464 qcsrc/common/util.qc:1507
+#, c-format
+msgid "HOME"
+msgstr ""
+
+#: qcsrc/common/util.qc:1465 qcsrc/common/util.qc:1502
+#, c-format
+msgid "END"
+msgstr ""
+
+#: qcsrc/common/util.qc:1467
+msgid "PAUSE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1469
+msgid "NUMLOCK"
+msgstr ""
+
+#: qcsrc/common/util.qc:1470
+msgid "CAPSLOCK"
+msgstr ""
+
+#: qcsrc/common/util.qc:1471
+msgid "SCROLLOCK"
+msgstr ""
+
+#: qcsrc/common/util.qc:1473
+msgid "SEMICOLON"
+msgstr ""
+
+#: qcsrc/common/util.qc:1474
+msgid "TILDE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1475
+msgid "BACKQUOTE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1476
+msgid "QUOTE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1477
+msgid "APOSTROPHE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1478
+msgid "BACKSLASH"
+msgstr ""
+
+#: qcsrc/common/util.qc:1486
+#, c-format
+msgid "F%d"
+msgstr ""
+
+#: qcsrc/common/util.qc:1496
+#, c-format
+msgid "KP_%d"
+msgstr ""
+
+#: qcsrc/common/util.qc:1501 qcsrc/common/util.qc:1502
+#: qcsrc/common/util.qc:1503 qcsrc/common/util.qc:1504
+#: qcsrc/common/util.qc:1505 qcsrc/common/util.qc:1506
+#: qcsrc/common/util.qc:1507 qcsrc/common/util.qc:1508
+#: qcsrc/common/util.qc:1509 qcsrc/common/util.qc:1510
+#: qcsrc/common/util.qc:1511 qcsrc/common/util.qc:1512
+#: qcsrc/common/util.qc:1513 qcsrc/common/util.qc:1514
+#: qcsrc/common/util.qc:1515 qcsrc/common/util.qc:1516
+#: qcsrc/common/util.qc:1517 qcsrc/common/util.qc:1518
+#, c-format
+msgid "KP_%s"
+msgstr ""
+
+#: qcsrc/common/util.qc:1510
+#, c-format
+msgid "PERIOD"
+msgstr ""
+
+#: qcsrc/common/util.qc:1512
+#, c-format
+msgid "DIVIDE"
+msgstr ""
+
+#: qcsrc/common/util.qc:1513
+#, c-format
+msgid "SLASH"
+msgstr ""
+
+#: qcsrc/common/util.qc:1514
+#, c-format
+msgid "MULTIPLY"
+msgstr ""
+
+#: qcsrc/common/util.qc:1515
+#, c-format
+msgid "MINUS"
+msgstr ""
+
+#: qcsrc/common/util.qc:1516
+#, c-format
+msgid "PLUS"
+msgstr ""
+
+#: qcsrc/common/util.qc:1518
+#, c-format
+msgid "EQUALS"
+msgstr ""
+
+#: qcsrc/common/util.qc:1523
+msgid "PRINTSCREEN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1526
+#, c-format
+msgid "MOUSE%d"
+msgstr ""
+
+#: qcsrc/common/util.qc:1528
+msgid "MWHEELUP"
+msgstr ""
+
+#: qcsrc/common/util.qc:1529
+msgid "MWHEELDOWN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1532
+#, c-format
+msgid "JOY%d"
+msgstr ""
+
+#: qcsrc/common/util.qc:1535
+#, c-format
+msgid "AUX%d"
+msgstr ""
+
+#: qcsrc/common/util.qc:1542
+#, c-format
+msgid "DPAD_UP"
+msgstr ""
+
+#: qcsrc/common/util.qc:1542 qcsrc/common/util.qc:1543
+#: qcsrc/common/util.qc:1544 qcsrc/common/util.qc:1545
+#: qcsrc/common/util.qc:1546 qcsrc/common/util.qc:1547
+#: qcsrc/common/util.qc:1548 qcsrc/common/util.qc:1549
+#: qcsrc/common/util.qc:1550 qcsrc/common/util.qc:1551
+#: qcsrc/common/util.qc:1552 qcsrc/common/util.qc:1553
+#: qcsrc/common/util.qc:1554 qcsrc/common/util.qc:1555
+#: qcsrc/common/util.qc:1556 qcsrc/common/util.qc:1557
+#: qcsrc/common/util.qc:1558 qcsrc/common/util.qc:1559
+#: qcsrc/common/util.qc:1560 qcsrc/common/util.qc:1561
+#, c-format
+msgid "X360_%s"
+msgstr ""
+
+#: qcsrc/common/util.qc:1543
+#, c-format
+msgid "DPAD_DOWN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1544
+#, c-format
+msgid "DPAD_LEFT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1545
+#, c-format
+msgid "DPAD_RIGHT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1546
+#, c-format
+msgid "START"
+msgstr ""
+
+#: qcsrc/common/util.qc:1547
+#, c-format
+msgid "BACK"
+msgstr ""
+
+#: qcsrc/common/util.qc:1548
+#, c-format
+msgid "LEFT_THUMB"
+msgstr ""
+
+#: qcsrc/common/util.qc:1549
+#, c-format
+msgid "RIGHT_THUMB"
+msgstr ""
+
+#: qcsrc/common/util.qc:1550
+#, c-format
+msgid "LEFT_SHOULDER"
+msgstr ""
+
+#: qcsrc/common/util.qc:1551
+#, c-format
+msgid "RIGHT_SHOULDER"
+msgstr ""
+
+#: qcsrc/common/util.qc:1552
+#, c-format
+msgid "LEFT_TRIGGER"
+msgstr ""
+
+#: qcsrc/common/util.qc:1553
+#, c-format
+msgid "RIGHT_TRIGGER"
+msgstr ""
+
+#: qcsrc/common/util.qc:1554
+#, c-format
+msgid "LEFT_THUMB_UP"
+msgstr ""
+
+#: qcsrc/common/util.qc:1555
+#, c-format
+msgid "LEFT_THUMB_DOWN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1556
+#, c-format
+msgid "LEFT_THUMB_LEFT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1557
+#, c-format
+msgid "LEFT_THUMB_RIGHT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1558
+#, c-format
+msgid "RIGHT_THUMB_UP"
+msgstr ""
+
+#: qcsrc/common/util.qc:1559
+#, c-format
+msgid "RIGHT_THUMB_DOWN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1560
+#, c-format
+msgid "RIGHT_THUMB_LEFT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1561
+#, c-format
+msgid "RIGHT_THUMB_RIGHT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1571 qcsrc/common/util.qc:1572
+#: qcsrc/common/util.qc:1573 qcsrc/common/util.qc:1574
+#, c-format
+msgid "JOY_%s"
+msgstr ""
+
+#: qcsrc/common/util.qc:1571
+#, c-format
+msgid "UP"
+msgstr ""
+
+#: qcsrc/common/util.qc:1572
+#, c-format
+msgid "DOWN"
+msgstr ""
+
+#: qcsrc/common/util.qc:1573
+#, c-format
+msgid "LEFT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1574
+#, c-format
+msgid "RIGHT"
+msgstr ""
+
+#: qcsrc/common/util.qc:1580
+#, c-format
+msgid "MIDINOTE%d"
+msgstr ""
+
+#: qcsrc/common/vehicles/cl_vehicles.qc:190
+#, c-format
+msgid "Press %s"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/bumblebee.qc:954
+msgid "No right gunner!"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/bumblebee.qc:960
+msgid "No left gunner!"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/bumblebee.qh:19
+msgid "Bumblebee"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/racer.qh:19
+msgid "Racer"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/racer_weapon.qh:9
+msgid "Racer cannon"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/raptor.qh:19
+msgid "Raptor"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/raptor_weapons.qh:9
+msgid "Raptor cannon"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/raptor_weapons.qh:17
+msgid "Raptor bomb"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/raptor_weapons.qh:25
+msgid "Raptor flare"
+msgstr ""
+
+#: qcsrc/common/vehicles/vehicle/spiderbot.qh:19
+msgid "Spiderbot"
+msgstr ""
+
+#: qcsrc/common/weapons/all.qh:76
+msgid "Weapons dump command only works with sv_cmd."
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/arc.qh:18
+msgid "Arc"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/blaster.qh:18
+msgid "Blaster"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/crylink.qh:18
+msgid "Crylink"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/devastator.qh:18
+msgid "Devastator"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/electro.qh:18
+msgid "Electro"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/fireball.qh:18
+msgid "Fireball"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/hagar.qh:18
+msgid "Hagar"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/hlac.qh:18
+msgid "Heavy Laser Assault Cannon"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/hook.qh:18
+msgid "Grappling Hook"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/machinegun.qh:18
+msgid "MachineGun"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/minelayer.qh:18
+msgid "Mine Layer"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/mortar.qh:18
+msgid "Mortar"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/porto.qh:18
+msgid "Port-O-Launch"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/rifle.qh:19
+msgid "Rifle"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/seeker.qh:18
+msgid "T.A.G. Seeker"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/shockwave.qh:18
+msgid "Shockwave"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/shotgun.qh:18
+msgid "Shotgun"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/tuba.qh:18
+#, no-c-format
+msgid "@!#%'n Tuba"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/vaporizer.qh:19
+msgid "Vaporizer"
+msgstr ""
+
+#: qcsrc/common/weapons/weapon/vortex.qh:19
+msgid "Vortex"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:9
+#, c-format
+msgid "CI_DEC^%s years"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:12
+#, c-format
+msgid "CI_ZER^%d years"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:13
+#, c-format
+msgid "CI_FIR^%d year"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:14
+#, c-format
+msgid "CI_SEC^%d years"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:15
+#, c-format
+msgid "CI_THI^%d years"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:16
+#, c-format
+msgid "CI_MUL^%d years"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:18
+#, c-format
+msgid "CI_DEC^%s weeks"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:21
+#, c-format
+msgid "CI_ZER^%d weeks"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:22
+#, c-format
+msgid "CI_FIR^%d week"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:23
+#, c-format
+msgid "CI_SEC^%d weeks"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:24
+#, c-format
+msgid "CI_THI^%d weeks"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:25
+#, c-format
+msgid "CI_MUL^%d weeks"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:27
+#, c-format
+msgid "CI_DEC^%s days"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:30
+#, c-format
+msgid "CI_ZER^%d days"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:31
+#, c-format
+msgid "CI_FIR^%d day"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:32
+#, c-format
+msgid "CI_SEC^%d days"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:33
+#, c-format
+msgid "CI_THI^%d days"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:34
+#, c-format
+msgid "CI_MUL^%d days"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:36
+#, c-format
+msgid "CI_DEC^%s hours"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:39
+#, c-format
+msgid "CI_ZER^%d hours"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:40
+#, c-format
+msgid "CI_FIR^%d hour"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:41
+#, c-format
+msgid "CI_SEC^%d hours"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:42
+#, c-format
+msgid "CI_THI^%d hours"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:43
+#, c-format
+msgid "CI_MUL^%d hours"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:46
+#, c-format
+msgid "CI_DEC^%s minutes"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:49
+#, c-format
+msgid "CI_ZER^%d minutes"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:50
+#, c-format
+msgid "CI_FIR^%d minute"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:51
+#, c-format
+msgid "CI_SEC^%d minutes"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:52
+#, c-format
+msgid "CI_THI^%d minutes"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:53
+#, c-format
+msgid "CI_MUL^%d minutes"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:55
+#, c-format
+msgid "CI_DEC^%s seconds"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:58
+#, c-format
+msgid "CI_ZER^%d seconds"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:59
+#, c-format
+msgid "CI_FIR^%d second"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:60
+#, c-format
+msgid "CI_SEC^%d seconds"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:61
+#, c-format
+msgid "CI_THI^%d seconds"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:62
+#, c-format
+msgid "CI_MUL^%d seconds"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:79
+#, c-format
+msgid "%dst"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:80
+#, c-format
+msgid "%dnd"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:81
+#, c-format
+msgid "%drd"
+msgstr ""
+
+#: qcsrc/lib/counting.qh:85
+#, c-format
+msgid "%dth"
+msgstr ""
+
+#: qcsrc/lib/oo.qh:324
+msgid "No description"
+msgstr ""
+
+#: qcsrc/lib/spawnfunc.qh:248
+#, c-format
+msgid ""
+"Entity field %s.%s (%s) is not whitelisted. If you believe this is an error, "
+"please file an issue."
+msgstr ""
+
+#: qcsrc/lib/string.qh:81
+#, c-format
+msgid "%d days, %02d:%02d:%02d"
+msgstr ""
+
+#: qcsrc/lib/string.qh:82
+#, c-format
+msgid "%02d:%02d:%02d"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:48
+msgid "Usage: menu_cmd command..., where possible commands are:"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:49
+msgid " sync - reloads all cvars on the current menu page"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:50
+msgid " directmenu ITEM - select a menu item as main item"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:51
+msgid " dumptree - dump the state of the menu as a tree to the console"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:81
+msgid "Available options:"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:130
+msgid "Invalid command. For a list of supported commands, try menu_cmd help."
+msgstr ""
+
+#: qcsrc/menu/item/listbox.qc:413
+#, c-format
+msgid "Item %d"
+msgstr ""
+
+#: qcsrc/menu/item/textslider.qc:11 qcsrc/menu/item/textslider.qc:12
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:37
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:68
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:115
+msgid "Custom"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:4
+msgid "Core Team"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:15
+msgid "Extended Team"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:46
+msgid "Website"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:51
+msgid "Stats"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:55
+msgid "Art"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:63
+msgid "Animation"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:67
+msgid "Level Design"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:90
+msgid "Music / Sound FX"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:106
+msgid "Game Code"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:114
+msgid "Marketing / PR"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:120
+msgid "Legal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:125
+msgid "Game Engine"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:129
+msgid "Engine Additions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:135
+msgid "Compiler"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:141
+msgid "Other Active Contributors"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:148
+msgid "Translators"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:150
+msgid "Asturian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:155
+msgid "Belarusian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:158
+msgid "Bulgarian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:165
+msgid "Chinese (China)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:171
+msgid "Chinese (Taiwan)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:176
+msgid "Cornish"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:179
+msgid "Czech"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:184
+msgid "Dutch"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:191
+msgid "English (Australia)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:196
+msgid "Finnish"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:201
+msgid "French"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:209
+msgid "German"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:220
+msgid "Greek"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:226
+msgid "Hungarian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:230
+msgid "Irish"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:233
+msgid "Italian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:239
+msgid "Kazakh"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:242
+msgid "Korean"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:246
+msgid "Polish"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:254
+msgid "Portuguese"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:260
+msgid "Romanian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:267
+msgid "Russian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:278
+msgid "Scottish Gaelic"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:281
+msgid "Serbian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:287
+msgid "Spanish"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:298
+msgid "Swedish"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:302
+msgid "Ukrainian"
+msgstr ""
+
+#: qcsrc/menu/xonotic/credits.qc:309
+msgid "Past Contributors"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.qc:73
+msgid "forced to be saved to config.cfg"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.qc:79 qcsrc/menu/xonotic/cvarlist.qc:89
+msgid "will not be saved"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.qc:84
+msgid "will be saved to config.cfg"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.qc:93
+msgid "private"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.qc:95
+msgid "engine setting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.qc:97
+msgid "read only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_credits.qc:13
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:38
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:303
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:85
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:75
+#: qcsrc/menu/xonotic/dialog_singleplayer_winner.qc:14
+msgid "OK"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_credits.qh:7
+msgid "Credits"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_credits.qh:8
+msgid "The Xonotic credits"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_disconnect.qc:16
+msgid "Are you sure to disconnect from server?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_disconnect.qc:19
+msgid "I would disconnect from server..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_disconnect.qc:22
+msgid "I would play more!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_disconnect.qh:6
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qh:6
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qh:6
+msgid "Disconnect"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_disconnect.qh:7
+msgid "Disconnect from the server you are connected to"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:39
+msgid ""
+"Welcome to Xonotic, please select your language preference and enter your "
+"player name to get started. You can change these options later through the "
+"menu system."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:45
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:28
+msgid "Name:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:62
+msgid "Name under which you will appear in the game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:69
+msgid "Text language:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:78
+msgid "Allow player statistics to use your nickname at stats.xonotic.org?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:84
+msgid "Undecided"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qc:88
+msgid "Save settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.qh:6
+msgid "Welcome"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:18
+msgid "Ammunition display:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:21
+msgid "Show only current ammo type"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:46
+msgid "Noncurrent alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:50
+msgid "Noncurrent scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "Align icon:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qc:21
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:57
+msgid "Left"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qc:23
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:59
+msgid "Right"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qh:6
+msgid "Ammo Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:19
+msgid "Message duration:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:23
+msgid "Fade time:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:27
+msgid "Flip messages order"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qc:18
+msgid "Text alignment:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qc:22
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:70
+msgid "Center"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:37
+msgid "Font scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qh:6
+msgid "Centerprint Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:17
+msgid "Chat entries:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:20
+msgid "Chat size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:24
+msgid "Chat lifetime:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:28
+msgid "Chat beep sound"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.qh:6
+msgid "Chat Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.qc:16
+msgid "Engine info:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.qc:19
+msgid "Use an averaging algorithm for fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.qh:6
+msgid "Engine Info Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:17
+msgid "Combine health and armor"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:19
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:17
+msgid "Enable status bar"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:19
+msgid "Status bar alignment:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:37
+msgid "Inward"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:38
+msgid "Outward"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:32
+msgid "Icon alignment:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:42
+msgid "Flip health and armor positions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qh:6
+msgid "Health/Armor Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.qc:16
+msgid "Info messages:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.qc:19
+msgid "Flip align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.qh:6
+msgid "Info Messages Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:16
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:15
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:14
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:15
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:50
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:62
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:77
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:116
+#: qcsrc/menu/xonotic/util.qc:770 qcsrc/menu/xonotic/util.qc:786
+#: qcsrc/menu/xonotic/util.qc:803
+msgid "Disable"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:17
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:15
+msgid "Enable spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:18
+msgid "Enable even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:29
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:37
+msgid "Hide big armor and health"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Dynamic size"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qh:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qh:6
+msgid "Mod Icons Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:17
+msgid "Notifications:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:20
+msgid "Also print notifications to the console"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:23
+msgid "Flip notify order"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:26
+msgid "Entry lifetime:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:30
+msgid "Entry fadetime:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.qh:6
+msgid "Notification Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:16
+#: qcsrc/menu/xonotic/util.qc:758
+msgid "Enable"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:17
+msgid "Enable even observing"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:18
+msgid "Enable only in Race/CTS"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:24
+msgid "Status bar"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:26
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:67
+msgid "Left align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:27
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:73
+msgid "Right align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:28
+msgid "Inward align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:29
+msgid "Outward align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:33
+msgid "Flip speed/acceleration positions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:37
+msgid "Speed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:38
+msgid "Include vertical speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:49
+msgid "Speed unit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:51
+msgid "qu/s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:52
+msgid "m/s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:53
+msgid "km/h"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:54
+msgid "mph"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:55
+msgid "knots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:57
+msgid "Show"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:60
+msgid "Top speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:66
+msgid "Acceleration:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:67
+msgid "Include vertical acceleration"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qh:6
+msgid "Physics Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qh:6
+msgid "Powerups Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:16
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:17
+msgid "Always enable"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:23
+msgid "Forced aspect:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qh:6
+msgid "Pressed Keys Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qh:6
+msgid "Quick Menu Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_racetimer.qh:6
+msgid "Race Timer Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:16
+msgid "Enable in team games"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:23
+msgid "Radar:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:26
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:107
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:54
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:87
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:103
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:45
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:70
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:124
+#: qcsrc/menu/xonotic/util.qc:792
+msgid "Alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:30
+msgid "Rotation:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:32
+msgid "Forward"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:33
+msgid "West"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:34
+msgid "South"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:35
+msgid "East"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:36
+msgid "North"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:40
+msgid "Scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:44
+msgid "Zoom mode:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:46
+msgid "Zoomed in"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:47
+msgid "Zoomed out"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:48
+msgid "Always zoomed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:49
+msgid "Never zoomed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qh:6
+msgid "Radar Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:17
+msgid "Score:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:20
+msgid "Rankings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:21
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:58
+msgid "Off"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:22
+msgid "And me"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:23
+msgid "Pure"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.qh:6
+msgid "Score Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.qc:16
+msgid "Timer:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.qc:19
+msgid "Show elapsed time"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.qh:6
+msgid "Timer Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.qc:17
+msgid "Alpha after voting:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.qh:6
+msgid "Vote Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:22
+msgid "Fade out after:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:24
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:167
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:145
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:55
+msgid "Never"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:26
+#, c-format
+msgid "%ds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:30
+msgid "Fade effect:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:33
+msgid "EF^None"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:34
+msgid "Alpha"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:35
+msgid "Slide"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:36
+msgid "EF^Both"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:40
+msgid "Weapon icons:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:43
+msgid "Show only owned weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:54
+msgid "Show weapon ID as:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:55
+msgid "SHOWAS^None"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:56
+msgid "Number"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:57
+msgid "Bind"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:60
+msgid "Weapon ID scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:66
+msgid "Show Accuracy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:67
+msgid "Show Ammo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:70
+msgid "Ammo bar alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:76
+msgid "Ammo bar color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qh:6
+msgid "Weapons Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:19
+msgid "HUD skins"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:22
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:173
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:32
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:42
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:25
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:33
+msgid "Filter:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:30
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:54
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:49
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:43
+msgid "Refresh"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:33
+#: qcsrc/menu/xonotic/dialog_settings_user.qc:28
+msgid "Set skin"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:37
+msgid "Save current skin"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:46
+msgid "Panel background defaults:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:48
+#: qcsrc/menu/xonotic/util.qc:767
+msgid "Background:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:60
+#: qcsrc/menu/xonotic/util.qc:783
+msgid "Border size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:75
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:114
+msgid "Team color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:83
+#: qcsrc/menu/xonotic/util.qc:809
+msgid "Test team color in configure mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:86
+#: qcsrc/menu/xonotic/util.qc:812
+msgid "Padding:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:93
+msgid "HUD Dock:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:95
+msgid "DOCK^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:96
+msgid "DOCK^Small"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:97
+msgid "DOCK^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:98
+msgid "DOCK^Large"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:121
+msgid "Grid settings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:124
+msgid "Snap panels to grid"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:127
+msgid "Grid size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:129
+msgid "X:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:136
+msgid "Y:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:145
+msgid "Exit setup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qh:6
+msgid "Panel HUD Setup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:13
+msgid "Monster:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:22
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:20
+msgid "Spawn"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
+msgid "Remove"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
+msgid "Move target:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
+msgid "Follow"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
+msgid "Wander"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:28
+msgid "Spawnpoint"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:29
+msgid "No moving"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
+msgid "Colors:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qc:33
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:39
+msgid "Set skin:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_monstertools.qh:6
+msgid "Monster Tools"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qc:14
+msgid "Servers"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qc:15
+msgid "Find servers to play on"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qc:17
+msgid "Host your own game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qc:18
+msgid "Media"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qc:19
+msgid "Profile"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qh:6
+msgid "Multiplayer"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.qh:7
+msgid ""
+"Play online, against your friends in LAN, view demos or change player "
+"settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:38
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:111
+#: qcsrc/menu/xonotic/skinlist.qc:88 qcsrc/menu/xonotic/util.qc:769
+#: qcsrc/menu/xonotic/util.qc:785 qcsrc/menu/xonotic/util.qc:794
+#: qcsrc/menu/xonotic/util.qc:802 qcsrc/menu/xonotic/util.qc:814
+msgid "Default"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:40
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:60
+msgid "Unlimited"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:74
+msgid "Gametype"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:79
+msgid "Time limit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:81
+msgid "Timelimit in minutes that when hit, will end the match"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:82
+#, c-format
+msgid "%d minutes"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:83
+msgid "TIMLIM^Default"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:84
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:159
+msgid "1 minute"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:101
+msgid "TIMLIM^Infinite"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:109
+msgid "Teams:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:112
+msgid "2 teams"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:113
+msgid "3 teams"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:114
+msgid "4 teams"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:117
+msgid "Player slots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:119
+msgid ""
+"The maximum amount of players or bots that can be connected to your server "
+"at once"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:121
+msgid "Number of bots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:123
+msgid "Amount of bots on your server"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:125
+msgid "Bot skill:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:128
+msgid "Specify how experienced the bots will be"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:129
+msgid "Botlike"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:130
+msgid "Beginner"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:131
+msgid "You will win"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:132
+msgid "You can win"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:133
+msgid "You might win"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:134
+msgid "Advanced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:135
+msgid "Expert"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:136
+msgid "Pro"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:137
+msgid "Assassin"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:138
+msgid "Unhuman"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:139
+msgid "Godlike"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:155
+msgid "Mutators..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:156
+msgid "Mutators and weapon arenas"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:165
+msgid "Maplist"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:175
+msgid ""
+"Click here or Ctrl-F to provide a keyword to narrow down the map list. Ctrl-"
+"Delete to clear; Enter when done."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:184
+msgid "Add shown"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:185
+msgid "Add the maps shown in the list to your selection"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:188
+msgid "Remove shown"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:189
+msgid "Remove the maps shown in the list from your selection"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:194
+msgid "Add all"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:195
+msgid "Add every available map to your selection"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:198
+msgid "Remove all"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:199
+msgid "Remove all the maps from your selection"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:206
+msgid "Start Multiplayer!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:50
+msgid "Title:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:56
+msgid "Author:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:62
+msgid "Game types:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:85
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:257
+msgid "Close"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:88
+msgid "MAP^Play"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qh:7
+msgid "Map Information"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:28
+msgid "All Weapons Arena"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:30
+msgid "Most Weapons Arena"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:46
+#, c-format
+msgid "%s Arena"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:57
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:163
+msgid "Dodging"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:59
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:283
+msgid "InstaGib"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:61
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:224
+msgid "New Toys"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:63
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:288
+msgid "NIX"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:65
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:229
+msgid "Rocket Flying"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:67
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:219
+msgid "Invincible Projectiles"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:71
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:298
+msgid "No start weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:73
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:202
+msgid "Low gravity"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:75
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:171
+msgid "Cloaked"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:77
+msgid "Hook"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:79
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:180
+msgid "Midair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:81
+msgid "Melee only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:85
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:234
+msgid "Piñata"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:87
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:239
+msgid "Weapons stay"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:89
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:191
+msgid "Blood loss"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:93
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:175
+msgid "Buffs"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:95
+msgid "Overkill"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:97
+msgid "No powerups"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:99
+msgid "Powerups"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:101
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:167
+msgid "Touch explode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:103
+msgid "Wall jumping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:105
+msgid "MUT^None"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:160
+msgid "Gameplay mutators:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:164
+msgid ""
+"Enable dodging (quick acceleration in a given direction). Double-tap a "
+"directional key to dodge"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:168
+msgid "An explosion occurs when two players collide"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:172
+msgid "All players are almost invisible"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:176
+msgid ""
+"Enable buff pickups (random bonuses like Medic, Invisible, etc.) on the maps "
+"that support it"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:181
+msgid "Only possible to inflict damage on your enemy while they're airborne"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
+msgid "Damage done to your enemy gets added to your own health"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:190
+msgid ""
+"Amount of health below which players start bleeding out (health rots and "
+"they can't jump)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:199
+msgid "Make things fall to the ground slower (percentage of normal gravity)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:208
+msgid "Weapon & item mutators:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:211
+msgid "Grappling hook"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:212
+msgid "Players spawn with the grappling hook. Press the 'hook' key to use it"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:216
+msgid ""
+"Players spawn with the jetpack. Double-tap 'jump' or press the 'jetpack' key "
+"to use it"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:220
+msgid ""
+"Projectiles can't be destroyed. However, you can still explode Electro orbs "
+"with the Electro primary fire"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:225
+msgid ""
+"Some weapon spawns will be randomly replaced with new weapons: Heavy Laser "
+"Assault Cannon, Mine Layer, Rifle, T.A.G. Seeker"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:230
+msgid ""
+"Devastator rockets can be detonated instantly (otherwise, there's a short "
+"delay). This allows players to fire and detonate a Devastator rocket while "
+"in the air for a strong mid-air boost even while moving fast"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:235
+msgid "Players will drop all weapons they possessed when they are killed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:240
+msgid "Weapons stay after they are picked up"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:245
+msgid "Regular (no arena)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:246
+msgid ""
+"Players will be given a set of weapons at spawn as well as unlimited ammo, "
+"without weapon pickups"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:248
+msgid "Weapon arenas:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:251
+msgid "Custom weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:273
+msgid "Most weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:277
+msgid "All weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:280
+msgid "Special arenas:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:284
+msgid ""
+"Players will be given only one weapon, which can instantly kill the opponent "
+"with a single shot. If the player runs out of ammo, he will have 10 seconds "
+"to find some or if he fails to do so, face death. The secondary fire mode "
+"does not inflict any damage but is good for doing trickjumps."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:289
+msgid ""
+"No items Xonotic - instead of pickup items, everyone plays with the same "
+"weapon. After some time, a countdown will start, after which everyone will "
+"switch to another weapon."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:293
+msgid "with blaster"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:294
+msgid "Always carry the blaster as an additional weapon in Nix"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qh:9
+msgid "Mutators"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:39
+msgid "SRVS^Categories"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:42
+msgid "SRVS^Empty"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:43
+msgid "Show empty servers"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:47
+msgid "SRVS^Full"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:48
+msgid "Show full servers that have no slots available"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:52
+msgid "Pause"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:53
+msgid ""
+"Pause updating the server list to prevent servers from \"jumping around\""
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:54
+msgid "Reload the server list"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:68
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:184
+msgid "Address:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:79
+msgid "Info..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:80
+msgid "Show more information about the currently highlighted server"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:92
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:264
+msgid "Join!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:114
+#: qcsrc/menu/xonotic/serverlist.qc:1020
+msgid "MOD^Default"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:121
+#, c-format
+msgid "%d modified"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:121
+msgid "Official"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:129
+msgid "N/A (auth library missing, can't connect)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:131
+msgid "N/A (auth library missing)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:137
+msgid "Not supported (can't connect)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:139
+msgid "Not supported (won't encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:143
+msgid "Supported (will encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:145
+msgid "Supported (won't encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:149
+msgid "Requested (will encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:151
+msgid "Requested (won't encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:155
+msgid "Required (can't connect)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:157
+msgid "Required (will encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:161
+msgid "Use the `crypto_aeslevel` cvar to change your preferences"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:178
+msgid "Hostname:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:192
+msgid "Gametype:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:197
+msgid "Map:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:202
+msgid "Mod:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:207
+msgid "Version:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:212
+msgid "Settings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:219
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:251
+msgid "Players:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:224
+msgid "Bots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:229
+msgid "Free slots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:235
+msgid "Encryption:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:240
+msgid "ID:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:245
+msgid "Key:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qh:7
+msgid "Server Information"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media.qc:25
+msgid "Demos"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media.qc:26
+msgid "Screenshots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media.qc:27
+msgid "Music Player"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:48
+msgid "Auto record demos"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:57
+msgid "Timedemo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:58
+msgid "Benchmark how fast your computer can run the highlighted demo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:62
+msgid "DEMO^Play"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:13
+msgid "Playing a demo will disconnect you from the current match."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:15
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qc:15
+msgid "Do you really wish to disconnect now?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qc:13
+msgid "Timing a demo will disconnect you from the current match."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:37
+msgid "MUSICPL^Add"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:40
+msgid "MUSICPL^Add all"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:44
+msgid "Set as menu track"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:48
+msgid "Reset default menu track"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:54
+msgid "Playlist:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:55
+msgid "Random order"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:60
+msgid "MUSICPL^Stop"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:63
+msgid "MUSICPL^Play"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:66
+msgid "MUSICPL^Pause"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:69
+msgid "MUSICPL^Prev"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:72
+msgid "MUSICPL^Next"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:76
+msgid "MUSICPL^Remove"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:79
+msgid "MUSICPL^Remove all"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:41
+msgid "Auto screenshot scoreboard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:62
+msgid "Open in the viewer"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:137
+msgid "Reset"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:142
+msgid "Previous"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:145
+msgid "Next"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:150
+msgid "Slide show"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:38
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:21
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:37
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:26
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:21
+msgid "Apply immediately"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:50
+msgid "Name"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:79
+msgid "Model"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:98
+msgid "Glowing color"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:108
+msgid "Detail color"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:123
+msgid "Statistics"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:127
+msgid "Allow player statistics to track your client"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:131
+msgid "Allow player statistics to use your nickname"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:136
+msgid "Allow player statistics to rank you in leaderboards"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:152
+msgid "Country"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:156
+msgid "Select language..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:172
+msgid "Gender:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:179
+msgid "Gender"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_quit.qc:11
+msgid "Are you sure you want to quit?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_quit.qc:15
+msgid "Back to work..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_quit.qc:17
+msgid "I got some more fragging to do!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_quit.qh:7
+msgid "Quit the game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:15
+msgid "Model:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:21
+msgid "Remove *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:23
+msgid "Copy *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:24
+msgid "Paste"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:26
+msgid "Bone:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:31
+msgid "Set * as child"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:32
+msgid "Attach to *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:34
+msgid "Detach from *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:37
+msgid "Visual object properties for *:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:41
+msgid "Set alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:44
+msgid "Set color main:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:46
+msgid "Set color glow:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:50
+msgid "Set frame:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:54
+msgid "Physical object properties for *:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:56
+msgid "Set material:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:62
+msgid "Set solidity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:63
+msgid "Non-solid"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:64
+msgid "Solid"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:65
+msgid "Set physics:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:66
+msgid "Static"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:67
+msgid "Movable"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:68
+msgid "Physical"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:70
+msgid "Set scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:72
+msgid "Set force:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:76
+msgid "Claim *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:78
+msgid "* object info"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:79
+msgid "* mesh info"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:80
+msgid "* attachment info"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:81
+msgid "Show help"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:82
+msgid "* is the object you are facing"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.qh:6
+msgid "Sandbox Tools"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:18
+msgid "Video"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:19
+msgid "Effects"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:20
+msgid "Audio"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:22
+msgid "Game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:23
+msgid "Input"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:24
+msgid "User"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qc:25
+#: qcsrc/menu/xonotic/keybinder.qc:119
+msgid "Misc"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qh:6
+msgid "Settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.qh:7
+msgid "Change the game settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:29
+msgid "Master:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:35
+msgid "Music:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:43
+msgid "VOL^Ambient:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:50
+msgid "Info:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:57
+msgid "Items:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:64
+msgid "Pain:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:71
+msgid "Player:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:78
+msgid "Shots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:85
+msgid "Voice:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:93
+msgid "Weapons:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:99
+msgid "New style sound attenuation"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:102
+msgid "Mute sounds when not active"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:105
+msgid "Frequency:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:107
+msgid "Sound output frequency"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:108
+msgid "8 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:109
+msgid "11.025 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:110
+msgid "16 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:111
+msgid "22.05 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:112
+msgid "24 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:113
+msgid "32 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:114
+msgid "44.1 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:115
+msgid "48 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:119
+msgid "Channels:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:121
+msgid "Number of channels for the sound output"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:122
+msgid "Mono"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:123
+msgid "Stereo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:124
+msgid "2.1"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:125
+msgid "4"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:126
+msgid "5"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:127
+msgid "5.1"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:128
+msgid "6.1"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:129
+msgid "7.1"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:134
+msgid "Swap stereo output channels"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:135
+msgid "Swap left/right channels"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:138
+msgid "Headphone friendly mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:139
+msgid ""
+"Enable spatialization (blend the right and left channel slightly to decrease "
+"stereo separation a bit for headphones)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:143
+msgid "Hit indication sound"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:144
+msgid "Play a hit indicator sound when your shot hits an enemy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:147
+msgid "Chat message sound"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:149
+msgid "Menu sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:150
+msgid "Play sounds when clicking menu items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:151
+msgid "Focus sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:152
+msgid "Play sounds when hovering over menu items too"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:156
+msgid "Time announcer:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:158
+msgid "WRN^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:160
+msgid "5 minutes"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:161
+msgid "WRN^Both"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:164
+msgid "Automatic taunts:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:166
+msgid "Automatically taunt enemies after fragging them"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:168
+msgid "Sometimes"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:169
+msgid "Often"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:170
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:147
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:57
+msgid "Always"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.qc:176
+msgid "Debug info about sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_bindings_reset.qc:11
+msgid "Are you sure you want to reset all key bindings?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_bindings_reset.qh:6
+msgid "Reset key bindings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:41
+msgid "Quality preset:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:45
+msgid "PRE^OMG!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:48
+msgid "PRE^Low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:50
+msgid "PRE^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:52
+msgid "PRE^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:54
+msgid "PRE^High"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:56
+msgid "PRE^Ultra"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:60
+msgid "PRE^Ultimate"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:65
+msgid "Geometry detail:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:67
+msgid "Change the smoothness of the curves on the map"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:68
+msgid "DET^Lowest"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:69
+msgid "DET^Low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:70
+msgid "DET^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:71
+msgid "DET^Good"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:72
+msgid "DET^Best"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:73
+msgid "DET^Insane"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:77
+msgid "Player detail:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:79
+msgid "PDET^Low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:80
+msgid "PDET^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:81
+msgid "PDET^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:82
+msgid "PDET^Good"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:83
+msgid "PDET^Best"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:87
+msgid "Texture resolution:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:91
+msgid "RES^Leet"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:92
+msgid "RES^Lowest"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:93
+msgid "RES^Very low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:94
+msgid "RES^Low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:95
+msgid "RES^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:96
+msgid "RES^Good"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:97
+msgid "RES^Best"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:110
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:115
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:120
+msgid "Avoid lossy texture compression"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:129
+msgid "Disable sky for performance and visibility"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:129
+msgid "Show sky"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:132
+msgid "Show surfaces"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:133
+msgid ""
+"Disable textures completely for very slow hardware. This gives a huge "
+"performance boost, but looks very ugly."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:136
+msgid "Use lightmaps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:137
+msgid ""
+"Use high resolution lightmaps, which will look pretty but use up some extra "
+"video memory"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:139
+msgid "Deluxe mapping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:140
+msgid "Use per-pixel lighting effects"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:142
+msgid "Gloss"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:143
+msgid "Enable the use of glossmaps on textures supporting it"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:146
+msgid "Offset mapping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:147
+msgid ""
+"Offset mapping effect that will make textures with bumpmaps appear like they "
+"\"pop out\" of the flat 2D surface"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:149
+msgid "Relief mapping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:150
+msgid ""
+"Higher quality offset mapping, which also has a huge impact on performance"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:153
+msgid "Reflections:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:154
+msgid ""
+"Reflection and refraction quality, has a huge impact on performance on maps "
+"with reflecting surfaces"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:157
+msgid "Resolution of reflections/refractions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:158
+msgid "Blurred"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:159
+msgid "REFL^Good"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:160
+msgid "Sharp"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:164
+msgid "Decals"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:165
+msgid "Enable decals (bullet holes and blood)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:166
+msgid "Decals on models"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:170
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:254
+msgid "Distance:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:173
+msgid "Decals further away than this will not be drawn"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:177
+msgid "Time:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:180
+msgid "Time in seconds before decals fade away"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:184
+msgid "Damage effects:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:186
+msgid "DMGFX^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:187
+msgid "Skeletal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:188
+msgid "DMGFX^All"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:192
+msgid "No dynamic lighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:193
+msgid "Enable corona flares around certain lights"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:195
+msgid "Fake corona lighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:196
+msgid ""
+"Enable faster but uglier dynamic lights by rendering bright coronas instead "
+"of real dynamic lights"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:199
+msgid "Realtime dynamic lighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:200
+msgid "Enable rendering of dynamic lights such as explosions and rocket lights"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:202
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:208
+msgid "Shadows"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:203
+msgid "Enable rendering of shadows from dynamic lights"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:206
+msgid "Realtime world lighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:207
+msgid ""
+"Enable rendering of full realtime world lighting on maps that support it. "
+"Note that this might have a big impact on performance."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:209
+msgid "Enable rendering of shadows from realtime world lights"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:213
+msgid "Use normal maps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:214
+msgid "Enable use of directional shading on textures"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:216
+msgid "Soft shadows"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:220
+msgid "Fade corona according to visibility"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:221
+msgid "Fade coronas according to visibility"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:225
+msgid "Bloom"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:226
+msgid ""
+"Enable bloom effect, which brightens the neighboring pixels of very bright "
+"pixels. Has a big impact on performance."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:227
+msgid "Extra postprocessing effects"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:228
+msgid ""
+"Enables special postprocessing effects for when damaged or under water or "
+"using a powerup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:233
+msgid "Motion blur strength - 0.4 recommended"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:234
+msgid "Motion blur:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:240
+msgid "Particles"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:241
+msgid "Spawnpoint effects"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:242
+msgid "Particles effects at all spawn points and whenever a player spawns"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:247
+msgid "Quality:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:250
+#: qcsrc/menu/xonotic/slider_particles.qc:13
+msgid ""
+"Multiplier for amount of particles. Less means less particles, which in turn "
+"gives for better performance"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.qc:257
+msgid "Particles further away than this will not be drawn"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:31
+msgid "No crosshair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:33
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:62
+msgid "Per weapon"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:34
+msgid ""
+"Set a different crosshair for each weapon, good if you play without weapon "
+"models"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:48
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:81
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:97
+msgid "Size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:64
+msgid "By health"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:76
+msgid "Use rings to indicate weapon status"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:93
+msgid "Enable center crosshair dot"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:111
+msgid "Use normal crosshair color"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:122
+msgid "Smooth effects of crosshairs"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:125
+msgid "Hit testing:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:128
+msgid ""
+"None: do not do hit tests for the crosshair; TrueAim: blur the crosshair "
+"when there's an obstacle between your gun and the target; Enemies: also "
+"enlarge the crosshair when you would hit an enemy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:129
+msgid "HTTST^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:130
+msgid "HTTST^TrueAim"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:131
+msgid "HTTST^Enemies"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:136
+msgid "Blur crosshair if the shot is obstructed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:140
+msgid "Enlarge crosshair if targeting an enemy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:143
+msgid "Animate crosshair when hitting an enemy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:146
+msgid "Animate crosshair when picking up an item"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qh:7
+msgid "Crosshair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:43
+msgid "Scoreboard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:48
+msgid "Fading speed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:51
+msgid "Enable rows / columns highlighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:53
+msgid "Show accuracy underneath scoreboard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:55
+msgid "Show team sizes:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:56
+msgid ""
+"Team size position: Off=do not show; Left=on the left side of the scoreboard "
+"and move team scores to the right; Right=on the right of the scoreboard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:64
+msgid "Waypoints"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:66
+msgid "Display waypoint markers for objectives on the map"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:67
+msgid "Show various gametype specific waypoints"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:73
+msgid "Control transparency of the waypoints"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:77
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:130
+msgid "Fontsize:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:83
+msgid "Edge offset:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:91
+msgid "Fade when near the crosshair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:95
+msgid "Display names instead of icons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:100
+msgid "Damage"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:102
+msgid "Overlay:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:105
+msgid "Factor:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:110
+msgid "Fade rate:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:118
+msgid "Player Names"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:120
+msgid "Show names above players"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:136
+msgid "Max distance:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:142
+msgid "Decolorize:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:146
+#: qcsrc/menu/xonotic/keybinder.qc:113
+msgid "Teamplay"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:154
+msgid "Only when near crosshair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:158
+msgid "Display health and armor"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:163
+msgid "Damage overlay:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:166
+msgid "Dynamic HUD"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:167
+msgid "HUD moves around following player's movement"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:169
+msgid "Shake the HUD when hurt"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:173
+#: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qh:6
+msgid "Enter HUD editor"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hud.qh:7
+msgid "HUD"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qc:21
+msgid "In order for the HUD editor to show, you must first be in game."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qc:23
+msgid "Do you wish to start a local game to set up the HUD?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:24
+msgid "Frag Information"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:26
+msgid "Display information about killing sprees"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:29
+msgid "Only display sprees if they are achievements"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:34
+msgid "Show spree information in centerprints"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:38
+msgid "Show spree information in death messages"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:43
+msgid "Sprees in info messages:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:46
+msgid "SPREES^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:47
+msgid "Target"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:48
+msgid "Attacker"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:49
+msgid "SPREES^Both"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:55
+msgid "Print on a seperate line"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:58
+msgid "Add extra frag information to centerprint when available"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:62
+msgid "Add frag location to death messages when available"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:65
+msgid "Gamemode Settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:67
+msgid "Display capture times in Capture The Flag"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:71
+msgid "Display name of flag stealer in Capture The Flag"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:76
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:92
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:126
+msgid "Other"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:78
+msgid "Display console messages in the top left corner"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:80
+msgid "Display all info messages in the chatbox"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:82
+msgid "Display player statuses in the chatbox"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:86
+msgid "Powerup notifications"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:89
+msgid "Weapon centerprint notifications"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:92
+msgid "Weapon info message notifications"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:96
+msgid "Announcers"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:98
+msgid "Respawn countdown sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:101
+msgid "Killstreak sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:104
+msgid "Achievement sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_messages.qh:7
+msgid "Messages"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:30
+msgid "Items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:32
+msgid "Use simple 2D images instead of item models"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:34
+msgid "Unavailable alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:37
+msgid "Unavailable color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:39
+msgid "GHOITEMS^Black"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:40
+msgid "GHOITEMS^Dark"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:41
+msgid "GHOITEMS^Tinted"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:42
+msgid "GHOITEMS^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:43
+msgid "GHOITEMS^Blue"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:49
+#: qcsrc/menu/xonotic/serverlist.qc:737
+msgid "Players"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:51
+msgid "Force player models to mine"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:53
+msgid "Force player colors to mine"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
+msgid "In non teamplay modes only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:60
+msgid "Body fading:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:63
+msgid "Gibs:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:65
+msgid "GIBS^None"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:66
+msgid "GIBS^Few"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:67
+msgid "GIBS^Many"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:68
+msgid "GIBS^Lots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qh:7
+msgid "Models"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_model.qh:8
+msgid "Customize how players and items are displayed in game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:26
+msgid "1st person perspective"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:29
+msgid "Slide to third person upon death"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:33
+msgid "Smooth the view when landing from a jump"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:37
+msgid "Smooth the view while crouching"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:41
+msgid "View waving while idle"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:45
+msgid "View bobbing while walking around"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:50
+msgid "3rd person perspective"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:53
+msgid "Back distance"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:59
+msgid "Up distance"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:65
+msgid "Allow passing through walls while spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:69
+msgid "Field of view:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:71
+msgid "Field of vision in degrees"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:75
+msgid "ZOOM^Zoom factor:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:77
+msgid "How big the zoom factor is when the zoom button is pressed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:80
+msgid "ZOOM^Zoom speed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:82
+msgid "How fast the view will be zoomed, disable to zoom instantly"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:91
+msgid "ZOOM^Instant"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:95
+msgid "ZOOM^Zoom sensitivity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:97
+msgid ""
+"How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no "
+"sensitivity change)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:100
+msgid "Velocity zoom"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:101
+msgid "Forward movement only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:105
+msgid "VZOOM^Factor"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:112
+msgid "Display reticle 2D overlay while zooming"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:115
+msgid "Release zoom when you die or respawn"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:119
+msgid "Release zoom when you switch weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_view.qh:7
+#: qcsrc/menu/xonotic/keybinder.qc:83
+msgid "View"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:33
+msgid "Weapon Priority List (* = mutator weapon)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:39
+msgid "Up"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:43
+msgid "Down"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:49
+msgid "Use priority list for weapon cycling"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:50
+msgid ""
+"Make use of the list above when cycling through weapons with the mouse wheel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:52
+msgid "Cycle through only usable weapon selections"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:56
+msgid "Auto switch weapons on pickup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:57
+msgid ""
+"Automatically switch to newly picked up weapons if they are better than what "
+"you are carrying"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:60
+msgid "Release attack buttons when you switch weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:63
+msgid "Draw 1st person weapon model"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:64
+msgid "Draw the weapon model"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:68
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:71
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:74
+msgid "Position of the weapon model; requires reconnect"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:77
+msgid "Weapon model opacity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:91
+msgid "Gun model swaying"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:96
+msgid "Gun model bobbing"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qh:7
+#: qcsrc/menu/xonotic/keybinder.qc:51
+msgid "Weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:34
+msgid "Key Bindings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:38
+msgid "Change key..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:42
+msgid "Edit..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:48
+msgid "Clear"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:53
+msgid "Reset all"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:58
+msgid "Mouse"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:60
+msgid "Sensitivity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:62
+msgid "Mouse speed multiplier"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:64
+msgid "Smooth aiming"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:65
+msgid "Smoothes the mouse movement, but makes aiming slightly less responsive"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:67
+msgid "Invert aiming"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:68
+msgid "Invert mouse movement on the Y-axis"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:70
+msgid "Use system mouse positioning"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:75
+msgid "Enable built in mouse acceleration"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:79
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:83
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:86
+msgid "Disable system mouse acceleration"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:80
+msgid "Make use of DGA mouse input"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:94
+msgid "Pressing \"enter console\" key also closes it"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:95
+msgid "Allow the console toggling bind to also close the console"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:97
+msgid "Automatically repeat jumping if holding jump"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:100
+msgid "Jetpack on jump:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:102
+msgid "JPJUMP^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:103
+msgid "Air only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:104
+msgid "JPJUMP^All"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:110
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:115
+#: qcsrc/menu/xonotic/dialog_settings_input.qc:120
+msgid "Use joystick input"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:31
+msgid "Command when pressed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:34
+msgid "Command when released:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:40
+msgid "Cancel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qh:7
+msgid "User defined key bind"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:11
+#, c-format
+msgid "%d fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:12
+#, c-format
+msgid "%d KB/s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:13
+#, c-format
+msgid "%d MB/s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:27
+msgid "Network"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:29
+msgid "Client UDP port:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:31
+msgid "Force client to use chosen port unless it is set to 0"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:34
+msgid "Bandwidth:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:36
+msgid "Specify your network speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:37
+msgid "56k"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:38
+msgid "ISDN"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:39
+msgid "Slow ADSL"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:40
+msgid "Fast ADSL"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:41
+msgid "Broadband"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:44
+msgid "Server queries/s:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:48
+msgid "Downloads:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:50
+msgid "Maximum number of concurrent HTTP/FTP downloads"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:52
+msgid "Download speed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:65
+msgid "Local latency:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:69
+msgid "Show netgraph"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:70
+msgid "Show a graph of packet sizes and other information"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:72
+msgid "Client-side movement prediction"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:74
+msgid "Movement error compensation"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:78
+msgid "Use encryption (AES) when available"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:81
+msgid "Framerate"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:83
+msgid "Maximum:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:93
+msgid "MAXFPS^Unlimited"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:96
+msgid "Target:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:98
+msgid "TRGT^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:109
+msgid "Idle limit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:115
+msgid "IDLFPS^Unlimited"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:119
+msgid "Save processing time for other apps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:122
+msgid "Show frames per second"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:123
+msgid "Show your rendered frames per second"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:128
+msgid "Menu tooltips:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:130
+msgid ""
+"Menu tooltips: disabled, standard or advanced (also shows cvar or console "
+"command bound to the menu item)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:131
+msgid "TLTIP^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:132
+msgid "TLTIP^Standard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:133
+msgid "TLTIP^Advanced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:136
+msgid "Show current date and time"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:137
+msgid "Show current date and time of day, useful on screenshots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:140
+msgid "Enable developer mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:144
+msgid "Advanced settings..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:145
+msgid "Advanced settings where you can tweak every single variable of the game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.qc:150
+#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qh:6
+msgid "Factory reset"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:31
+msgid "Cvar filter:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:38
+msgid "Modified cvars only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:45
+msgid "Setting:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:49
+msgid "Type:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:53
+msgid "Value:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:70
+msgid "Description:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qh:7
+msgid "Advanced settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:11
+msgid "Are you sure you want to reset all settings?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:13
+msgid "This will create a backup config in your data directory"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.qc:23
+msgid "Menu Skins"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.qc:62
+msgid "Text Language"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.qc:67
+msgid "Set language"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.qc:72
+msgid "Disable gore effects and harsh language"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.qc:73
+msgid "Replace blood and gibs with content that does not have any gore effects"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:10
+msgid "While connected language changes will be applied only to the menu,"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:12
+msgid "full language changes will take effect starting from the next game"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:16
+msgid "Disconnect now"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:17
+msgid "Switch language"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qh:6
+msgid "Warning"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:33
+msgid "Resolution:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:37
+msgid "Font/UI size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:39
+msgid "SZ^Unreadable"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:40
+msgid "SZ^Tiny"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:41
+msgid "SZ^Little"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:42
+msgid "SZ^Small"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:43
+msgid "SZ^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:44
+msgid "SZ^Large"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:45
+msgid "SZ^Huge"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:46
+msgid "SZ^Gigantic"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:47
+msgid "SZ^Colossal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:51
+msgid "Color depth:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:53
+msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:54
+msgid "16bit"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:55
+msgid "32bit"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:59
+msgid "Full screen"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:61
+msgid "Vertical Synchronization"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:62
+msgid ""
+"Enable vertical synchronization to prevent tearing, will cap your fps to the "
+"screen refresh rate"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:67
+msgid "Flip view horizontally"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:68
+msgid "Poor man's left handed mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:71
+msgid "Anisotropy:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:73
+msgid "Anisotropic filtering quality"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:74
+msgid "ANISO^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:75
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:86
+msgid "2x"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:76
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:87
+msgid "4x"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:77
+msgid "8x"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:78
+msgid "16x"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:81
+msgid "Antialiasing:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:84
+msgid ""
+"Enable antialiasing, which smooths the edges of 3D geometry. Note that it "
+"might decrease performance by quite a lot"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:85
+msgid "AA^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:92
+msgid "High-quality frame buffer"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:97
+msgid "Depth first:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:99
+msgid ""
+"Eliminate overdraw by rendering a depth-only version of the scene before the "
+"normal rendering starts"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:100
+msgid "DF^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:101
+msgid "DF^World"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:102
+msgid "DF^All"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:105
+msgid "Vertex Buffer Objects (VBOs)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:108
+msgid "VBO^Off"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:109
+msgid "Vertices, some Tris (compatible)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:110
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:114
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:116
+msgid ""
+"Make use of Vertex Buffer Objects to store static geometry in video memory "
+"for faster rendering"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:113
+msgid "Vertices"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:115
+msgid "Vertices and Triangles"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:119
+msgid "Brightness:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:121
+msgid "Brightness of black"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:123
+msgid "Contrast:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:125
+msgid "Brightness of white"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:127
+msgid "Gamma:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:130
+msgid ""
+"Inverse gamma correction value, a brightness effect that does not affect "
+"white or black"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:133
+msgid "Contrast boost:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:136
+msgid "By how much to multiply the contrast in dark areas"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:139
+msgid "Saturation:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:142
+msgid ""
+"Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), "
+"requires GLSL color control"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:146
+msgid "LIT^Ambient:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:148
+msgid ""
+"Ambient lighting, if set too high it tends to make light on maps look dull "
+"and flat"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:150
+msgid "Intensity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:152
+msgid "Global rendering brightness"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:155
+msgid "Wait for GPU to finish each frame"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:156
+msgid ""
+"Make the CPU wait for the GPU to finish each frame, can help with some "
+"strange input or video lag on some machines"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:158
+msgid "Use OpenGL 2.0 shaders (GLSL)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:163
+msgid "Psycho coloring (easter egg)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.qc:166
+msgid "Trippy vertices (easter egg)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:109
+msgid "Instant action! (random map with bots)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:116
+msgid "???"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:129
+msgid "Campaign Difficulty:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:130
+msgid "CSKL^Easy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:131
+msgid "CSKL^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:132
+msgid "CSKL^Hard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:134
+msgid "Start Singleplayer!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qh:6
+msgid "Singleplayer"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.qh:7
+msgid "Play the singleplayer campaign or instant action matches against bots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer_winner.qh:7
+msgid "Winner"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:32
+msgid "join 'best' team (auto-select)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:33
+msgid "Autoselect team (recommended)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:37
+msgid "red"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:38
+msgid "blue"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:39
+msgid "yellow"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:40
+msgid "pink"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qc:43
+#: qcsrc/menu/xonotic/keybinder.qc:116
+msgid "spectate"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.qh:7
+msgid "Team Selection"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_uid2name.qc:10
+msgid "Allow player statistics to use your nickname?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_uid2name.qc:12
+msgid "Answering \"No\" you will appear as \"Anonymous player\""
+msgstr ""
+
+#: qcsrc/menu/xonotic/gametypelist.qc:87
+msgid "teamplay"
+msgstr ""
+
+#: qcsrc/menu/xonotic/gametypelist.qc:89
+msgid "free for all"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:35
+msgid "Moving"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:36
+msgid "forward"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:37
+msgid "backpedal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:38
+msgid "strafe left"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:39
+msgid "strafe right"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:40
+msgid "jump / swim"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:41
+msgid "crouch / sink"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:42
+msgid "off-hand hook"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:43
+msgid "jetpack"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:46
+msgid "Attacking"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:52
+msgid "WEAPON^previous"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:53
+msgid "WEAPON^next"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:54
+msgid "WEAPON^previously used"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:55
+msgid "WEAPON^best"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:56
+msgid "reload"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:57
+msgid "drop weapon / throw nade"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:84
+msgid "hold zoom"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:85
+msgid "toggle zoom"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:86
+msgid "show scores"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:87
+msgid "screen shot"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:88
+msgid "maximize radar"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:89
+msgid "3rd person view"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:90
+msgid "enter spectator mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:93
+msgid "Communication"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:94
+msgid "public chat"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:95
+msgid "team chat"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:96
+msgid "show chat history"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:97
+msgid "vote YES"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:98
+msgid "vote NO"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:102
+msgid "Client"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:106 qcsrc/menu/xonotic/keybinder.qc:108
+msgid "enter console"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:109
+msgid "disconnect"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:110
+msgid "quit"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:114
+msgid "auto-join team"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:120
+msgid "drop key/flag, exit vehicle"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:121
+msgid "suicide / respawn"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:122
+msgid "quick menu"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:125
+msgid "User defined"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:132
+msgid "Development"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:133
+msgid "sandbox menu"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:134
+msgid "drag object (sandbox)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/keybinder.qc:135
+msgid "waypoint editor menu"
+msgstr ""
+
+#: qcsrc/menu/xonotic/mainwindow.qc:96 qcsrc/menu/xonotic/mainwindow.qc:99
+msgid "Do not press this button again!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/maplist.qc:288
+msgid ""
+"Huh? Can't play this (m is NULL). Refiltering so this won't happen again."
+msgstr ""
+
+#: qcsrc/menu/xonotic/maplist.qc:296
+#, c-format
+msgid "%s's Xonotic Server"
+msgstr ""
+
+#: qcsrc/menu/xonotic/maplist.qc:301
+msgid ""
+"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
+"again."
+msgstr ""
+
+#: qcsrc/menu/xonotic/playerlist.qc:102 qcsrc/menu/xonotic/playerlist.qc:112
+msgid "spectator"
+msgstr ""
+
+#: qcsrc/menu/xonotic/playermodel.qc:161
+msgid "<no model found>"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:256
+msgid "SERVER^Remove favorite"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:257
+msgid "Remove the currently highlighted server from bookmarks"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:261
+msgid "SERVER^Favorite"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:262
+msgid ""
+"Bookmark the currently highlighted server so that it's faster to find in the "
+"future"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:733
+msgid "Ping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:734
+msgid "Hostname"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:735
+msgid "Map"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:736
+msgid "Type"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1019
+#, c-format
+msgid "AES level %d"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1019
+msgid "ENC^none"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1019
+msgid "encryption:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1020
+#, c-format
+msgid "mod: %s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1022
+#, c-format
+msgid "modified settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1022
+#, c-format
+msgid "official settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1024
+msgid "stats disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qc:1024
+msgid "stats enabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:152
+msgid "SLCAT^Favorites"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:153
+msgid "SLCAT^Recommended"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:154
+msgid "SLCAT^Normal Servers"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:155
+msgid "SLCAT^Servers"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:156
+msgid "SLCAT^Competitive Mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:157
+msgid "SLCAT^Modified Servers"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:158
+msgid "SLCAT^Overkill"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:159
+msgid "SLCAT^InstaGib"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.qh:160
+msgid "SLCAT^Defrag Mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/skinlist.qc:70
+msgid "<TITLE>"
+msgstr ""
+
+#: qcsrc/menu/xonotic/skinlist.qc:71
+msgid "<AUTHOR>"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_decibels.qc:72
+msgid "VOL^MAX"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_decibels.qc:74
+msgid "VOL^OFF"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_decibels.qc:82
+#, c-format
+msgid "%s dB"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:14
+msgid "PART^OMG"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:15
+msgid "PART^Low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:16
+msgid "PART^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:17
+#: qcsrc/menu/xonotic/slider_sbfadetime.qc:14
+msgid "PART^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:18
+msgid "PART^High"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:19
+msgid "PART^Ultra"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_particles.qc:20
+msgid "PART^Ultimate"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_picmip.qc:13
+msgid ""
+"Change the sharpness of the textures. Lowering it will effectively reduce "
+"texture memory usage, but make the textures appear very blurry."
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.qc:115
+msgid "Screen resolution"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_sbfadetime.qc:13
+msgid "PART^Slow"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_sbfadetime.qc:15
+msgid "PART^Fast"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_sbfadetime.qc:16
+msgid "PART^Instant"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:29
+msgid "January"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:30
+msgid "February"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:31
+msgid "March"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:32
+msgid "April"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:33
+msgid "May"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:34
+msgid "June"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:35
+msgid "July"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:36
+msgid "August"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:37
+msgid "September"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:38
+msgid "October"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:39
+msgid "November"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:40
+msgid "December"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:46
+#, no-c-format
+msgid "DATE^%m %d, %Y"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:97
+msgid "Joined:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:104
+msgid "Last match:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:111
+msgid "Time played:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:118 qcsrc/menu/xonotic/statslist.qc:231
+msgid "Favorite map:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:150 qcsrc/menu/xonotic/statslist.qc:202
+#: qcsrc/menu/xonotic/statslist.qc:245
+#, c-format
+msgid "Matches:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:155
+#, c-format
+msgid "Wins/Losses:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:156
+#, c-format
+msgid "Win percentage:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:167
+#, c-format
+msgid "Kills/Deaths:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:173
+#, c-format
+msgid "Kill ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:208
+msgid "ELO:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:215
+msgid "Rank:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:222
+msgid "Percentile:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/statslist.qc:247
+#, c-format
+msgid "%d (unranked)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:420
+msgid "Update can be downloaded at:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:528
+msgid "Autogenerating mapinfo for newly added maps..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:566
+#, c-format
+msgid "Update to %s now!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:650
+msgid ""
+"^1ERROR: Texture compression is required but not supported.\n"
+"^1Expect visual problems."
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:780
+msgid "Use default"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:800
+msgid "Team Color:"
+msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-07 07:23+0200\n"
-"PO-Revision-Date: 2020-07-19 22:51+0000\n"
+"PO-Revision-Date: 2020-07-24 17:55+0000\n"
"Last-Translator: LegendGuard\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/team-xonotic/"
"xonotic/language/ja_JP/)\n"
#: qcsrc/client/hud/panel/infomessages.qc:139
#: qcsrc/common/notifications/all.qh:430
msgid "jump"
-msgstr "飛び越える"
+msgstr "ジャンプ"
#: qcsrc/client/hud/panel/infomessages.qc:147
#, c-format
#: qcsrc/client/hud/panel/scoreboard.qc:105
msgid "Number of ball carrier kills"
-msgstr "殺されたボール持ちの数"
+msgstr "ボール持ちキル数"
#: qcsrc/client/hud/panel/scoreboard.qc:105
msgid "SCO^bckills"
-msgstr "殺したボール持ち"
+msgstr "ボール持ちキル数"
#: qcsrc/client/hud/panel/scoreboard.qc:106
msgid "SCO^bctime"
#: qcsrc/client/hud/panel/scoreboard.qc:109
msgid "Number of deaths"
-msgstr "死者数"
+msgstr "デス数"
#: qcsrc/client/hud/panel/scoreboard.qc:109
msgid "SCO^deaths"
-msgstr "死者"
+msgstr "デス数"
#: qcsrc/client/hud/panel/scoreboard.qc:110
msgid "Number of keys destroyed by pushing them into void"
#: qcsrc/client/hud/panel/scoreboard.qc:117
msgid "Number of flag carrier kills"
-msgstr "殺ã\81\95ã\82\8cã\81\9fæ\97\97æ\8c\81ã\81¡数"
+msgstr "æ\97\97æ\8c\81ã\81¡ã\82ã\83«数"
#: qcsrc/client/hud/panel/scoreboard.qc:117
msgid "SCO^fckills"
-msgstr "殺ã\81\95ã\82\8cã\81\9fæ\97\97æ\8c\81ã\81¡"
+msgstr "æ\97\97æ\8c\81ã\81¡ã\82ã\83«æ\95°"
#: qcsrc/client/hud/panel/scoreboard.qc:118
msgid "FPS"
#: qcsrc/client/hud/panel/scoreboard.qc:119
msgid "Number of kills minus suicides"
-msgstr "殺された者 - 自殺 = "
+msgstr "キル数 - 自殺数 = "
#: qcsrc/client/hud/panel/scoreboard.qc:119
msgid "SCO^frags"
#: qcsrc/client/hud/panel/scoreboard.qc:121
msgid "Number of keys carrier kills"
-msgstr "殺された鍵持ち数"
+msgstr "鍵持ちキル数"
#: qcsrc/client/hud/panel/scoreboard.qc:121
msgid "SCO^kckills"
-msgstr "殺された鍵持ち"
+msgstr "鍵持ちキル数"
#: qcsrc/client/hud/panel/scoreboard.qc:122
msgid "SCO^k/d"
#: qcsrc/client/hud/panel/scoreboard.qc:123
#: qcsrc/client/hud/panel/scoreboard.qc:124
msgid "The kill-death ratio"
-msgstr "殺死害率"
+msgstr "キル・デス率"
#: qcsrc/client/hud/panel/scoreboard.qc:123
msgid "SCO^kdr"
#: qcsrc/client/hud/panel/scoreboard.qc:124
msgid "SCO^kdratio"
-msgstr "殺死害率"
+msgstr "キル・デス率"
#: qcsrc/client/hud/panel/scoreboard.qc:125
msgid "Number of kills"
-msgstr "殺された者の数"
+msgstr "キル数"
#: qcsrc/client/hud/panel/scoreboard.qc:125
msgid "SCO^kills"
-msgstr "殺された者"
+msgstr "キル数"
#: qcsrc/client/hud/panel/scoreboard.qc:126
msgid "Number of laps finished (Race/CTS)"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "SCO^losses"
-msgstr "負け"
+msgstr "失われた数"
#: qcsrc/client/hud/panel/scoreboard.qc:129
#: qcsrc/client/hud/panel/scoreboard.qc:130
#: qcsrc/client/hud/panel/scoreboard.qc:142
msgid "Number of kills minus deaths"
-msgstr "殺された者 - 死者 = "
+msgstr "キル数 - デス数 = "
#: qcsrc/client/hud/panel/scoreboard.qc:142
msgid "SCO^sum"
#: qcsrc/client/hud/panel/scoreboard.qc:144
msgid "Number of teamkills"
-msgstr "殺されたチームメイトの数"
+msgstr "チームメイトキル数"
#: qcsrc/client/hud/panel/scoreboard.qc:144
msgid "SCO^teamkills"
-msgstr "殺されたチームメイト"
+msgstr "チームメイトキル数"
#: qcsrc/client/hud/panel/scoreboard.qc:145
msgid "Number of ticks (Domination)"
"include/exclude ALL teams/noteams game modes."
msgstr ""
"特殊なゲームタイプ名 'team' および 'noteams' を使用して、\n"
-"全てのチーム/チームなしゲームモードを含めたり、除外したりできます。"
+"全てのチーム / チームなしゲームモードを含めたり、除外したりできます。"
#: qcsrc/client/hud/panel/scoreboard.qc:354
msgid "Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4"
#: qcsrc/client/hud/panel/scoreboard.qc:1384
msgid "Monsters killed:"
-msgstr "殺されたモンスター:"
+msgstr "モンスターキル数:"
#: qcsrc/client/hud/panel/scoreboard.qc:1391
msgid "Secrets found:"
#: qcsrc/client/mapvoting.qc:382
msgid "Vote for a map"
-msgstr "ã\83\9eã\83\83ã\83\97ã\81«æ\8a\95票ã\81\97ã\81¦ã\81\99ã\82\8b"
+msgstr "マップに投票する"
#: qcsrc/client/mapvoting.qc:399
#, c-format
#: qcsrc/common/mapinfo.qh:271
msgid "Capture the Flag"
-msgstr "旗を取れ (CTF)"
+msgstr "キャプチャー・ザ・フラッグ (CTF)"
#: qcsrc/common/mapinfo.qh:271
msgid ""
#: qcsrc/common/notifications/all.inc:319
#, c-format
msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
-msgstr "^BG%s^K1 が死んだ。弾薬なしで生きる意味は何だの?"
+msgstr "^BG%s^K1 が死んだ%s%s。弾薬なしで生きる意味は何だの?"
#: qcsrc/common/notifications/all.inc:319
#, c-format
#: qcsrc/common/notifications/all.inc:415
#, c-format
msgid "^BG%s^F3 was kicked for idling"
-msgstr "^BG%s^F3 は非活動な状態で追い出された"
+msgstr "^BG%s^F3 は不活発者で追い出された"
#: qcsrc/common/notifications/all.inc:416
msgid ""
#: qcsrc/common/notifications/all.inc:420
#, c-format
msgid "^BG%s^BG has abandoned the race"
-msgstr "^BG%^BG はレースを放棄した"
+msgstr "^BG%s^BG はレースを放棄した"
#: qcsrc/common/notifications/all.inc:421
#, c-format
#: qcsrc/common/notifications/all.inc:423
#, c-format
msgid "^BG%s^BG has finished the race"
-msgstr "^BG%^BG はレースを終了した"
+msgstr "^BG%s^BG はレースを終了した"
#: qcsrc/common/notifications/all.inc:424
#, c-format
#: qcsrc/common/notifications/all.inc:457
#, c-format
msgid "^BG%s^K1 blew themself up with their Devastator%s%s"
-msgstr "^BG%s^K1 はデーバーステーター%s%sで自分自身を爆破した"
+msgstr "^BG%s^K1 はデーバーステーター%s%sで自分自身を爆破した"
#: qcsrc/common/notifications/all.inc:458
#, c-format
msgid ""
"^BG%s^K1 was sawn in half by their own Overkill Rocket Propelled Chainsaw%s%s"
msgstr ""
-"^BG%s%s^K1 が自分自身のオーバーキルロケット推進チェーンソー%s%sによって半分に"
-"切断された"
+"^BG%s^K1 が自分自身のオーバーキルロケット推進チェーンソー%s%sによって半分に切"
+"断された"
#: qcsrc/common/notifications/all.inc:491
#, c-format
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:62
msgid "Game types:"
-msgstr "ã\82²ã\83¼ã\83 ã\83¢ã\83¼ã\83\89:"
+msgstr "ã\82²ã\83¼ã\83 ã\82¿ã\82¤ã\83\97:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:85
#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:257
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:233
msgid "Motion blur strength - 0.4 recommended"
-msgstr "モーションブラーの強度-0.4を推奨"
+msgstr "モーションブラーの強度 - 0.4を勧めす"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:234
msgid "Motion blur:"
"when there's an obstacle between your gun and the target; Enemies: also "
"enlarge the crosshair when you would hit an enemy"
msgstr ""
-"なし: 十字線のヒットテストを行いません。本旨: 銃とターゲットの間に障害物があ"
-"るときに十字線をぼかす。敵:敵に当たったときに十字線を拡大する"
+"なし: 十字線のヒットテストを行いません。真の照準: 銃とターゲットの間に障害物"
+"ã\81\8cã\81\82ã\82\8bã\81¨ã\81\8dã\81«å\8d\81å\97ç·\9aã\82\92ã\81¼ã\81\8bã\81\99ã\80\82æ\95µï¼\9aæ\95µã\81«å½\93ã\81\9fã\81£ã\81\9fã\81¨ã\81\8dã\81«å\8d\81å\97ç·\9aã\82\92æ\8b¡å¤§ã\81\99ã\82\8b"
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:129
msgid "HTTST^Disabled"
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:130
msgid "HTTST^TrueAim"
-msgstr "本旨"
+msgstr "真の照準"
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:131
msgid "HTTST^Enemies"
"Team size position: Off=do not show; Left=on the left side of the scoreboard "
"and move team scores to the right; Right=on the right of the scoreboard"
msgstr ""
-"チームサイズの位置: オフ=表示されない。左 = 得点表の左側にあり、チームの得点"
-"を右に移動する。右 = 得点表の右側"
+"チームサイズの位置: 無効 = 表示されない。左 = 得点表の左側にあり、チームの得"
+"点を右に移動する。右 = 得点表の右側"
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:64
msgid "Waypoints"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:67
msgid "Display capture times in Capture The Flag"
-msgstr "「旗を取れ」に取れた時間を表示する"
+msgstr "「キャプチャー・ザ・フラッグ」に取れた時間を表示する"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:71
msgid "Display name of flag stealer in Capture The Flag"
-msgstr "「旗を取れ」に旗の強盗者の名を表示する"
+msgstr "「キャプチャー・ザ・フラッグ」に旗の強盗者の名を表示する"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:76
#: qcsrc/menu/xonotic/dialog_settings_input.qc:92
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:51
msgid "Force player models to mine"
-msgstr ""
+msgstr "プレイヤーのモデルを私のものに強制的する"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:53
msgid "Force player colors to mine"
-msgstr ""
+msgstr "プレイヤーの色を私のものに強制的する"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
msgid "In non teamplay modes only"
-msgstr ""
+msgstr "非チームプレイモードのみ"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:60
msgid "Body fading:"
-msgstr ""
+msgstr "体フェージング:"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:63
msgid "Gibs:"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:65
msgid "GIBS^None"
-msgstr ""
+msgstr "なし"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:66
msgid "GIBS^Few"
-msgstr ""
+msgstr "少ない"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:67
msgid "GIBS^Many"
-msgstr ""
+msgstr "多い"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:68
msgid "GIBS^Lots"
-msgstr ""
+msgstr "たくさん"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qh:7
msgid "Models"
-msgstr ""
+msgstr "モデル"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qh:8
msgid "Customize how players and items are displayed in game"
-msgstr ""
+msgstr "ゲームでのプレーヤーとアイテムの表示方法をカスタマイズする"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:26
msgid "1st person perspective"
-msgstr ""
+msgstr "一人称視点"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:29
msgid "Slide to third person upon death"
-msgstr ""
+msgstr "死後三人称視点に変更する"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:33
msgid "Smooth the view when landing from a jump"
-msgstr ""
+msgstr "ジャンプから着陸するときにビューを滑らかにする"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:37
msgid "Smooth the view while crouching"
-msgstr ""
+msgstr "しゃがみながらビューを滑らかにする"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:41
msgid "View waving while idle"
-msgstr ""
+msgstr "不活発に中にビューを振る"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:45
msgid "View bobbing while walking around"
-msgstr ""
+msgstr "歩きながらビューをボビングする"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:50
msgid "3rd person perspective"
-msgstr ""
+msgstr "三人称視点"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:53
msgid "Back distance"
-msgstr ""
+msgstr "後方距離"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:59
msgid "Up distance"
-msgstr ""
+msgstr "上への距離"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:65
msgid "Allow passing through walls while spectating"
-msgstr ""
+msgstr "観戦中に壁を通過できるようにする"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:69
msgid "Field of view:"
-msgstr ""
+msgstr "視野:"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:71
msgid "Field of vision in degrees"
-msgstr ""
+msgstr "度単位の視野"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:75
msgid "ZOOM^Zoom factor:"
-msgstr ""
+msgstr "ズーム因子:"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:77
msgid "How big the zoom factor is when the zoom button is pressed"
-msgstr ""
+msgstr "ズームボタンを押したときのズーム率頻度"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:80
msgid "ZOOM^Zoom speed:"
-msgstr ""
+msgstr "ズーム速度:"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:82
msgid "How fast the view will be zoomed, disable to zoom instantly"
-msgstr ""
+msgstr "ビューがズームされる速度頻度、無効にするとすぐにズームされる"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:91
msgid "ZOOM^Instant"
-msgstr ""
+msgstr "瞬時"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:95
msgid "ZOOM^Zoom sensitivity:"
-msgstr ""
+msgstr "ズーム感度:"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:97
msgid ""
"How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no "
"sensitivity change)"
msgstr ""
+"ズームが感度をどのように変更するか、0 (低い感度) から 1 (感度の変更なし)"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:100
msgid "Velocity zoom"
-msgstr ""
+msgstr "速度ズーム"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:101
msgid "Forward movement only"
-msgstr ""
+msgstr "前進のみ"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:105
msgid "VZOOM^Factor"
-msgstr ""
+msgstr "因子"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:112
msgid "Display reticle 2D overlay while zooming"
-msgstr ""
+msgstr "ズーム中にレチクル2Dオーバーレイを表示する"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:115
msgid "Release zoom when you die or respawn"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:33
msgid "Weapon Priority List (* = mutator weapon)"
-msgstr ""
+msgstr "武器優先リスト (* = ミューテーター武器)"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:39
msgid "Up"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:49
msgid "Use priority list for weapon cycling"
-msgstr ""
+msgstr "武器のサイクリングに優先リストを使用する"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:50
msgid ""
"Make use of the list above when cycling through weapons with the mouse wheel"
-msgstr ""
+msgstr "マウスホイールで武器をサイクリングするときは、上記のリストを使用する"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:52
msgid "Cycle through only usable weapon selections"
-msgstr ""
+msgstr "使用可能な武器の選択のみを循環する"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:56
msgid "Auto switch weapons on pickup"
-msgstr ""
+msgstr "拾ったときに自動的に武器を切り替える"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:57
msgid ""
"Automatically switch to newly picked up weapons if they are better than what "
"you are carrying"
-msgstr ""
+msgstr "持っている武器よりも優れている場合は自動的に収集した武器に切り替える"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:60
msgid "Release attack buttons when you switch weapons"
-msgstr ""
+msgstr "武器を切り替えるときに攻撃ボタンを解放する"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:63
msgid "Draw 1st person weapon model"
-msgstr ""
+msgstr "一人称で武器モデルを描く"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:64
msgid "Draw the weapon model"
-msgstr ""
+msgstr "武器モデルを描く"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:68
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:71
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:74
msgid "Position of the weapon model; requires reconnect"
-msgstr ""
+msgstr "武器モデルの位置、接続が必要だ"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:77
msgid "Weapon model opacity:"
-msgstr ""
+msgstr "武器モデルの不透明度:"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:91
msgid "Gun model swaying"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:34
msgid "Key Bindings"
-msgstr ""
+msgstr "キー割り当て"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:38
msgid "Change key..."
-msgstr ""
+msgstr "キーを変更する..."
#: qcsrc/menu/xonotic/dialog_settings_input.qc:42
msgid "Edit..."
-msgstr ""
+msgstr "編集する..."
#: qcsrc/menu/xonotic/dialog_settings_input.qc:48
msgid "Clear"
-msgstr ""
+msgstr "クリアする"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:53
msgid "Reset all"
-msgstr ""
+msgstr "全てリセットする"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:58
msgid "Mouse"
-msgstr ""
+msgstr "マウス"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:60
msgid "Sensitivity:"
-msgstr ""
+msgstr "感度:"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:62
msgid "Mouse speed multiplier"
-msgstr ""
+msgstr "マウス速度乗数"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:64
msgid "Smooth aiming"
-msgstr ""
+msgstr "滑らかな照準"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:65
msgid "Smoothes the mouse movement, but makes aiming slightly less responsive"
-msgstr ""
+msgstr "マウスの動きを滑らかにするが、照準は少し反応が遅くなる"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:67
msgid "Invert aiming"
-msgstr ""
+msgstr "照準を反転する"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:68
msgid "Invert mouse movement on the Y-axis"
-msgstr ""
+msgstr "Y-軸上のマウスの動きを反転する"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:70
msgid "Use system mouse positioning"
-msgstr ""
+msgstr "システムのマウスの位置を使用する"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:75
msgid "Enable built in mouse acceleration"
-msgstr ""
+msgstr "組み込みのマウス加速を有効にする"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:79
#: qcsrc/menu/xonotic/dialog_settings_input.qc:83
#: qcsrc/menu/xonotic/dialog_settings_input.qc:86
msgid "Disable system mouse acceleration"
-msgstr ""
+msgstr "システムのマウス加速を無効にする"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:80
msgid "Make use of DGA mouse input"
-msgstr ""
+msgstr "DGAマウス入力を利用する"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:94
msgid "Pressing \"enter console\" key also closes it"
-msgstr ""
+msgstr "「コンソールを入力する」キーを押すと、それも閉じる"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:95
msgid "Allow the console toggling bind to also close the console"
-msgstr ""
+msgstr "コンソールのバインドの切り替えを許可して、コンソールも閉じる"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:97
msgid "Automatically repeat jumping if holding jump"
-msgstr ""
+msgstr "ジャンプを押し続けると自動的にジャンプを繰り返す"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:100
msgid "Jetpack on jump:"
-msgstr ""
+msgstr "ジャンプときのジェットパック:"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:102
msgid "JPJUMP^Disabled"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:103
msgid "Air only"
-msgstr ""
+msgstr "空気のみ"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:104
msgid "JPJUMP^All"
-msgstr ""
+msgstr "全て"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:110
#: qcsrc/menu/xonotic/dialog_settings_input.qc:115
#: qcsrc/menu/xonotic/dialog_settings_input.qc:120
msgid "Use joystick input"
-msgstr ""
+msgstr "ジョイスティック入力を使用する"
#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:31
msgid "Command when pressed:"
-msgstr ""
+msgstr "押されたときのコマンド:"
#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:34
msgid "Command when released:"
-msgstr ""
+msgstr "解放された時のコマンド:"
#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:40
msgid "Cancel"
-msgstr ""
+msgstr "キャンセルする"
#: qcsrc/menu/xonotic/dialog_settings_input_userbind.qh:7
msgid "User defined key bind"
-msgstr ""
+msgstr "ユーザー定義のキー割り当て"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:11
#, c-format
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:12
#, c-format
msgid "%d KB/s"
-msgstr ""
+msgstr "%d KB/s"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:13
#, c-format
msgid "%d MB/s"
-msgstr ""
+msgstr "%d MB/s"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:27
msgid "Network"
-msgstr ""
+msgstr "ネットワーク"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:29
msgid "Client UDP port:"
-msgstr ""
+msgstr "クライアントUDPポート:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:31
msgid "Force client to use chosen port unless it is set to 0"
-msgstr ""
+msgstr "0に設定されていない限り、選択したポートをクライアントに強制的する"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:34
msgid "Bandwidth:"
-msgstr ""
+msgstr "バンド幅:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:36
msgid "Specify your network speed"
-msgstr ""
+msgstr "ネットワーク速度を指定する"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:37
msgid "56k"
-msgstr ""
+msgstr "56k"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:38
msgid "ISDN"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:39
msgid "Slow ADSL"
-msgstr ""
+msgstr "遅いADSL"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:40
msgid "Fast ADSL"
-msgstr ""
+msgstr "速いADSL"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:41
msgid "Broadband"
-msgstr ""
+msgstr "ブロードバンド"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:44
msgid "Server queries/s:"
-msgstr ""
+msgstr "サーバークエリ:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:48
msgid "Downloads:"
-msgstr ""
+msgstr "ダウンロード:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:50
msgid "Maximum number of concurrent HTTP/FTP downloads"
-msgstr ""
+msgstr "同時HTTP / FTPダウンロードの最大数"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:52
msgid "Download speed:"
-msgstr ""
+msgstr "ダウンロード速度:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:65
msgid "Local latency:"
-msgstr ""
+msgstr "ローカルレイテンシ:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:69
msgid "Show netgraph"
-msgstr ""
+msgstr "ネットグラフを表示する"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:70
msgid "Show a graph of packet sizes and other information"
-msgstr ""
+msgstr "パケットサイズとその他の情報のグラフを表示する"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:72
msgid "Client-side movement prediction"
-msgstr ""
+msgstr "クライアント側の動き予測"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:74
msgid "Movement error compensation"
-msgstr ""
+msgstr "エラー補償の動き"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:78
msgid "Use encryption (AES) when available"
-msgstr ""
+msgstr "可能な場合は暗号化(AES)を使用する"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:81
msgid "Framerate"
-msgstr ""
+msgstr "フレームレート"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:83
msgid "Maximum:"
-msgstr ""
+msgstr "最大:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:93
msgid "MAXFPS^Unlimited"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:96
msgid "Target:"
-msgstr ""
+msgstr "目的:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:98
msgid "TRGT^Disabled"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:109
msgid "Idle limit:"
-msgstr ""
+msgstr "不活発の制限:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:115
msgid "IDLFPS^Unlimited"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:119
msgid "Save processing time for other apps"
-msgstr ""
+msgstr "他のアプリの処理時間を保存する"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:122
msgid "Show frames per second"
"Menu tooltips: disabled, standard or advanced (also shows cvar or console "
"command bound to the menu item)"
msgstr ""
+"メニューツールチップ: 無効、標準、高度 (メニュー項目にバインドされた cvar コ"
+"マンドまたはコンソールコマンドも表示する)"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:131
msgid "TLTIP^Disabled"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:145
msgid "Advanced settings where you can tweak every single variable of the game"
-msgstr ""
+msgstr "各ゲーム変数を調整できる詳細設定"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:150
#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qh:6
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:31
msgid "Cvar filter:"
-msgstr "CVARフィルター:"
+msgstr "cvarフィルター:"
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:38
msgid "Modified cvars only"
-msgstr ""
+msgstr "変更されたcvarのみ"
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:45
msgid "Setting:"
#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:13
msgid "This will create a backup config in your data directory"
-msgstr ""
+msgstr "これによりデータディレクトリにバックアップ構成が作成されます"
#: qcsrc/menu/xonotic/dialog_settings_user.qc:23
msgid "Menu Skins"
#: qcsrc/menu/xonotic/dialog_settings_user.qc:67
msgid "Set language"
-msgstr "言語を設定"
+msgstr "言語を設定する"
#: qcsrc/menu/xonotic/dialog_settings_user.qc:72
msgid "Disable gore effects and harsh language"
-msgstr ""
+msgstr "流血の効果と攻撃的な言葉を無効にする"
#: qcsrc/menu/xonotic/dialog_settings_user.qc:73
msgid "Replace blood and gibs with content that does not have any gore effects"
-msgstr ""
+msgstr "血と内臓を流血の効果コンテンツに置き換える"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:10
msgid "While connected language changes will be applied only to the menu,"
-msgstr ""
+msgstr "接続されている言語の変更はメニューにのみ適用されますが、"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:12
msgid "full language changes will take effect starting from the next game"
-msgstr ""
+msgstr "完全な言語の変更は次のゲームから有効になります"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:16
msgid "Disconnect now"
-msgstr "今すぐ切断"
+msgstr "今すぐ切断する"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:17
msgid "Switch language"
-msgstr "言語を変更"
+msgstr "言語を変更する"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qh:6
msgid "Warning"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:53
msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
-msgstr ""
+msgstr "レンダリングするピクセルあたりのビット数 (BPP)、32を勧めす"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:54
msgid "16bit"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:61
msgid "Vertical Synchronization"
-msgstr ""
+msgstr "垂直同期"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:62
msgid ""
"Enable vertical synchronization to prevent tearing, will cap your fps to the "
"screen refresh rate"
msgstr ""
+"垂直同期を有効にしてティアリングを防止し、fpsを画面のリフレッシュレートに制限"
+"する"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:67
msgid "Flip view horizontally"
-msgstr ""
+msgstr "ビューを水平に反転する"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:68
msgid "Poor man's left handed mode"
-msgstr ""
+msgstr "左利きモード"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:71
msgid "Anisotropy:"
-msgstr ""
+msgstr "異方性:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:73
msgid "Anisotropic filtering quality"
-msgstr ""
+msgstr "異方性フィルタリング品質"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:74
msgid "ANISO^Disabled"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:81
msgid "Antialiasing:"
-msgstr ""
+msgstr "アンチエイリアシング:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:84
msgid ""
"Enable antialiasing, which smooths the edges of 3D geometry. Note that it "
"might decrease performance by quite a lot"
msgstr ""
+"3Dジオメトリのエッジを滑らかにするアンチエイリアスを有効にする。パフォーマン"
+"スが大幅に低下する可能性があることに注意してください"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:85
msgid "AA^Disabled"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:92
msgid "High-quality frame buffer"
-msgstr ""
+msgstr "高品質のフレームバッファ"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:97
msgid "Depth first:"
-msgstr ""
+msgstr "深さ優先:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:99
msgid ""
"Eliminate overdraw by rendering a depth-only version of the scene before the "
"normal rendering starts"
msgstr ""
+"通常のレンダリングが開始する前に、深度のみのバージョンのシーンをレンダリング"
+"することにより、オーバードローを排除する"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:100
msgid "DF^Disabled"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:108
msgid "VBO^Off"
-msgstr ""
+msgstr "無効"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:109
msgid "Vertices, some Tris (compatible)"
"Make use of Vertex Buffer Objects to store static geometry in video memory "
"for faster rendering"
msgstr ""
+"頂点バッファオブジェクトを使用して、静的ジオメトリをビデオメモリに格納し、レ"
+"ンダリングを高速化する"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:113
msgid "Vertices"
msgid ""
"Inverse gamma correction value, a brightness effect that does not affect "
"white or black"
-msgstr ""
+msgstr "逆ガンマ補正値、白または黒に影響を与えない輝度効果"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:133
msgid "Contrast boost:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:136
msgid "By how much to multiply the contrast in dark areas"
-msgstr ""
+msgstr "暗い部分のコントラストをどれだけ掛けるか"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:139
msgid "Saturation:"
-msgstr "飽和:"
+msgstr "彩度:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:142
msgid ""
"Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), "
"requires GLSL color control"
msgstr ""
+"彩度調整 (0 = グレースケール、1 = 通常、2 = 過飽和)、GLSLカラーコントロールが"
+"必要する"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:146
msgid "LIT^Ambient:"
"Ambient lighting, if set too high it tends to make light on maps look dull "
"and flat"
msgstr ""
+"アンビエント照明、設定が高すぎると、マップ上のライトが鈍く平坦に見える傾向が"
+"ある"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:150
msgid "Intensity:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:152
msgid "Global rendering brightness"
-msgstr ""
+msgstr "グローバルレンダリングの明るさ"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:155
msgid "Wait for GPU to finish each frame"
-msgstr ""
+msgstr "GPUが各フレームを完了するまで待つ"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:156
msgid ""
"Make the CPU wait for the GPU to finish each frame, can help with some "
"strange input or video lag on some machines"
msgstr ""
+"GPUが各フレームを完了するまでCPUを待機させる。一部のマシンでは奇妙な入力やビ"
+"デオの遅延に役立つ。"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:158
msgid "Use OpenGL 2.0 shaders (GLSL)"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:163
msgid "Psycho coloring (easter egg)"
-msgstr ""
+msgstr "サイコカラーズ (イースターエッグ)"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:166
msgid "Trippy vertices (easter egg)"
-msgstr ""
+msgstr "幻覚の頂点 (イースターエッグ)"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:109
msgid "Instant action! (random map with bots)"
-msgstr ""
+msgstr "インスタントアクション! (ボット付きランダムマップ)"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:116
msgid "???"
#: qcsrc/menu/xonotic/dialog_singleplayer.qh:7
msgid "Play the singleplayer campaign or instant action matches against bots"
msgstr ""
+"ボットに対してシングルプレイヤーキャンペーンまたはインスタントアクションマッ"
+"チを遊ぶ"
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.qh:7
msgid "Winner"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:32
msgid "join 'best' team (auto-select)"
-msgstr ""
+msgstr "「最高」チームに参加する (自動選択)"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:33
msgid "Autoselect team (recommended)"
-msgstr ""
+msgstr "チームの自動選択する (推奨)"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:37
msgid "red"
#: qcsrc/menu/xonotic/dialog_uid2name.qc:10
msgid "Allow player statistics to use your nickname?"
-msgstr ""
+msgstr "選手の統計であなたのニックネームを使用できるように許可しますか?"
#: qcsrc/menu/xonotic/dialog_uid2name.qc:12
msgid "Answering \"No\" you will appear as \"Anonymous player\""
-msgstr ""
+msgstr "「いいえ」と答えると、 \"Anonymous player\" として表示される"
#: qcsrc/menu/xonotic/gametypelist.qc:87
msgid "teamplay"
#: qcsrc/menu/xonotic/keybinder.qc:37
msgid "backpedal"
-msgstr ""
+msgstr "後方"
#: qcsrc/menu/xonotic/keybinder.qc:38
msgid "strafe left"
-msgstr ""
+msgstr "左"
#: qcsrc/menu/xonotic/keybinder.qc:39
msgid "strafe right"
-msgstr ""
+msgstr "右"
#: qcsrc/menu/xonotic/keybinder.qc:40
msgid "jump / swim"
-msgstr "ジャンプ / "
+msgstr "ジャンプする / 泳ぐ"
#: qcsrc/menu/xonotic/keybinder.qc:41
msgid "crouch / sink"
-msgstr ""
+msgstr "しゃがむ / 降りる"
#: qcsrc/menu/xonotic/keybinder.qc:42
msgid "off-hand hook"
-msgstr ""
+msgstr "フック"
#: qcsrc/menu/xonotic/keybinder.qc:43
msgid "jetpack"
#: qcsrc/menu/xonotic/keybinder.qc:56
msgid "reload"
-msgstr "リロード"
+msgstr "リロードする"
#: qcsrc/menu/xonotic/keybinder.qc:57
msgid "drop weapon / throw nade"
-msgstr ""
+msgstr "武器を落とす / 手榴弾を投げる"
#: qcsrc/menu/xonotic/keybinder.qc:84
msgid "hold zoom"
-msgstr ""
+msgstr "ズームを維持する"
#: qcsrc/menu/xonotic/keybinder.qc:85
msgid "toggle zoom"
-msgstr ""
+msgstr "ズームを切り替える"
#: qcsrc/menu/xonotic/keybinder.qc:86
msgid "show scores"
-msgstr ""
+msgstr "得点を表示する"
#: qcsrc/menu/xonotic/keybinder.qc:87
msgid "screen shot"
-msgstr ""
+msgstr "スクリーンショット"
#: qcsrc/menu/xonotic/keybinder.qc:88
msgid "maximize radar"
-msgstr ""
+msgstr "レーダーを最大化する"
#: qcsrc/menu/xonotic/keybinder.qc:89
msgid "3rd person view"
-msgstr ""
+msgstr "三人称ビュー"
#: qcsrc/menu/xonotic/keybinder.qc:90
msgid "enter spectator mode"
#: qcsrc/menu/xonotic/keybinder.qc:96
msgid "show chat history"
-msgstr ""
+msgstr "チャットの履歴を表示する"
#: qcsrc/menu/xonotic/keybinder.qc:97
msgid "vote YES"
-msgstr ""
+msgstr "「はい」を投票する"
#: qcsrc/menu/xonotic/keybinder.qc:98
msgid "vote NO"
-msgstr ""
+msgstr "「いいえ」を投票する"
#: qcsrc/menu/xonotic/keybinder.qc:102
msgid "Client"
#: qcsrc/menu/xonotic/keybinder.qc:106 qcsrc/menu/xonotic/keybinder.qc:108
msgid "enter console"
-msgstr ""
+msgstr "コンソールを入力する"
#: qcsrc/menu/xonotic/keybinder.qc:109
msgid "disconnect"
-msgstr "切断"
+msgstr "切断する"
#: qcsrc/menu/xonotic/keybinder.qc:110
msgid "quit"
-msgstr ""
+msgstr "ゲームをやめる"
#: qcsrc/menu/xonotic/keybinder.qc:114
msgid "auto-join team"
-msgstr ""
+msgstr "自動的にチームに参加する"
#: qcsrc/menu/xonotic/keybinder.qc:120
msgid "drop key/flag, exit vehicle"
-msgstr ""
+msgstr "鍵/旗を落とす / 乗り物から降りる"
#: qcsrc/menu/xonotic/keybinder.qc:121
msgid "suicide / respawn"
#: qcsrc/menu/xonotic/keybinder.qc:122
msgid "quick menu"
-msgstr ""
+msgstr "クイックメニュー"
#: qcsrc/menu/xonotic/keybinder.qc:125
msgid "User defined"
-msgstr ""
+msgstr "ユーザー定義"
#: qcsrc/menu/xonotic/keybinder.qc:132
msgid "Development"
#: qcsrc/menu/xonotic/keybinder.qc:133
msgid "sandbox menu"
-msgstr ""
+msgstr "サンドボックスメニュー"
#: qcsrc/menu/xonotic/keybinder.qc:134
msgid "drag object (sandbox)"
-msgstr ""
+msgstr "オブジェクトをドラッグ (サンドボックス)"
#: qcsrc/menu/xonotic/keybinder.qc:135
msgid "waypoint editor menu"
-msgstr ""
+msgstr "ウェイポイント編集メニュー"
#: qcsrc/menu/xonotic/mainwindow.qc:96 qcsrc/menu/xonotic/mainwindow.qc:99
msgid "Do not press this button again!"
-msgstr ""
+msgstr "もう一度このボタンを押さないでください!"
#: qcsrc/menu/xonotic/maplist.qc:288
msgid ""
"Huh? Can't play this (m is NULL). Refiltering so this won't happen again."
msgstr ""
+"あれ? これを遊べません (m is NULL)。これが再度発生しないように再フィルタリン"
+"グします。"
#: qcsrc/menu/xonotic/maplist.qc:296
#, c-format
"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
"again."
msgstr ""
+"あれ? これを遊べません (invalid game type)。これが再度発生しないように再フィ"
+"ルタリングします。"
#: qcsrc/menu/xonotic/playerlist.qc:102 qcsrc/menu/xonotic/playerlist.qc:112
msgid "spectator"
#: qcsrc/menu/xonotic/serverlist.qc:257
msgid "Remove the currently highlighted server from bookmarks"
-msgstr ""
+msgstr "現在ハイライト表示されているサーバーをブックマークから削除する"
#: qcsrc/menu/xonotic/serverlist.qc:261
msgid "SERVER^Favorite"
"Bookmark the currently highlighted server so that it's faster to find in the "
"future"
msgstr ""
+"現在ハイライトされているサーバーにブックマークを付けて、未来見つけやすくする"
#: qcsrc/menu/xonotic/serverlist.qc:733
msgid "Ping"
#: qcsrc/menu/xonotic/statslist.qc:167
#, c-format
msgid "Kills/Deaths:"
-msgstr "殺された者 / 死者"
+msgstr "キル数 / デス数:"
#: qcsrc/menu/xonotic/statslist.qc:173
#, c-format
msgid "Kill ratio:"
-msgstr "殺害率"
+msgstr "キル率:"
#: qcsrc/menu/xonotic/statslist.qc:208
msgid "ELO:"
# Liang Liu <dxkliu@126.com>, 2019
# Losier Blackheath <losier.cc@gmail.com>, 2018
# sapphireliu <balancedliu@gmail.com>, 2014
-# 杜茂森 <dumaosen_main01@outlook.com>, 2018-2019
+# 杜茂森 <dumaosen_main01@outlook.com>, 2018-2020
# 杜茂森 <dumaosen_main01@outlook.com>, 2018
# 韬 刘 <jiegushijia@gmail.com>, 2019
msgid ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-07 07:23+0200\n"
-"PO-Revision-Date: 2020-06-07 05:23+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"PO-Revision-Date: 2020-07-25 11:27+0000\n"
+"Last-Translator: 杜茂森 <dumaosen_main01@outlook.com>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/team-xonotic/"
"xonotic/language/zh_CN/)\n"
"Language: zh_CN\n"
#: qcsrc/client/hud/panel/scoreboard.qc:136
msgid "Player rank"
-msgstr ""
+msgstr "玩家排名"
#: qcsrc/client/hud/panel/scoreboard.qc:136
msgid "SCO^rank"
#: qcsrc/client/hud/panel/scoreboard.qc:139
msgid "Number of rounds won"
-msgstr ""
+msgstr "赢得场数"
#: qcsrc/client/hud/panel/scoreboard.qc:139
msgid "SCO^rounds won"
#: qcsrc/common/items/item/ammo.qh:66
msgid "bullets"
-msgstr ""
+msgstr "子弹"
#: qcsrc/common/items/item/ammo.qh:96
msgid "cells"
-msgstr ""
+msgstr "细胞"
#: qcsrc/common/items/item/ammo.qh:126
msgid "plasma"
-msgstr ""
+msgstr "等离子"
#: qcsrc/common/items/item/ammo.qh:156
msgid "rockets"
-msgstr ""
+msgstr "火箭"
#: qcsrc/common/items/item/ammo.qh:190
msgid "shells"
-msgstr ""
+msgstr "装甲"
#: qcsrc/common/items/item/armor.qh:42
msgid "Small armor"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:91
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:215
msgid "Jetpack"
-msgstr ""
+msgstr "火箭包"
#: qcsrc/common/items/item/jetpack.qh:71
msgid "fuel"
-msgstr ""
+msgstr "燃料"
#: qcsrc/common/items/item/jetpack.qh:96
msgid "Fuel regenerator"
#: qcsrc/common/minigames/minigame/bd.qc:2
msgid "Bulldozer"
-msgstr ""
+msgstr "推土机"
#: qcsrc/common/minigames/minigame/bd.qc:1092
#: qcsrc/common/minigames/minigame/ps.qc:421
#: qcsrc/common/minigames/minigame/ttt.qc:2
msgid "Tic Tac Toe"
-msgstr ""
+msgstr "井字棋"
#: qcsrc/common/minigames/minigame/ttt.qc:672
msgid "Single Player"
#: qcsrc/common/mutators/mutator/nades/nades.inc:26
msgid "Ice grenade"
-msgstr ""
+msgstr "冰榴弹"
#: qcsrc/common/mutators/mutator/nades/nades.inc:34
msgid "Translocate grenade"
-msgstr ""
+msgstr "穿越榴弹"
#: qcsrc/common/mutators/mutator/nades/nades.inc:42
msgid "Spawn grenade"
pt_BR "Portuguese (Brazil)" "Português (Brasil)" 99%
ro "Romanian" "Romana" 74%
fi "Finnish" "Suomi" 100%
-ja_JP "ja_JP" "ja_JP" 93%
el "Greek" "Ελληνική" 47%
be "Belarusian" "Беларуская" 54%
-bg "Bulgarian" "Български" 59%
+bg "Bulgarian" "Български" 63%
ru "Russian" "Русский" 100%
sr "Serbian" "Српски" 64%
uk "Ukrainian" "Українська" 50%
zh_CN "Chinese (China)" "中文" 57%
zh_TW "Chinese (Taiwan)" "國語" 61%
+ja_JP "Japanese" "日本語" 100%
ko "Korean" "한국의" 29%
seta notification_ANNCE_ACHIEVEMENT_IMPRESSIVE "1" "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled"
seta notification_ANNCE_ACHIEVEMENT_YODA "1" "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled"
seta notification_ANNCE_BEGIN "2" "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled"
+seta notification_ANNCE_HEADSHOT "2" "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled"
seta notification_ANNCE_INSTAGIB_LASTSECOND "1" "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled"
seta notification_ANNCE_INSTAGIB_NARROWLY "1" "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled"
seta notification_ANNCE_INSTAGIB_TERMINATED "1" "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled"
#include <client/commands/_mod.inc>
#include <client/hud/_mod.inc>
+#include <client/items/_mod.inc>
#include <client/mutators/_mod.inc>
#include <client/weapons/_mod.inc>
#include <client/commands/_mod.qh>
#include <client/hud/_mod.qh>
+#include <client/items/_mod.qh>
#include <client/mutators/_mod.qh>
#include <client/weapons/_mod.qh>
#pragma once
-entityclass(BGMScript);
-classfield(BGMScript) .string bgmscript;
-classfield(BGMScript) .float bgmscriptattack;
-classfield(BGMScript) .float bgmscriptdecay;
-classfield(BGMScript) .float bgmscriptsustain;
-classfield(BGMScript) .float bgmscriptrelease;
+#include <common/mapobjects/bgmscript.qh>
classfield(BGMScript) .float just_toggled;
-#ifdef CSQC
void BGMScript_InitEntity(entity e);
float doBGMScript(entity e);
-#endif
#include <common/animdecide.qh>
#include <common/ent_cs.qh>
#include <common/physics/movetypes/movetypes.qh>
+#include <common/physics/player.qh>
#include <common/viewloc.qh>
#include <common/effects/all.qh>
#include <common/effects/all.inc>
if(eff & EF_FULLBRIGHT)
this.renderflags |= RF_FULLBRIGHT;
if(eff & EF_FLAME)
- pointparticles(EFFECT_EF_FLAME, this.origin, '0 0 0', bound(0, frametime, 0.1));
+ {
+ boxparticles(particleeffectnum(EFFECT_EF_FLAME), this, this.absmin, this.absmax, this.velocity, this.velocity, bound(0, frametime, 0.1), 0);
+ //pointparticles(EFFECT_EF_FLAME, this.origin, '0 0 0', bound(0, frametime, 0.1));
+ }
if(eff & EF_STARDUST)
- pointparticles(EFFECT_EF_STARDUST, this.origin, '0 0 0', bound(0, frametime, 0.1));
+ {
+ boxparticles(particleeffectnum(EFFECT_EF_STARDUST), this, this.absmin, this.absmax, this.velocity, this.velocity, bound(0, frametime, 0.1), 0);
+ //pointparticles(EFFECT_EF_STARDUST, this.origin, '0 0 0', bound(0, frametime, 0.1));
+ }
if(eff & EF_NOSHADOW)
this.renderflags |= RF_NOSHADOW;
if(eff & EF_NODEPTHTEST)
#include "hud.qh"
#include <client/defs.qh>
+#include <client/items/items.qh>
#include <client/miscfunctions.qh>
#include <client/view.qh>
#include "panel/scoreboard.qh"
#include "../mapvoting.qh"
#include "../teamradar.qh"
#include <common/minigames/cl_minigames.qh>
-#include <common/t_items.qh>
#include <common/deathtypes/all.qh>
#include <common/ent_cs.qh>
#include <common/items/_mod.qh>
#include <client/autocvars.qh>
#include <client/defs.qh>
+#include <client/items/items.qh>
#include <client/miscfunctions.qh>
#include <client/view.qh>
-#include <common/t_items.qh>
#include <common/wepent.qh>
#include <common/mutators/mutator/nades/nades.qh>
--- /dev/null
+// generated file; do not modify
+#include <client/items/items.qc>
--- /dev/null
+// generated file; do not modify
+#include <client/items/items.qh>
--- /dev/null
+#include "items.qh"
+
+#include <common/items/_mod.qh>
+
+#include <client/main.qh>
+#include <common/physics/movetypes/movetypes.qh>
+#include <common/weapons/_all.qh>
+#include <lib/csqcmodel/cl_model.qh>
+#include <lib/csqcmodel/common.qh>
+#include <lib/warpzone/common.qh>
+
+bool autocvar_cl_ghost_items_vehicle = true;
+.vector item_glowmod;
+.bool item_simple; // probably not really needed, but better safe than sorry
+.float alpha;
+.bool pushable;
+void Item_SetAlpha(entity this)
+{
+ bool veh_hud = (hud && autocvar_cl_ghost_items_vehicle);
+
+ if(!veh_hud && (this.ItemStatus & ITS_AVAILABLE))
+ {
+ this.alpha = 1;
+ this.colormod = '1 1 1';
+ this.glowmod = this.item_glowmod;
+ }
+ else
+ {
+ this.alpha = autocvar_cl_ghost_items;
+ this.colormod = this.glowmod = autocvar_cl_ghost_items_color;
+ }
+
+ if((!veh_hud) && (this.ItemStatus & ITS_STAYWEP))
+ {
+ this.colormod = this.glowmod = autocvar_cl_weapon_stay_color;
+ this.alpha = autocvar_cl_weapon_stay_alpha;
+ }
+
+ this.drawmask = ((this.alpha <= 0) ? 0 : MASK_NORMAL);
+}
+
+void ItemDraw(entity this)
+{
+ if(this.gravity)
+ {
+ Movetype_Physics_MatchServer(this, false);
+ if(IS_ONGROUND(this))
+ { // For some reason avelocity gets set to '0 0 0' here ...
+ this.oldorigin = this.origin;
+ this.gravity = 0;
+
+ if(autocvar_cl_animate_items)
+ { // ... so reset it if animations are requested.
+ if(this.ItemStatus & ITS_ANIMATE1)
+ this.avelocity = '0 180 0';
+
+ if(this.ItemStatus & ITS_ANIMATE2)
+ this.avelocity = '0 -90 0';
+ }
+
+ // delay is for blocking item's position for a while;
+ // it's a workaround for dropped weapons that receive the position
+ // another time right after they spawn overriding animation position
+ this.onground_time = time + 0.5;
+ }
+ }
+ else if (autocvar_cl_animate_items && !this.item_simple) // no bobbing applied to simple items, for consistency's sake (no visual difference between ammo and weapons)
+ {
+ if(this.ItemStatus & ITS_ANIMATE1)
+ {
+ this.angles += this.avelocity * frametime;
+ float fade_in = bound(0, time - this.onground_time, 1);
+ setorigin(this, this.oldorigin + fade_in * ('0 0 10' + '0 0 8' * sin((time - this.onground_time) * 2)));
+ }
+
+ if(this.ItemStatus & ITS_ANIMATE2)
+ {
+ this.angles += this.avelocity * frametime;
+ float fade_in = bound(0, time - this.onground_time, 1);
+ setorigin(this, this.oldorigin + fade_in * ('0 0 8' + '0 0 4' * sin((time - this.onground_time) * 3)));
+ }
+ }
+
+ Item_SetAlpha(this);
+}
+
+void Item_PreDraw(entity this)
+{
+ if(warpzone_warpzones_exist)
+ {
+ setpredraw(this, func_null); // no need to keep running this
+ return;
+ }
+ float alph;
+ vector org = getpropertyvec(VF_ORIGIN);
+ //if(!checkpvs(org, this)) // this makes sense as long as we don't support recursive warpzones
+ //alph = 0; // this shouldn't be needed, since items behind walls are culled anyway
+ if(this.fade_start)
+ {
+ if(vdist(org - this.origin, >, this.fade_end))
+ alph = 0; // save on some processing
+ else if(vdist(org - this.origin, <, this.fade_start))
+ alph = 1; // more processing saved
+ else
+ alph = bound(0, (this.fade_end - vlen(org - this.origin - 0.5 * (this.mins + this.maxs))) / (this.fade_end - this.fade_start), 1);
+ }
+ else
+ alph = 1;
+ //printf("%v <-> %v\n", view_origin, this.origin + 0.5 * (this.mins + this.maxs));
+ if(!hud && (this.ItemStatus & ITS_AVAILABLE))
+ this.alpha = alph;
+ if(alph <= 0)
+ this.drawmask = 0;
+ //else
+ //this.drawmask = MASK_NORMAL; // reset by the setalpha function
+}
+
+void ItemRemove(entity this)
+{
+ strfree(this.mdl);
+}
+
+HashMap ENT_CLIENT_ITEM_simple;
+STATIC_INIT(ENT_CLIENT_ITEM_simple)
+{
+ HM_NEW(ENT_CLIENT_ITEM_simple);
+}
+SHUTDOWN(ENT_CLIENT_ITEM_simple)
+{
+ HM_DELETE(ENT_CLIENT_ITEM_simple);
+}
+
+NET_HANDLE(ENT_CLIENT_ITEM, bool isnew)
+{
+ int sf = ReadByte();
+
+ if(sf & ISF_LOCATION)
+ {
+ this.origin = ReadVector();
+ setorigin(this, this.origin);
+ this.oldorigin = this.origin;
+ }
+
+ if(sf & ISF_ANGLES)
+ {
+ this.angles = ReadAngleVector();
+ }
+
+ if(sf & ISF_SIZE)
+ {
+ setsize(this, '-16 -16 0', '16 16 48');
+ }
+
+ if(sf & ISF_STATUS) // need to read/write status first so model can handle simple, fb etc.
+ {
+ this.ItemStatus = ReadByte();
+
+ Item_SetAlpha(this);
+
+ if(this.ItemStatus & ITS_ALLOWFB)
+ this.effects |= EF_FULLBRIGHT;
+ else
+ this.effects &= ~EF_FULLBRIGHT;
+
+ if(this.ItemStatus & ITS_GLOW)
+ {
+ if(this.ItemStatus & ITS_AVAILABLE)
+ this.effects |= (EF_ADDITIVE | EF_FULLBRIGHT);
+ else
+ this.effects &= ~(EF_ADDITIVE | EF_FULLBRIGHT);
+ }
+ }
+
+ if(sf & ISF_MODEL)
+ {
+ this.drawmask = MASK_NORMAL;
+ set_movetype(this, MOVETYPE_TOSS);
+ if (isnew) IL_PUSH(g_drawables, this);
+ this.draw = ItemDraw;
+ this.solid = SOLID_TRIGGER;
+ //this.flags |= FL_ITEM;
+
+ this.fade_end = ReadShort();
+ this.fade_start = ReadShort();
+ if(!warpzone_warpzones_exist && this.fade_start && !autocvar_cl_items_nofade)
+ setpredraw(this, Item_PreDraw);
+
+ strfree(this.mdl);
+
+ string _fn = ReadString();
+ this.item_simple = false; // reset it!
+
+ if(autocvar_cl_simple_items && (this.ItemStatus & ITS_ALLOWSI))
+ {
+ string _fn2 = substring(_fn, 0 , strlen(_fn) -4);
+ this.item_simple = true;
+
+ #define extensions(x) \
+ x(md3) \
+ x(dpm) \
+ x(iqm) \
+ x(mdl) \
+ /**/
+ #define tryext(ext) { \
+ string s = strcat(_fn2, autocvar_cl_simpleitems_postfix, "." #ext); \
+ string cached = HM_gets(ENT_CLIENT_ITEM_simple, s); \
+ if (cached == "") { \
+ HM_sets(ENT_CLIENT_ITEM_simple, s, cached = fexists(s) ? "1" : "0"); \
+ } \
+ if (cached != "0") { \
+ strcpy(this.mdl, s); \
+ break; \
+ } \
+ }
+ do {
+ extensions(tryext);
+ this.item_simple = false;
+ LOG_TRACEF("Simple item requested for %s but no model exists for it", _fn);
+ } while (0);
+ #undef tryext
+ #undef extensions
+ }
+
+ if(!this.item_simple)
+ strcpy(this.mdl, _fn);
+
+ if(this.mdl == "")
+ LOG_WARNF("this.mdl is unset for item %s", this.classname);
+
+ precache_model(this.mdl);
+ _setmodel(this, this.mdl);
+
+ setsize(this, '-16 -16 0', '16 16 48');
+ }
+
+ if(sf & ISF_COLORMAP)
+ {
+ this.colormap = ReadShort();
+ this.item_glowmod_x = ReadByte() / 255.0;
+ this.item_glowmod_y = ReadByte() / 255.0;
+ this.item_glowmod_z = ReadByte() / 255.0;
+ }
+
+ if(sf & ISF_DROP)
+ {
+ this.gravity = 1;
+ this.pushable = true;
+ //this.angles = '0 0 0';
+ set_movetype(this, MOVETYPE_TOSS);
+ this.velocity = ReadVector();
+ setorigin(this, this.oldorigin);
+
+ if(!this.move_time)
+ {
+ this.move_time = time;
+ this.spawntime = time;
+ }
+ else
+ this.move_time = max(this.move_time, time);
+ }
+
+ if(autocvar_cl_animate_items)
+ {
+ if(this.ItemStatus & ITS_ANIMATE1)
+ this.avelocity = '0 180 0';
+
+ if(this.ItemStatus & ITS_ANIMATE2)
+ this.avelocity = '0 -90 0';
+ }
+
+ this.entremove = ItemRemove;
+
+ return true;
+}
--- /dev/null
+#pragma once
+
+const int AMMO_COUNT = 4; // amount of ammo types to show in the ammo panel
+
+.float onground_time;
+
+bool autocvar_cl_items_nofade;
+float autocvar_cl_animate_items = 1;
+float autocvar_cl_ghost_items = 0.45;
+vector autocvar_cl_ghost_items_color = '-1 -1 -1';
+vector autocvar_cl_weapon_stay_color = '2 0.5 0.5';
+float autocvar_cl_weapon_stay_alpha = 0.75;
+float autocvar_cl_simple_items = 0;
+string autocvar_cl_simpleitems_postfix = "_simple";
+.float spawntime;
+.float gravity;
+.vector colormod;
+
+void ItemDraw(entity this);
#include "main.qh"
#include "defs.qh"
+#include <client/items/items.qh>
#include <common/ent_cs.qh>
#include "miscfunctions.qh"
#include <common/effects/effect.qh>
#include "hud/panel/quickmenu.qh"
#include "shownames.qh"
#include "view.qh"
-#include <common/t_items.qh>
#include "weapons/projectile.qh"
#include <common/deathtypes/all.qh>
#include <common/items/_mod.qh>
#include "effects/all.qc"
#include "impulses/all.qc"
#include "notifications/all.qc"
-#include "t_items.qc"
#endif
#include "items/_mod.inc"
#include <common/net_notice.qc>
#include <common/playerstats.qc>
#include <common/state.qc>
-#include <common/t_items.qc>
#include <common/util.qc>
#include <common/viewloc.qc>
#include <common/wepent.qc>
#include <common/net_notice.qh>
#include <common/playerstats.qh>
#include <common/state.qh>
-#include <common/t_items.qh>
#include <common/util.qh>
#include <common/viewloc.qh>
#include <common/wepent.qh>
* @param gs the global sound def
* @param r a random number in 0..1
*/
- void globalsound(int channel, entity from, entity gs, float r, int chan, float _vol, float _atten)
+ void globalsound(int channel, entity from, entity gs, float r, int chan, float _vol, float _atten, float _pitch)
{
//assert(IS_PLAYER(from), eprint(from));
if (channel == MSG_ONE && !IS_REAL_CLIENT(msg_entity)) return;
string sample = GlobalSound_sample(gs.m_globalsoundstr, r);
switch (channel) {
case MSG_ONE:
- soundto(channel, from, chan, sample, _vol, _atten);
+ soundto(channel, from, chan, sample, _vol, _atten, _pitch);
break;
case MSG_ALL:
- _sound(from, chan, sample, _vol, _atten);
+ if(sound_allowed(MSG_BROADCAST, from))
+ sound7(from, chan, sample, _vol, _atten, _pitch, 0);
break;
}
return;
}
+ // FIXME: pitch not implemented
WriteHeader(channel, globalsound);
WriteByte(channel, gs.m_id);
WriteByte(channel, r * 255);
* @param ps the player sound def
* @param r a random number in 0..1
*/
- void playersound(int channel, entity from, entity ps, float r, int chan, float _vol, float _atten)
+ void playersound(int channel, entity from, entity ps, float r, int chan, float _vol, float _atten, float _pitch)
{
//assert(IS_PLAYER(from), eprint(from));
if (channel == MSG_ONE && !IS_REAL_CLIENT(msg_entity)) return;
string sample = GlobalSound_sample(s, r);
switch (channel) {
case MSG_ONE:
- soundto(channel, from, chan, sample, _vol, _atten);
+ soundto(channel, from, chan, sample, _vol, _atten, _pitch);
break;
case MSG_ALL:
- _sound(from, chan, sample, _vol, _atten);
+ if(sound_allowed(MSG_BROADCAST, from))
+ sound7(from, chan, sample, _vol, _atten, _pitch, 0);
break;
}
return;
}
+ // FIXME: pitch not implemented
WriteHeader(channel, playersound);
WriteByte(channel, ps.m_id);
WriteByte(channel, r * 255);
return sample;
}
+ float GlobalSound_pitch(float _pitch)
+ {
+ // customizable gradient function that crosses (0,a), (c,1) and asymptotically approaches b
+ float a = 1.5; // max pitch
+ float b = 0.75; // min pitch
+ float c = 100; // standard pitch (scale * 100)
+ float d = _pitch;
+ float pitch_shift = (b*d*(a-1) + a*c*(1-b)) / (d*(a-1) + c*(1-b));
+
+ return pitch_shift * 100;
+ }
+
void PrecacheGlobalSound(string sample)
{
int n;
if (gs == NULL && ps == NULL && sample == "") return;
if(this.classname == "body") return;
float r = random();
+ float myscale = ((this.scale) ? this.scale : 1); // safety net
+ float thepitch = ((myscale == 1) ? 0 : GlobalSound_pitch(myscale * 100));
if (sample != "") sample = GlobalSound_sample(sample, r);
switch (voicetype)
{
if (IS_REAL_CLIENT(msg_entity))
{
float atten = (CS(msg_entity).cvar_cl_voice_directional == 1) ? ATTEN_MIN : ATTEN_NONE;
- if (gs) globalsound(MSG_ONE, this, gs, r, chan, vol, atten);
- else if (ps) playersound(MSG_ONE, this, ps, r, chan, vol, atten);
- else soundto(MSG_ONE, this, chan, sample, vol, atten);
+ if (gs) globalsound(MSG_ONE, this, gs, r, chan, vol, atten, thepitch);
+ else if (ps) playersound(MSG_ONE, this, ps, r, chan, vol, atten, thepitch);
+ else soundto(MSG_ONE, this, chan, sample, vol, atten, thepitch);
}
}
if (voicetype == VOICETYPE_LASTATTACKER_ONLY) break;
msg_entity = this;
if (IS_REAL_CLIENT(msg_entity))
{
- if (gs) globalsound(MSG_ONE, this, gs, r, chan, VOL_BASE, ATTEN_NONE);
- else if (ps) playersound(MSG_ONE, this, ps, r, chan, VOL_BASE, ATTEN_NONE);
- else soundto(MSG_ONE, this, chan, sample, VOL_BASE, ATTEN_NONE);
+ if (gs) globalsound(MSG_ONE, this, gs, r, chan, VOL_BASE, ATTEN_NONE, thepitch);
+ else if (ps) playersound(MSG_ONE, this, ps, r, chan, VOL_BASE, ATTEN_NONE, thepitch);
+ else soundto(MSG_ONE, this, chan, sample, VOL_BASE, ATTEN_NONE, thepitch);
}
break;
}
#define X() \
MACRO_BEGIN \
float atten = (CS(msg_entity).cvar_cl_voice_directional == 1) ? ATTEN_MIN : ATTEN_NONE; \
- if (gs) globalsound(MSG_ONE, this, gs, r, chan, vol, atten); \
- else if (ps) playersound(MSG_ONE, this, ps, r, chan, vol, atten); \
- else soundto(MSG_ONE, this, chan, sample, vol, atten); \
+ if (gs) globalsound(MSG_ONE, this, gs, r, chan, vol, atten, thepitch); \
+ else if (ps) playersound(MSG_ONE, this, ps, r, chan, vol, atten, thepitch); \
+ else soundto(MSG_ONE, this, chan, sample, vol, atten, thepitch); \
MACRO_END
if (fake) { msg_entity = this; X(); }
? bound(ATTEN_MIN, CS(msg_entity).cvar_cl_voice_directional_taunt_attenuation, \
ATTEN_MAX) \
: ATTEN_NONE; \
- if (gs) globalsound(MSG_ONE, this, gs, r, chan, vol, atten); \
- else if (ps) playersound(MSG_ONE, this, ps, r, chan, vol, atten); \
- else soundto(MSG_ONE, this, chan, sample, vol, atten); \
+ if (gs) globalsound(MSG_ONE, this, gs, r, chan, vol, atten, thepitch); \
+ else if (ps) playersound(MSG_ONE, this, ps, r, chan, vol, atten, thepitch); \
+ else soundto(MSG_ONE, this, chan, sample, vol, atten, thepitch); \
} \
MACRO_END
if (fake)
msg_entity = this;
if (fake)
{
- if (gs) globalsound(MSG_ONE, this, gs, r, chan, vol, ATTEN_NORM);
- else if (ps) playersound(MSG_ONE, this, ps, r, chan, vol, ATTEN_NORM);
- else soundto(MSG_ONE, this, chan, sample, vol, ATTEN_NORM);
+ if (gs) globalsound(MSG_ONE, this, gs, r, chan, vol, ATTEN_NORM, thepitch);
+ else if (ps) playersound(MSG_ONE, this, ps, r, chan, vol, ATTEN_NORM, thepitch);
+ else soundto(MSG_ONE, this, chan, sample, vol, ATTEN_NORM, thepitch);
}
else
{
- if (gs) globalsound(MSG_ALL, this, gs, r, chan, vol, ATTEN_NORM);
- else if (ps) playersound(MSG_ALL, this, ps, r, chan, vol, ATTEN_NORM);
- else _sound(this, chan, sample, vol, ATTEN_NORM);
+ if (gs) globalsound(MSG_ALL, this, gs, r, chan, vol, ATTEN_NORM, thepitch);
+ else if (ps) playersound(MSG_ALL, this, ps, r, chan, vol, ATTEN_NORM, thepitch);
+ else if (sound_allowed(MSG_BROADCAST, this)) sound7(this, chan, sample, vol, ATTEN_NORM, thepitch, 0);
}
break;
}
string GlobalSound_sample(string pair, float r);
+float GlobalSound_pitch(float _pitch);
+
#ifdef SVQC
void _GlobalSound(entity this, entity gs, entity ps, string sample, float chan, float vol, float voicetype, bool fake);
}
if(f & 2)
{
- WriteCoord(MSG_ENTITY, this.angles.x);
- WriteCoord(MSG_ENTITY, this.angles.y);
- WriteCoord(MSG_ENTITY, this.angles.z);
+ WriteAngleVector(MSG_ENTITY, this.angles);
}
if(f & 4)
{
- WriteCoord(MSG_ENTITY, this.avelocity.x);
- WriteCoord(MSG_ENTITY, this.avelocity.y);
- WriteCoord(MSG_ENTITY, this.avelocity.z);
+ WriteAngleVector(MSG_ENTITY, this.avelocity);
}
WriteShort(MSG_ENTITY, this.scale * 256.0);
WriteShort(MSG_ENTITY, this.scale2 * 256.0);
}
if(f & 2)
{
- e.angles_x = ReadAngle();
- e.angles_y = ReadAngle();
- e.angles_z = ReadAngle();
+ e.angles = ReadAngleVector();
}
if(f & 4)
{
- e.avelocity_x = ReadAngle();
- e.avelocity_y = ReadAngle();
- e.avelocity_z = ReadAngle();
+ e.avelocity = ReadAngleVector();
}
e.scale1 = ReadShort() / 256.0;
e.scale2 = ReadShort() / 256.0;
do {
if (IS_PLAYER(player))
{
- if (radar_showennemies) break;
+ if (radar_showenemies) break;
if (SAME_TEAM(to, player)) break;
if (!(IS_PLAYER(to) || to.caplayer) && time > game_starttime) break;
}
#include "sv_assault.qh"
#include <common/mapobjects/func/breakable.qh>
+#include <server/spawnpoints.qh>
.entity sprite;
#define AS_ROUND_DELAY 5
#include <common/effects/all.qh>
#include <common/vehicles/all.qh>
#include <server/gamelog.qh>
+#include <server/g_damage.qh>
#include <server/teamplay.qh>
#include <lib/warpzone/common.qh>
ctf_CaptureShield_Update(player, 0); // shield player from picking up flag
}
+#if 0
void shockwave_spawn(string m, vector org, float sz, float t1, float t2)
{
return modeleffect_spawn(m, 0, 0, org, '0 0 0', '0 0 0', '0 0 0', 0, sz, 1, t1, t2);
}
+#endif
// ==============
// Event Handlers
// effects
Send_Effect_(flag.capeffect, flag.origin, '0 0 0', 1);
- //shockwave_spawn("models/ctf/shockwavetransring.md3", flag.origin - '0 0 15', -0.8, 0, 1);
+#if 0
+ shockwave_spawn("models/ctf/shockwavetransring.md3", flag.origin - '0 0 15', -0.8, 0, 1);
+#endif
// other
if(capturetype == CAPTURE_NORMAL)
.float score_return;
.float score_team_capture; // shouldn't be too high
+// property set on objects to point to the flag they're carrying (if any)
+.entity flagcarried;
+
// effects
.string toucheffect;
.string passeffect;
#include <server/race.qh>
#include <server/gamelog.qh>
-#include <server/items.qh>
+#include <server/items/spawning.qh>
float autocvar_g_cts_finish_kill_delay;
bool autocvar_g_cts_selfdamage;
setsize(e, mon.m_mins, mon.m_maxs);
if(MoveToRandomMapLocation(e, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, 10, 1024, 256))
- monster = spawnmonster(e, tospawn, mon.monsterid, NULL, NULL, e.origin, false, false, 2);
+ monster = spawnmonster(e, tospawn, mon, NULL, NULL, e.origin, false, false, 2);
else
{
delete(e);
}
}
else // if spawnmob field falls through (unset), fallback to mon (relying on spawnmonster for that behaviour)
- monster = spawnmonster(spawn(), ((spawn_point.spawnmob && spawn_point.spawnmob != "") ? spawn_point.spawnmob : tospawn), mon.monsterid, spawn_point, spawn_point, spawn_point.origin, false, false, 2);
+ monster = spawnmonster(spawn(), ((spawn_point.spawnmob && spawn_point.spawnmob != "") ? spawn_point.spawnmob : tospawn), mon, spawn_point, spawn_point, spawn_point.origin, false, false, 2);
if(!monster)
return;
IL_EACH(g_monsters, GetResource(it, RES_HEALTH) > 0,
{
- if((get_monsterinfo(it.monsterid)).spawnflags & MON_FLAG_SUPERMONSTER)
+ if(it.monsterdef.spawnflags & MON_FLAG_SUPERMONSTER)
++supermonster_count;
++total_alive_monsters;
mon.monster_skill = inv_monsterskill;
- if((get_monsterinfo(mon.monsterid)).spawnflags & MON_FLAG_SUPERMONSTER)
+ if(mon.monsterdef.spawnflags & MON_FLAG_SUPERMONSTER)
Send_Notification(NOTIF_ALL, NULL, MSG_CENTER, CENTER_INVASION_SUPERMONSTER, mon.monster_name);
}
#include <common/effects/all.qh>
#include <server/gamelog.qh>
+#include <server/g_damage.qh>
.entity ballcarried;
#include "sv_keyhunt.qh"
#include <server/gamelog.qh>
+#include <server/g_damage.qh>
float autocvar_g_balance_keyhunt_damageforcescale;
float autocvar_g_balance_keyhunt_delay_collect;
CVTOV(g_nexball_delay_idle); //10
CVTOV(g_nexball_football_physics); //0
*/
- radar_showennemies = autocvar_g_nexball_radar_showallplayers;
+ radar_showenemies = autocvar_g_nexball_radar_showallplayers;
InitializeEntity(NULL, nb_delayedinit, INITPRIO_GAMETYPE);
WEP_NEXBALL.spawnflags &= ~WEP_FLAG_MUTATORBLOCKED;
this.origin = ReadVector();
setorigin(this, this.origin);
- this.angles_x = ReadAngle();
- this.angles_y = ReadAngle();
- this.angles_z = ReadAngle();
+ this.angles = ReadAngleVector();
this.drawmask = MASK_NORMAL;
setmodel(this, MDL_Null); // give it a size for clientcamera
#include "sv_controlpoint.qh"
#include "sv_generator.qh"
+#include <common/mapobjects/defs.qh>
+
bool g_onslaught;
float autocvar_g_onslaught_teleport_wait;
WriteVector(MSG_ENTITY, this.origin);
- WriteAngle(MSG_ENTITY, this.angles_x);
- WriteAngle(MSG_ENTITY, this.angles_y);
- WriteAngle(MSG_ENTITY, this.angles_z);
+ WriteAngleVector(MSG_ENTITY, this.angles);
return true;
}
FOREACH_CLIENT(true, it.clientcamera = cam;);
+ // NOTE: engine networked
WriteByte(MSG_ALL, SVC_SETVIEWANGLES);
WriteAngle(MSG_ALL, cam.angles_x);
WriteAngle(MSG_ALL, cam.angles_y);
{
Send_Notification(NOTIF_ONE, it, MSG_CENTER, CENTER_ONS_NOTSHIELDED_TEAM);
msg_entity = it;
- soundto(MSG_ONE, this, CHAN_AUTO, SND(ONS_GENERATOR_ALARM), VOL_BASE, ATTEN_NONE);
+ soundto(MSG_ONE, this, CHAN_AUTO, SND(ONS_GENERATOR_ALARM), VOL_BASE, ATTEN_NONE, 0);
}
else
Send_Notification(NOTIF_ONE, it, MSG_CENTER, APP_TEAM_NUM(this.team, CENTER_ONS_NOTSHIELDED));
race_ScoreRules();
if(g_race_qualifying == 2)
warmup_stage = 0;
+ radar_showenemies = true;
}
void rc_SetLimits()
#endif
#ifdef SVQC
-#include <server/items.qh>
+#include <server/items/spawning.qh>
#endif
+#ifdef GAMEQC
const int IT_UNLIMITED_AMMO = BIT(0); // when this bit is set, using a weapon does not reduce ammo. Checkpoints can give this powerup.
const int IT_UNLIMITED_SUPERWEAPONS = BIT(1); // when this bit is set, superweapons don't expire. Checkpoints can give this powerup.
const int IT_KEY1 = BIT(6);
const int IT_KEY2 = BIT(7);
-const int IT_CTF_SHIELDED = BIT(8); // set for the flag shield
-
// special colorblend meaning in engine
const int IT_INVISIBILITY = BIT(9);
const int IT_INVINCIBLE = BIT(10);
// item masks
const int IT_PICKUPMASK = IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS | IT_JETPACK | IT_FUEL_REGEN; // strength and invincible are handled separately
+// item networking
+const int ISF_LOCATION = BIT(1);
+const int ISF_MODEL = BIT(2);
+const int ISF_STATUS = BIT(3);
+const int ISF_COLORMAP = BIT(4);
+const int ISF_DROP = BIT(5);
+const int ISF_ANGLES = BIT(6);
+const int ISF_SIZE = BIT(7);
+
+REGISTER_NET_LINKED(ENT_CLIENT_ITEM)
+
+// item status
+.int ItemStatus;
+const int ITS_STAYWEP = BIT(0);
+const int ITS_ANIMATE1 = BIT(1);
+const int ITS_ANIMATE2 = BIT(2);
+const int ITS_AVAILABLE = BIT(3);
+const int ITS_ALLOWFB = BIT(4);
+const int ITS_ALLOWSI = BIT(5);
+const int ITS_GLOW = BIT(6);
+
+.float fade_start;
+.float fade_end;
+#endif
+
#ifdef SVQC
.float strength_finished; // NOTE: this field is used only by map entities, it does not directly apply the strength stat
.float invincible_finished; // ditto
#include "pickup.qh"
#include <common/items/all.qh>
#ifdef SVQC
- #include <common/t_items.qh>
+ #include <server/items/items.qh>
#include <server/resources.qh>
#endif
ENDCLASS(Armor)
#ifdef SVQC
- #include <common/t_items.qh>
+ #include <server/items/items.qh>
#endif
#ifdef GAMEQC
ENDCLASS(Health)
#ifdef SVQC
- #include <common/t_items.qh>
+ #include <server/items/items.qh>
#endif
#ifdef GAMEQC
#pragma once
#ifdef SVQC
- #include <common/t_items.qh>
+ #include <server/items/items.qh>
#endif
#include "ammo.qh"
this.m_color = '0 0 1';
this.m_waypoint = _("Strength");
this.m_waypointblink = 2;
+#ifdef GAMEQC
this.m_itemid = IT_STRENGTH;
+#endif
#ifdef SVQC
this.m_iteminit = powerup_strength_init;
#endif
this.m_color = '1 0 1';
this.m_waypoint = _("Shield");
this.m_waypointblink = 2;
+#ifdef GAMEQC
this.m_itemid = IT_INVINCIBLE;
+#endif
#ifdef SVQC
this.m_iteminit = powerup_shield_init;
#endif
// generated file; do not modify
+#include <common/mapobjects/bgmscript.qc>
#include <common/mapobjects/models.qc>
#include <common/mapobjects/platforms.qc>
#include <common/mapobjects/subs.qc>
// generated file; do not modify
+#include <common/mapobjects/bgmscript.qh>
#include <common/mapobjects/models.qh>
#include <common/mapobjects/platforms.qh>
#include <common/mapobjects/subs.qh>
--- /dev/null
+#include "bgmscript.qh"
--- /dev/null
+#pragma once
+
+entityclass(BGMScript);
+classfield(BGMScript) .string bgmscript;
+classfield(BGMScript) .float bgmscriptattack;
+classfield(BGMScript) .float bgmscriptdecay;
+classfield(BGMScript) .float bgmscriptsustain;
+classfield(BGMScript) .float bgmscriptrelease;
//----------------
// STATES & ACTIVE
//----------------
-#ifdef CSQC
-// this stuff is defined in the server side engine VM, so we must define it separately here
const int STATE_TOP = 0;
const int STATE_BOTTOM = 1;
const int STATE_UP = 2;
const int STATE_DOWN = 3;
+.int active;
+.void (entity this, int act_state) setactive;
const int ACTIVE_NOT = 0;
const int ACTIVE_ACTIVE = 1;
const int ACTIVE_IDLE = 2;
const int ACTIVE_BUSY = 2;
const int ACTIVE_TOGGLE = 3;
-#endif
if (this.noise != "")
{
precache_sound(this.noise);
- soundto(MSG_INIT, this, CH_TRIGGER_SINGLE, this.noise, VOL_BASE, ATTEN_IDLE);
+ soundto(MSG_INIT, this, CH_TRIGGER_SINGLE, this.noise, VOL_BASE, ATTEN_IDLE, 0);
}
if (!this.speed)
this.speed = 4;
if (this.noise1 && this.state == STATE_ALIVE && IS_REAL_CLIENT(player))
{
msg_entity = player;
- soundto (MSG_ONE, this, CH_TRIGGER_SINGLE, this.noise1, VOL_BASE, ATTEN_NORM);
+ soundto (MSG_ONE, this, CH_TRIGGER_SINGLE, this.noise1, VOL_BASE, ATTEN_NORM, 0);
}
}
if (this.noise != "")
{
precache_sound(this.noise);
- soundto(MSG_INIT, this, CH_TRIGGER_SINGLE, this.noise, VOL_BASE, ATTEN_IDLE);
+ soundto(MSG_INIT, this, CH_TRIGGER_SINGLE, this.noise, VOL_BASE, ATTEN_IDLE, 0);
}
if (!this.speed)
if (this.noise != "")
{
precache_sound(this.noise);
- soundto(MSG_INIT, this, CH_TRIGGER_SINGLE, this.noise, VOL_BASE, ATTEN_IDLE);
+ soundto(MSG_INIT, this, CH_TRIGGER_SINGLE, this.noise, VOL_BASE, ATTEN_IDLE, 0);
}
this.active = ACTIVE_ACTIVE;
WriteVector(MSG_ENTITY, this.size);
- WriteAngle(MSG_ENTITY, this.mangle_x);
- WriteAngle(MSG_ENTITY, this.mangle_y);
- WriteAngle(MSG_ENTITY, this.mangle_z);
+ WriteAngleVector(MSG_ENTITY, this.mangle);
WriteShort(MSG_ENTITY, this.speed);
WriteShort(MSG_ENTITY, this.height);
this.size = ReadVector();
- this.mangle_x = ReadAngle();
- this.mangle_y = ReadAngle();
- this.mangle_z = ReadAngle();
+ this.mangle = ReadAngleVector();
this.speed = ReadShort();
this.height = ReadShort();
if (this.noise && this.noise != "" && this.active == ACTIVE_ACTIVE && IS_REAL_CLIENT(player))
{
msg_entity = player;
- soundto (MSG_ONE, this, CH_AMBIENT_SINGLE, this.noise, VOL_BASE, ATTEN_IDLE);
+ soundto (MSG_ONE, this, CH_AMBIENT_SINGLE, this.noise, VOL_BASE, ATTEN_IDLE, 0);
}
}
#include "stardust.qh"
#ifdef SVQC
+void func_stardust_think(entity this)
+{
+ this.nextthink = time + 0.25;
+ CSQCMODEL_AUTOUPDATE(this);
+}
spawnfunc(func_stardust)
{
+ if(this.model != "") { precache_model(this.model); _setmodel(this, this.model); }
+
this.effects = EF_STARDUST;
CSQCMODEL_AUTOINIT(this);
+
+ setthink(this, func_stardust_think);
+ this.nextthink = time + 0.25;
}
#endif
WriteVector(MSG_ENTITY, this.view_ofs);
- WriteAngle(MSG_ENTITY, this.mangle_x);
- WriteAngle(MSG_ENTITY, this.mangle_y);
- WriteAngle(MSG_ENTITY, this.mangle_z);
+ WriteAngleVector(MSG_ENTITY, this.mangle);
WriteShort(MSG_ENTITY, this.speed);
WriteShort(MSG_ENTITY, this.height);
this.view_ofs = ReadVector();
- this.mangle_x = ReadAngle();
- this.mangle_y = ReadAngle();
- this.mangle_z = ReadAngle();
+ this.mangle = ReadAngleVector();
this.speed = ReadShort();
this.height = ReadShort();
vector func_vectormamamam_origin(entity o, float timestep)
{
- vector v, p;
- float flags;
+ vector p;
entity e;
-
- flags = o.spawnflags;
- v = '0 0 0';
+ int myflags = o.spawnflags;
+ vector v = '0 0 0';
e = o.wp00;
if(e)
{
p = e.origin + timestep * e.velocity;
- if(flags & PROJECT_ON_TARGETNORMAL)
+ if(myflags & PROJECT_ON_TARGETNORMAL)
v = v + (p * o.targetnormal) * o.targetnormal * o.targetfactor;
else
v = v + (p - (p * o.targetnormal) * o.targetnormal) * o.targetfactor;
if(e)
{
p = e.origin + timestep * e.velocity;
- if(flags & PROJECT_ON_TARGET2NORMAL)
+ if(myflags & PROJECT_ON_TARGET2NORMAL)
v = v + (p * o.target2normal) * o.target2normal * o.target2factor;
else
v = v + (p - (p * o.target2normal) * o.target2normal) * o.target2factor;
if(e)
{
p = e.origin + timestep * e.velocity;
- if(flags & PROJECT_ON_TARGET3NORMAL)
+ if(myflags & PROJECT_ON_TARGET3NORMAL)
v = v + (p * o.target3normal) * o.target3normal * o.target3factor;
else
v = v + (p - (p * o.target3normal) * o.target3normal) * o.target3factor;
if(e)
{
p = e.origin + timestep * e.velocity;
- if(flags & PROJECT_ON_TARGET4NORMAL)
+ if(myflags & PROJECT_ON_TARGET4NORMAL)
v = v + (p * o.target4normal) * o.target4normal * o.target4factor;
else
v = v + (p - (p * o.target4normal) * o.target4normal) * o.target4factor;
void func_vectormamamam_controller_think(entity this)
{
- this.nextthink = time + vectormamamam_timestep;
+ this.nextthink = time + VECTORMAMAMAM_TIMESTEP;
if(this.owner.active != ACTIVE_ACTIVE)
{
}
if(this.owner.classname == "func_vectormamamam") // don't brake stuff if the func_vectormamamam was killtarget'ed
- this.owner.velocity = (this.owner.destvec + func_vectormamamam_origin(this.owner, vectormamamam_timestep) - this.owner.origin) * 10;
+ this.owner.velocity = (this.owner.destvec + func_vectormamamam_origin(this.owner, VECTORMAMAMAM_TIMESTEP) - this.owner.origin) * 10;
}
void func_vectormamamam_findtarget(entity this)
{
- if(this.target != "")
+ if(this.target && this.target != "")
this.wp00 = find(NULL, targetname, this.target);
- if(this.target2 != "")
+ if(this.target2 && this.target2 != "")
this.wp01 = find(NULL, targetname, this.target2);
- if(this.target3 != "")
+ if(this.target3 && this.target3 != "")
this.wp02 = find(NULL, targetname, this.target3);
- if(this.target4 != "")
+ if(this.target4 && this.target4 != "")
this.wp03 = find(NULL, targetname, this.target4);
if(!this.wp00 && !this.wp01 && !this.wp02 && !this.wp03)
this.destvec = this.origin - func_vectormamamam_origin(this, 0);
- entity controller;
- controller = new(func_vectormamamam_controller);
+ entity controller = new(func_vectormamamam_controller);
controller.owner = this;
controller.nextthink = time + 1;
setthink(controller, func_vectormamamam_controller_think);
if (this.noise && this.noise != "" && this.active == ACTIVE_ACTIVE && IS_REAL_CLIENT(player))
{
msg_entity = player;
- soundto(MSG_ONE, this, CH_TRIGGER_SINGLE, this.noise, VOL_BASE, ATTEN_IDLE);
+ soundto(MSG_ONE, this, CH_TRIGGER_SINGLE, this.noise, VOL_BASE, ATTEN_IDLE, 0);
}
}
this.target4normal = normalize(this.target4normal);
setblocked(this, generic_plat_blocked);
- if(this.dmg && (this.message == ""))
+ if(this.dmg && (!this.message || this.message == ""))
this.message = " was squished";
- if(this.dmg && (this.message == ""))
+ if(this.dmg && (!this.message2 || this.message2 == ""))
this.message2 = "was squished by";
if(this.dmg && (!this.dmgtime))
this.dmgtime = 0.25;
#pragma once
-
const int PROJECT_ON_TARGETNORMAL = BIT(0);
const int PROJECT_ON_TARGET2NORMAL = BIT(1);
const int PROJECT_ON_TARGET3NORMAL = BIT(2);
const int PROJECT_ON_TARGET4NORMAL = BIT(3);
-const float vectormamamam_timestep = 0.1;
+const float VECTORMAMAMAM_TIMESTEP = 0.1;
REGISTER_NET_LINKED(ENT_CLIENT_LASER)
#ifdef SVQC
-.float modelscale;
void misc_laser_aim(entity this)
{
vector a;
}
else
{
- WriteAngle(MSG_ENTITY, this.mangle_x);
- WriteAngle(MSG_ENTITY, this.mangle_y);
+ WriteAngleVector2D(MSG_ENTITY, this.mangle);
}
}
if(sendflags & SF_LASER_UPDATE_ACTIVE)
}
#elif defined(CSQC)
-// a laser goes from origin in direction angles
-// it has color 'beam_color'
-// and stops when something is in the way
-entityclass(Laser);
-classfield(Laser) .int cnt; // end effect
-classfield(Laser) .vector colormod;
-classfield(Laser) .int state; // on-off
-classfield(Laser) .int count; // flags for the laser
-classfield(Laser) .vector velocity; // laser endpoint if it is FINITE
-classfield(Laser) .float alpha;
-classfield(Laser) .float scale; // scaling factor of the thickness
-classfield(Laser) .float modelscale; // scaling factor of the dlight
-
void Draw_Laser(entity this)
{
if(this.active == ACTIVE_NOT)
}
else
{
- this.angles_x = ReadAngle();
- this.angles_y = ReadAngle();
+ this.angles = ReadAngleVector2D();
}
}
if(sendflags & SF_LASER_UPDATE_ACTIVE)
#pragma once
+// a laser goes from origin in direction angles
+// it has color 'beam_color'
+// and stops when something is in the way
+entityclass(Laser);
+classfield(Laser) .int cnt; // end effect
+classfield(Laser) .vector colormod;
+classfield(Laser) .int state; // on-off
+classfield(Laser) .int count; // flags for the laser
+classfield(Laser) .vector velocity; // laser endpoint if it is FINITE
+classfield(Laser) .float alpha;
+classfield(Laser) .float scale; // scaling factor of the thickness
+classfield(Laser) .float modelscale; // scaling factor of the dlight
const int LASER_FINITE = BIT(1);
const int LASER_NOTRACE = BIT(2);
WriteCoord(MSG_ENTITY, this.speed);
WriteString(MSG_ENTITY, this.targetname);
WriteVector(MSG_ENTITY, this.origin);
-
- WriteAngle(MSG_ENTITY, this.mangle_x);
- WriteAngle(MSG_ENTITY, this.mangle_y);
- WriteAngle(MSG_ENTITY, this.mangle_z);
+ WriteAngleVector(MSG_ENTITY, this.mangle);
}
return true;
this.speed = ReadCoord();
this.targetname = strzone(ReadString());
this.origin = ReadVector();
-
- this.mangle_x = ReadAngle();
- this.mangle_y = ReadAngle();
- this.mangle_z = ReadAngle();
+ this.mangle = ReadAngleVector();
setorigin(this, this.origin);
#include <common/net_linked.qh>
#include "subs.qh"
#include "triggers.qh"
-
-entityclass(BGMScript);
-classfield(BGMScript) .string bgmscript;
-classfield(BGMScript) .float bgmscriptattack;
-classfield(BGMScript) .float bgmscriptdecay;
-classfield(BGMScript) .float bgmscriptsustain;
-classfield(BGMScript) .float bgmscriptrelease;
+#include "bgmscript.qh"
#include <common/constants.qh>
-#include "../../lib/csqcmodel/sv_model.qh"
-
-.float modelscale;
+#include <lib/csqcmodel/sv_model.qh>
void g_model_setcolormaptoactivator(entity this, entity actor, entity trigger)
{
if(sf & BIT(2))
{
if(sf & 0x10)
- {
- WriteAngle(MSG_ENTITY, this.angles.x);
- WriteAngle(MSG_ENTITY, this.angles.y);
- WriteAngle(MSG_ENTITY, this.angles.z);
- }
+ WriteAngleVector(MSG_ENTITY, this.angles);
}
if(sf & BIT(3))
if(f & 4)
{
if(f & 0x10)
- {
- this.angles_x = ReadAngle();
- this.angles_y = ReadAngle();
- this.angles_z = ReadAngle();
- }
+ this.angles = ReadAngleVector();
else
this.angles = '0 0 0';
}
#pragma once
+.float modelscale;
+
#ifdef CSQC
entityclass(Wall);
classfield(Wall) .float lip;
classfield(Wall) .float loddistance1, loddistance2;
classfield(Wall) .vector saved;
+void Ent_Wall_Draw(entity this);
+
+void Ent_Wall_Remove(entity this);
+#endif
+
// Needed for interactive clientwalls
.bool inactive; // Clientwall disappears when inactive
.float alpha_max, alpha_min;
// fade_vertical_offset is a vertival offset for player position
.float fade_start, fade_end, fade_vertical_offset;
.float default_solid;
-
-void Ent_Wall_Draw(entity this);
-
-void Ent_Wall_Remove(entity this);
-#endif
#include "kill.qh"
-#include "location.qh"
-#ifdef SVQC
+#ifdef SVQC
void target_kill_use(entity this, entity actor, entity trigger)
{
+ if(this.active != ACTIVE_ACTIVE)
+ return;
+
if(actor.takedamage == DAMAGE_NO)
return;
Damage(actor, this, trigger, 1000, DEATH_HURTTRIGGER.m_id, DMG_NOWEP, actor.origin, '0 0 0');
}
-spawnfunc(target_kill)
+void target_kill_reset(entity this)
{
- this.classname = "target_kill";
+ this.active = ACTIVE_ACTIVE;
+}
+spawnfunc(target_kill)
+{
if (this.message == "")
this.message = "was in the wrong place";
+ if (this.message2 == "")
+ this.message2 = "was thrown into a world of hurt by";
+
this.use = target_kill_use;
+ this.reset = target_kill_reset;
+ this.active = ACTIVE_ACTIVE;
}
-
#endif
else
snd = this.noise;
msg_entity = actor;
- soundto(MSG_ONE, this, CH_TRIGGER, snd, VOL_BASE * this.volume, this.atten);
+ soundto(MSG_ONE, this, CH_TRIGGER, snd, VOL_BASE * this.volume, this.atten, 0);
}
void target_speaker_use_on(entity this, entity actor, entity trigger)
{
#include "counter.qh"
-#ifdef SVQC
-void counter_reset(entity this);
+#ifdef SVQC
void counter_use(entity this, entity actor, entity trigger)
{
+ if(this.active != ACTIVE_ACTIVE)
+ return;
+
entity store = this;
if(this.spawnflags & COUNTER_PER_PLAYER)
{
setthink(this, func_null);
this.nextthink = 0;
this.counter_cnt = 0;
+ this.active = ACTIVE_ACTIVE;
}
/*QUAKED spawnfunc_trigger_counter (.5 .5 .5) ? nomessage COUNTER_FIRE_AT_COUNT
this.counter_cnt = 0;
this.use = counter_use;
this.reset = counter_reset;
+ this.active = ACTIVE_ACTIVE;
}
#endif
#pragma once
#ifdef SVQC
-spawnfunc(trigger_counter);
+void counter_reset(entity this);
.float counter_cnt;
#include "delay.qh"
+
#ifdef SVQC
void delay_delayeduse(entity this)
{
void delay_use(entity this, entity actor, entity trigger)
{
+ if(this.active != ACTIVE_ACTIVE)
+ return;
+
this.enemy = actor;
this.goalentity = trigger;
setthink(this, delay_delayeduse);
this.enemy = this.goalentity = NULL;
setthink(this, func_null);
this.nextthink = 0;
+ this.active = ACTIVE_ACTIVE;
}
spawnfunc(trigger_delay)
this.use = delay_use;
this.reset = delay_reset;
+ this.active = ACTIVE_ACTIVE;
}
#endif
#include "flipflop.qh"
+
#ifdef SVQC
/*QUAKED spawnfunc_trigger_flipflop (.5 .5 .5) (-8 -8 -8) (8 8 8) START_ENABLED
"Flip-flop" trigger gate... lets only every second trigger event through
*/
void flipflop_use(entity this, entity actor, entity trigger)
{
+ if(this.active != ACTIVE_ACTIVE)
+ return;
+
this.state = !this.state;
if(this.state)
SUB_UseTargets(this, actor, trigger);
spawnfunc(trigger_flipflop)
{
- if(this.spawnflags & START_ENABLED)
- {
- this.state = true;
- }
+ this.active = ACTIVE_ACTIVE;
+ this.state = (this.spawnflags & START_ENABLED);
this.use = flipflop_use;
this.reset = spawnfunc_trigger_flipflop; // perfect resetter
}
-
#endif
#include "gamestart.qh"
+
#ifdef SVQC
void gamestart_use(entity this, entity actor, entity trigger)
{
SUB_UseTargets(this, this, trigger);
- delete(this);
-}
-
-void gamestart_use_this(entity this)
-{
- gamestart_use(this, NULL, NULL);
+ delete(this); // TODO: deleting this means it can't be used upon map reset!
}
spawnfunc(trigger_gamestart)
this.nextthink = game_starttime + this.wait;
}
else
- InitializeEntity(this, gamestart_use_this, INITPRIO_FINDTARGET);
+ InitializeEntity(this, adaptor_think2use, INITPRIO_FINDTARGET);
}
-
#endif
#pragma once
+#ifdef SVQC
const int HURT_SLOW = BIT(4);
+
+bool tracebox_hits_trigger_hurt(vector start, vector e_min, vector e_max, vector end);
+#endif
WriteString(MSG_ENTITY, this.targetname);
WriteVector(MSG_ENTITY, this.origin);
- WriteAngle(MSG_ENTITY, this.angles_x);
- WriteAngle(MSG_ENTITY, this.angles_y);
- WriteAngle(MSG_ENTITY, this.angles_z);
+ WriteAngleVector(MSG_ENTITY, this.angles);
return true;
}
this.targetname = strzone(ReadString());
this.origin = ReadVector();
- this.angles_x = ReadAngle();
- this.angles_y = ReadAngle();
- this.angles_z = ReadAngle();
+ this.angles = ReadAngleVector();
return = true;
trigger_keylock_link(this);
}
#elif defined(CSQC)
-void keylock_remove(entity this)
-{
- strfree(this.target);
- strfree(this.target2);
- strfree(this.target3);
- strfree(this.target4);
- strfree(this.killtarget);
- strfree(this.targetname);
-}
-
NET_HANDLE(ENT_CLIENT_KEYLOCK, bool isnew)
{
this.itemkeys = ReadInt24_t();
return = true;
this.classname = "trigger_keylock";
- this.entremove = keylock_remove;
+ this.entremove = trigger_remove_generic;
}
#endif
return; // only players
}
- // TODO: restructure this so that trigger_secret is more independent
- if (this.classname == "trigger_secret")
- {
- if (!IS_PLAYER(this.enemy))
- return;
- found_secrets = found_secrets + 1;
- WriteByte (MSG_ALL, SVC_FOUNDSECRET);
- }
-
- if (this.noise)
+ if (this.noise && this.noise != "")
{
_sound (this.enemy, CH_TRIGGER, this.noise, VOL_BASE, ATTEN_NORM);
}
else if (this.sounds == 3)
this.noise = "misc/trigger1.wav";
- if(this.noise)
+ if(this.noise && this.noise != "")
precache_sound(this.noise);
if (!this.wait)
#include "relay_activators.qh"
+
#ifdef SVQC
void relay_activators_use(entity this, entity actor, entity trigger)
{
+ if(this.active != ACTIVE_ACTIVE)
+ return;
+
for(entity trg = NULL; (trg = find(trg, targetname, this.target)); )
{
if (trg.setactive)
}
}
+void relay_activators_init(entity this)
+{
+ this.reset = relay_activators_init; // doubles as a reset function
+ this.active = ACTIVE_ACTIVE;
+ this.use = relay_activators_use;
+}
+
spawnfunc(relay_activate)
{
this.cnt = ACTIVE_ACTIVE;
- this.use = relay_activators_use;
+ relay_activators_init(this);
}
spawnfunc(relay_deactivate)
{
this.cnt = ACTIVE_NOT;
- this.use = relay_activators_use;
+ relay_activators_init(this);
}
spawnfunc(relay_activatetoggle)
{
this.cnt = ACTIVE_TOGGLE;
- this.use = relay_activators_use;
+ relay_activators_init(this);
}
#endif
#include "relay_if.qh"
+
#ifdef SVQC
void trigger_relay_if_use(entity this, entity actor, entity trigger)
{
#include "relay_teamcheck.qh"
+
#ifdef SVQC
void trigger_relay_teamcheck_use(entity this, entity actor, entity trigger)
{
#ifdef SVQC
-void secrets_setstatus(entity this)
-{
- // TODO: use global stats!
- STAT(SECRETS_TOTAL, this) = secrets_total;
- STAT(SECRETS_FOUND, this) = secrets_found;
-}
-
/**
* A secret has been found (maybe :P)
*/
if (!IS_PLAYER(toucher))
return;
+ EXACTTRIGGER_TOUCH(this, toucher);
+
// update secrets found counter
secrets_found += 1;
- //print("Secret found: ", ftos(secret_counter.cnt), "/");
- //print(ftos(secret_counter.count), "\n");
- // centerprint message (multi_touch() doesn't always call centerprint())
- centerprint(toucher, this.message);
- this.message = "";
+ // message and noise handled by SUB_UseTargets
+ SUB_UseTargets(this, toucher, toucher);
- // handle normal trigger features
- multi_touch(this, toucher);
// we can't just delete(this) here, because this is a touch function
// called while C code is looping through area links...
- //delete(this);
+ settouch(this, func_null);
+}
+
+#if 0
+void trigger_secret_reset(entity this)
+{
+ secrets_found = 0;
+ settouch(this, trigger_secret_touch);
}
+#endif
/*QUAKED trigger_secret (.5 .5 .5) ?
Variable sized secret trigger. Can be targeted at one or more entities.
secrets_total += 1;
// add default message
- if (this.message == "")
+ if (!this.message || this.message == "")
this.message = "You found a secret!";
// set default sound
- if (this.noise == "")
- if (!this.sounds)
+ if ((!this.noise || this.noise == "") && !this.sounds)
this.sounds = 1; // misc/secret.wav
- // this entity can't be a target itself!!!!
- this.targetname = "";
+ switch(this.sounds)
+ {
+ case 1: this.noise = "misc/secret.wav"; break;
+ case 2: this.noise = strzone(SND(TALK)); break;
+ case 3: this.noise = "misc/trigger1.wav"; break;
+ }
- // you can't just shoot a room to find it, can you?
- SetResourceExplicit(this, RES_HEALTH, 0);
+ if(this.noise && this.noise != "")
+ precache_sound(this.noise);
- // a secret can not be delayed
+ // a secret cannot be delayed
this.delay = 0;
- // convert this trigger to trigger_once
- //this.classname = "trigger_once";
- spawnfunc_trigger_once(this);
+ EXACTTRIGGER_INIT;
- // take over the touch() function, so we can mark secret as found
settouch(this, trigger_secret_touch);
- // ignore triggering;
- this.use = func_null;
+// NOTE: old maps don't expect secrets to reset, so enabling resetting can cause issues!
+#if 0
+ this.reset = trigger_secret_reset;
+#endif
}
#endif
#pragma once
-#ifdef SVQC
-
-/**
- * Total number of secrets on the map.
- */
-float secrets_total;
-
-/**
- * Total numbe of secrets found on the map.
- */
-float secrets_found;
+#ifdef SVQC
+// Total number of secrets on the map.
+int secrets_total;
-/**
- * update secrets status.
- */
-void secrets_setstatus(entity this);
+// Total numbe of secrets found on the map.
+int secrets_found;
#endif
WriteVector(MSG_ENTITY, this.origin);
- WriteAngle(MSG_ENTITY, this.angles_x);
- WriteAngle(MSG_ENTITY, this.angles_y);
- WriteAngle(MSG_ENTITY, this.angles_z);
+ WriteAngleVector(MSG_ENTITY, this.angles);
return true;
}
this.origin = ReadVector();
setorigin(this, this.origin);
- this.movedir_x = ReadAngle();
- this.movedir_y = ReadAngle();
- this.movedir_z = ReadAngle();
+ this.movedir = ReadAngleVector();
return = true;
void trigger_common_read(entity this, bool withtarget);
void trigger_remove_generic(entity this);
-.float active;
.string target;
.string targetname;
#endif
#define get_monsterinfo(i) REGISTRY_GET(Monsters, i)
REGISTER_REGISTRY(Monsters)
REGISTRY_CHECK(Monsters)
-const int MON_FIRST = 1;
-#define MON_LAST (REGISTRY_COUNT(Monsters) - 1)
#define REGISTER_MONSTER(id, inst) REGISTER(Monsters, MON, id, monsterid, inst)
#include "monster.qh"
// entity properties of monsterinfo:
.bool(int, entity actor, entity targ, .entity weaponentity) monster_attackfunc;
+.entity monsterdef;
// animations
.vector anim_blockend;
return false;
}
-spawnfunc(monster_mage) { Monster_Spawn(this, true, MON_MAGE.monsterid); }
+spawnfunc(monster_mage) { Monster_Spawn(this, true, MON_MAGE); }
#endif // SVQC
return false;
}
-spawnfunc(monster_shambler) { Monster_Spawn(this, true, MON_SHAMBLER.monsterid); }
+spawnfunc(monster_shambler) { Monster_Spawn(this, true, MON_SHAMBLER); }
#endif // SVQC
#ifdef SVQC
Send_Effect(EFFECT_ELECTRO_IMPACT, this.origin, '0 0 0', 1);
RadiusDamage(this, this.realowner, 0, 0, 25, NULL, NULL, 25, this.projectiledeathtype, DMG_NOWEP, NULL);
- FOREACH_ENTITY_RADIUS(this.origin, 25, it != this && it.takedamage && !IS_DEAD(it) && GetResource(it, RES_HEALTH) > 0 && it.monsterid != MON_SPIDER.monsterid,
+ FOREACH_ENTITY_RADIUS(this.origin, 25, it != this && it.takedamage && !IS_DEAD(it) && GetResource(it, RES_HEALTH) > 0 && it.monsterdef != MON_SPIDER,
{
it.spider_slowness = time + (autocvar_g_monster_spider_attack_web_damagetime);
});
return false;
}
-spawnfunc(monster_spider) { Monster_Spawn(this, true, MON_SPIDER.monsterid); }
+spawnfunc(monster_spider) { Monster_Spawn(this, true, MON_SPIDER); }
#endif // SVQC
#ifdef SVQC
return false;
}
-spawnfunc(monster_wyvern) { Monster_Spawn(this, true, MON_WYVERN.monsterid); }
+spawnfunc(monster_wyvern) { Monster_Spawn(this, true, MON_WYVERN); }
#endif // SVQC
#ifdef SVQC
return false;
}
-spawnfunc(monster_zombie) { Monster_Spawn(this, true, MON_ZOMBIE.monsterid); }
+spawnfunc(monster_zombie) { Monster_Spawn(this, true, MON_ZOMBIE); }
#endif // SVQC
#ifdef SVQC
#include "../weapons/_mod.qh"
#include <server/autocvars.qh>
#include <server/defs.qh>
+#include <server/g_damage.qh>
#include "../deathtypes/all.qh"
+#include <server/items/items.qh>
#include <server/mutators/_mod.qh>
#include <server/steerlib.qh>
#include "../turrets/sv_turrets.qh"
if((targ == this)
|| (autocvar_g_monsters_lineofsight && !checkpvs(this.origin + this.view_ofs, targ)) // enemy cannot be seen
- || (IS_VEHICLE(targ) && !((REGISTRY_GET(Monsters, this.monsterid)).spawnflags & MON_FLAG_RANGED)) // melee vs vehicle is useless
+ || (IS_VEHICLE(targ) && !(this.monsterdef.spawnflags & MON_FLAG_RANGED)) // melee vs vehicle is useless
|| (time < game_starttime) // monsters do nothing before match has started
|| (targ.takedamage == DAMAGE_NO)
|| (game_stopped)
void Monster_Sounds_Precache(entity this)
{
- string m = (REGISTRY_GET(Monsters, this.monsterid)).m_model.model_str();
+ string m = this.monsterdef.m_model.model_str();
float globhandle, n, i;
string f;
this.anim_die2 = animfixfps(this, '9 1 0.01', '0 0 0');*/
// then get the real values
- Monster mon = REGISTRY_GET(Monsters, this.monsterid);
+ Monster mon = this.monsterdef;
mon.mr_anim(mon, this);
}
return true;
}
-void Monster_Respawn(entity this) { Monster_Spawn(this, true, this.monsterid); }
+void Monster_Respawn(entity this) { Monster_Spawn(this, true, this.monsterdef); }
.vector pos1, pos2;
void Monster_Appear(entity this, entity actor, entity trigger)
{
this.enemy = actor;
- Monster_Spawn(this, false, this.monsterid);
+ Monster_Spawn(this, false, this.monsterdef);
}
-bool Monster_Appear_Check(entity this, int monster_id)
+bool Monster_Appear_Check(entity this, Monster monster_id)
{
if(!(this.spawnflags & MONSTERFLAG_APPEAR))
return false;
setthink(this, func_null);
- this.monsterid = monster_id; // set so this monster is properly registered (otherwise, normal initialization is used)
+ this.monsterdef = monster_id; // set so this monster is properly registered (otherwise, normal initialization is used)
this.nextthink = 0;
this.use = Monster_Appear;
this.flags = FL_MONSTER; // set so this monster can get butchered
CSQCModel_UnlinkEntity(this);
- Monster mon = REGISTRY_GET(Monsters, this.monsterid);
+ Monster mon = this.monsterdef;
mon.mr_death(mon, this);
if(this.candrop && this.weapon)
float take = v.x;
//float save = v.y;
- Monster mon = REGISTRY_GET(Monsters, this.monsterid);
+ Monster mon = this.monsterdef;
take = mon.mr_pain(mon, this, take, attacker, deathtype);
if(take)
int animbits = deadbits;
if(STAT(FROZEN, this))
animbits |= ANIMSTATE_FROZEN;
- if(this.crouch)
+ if(IS_DUCKED(this))
animbits |= ANIMSTATE_DUCK; // not that monsters can crouch currently...
animdecide_setstate(this, animbits, false);
animdecide_setimplicitstate(this, (IS_ONGROUND(this)));
this.last_enemycheck = time + 1; // check for enemies every second
}
- Monster mon = REGISTRY_GET(Monsters, this.monsterid);
+ Monster mon = this.monsterdef;
if(mon.mr_think(mon, this))
{
Monster_Move(this, this.speed2, this.speed, this.stopspeed);
bool Monster_Spawn_Setup(entity this)
{
- Monster mon = REGISTRY_GET(Monsters, this.monsterid);
+ Monster mon = this.monsterdef;
mon.mr_setup(mon, this);
// ensure some basic needs are met
if(autocvar_g_monsters_healthbars)
{
entity wp = WaypointSprite_Spawn(WP_Monster, 0, 1024, this, '0 0 1' * (this.maxs.z + 15), NULL, this.team, this, sprite, true, RADARICON_DANGER);
- wp.wp_extra = this.monsterid;
+ wp.wp_extra = this.monsterdef.monsterid;
wp.colormod = ((this.team) ? Team_ColorRGB(this.team) : '1 0 0');
if(!(this.spawnflags & MONSTERFLAG_INVINCIBLE))
{
return true;
}
-bool Monster_Spawn(entity this, bool check_appear, int mon_id)
+bool Monster_Spawn(entity this, bool check_appear, Monster mon)
{
// setup the basic required properties for a monster
- entity mon = REGISTRY_GET(Monsters, mon_id);
- if(!mon.monsterid) { return false; } // invalid monster
+ if(!mon || mon == MON_Null) { return false; } // invalid monster
if(!autocvar_g_monsters) { Monster_Remove(this); return false; }
if(!(this.spawnflags & MONSTERFLAG_RESPAWNED) && !(this.flags & FL_MONSTER))
precache_model(this.mdl_dead);
}
- if(check_appear && Monster_Appear_Check(this, mon_id)) { return true; } // return true so the monster isn't removed
+ if(check_appear && Monster_Appear_Check(this, mon)) { return true; } // return true so the monster isn't removed
if(!this.monster_skill)
this.monster_skill = cvar("g_monsters_skill");
if(!this.damagedbycontents)
IL_PUSH(g_damagedbycontents, this);
this.damagedbycontents = true;
- this.monsterid = mon_id;
+ this.monsterdef = mon;
this.event_damage = Monster_Damage;
this.event_heal = Monster_Heal;
settouch(this, Monster_Touch);
void monsters_setstatus(entity this);
-bool Monster_Spawn(entity this, bool check_appear, int mon_id);
+bool Monster_Spawn(entity this, bool check_appear, Monster mon);
void monster_setupcolors(entity this);
#include <server/autocvars.qh>
#include <server/defs.qh>
#endif
-entity spawnmonster (entity e, string monster, int monster_id, entity spawnedby, entity own, vector orig, bool respwn, bool removeifinvalid, int moveflag)
+entity spawnmonster (entity e, string monster, Monster monster_id, entity spawnedby, entity own, vector orig, bool respwn, bool removeifinvalid, int moveflag)
{
e.spawnflags = MONSTERFLAG_SPAWNED;
RandomSelection_AddEnt(it, 1, 1);
});
- monster_id = RandomSelection_chosen_ent.monsterid;
+ monster_id = RandomSelection_chosen_ent;
}
else if(monster != "")
{
if(it.netname == monster)
{
found = true;
- monster_id = it.monsterid; // we have the monster, old monster id is no longer required
+ monster_id = it; // we have the monster, old monster id is no longer required
break;
}
});
- if(!found && !monster_id)
+ if(!found && monster_id == MON_Null)
{
if(removeifinvalid)
{
return NULL; // no good
}
else
- monster_id = MON_FIRST;
+ {
+ // select a random valid monster type if no valid monster was provided
+ return spawnmonster(e, "random", MON_Null, spawnedby, own, orig, respwn, removeifinvalid, moveflag);
+ }
}
}
#pragma once
-entity spawnmonster (entity e, string monster, int monster_id, entity spawnedby, entity own, vector orig, bool respwn, bool removeifinvalid, int moveflag);
+#include <common/monsters/monster.qh>
+
+entity spawnmonster (entity e, string monster, Monster monster_id, entity spawnedby, entity own, vector orig, bool respwn, bool removeifinvalid, int moveflag);
e.angles = this.angles;
e.monster_skill = this.monster_skill;
e.skin = this.skin;
- e = spawnmonster(e, this.spawnmob, 0, this, this, this.origin, false, true, this.monster_moveflags);
+ e = spawnmonster(e, this.spawnmob, MON_Null, this, this, this.origin, false, true, this.monster_moveflags);
}
spawnfunc(monster_spawner)
this.m_color = '1 0 0';
this.m_waypoint = _("Extra life");
this.m_waypointblink = 2;
+#ifdef SVQC
this.m_itemid = IT_RESOURCE;
+#endif
}
SPAWNFUNC_ITEM(item_extralife, ITEM_ExtraLife)
this.m_color = '0 0 1';
this.m_waypoint = _("Invisibility");
this.m_waypointblink = 2;
+#ifdef GAMEQC
this.m_itemid = IT_STRENGTH;
+#endif
#ifdef SVQC
this.m_iteminit = powerup_invisibility_init;
#endif
this.m_color = '1 0 1';
this.m_waypoint = _("Speed");
this.m_waypointblink = 2;
+#ifdef GAMEQC
this.m_itemid = IT_INVINCIBLE;
+#endif
#ifdef SVQC
this.m_iteminit = powerup_speed_init;
#endif
entity mon = M_ARGV(0, entity);
// always refill ammo
- if(mon.monsterid == MON_MAGE.monsterid)
+ if(mon.monsterdef == MON_MAGE)
mon.skin = 1;
}
{
entity e = spawn();
e.noalign = true; // don't drop to floor
- e = spawnmonster(e, this.pokenade_type, 0, this.realowner, this.realowner, this.origin, false, false, 1);
+ e = spawnmonster(e, this.pokenade_type, MON_Null, this.realowner, this.realowner, this.origin, false, false, 1);
if(autocvar_g_nades_pokenade_monster_lifetime > 0)
e.monster_lifetime = time + autocvar_g_nades_pokenade_monster_lifetime;
#include "sv_new_toys.qh"
#include "../random_items/sv_random_items.qh"
+#include <server/weapons/spawning.qh>
/*
#include "sv_nix.qh"
+#include <server/weapons/selection.qh>
+
//string autocvar_g_nix;
int autocvar_g_balance_nix_ammo_cells;
int autocvar_g_balance_nix_ammo_plasma;
}
float okhmg_spread = bound(WEP_CVAR_PRI(okhmg, spread_min), WEP_CVAR_PRI(okhmg, spread_min) + (WEP_CVAR_PRI(okhmg, spread_add) * actor.(weaponentity).misc_bulletcounter), WEP_CVAR_PRI(okhmg, spread_max));
- fireBullet(actor, weaponentity, w_shotorg, w_shotdir, okhmg_spread, WEP_CVAR_PRI(okhmg, solidpenetration), WEP_CVAR_PRI(okhmg, damage), WEP_CVAR_PRI(okhmg, force), WEP_OVERKILL_HMG.m_id, EFFECT_RIFLE);
+ fireBullet(actor, weaponentity, w_shotorg, w_shotdir, okhmg_spread, WEP_CVAR_PRI(okhmg, solidpenetration), WEP_CVAR_PRI(okhmg, damage), 0, WEP_CVAR_PRI(okhmg, force), WEP_OVERKILL_HMG.m_id, EFFECT_RIFLE);
actor.(weaponentity).misc_bulletcounter = actor.(weaponentity).misc_bulletcounter + 1;
}
okmachinegun_spread = bound(WEP_CVAR_PRI(okmachinegun, spread_min), WEP_CVAR_PRI(okmachinegun, spread_min) + (WEP_CVAR_PRI(okmachinegun, spread_add) * actor.(weaponentity).misc_bulletcounter), WEP_CVAR_PRI(okmachinegun, spread_max));
- fireBullet(actor, weaponentity, w_shotorg, w_shotdir, okmachinegun_spread, WEP_CVAR_PRI(okmachinegun, solidpenetration), WEP_CVAR_PRI(okmachinegun, damage), WEP_CVAR_PRI(okmachinegun, force), WEP_OVERKILL_MACHINEGUN.m_id, EFFECT_RIFLE);
+ fireBullet(actor, weaponentity, w_shotorg, w_shotdir, okmachinegun_spread, WEP_CVAR_PRI(okmachinegun, solidpenetration), WEP_CVAR_PRI(okmachinegun, damage), 0, WEP_CVAR_PRI(okmachinegun, force), WEP_OVERKILL_MACHINEGUN.m_id, EFFECT_RIFLE);
actor.(weaponentity).misc_bulletcounter = actor.(weaponentity).misc_bulletcounter + 1;
yoda = 0;
damage_goodhits = 0;
- FireRailgunBullet(actor, weaponentity, w_shotorg, w_shotorg + w_shotdir * max_shot_distance, mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, thiswep.m_id);
+ FireRailgunBullet(actor, weaponentity, w_shotorg, w_shotorg + w_shotdir * max_shot_distance, mydmg, true, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, thiswep.m_id);
if(yoda && flying)
Send_Notification(NOTIF_ONE, actor, MSG_ANNCE, ANNCE_ACHIEVEMENT_YODA);
#include "sv_spawn_near_teammate.qh"
+#include <common/mapobjects/trigger/hurt.qh>
+
#include <lib/float.qh>
string autocvar_g_spawn_near_teammate;
MSG_ANNCE_NOTIF(BEGIN, N__ALWAYS, "begin", CH_INFO, VOL_BASEVOICE, ATTEN_NONE)
+ MSG_ANNCE_NOTIF(HEADSHOT, N__ALWAYS, "headshot", CH_INFO, VOL_BASEVOICE, ATTEN_NONE)
+
MSG_ANNCE_NOTIF(KILLSTREAK_03, N_GNTLOFF, "03kills", CH_INFO, VOL_BASEVOICE, ATTEN_NONE)
MSG_ANNCE_NOTIF(KILLSTREAK_05, N_GNTLOFF, "05kills", CH_INFO, VOL_BASEVOICE, ATTEN_NONE)
MSG_ANNCE_NOTIF(KILLSTREAK_10, N_GNTLOFF, "10kills", CH_INFO, VOL_BASEVOICE, ATTEN_NONE)
#include <common/teams.qh>
#include <server/autocvars.qh>
#include <server/constants.qh>
- #include <server/defs.qh>
+ #include <server/g_world.qh>
#include <server/mutators/_mod.qh>
#endif
#ifdef SVQC
#include <server/miscfunctions.qh>
+#include <common/mapobjects/defs.qh>
#include "../mapobjects/trigger/viewloc.qh"
// client side physics
STAT(MOVEVARS_HIGHSPEED, this) = autocvar_g_movement_highspeed;
MUTATOR_CALLHOOK(PlayerPhysics_UpdateStats, this);
- float maxspd_mod = PHYS_HIGHSPEED(this) * ((this.swampslug.active) ? this.swampslug.swamp_slowdown : 1);
+ float maxspd_mod = PHYS_HIGHSPEED(this) * ((this.swampslug.active == ACTIVE_ACTIVE) ? this.swampslug.swamp_slowdown : 1);
STAT(MOVEVARS_MAXSPEED, this) = Physics_ClientOption(this, "maxspeed", autocvar_sv_maxspeed) * maxspd_mod; // also slow walking
if (autocvar_g_movement_highspeed_q3_compat) {
STAT(MOVEVARS_AIRACCEL_QW, this) = Physics_ClientOption(this, "airaccel_qw", autocvar_sv_airaccel_qw);
#include <common/state.qh>
#endif
+const int FL_DUCKED = BIT(19);
+
.entity conveyor;
.float race_penalty;
#define WAS_ONGROUND(s) boolean((s).lastflags & FL_ONGROUND)
#define WAS_ONSLICK(s) boolean((s).lastflags & FL_ONSLICK)
+#define IS_DUCKED(s) (boolean((s).flags & FL_DUCKED))
+#define SET_DUCKED(s) ((s).flags |= FL_DUCKED)
+#define UNSET_DUCKED(s) ((s).flags &= ~FL_DUCKED)
+
#define ITEMS_STAT(s) ((s).items)
.float teleport_time;
#define PHYS_INPUT_BUTTON_BUTTON15(s) boolean(input_buttons & BIT(17))
#define PHYS_INPUT_BUTTON_BUTTON16(s) boolean(input_buttons & BIT(18))
- #define IS_DUCKED(s) (boolean((s).flags & FL_DUCKED))
- #define SET_DUCKED(s) ((s).flags |= FL_DUCKED)
- #define UNSET_DUCKED(s) ((s).flags &= ~FL_DUCKED)
-
#define PHYS_INVEHICLE(s) (boolean(hud != HUD_NORMAL))
#define PHYS_JUMPSPEEDCAP_MIN autocvar_cl_jumpspeedcap_min
#define PHYS_INPUT_BUTTON_BUTTON15(s) (CS(s).button15)
#define PHYS_INPUT_BUTTON_BUTTON16(s) (CS(s).button16)
- #define IS_DUCKED(s) ((s).crouch)
- #define SET_DUCKED(s) ((s).crouch = true)
- #define UNSET_DUCKED(s) ((s).crouch = false)
-
#define PHYS_INVEHICLE(s) (boolean((s).vehicle != NULL))
#define PHYS_JUMPSPEEDCAP_MIN autocvar_sv_jumpspeedcap_min
const int SND_ATTENUATION = BIT(1);
const int SND_LARGEENTITY = BIT(3);
const int SND_LARGESOUND = BIT(4);
+const int SND_SPEEDUSHORT4000 = BIT(5);
-void soundtoat(int to, entity e, vector o, int chan, string samp, float vol, float attenu)
+void soundtoat(int to, entity e, vector o, int chan, string samp, float vol, float attenu, float _pitch)
{
if (!sound_allowed(to, e)) return;
int entno = etof(e);
attenu = floor(attenu * 64);
vol = floor(vol * 255);
int sflags = 0;
+ int speed4000 = floor((_pitch * 0.01) * 4000 + 0.5);
if (vol != 255) sflags |= SND_VOLUME;
if (attenu != 64) sflags |= SND_ATTENUATION;
if (entno >= 8192 || chan < 0 || chan > 7) sflags |= SND_LARGEENTITY;
if (idx >= 256) sflags |= SND_LARGESOUND;
+ if (speed4000 && speed4000 != 4000) sflags |= SND_SPEEDUSHORT4000;
WriteByte(to, SVC_SOUND);
WriteByte(to, sflags);
if (sflags & SND_VOLUME) WriteByte(to, vol);
if (sflags & SND_ATTENUATION) WriteByte(to, attenu);
+ if (sflags & SND_SPEEDUSHORT4000) WriteShort(to, speed4000);
if (sflags & SND_LARGEENTITY)
{
WriteShort(to, entno);
WriteCoord(to, o.z);
}
-void soundto(int _dest, entity e, int chan, string samp, float vol, float _atten)
+void soundto(int _dest, entity e, int chan, string samp, float vol, float _atten, float _pitch)
{
if (!sound_allowed(_dest, e)) return;
vector o = e.origin + 0.5 * (e.mins + e.maxs);
- soundtoat(_dest, e, o, chan, samp, vol, _atten);
+ soundtoat(_dest, e, o, chan, samp, vol, _atten, _pitch);
}
void soundat(entity e, vector o, int chan, string samp, float vol, float _atten)
{
- soundtoat(((chan & 8) ? MSG_ALL : MSG_BROADCAST), e, o, chan, samp, vol, _atten);
+ soundtoat(((chan & 8) ? MSG_ALL : MSG_BROADCAST), e, o, chan, samp, vol, _atten, 0);
}
void stopsoundto(int _dest, entity e, int chan)
{
void play2(entity e, string filename)
{
msg_entity = e;
- soundtoat(MSG_ONE, NULL, '0 0 0', CH_INFO, filename, VOL_BASE, ATTEN_NONE);
+ soundtoat(MSG_ONE, NULL, '0 0 0', CH_INFO, filename, VOL_BASE, ATTEN_NONE, 0);
}
.float spamtime;
#include <server/autocvars.qh>
#include <server/client.qh>
#include <server/compat/quake3.qh>
+#include <common/mapobjects/trigger/secret.qh>
#endif
// Full list of all stat constants, included in a single location for easy reference
REGISTER_STAT(VEHICLESTAT_RELOAD2, int)
REGISTER_STAT(VEHICLESTAT_W2MODE, int)
REGISTER_STAT(NADE_TIMER, float)
-REGISTER_STAT(SECRETS_TOTAL, float)
-REGISTER_STAT(SECRETS_FOUND, float)
+REGISTER_STAT(SECRETS_TOTAL, int, secrets_total)
+REGISTER_STAT(SECRETS_FOUND, int, secrets_found)
REGISTER_STAT(RESPAWN_TIME, float)
REGISTER_STAT(ROUNDSTARTTIME, float, round_starttime)
REGISTER_STAT(MONSTERS_TOTAL, int)
+++ /dev/null
-#include "t_items.qh"
-
-#include "items/_mod.qh"
-
-#if defined(SVQC)
-
- #include "../server/bot/api.qh"
-
- #include <server/mutators/_mod.qh>
-
- #include "../server/weapons/common.qh"
- #include "../server/weapons/selection.qh"
- #include "../server/weapons/weaponsystem.qh"
-
- #include "constants.qh"
- #include <common/deathtypes/all.qh>
- #include <common/notifications/all.qh>
- #include "mapobjects/subs.qh"
- #include "util.qh"
-
- #include <common/monsters/_mod.qh>
-
- #include <common/weapons/_all.qh>
-
- #include <common/mutators/mutator/buffs/buffs.qh>
- #include <common/mutators/mutator/buffs/sv_buffs.qh>
-
- #include "../lib/warpzone/util_server.qh"
-#elif defined(CSQC)
- #include "physics/movetypes/movetypes.qh"
- #include <common/weapons/_all.qh>
- #include "../lib/csqcmodel/cl_model.qh"
- #include "../lib/csqcmodel/common.qh"
-#endif
-
-REGISTER_NET_LINKED(ENT_CLIENT_ITEM)
-
-#ifdef CSQC
-bool autocvar_cl_ghost_items_vehicle = true;
-.vector item_glowmod;
-.bool item_simple; // probably not really needed, but better safe than sorry
-void Item_SetAlpha(entity this)
-{
- bool veh_hud = (hud && autocvar_cl_ghost_items_vehicle);
-
- if(!veh_hud && (this.ItemStatus & ITS_AVAILABLE))
- {
- this.alpha = 1;
- this.colormod = '1 1 1';
- this.glowmod = this.item_glowmod;
- }
- else
- {
- this.alpha = autocvar_cl_ghost_items;
- this.colormod = this.glowmod = autocvar_cl_ghost_items_color;
- }
-
- if((!veh_hud) && (this.ItemStatus & ITS_STAYWEP))
- {
- this.colormod = this.glowmod = autocvar_cl_weapon_stay_color;
- this.alpha = autocvar_cl_weapon_stay_alpha;
- }
-
- this.drawmask = ((this.alpha <= 0) ? 0 : MASK_NORMAL);
-}
-
-void ItemDraw(entity this)
-{
- if(this.gravity)
- {
- Movetype_Physics_MatchServer(this, false);
- if(IS_ONGROUND(this))
- { // For some reason avelocity gets set to '0 0 0' here ...
- this.oldorigin = this.origin;
- this.gravity = 0;
-
- if(autocvar_cl_animate_items)
- { // ... so reset it if animations are requested.
- if(this.ItemStatus & ITS_ANIMATE1)
- this.avelocity = '0 180 0';
-
- if(this.ItemStatus & ITS_ANIMATE2)
- this.avelocity = '0 -90 0';
- }
-
- // delay is for blocking item's position for a while;
- // it's a workaround for dropped weapons that receive the position
- // another time right after they spawn overriding animation position
- this.onground_time = time + 0.5;
- }
- }
- else if (autocvar_cl_animate_items && !this.item_simple) // no bobbing applied to simple items, for consistency's sake (no visual difference between ammo and weapons)
- {
- if(this.ItemStatus & ITS_ANIMATE1)
- {
- this.angles += this.avelocity * frametime;
- float fade_in = bound(0, time - this.onground_time, 1);
- setorigin(this, this.oldorigin + fade_in * ('0 0 10' + '0 0 8' * sin((time - this.onground_time) * 2)));
- }
-
- if(this.ItemStatus & ITS_ANIMATE2)
- {
- this.angles += this.avelocity * frametime;
- float fade_in = bound(0, time - this.onground_time, 1);
- setorigin(this, this.oldorigin + fade_in * ('0 0 8' + '0 0 4' * sin((time - this.onground_time) * 3)));
- }
- }
-
- Item_SetAlpha(this);
-}
-
-void Item_PreDraw(entity this)
-{
- if(warpzone_warpzones_exist)
- {
- setpredraw(this, func_null); // no need to keep running this
- return;
- }
- float alph;
- vector org = getpropertyvec(VF_ORIGIN);
- //if(!checkpvs(org, this)) // this makes sense as long as we don't support recursive warpzones
- //alph = 0; // this shouldn't be needed, since items behind walls are culled anyway
- if(this.fade_start)
- {
- if(vdist(org - this.origin, >, this.fade_end))
- alph = 0; // save on some processing
- else if(vdist(org - this.origin, <, this.fade_start))
- alph = 1; // more processing saved
- else
- alph = bound(0, (this.fade_end - vlen(org - this.origin - 0.5 * (this.mins + this.maxs))) / (this.fade_end - this.fade_start), 1);
- }
- else
- alph = 1;
- //printf("%v <-> %v\n", view_origin, this.origin + 0.5 * (this.mins + this.maxs));
- if(!hud && (this.ItemStatus & ITS_AVAILABLE))
- this.alpha = alph;
- if(alph <= 0)
- this.drawmask = 0;
- //else
- //this.drawmask = MASK_NORMAL; // reset by the setalpha function
-}
-
-void ItemRemove(entity this)
-{
- strfree(this.mdl);
-}
-
-HashMap ENT_CLIENT_ITEM_simple;
-STATIC_INIT(ENT_CLIENT_ITEM_simple)
-{
- HM_NEW(ENT_CLIENT_ITEM_simple);
-}
-SHUTDOWN(ENT_CLIENT_ITEM_simple)
-{
- HM_DELETE(ENT_CLIENT_ITEM_simple);
-}
-
-NET_HANDLE(ENT_CLIENT_ITEM, bool isnew)
-{
- int sf = ReadByte();
-
- if(sf & ISF_LOCATION)
- {
- this.origin = ReadVector();
- setorigin(this, this.origin);
- this.oldorigin = this.origin;
- }
-
- if(sf & ISF_ANGLES)
- {
- this.angles_x = ReadAngle();
- this.angles_y = ReadAngle();
- this.angles_z = ReadAngle();
- }
-
- if(sf & ISF_SIZE)
- {
- setsize(this, '-16 -16 0', '16 16 48');
- }
-
- if(sf & ISF_STATUS) // need to read/write status first so model can handle simple, fb etc.
- {
- this.ItemStatus = ReadByte();
-
- Item_SetAlpha(this);
-
- if(this.ItemStatus & ITS_ALLOWFB)
- this.effects |= EF_FULLBRIGHT;
- else
- this.effects &= ~EF_FULLBRIGHT;
-
- if(this.ItemStatus & ITS_GLOW)
- {
- if(this.ItemStatus & ITS_AVAILABLE)
- this.effects |= (EF_ADDITIVE | EF_FULLBRIGHT);
- else
- this.effects &= ~(EF_ADDITIVE | EF_FULLBRIGHT);
- }
- }
-
- if(sf & ISF_MODEL)
- {
- this.drawmask = MASK_NORMAL;
- set_movetype(this, MOVETYPE_TOSS);
- if (isnew) IL_PUSH(g_drawables, this);
- this.draw = ItemDraw;
- this.solid = SOLID_TRIGGER;
- //this.flags |= FL_ITEM;
-
- this.fade_end = ReadShort();
- this.fade_start = ReadShort();
- if(!warpzone_warpzones_exist && this.fade_start && !autocvar_cl_items_nofade)
- setpredraw(this, Item_PreDraw);
-
- strfree(this.mdl);
-
- string _fn = ReadString();
- this.item_simple = false; // reset it!
-
- if(autocvar_cl_simple_items && (this.ItemStatus & ITS_ALLOWSI))
- {
- string _fn2 = substring(_fn, 0 , strlen(_fn) -4);
- this.item_simple = true;
-
- #define extensions(x) \
- x(md3) \
- x(dpm) \
- x(iqm) \
- x(mdl) \
- /**/
- #define tryext(ext) { \
- string s = strcat(_fn2, autocvar_cl_simpleitems_postfix, "." #ext); \
- string cached = HM_gets(ENT_CLIENT_ITEM_simple, s); \
- if (cached == "") { \
- HM_sets(ENT_CLIENT_ITEM_simple, s, cached = fexists(s) ? "1" : "0"); \
- } \
- if (cached != "0") { \
- strcpy(this.mdl, s); \
- break; \
- } \
- }
- do {
- extensions(tryext);
- this.item_simple = false;
- LOG_TRACEF("Simple item requested for %s but no model exists for it", _fn);
- } while (0);
- #undef tryext
- #undef extensions
- }
-
- if(!this.item_simple)
- strcpy(this.mdl, _fn);
-
- if(this.mdl == "")
- LOG_WARNF("this.mdl is unset for item %s", this.classname);
-
- precache_model(this.mdl);
- _setmodel(this, this.mdl);
-
- setsize(this, '-16 -16 0', '16 16 48');
- }
-
- if(sf & ISF_COLORMAP)
- {
- this.colormap = ReadShort();
- this.item_glowmod_x = ReadByte() / 255.0;
- this.item_glowmod_y = ReadByte() / 255.0;
- this.item_glowmod_z = ReadByte() / 255.0;
- }
-
- if(sf & ISF_DROP)
- {
- this.gravity = 1;
- this.pushable = true;
- //this.angles = '0 0 0';
- set_movetype(this, MOVETYPE_TOSS);
- this.velocity = ReadVector();
- setorigin(this, this.oldorigin);
-
- if(!this.move_time)
- {
- this.move_time = time;
- this.spawntime = time;
- }
- else
- this.move_time = max(this.move_time, time);
- }
-
- if(autocvar_cl_animate_items)
- {
- if(this.ItemStatus & ITS_ANIMATE1)
- this.avelocity = '0 180 0';
-
- if(this.ItemStatus & ITS_ANIMATE2)
- this.avelocity = '0 -90 0';
- }
-
- this.entremove = ItemRemove;
-
- return true;
-}
-
-#endif
-
-#ifdef SVQC
-bool ItemSend(entity this, entity to, int sf)
-{
- if(this.gravity)
- sf |= ISF_DROP;
- else
- sf &= ~ISF_DROP;
-
- WriteHeader(MSG_ENTITY, ENT_CLIENT_ITEM);
- WriteByte(MSG_ENTITY, sf);
-
- //WriteByte(MSG_ENTITY, this.cnt);
- if(sf & ISF_LOCATION)
- {
- WriteVector(MSG_ENTITY, this.origin);
- }
-
- if(sf & ISF_ANGLES)
- {
- WriteAngle(MSG_ENTITY, this.angles_x);
- WriteAngle(MSG_ENTITY, this.angles_y);
- WriteAngle(MSG_ENTITY, this.angles_z);
- }
-
- // sets size on the client, unused on server
- //if(sf & ISF_SIZE)
-
- if(sf & ISF_STATUS)
- WriteByte(MSG_ENTITY, this.ItemStatus);
-
- if(sf & ISF_MODEL)
- {
- WriteShort(MSG_ENTITY, this.fade_end);
- WriteShort(MSG_ENTITY, this.fade_start);
-
- if(this.mdl == "")
- LOG_TRACE("^1WARNING!^7 this.mdl is unset for item ", this.classname, "expect a crash just about now");
-
- WriteString(MSG_ENTITY, this.mdl);
- }
-
-
- if(sf & ISF_COLORMAP)
- {
- WriteShort(MSG_ENTITY, this.colormap);
- WriteByte(MSG_ENTITY, this.glowmod.x * 255.0);
- WriteByte(MSG_ENTITY, this.glowmod.y * 255.0);
- WriteByte(MSG_ENTITY, this.glowmod.z * 255.0);
- }
-
- if(sf & ISF_DROP)
- {
- WriteVector(MSG_ENTITY, this.velocity);
- }
-
- return true;
-}
-
-void ItemUpdate(entity this)
-{
- this.oldorigin = this.origin;
- this.SendFlags |= ISF_LOCATION;
-}
-
-void UpdateItemAfterTeleport(entity this)
-{
- if(getSendEntity(this) == ItemSend)
- ItemUpdate(this);
-}
-
-bool have_pickup_item(entity this)
-{
- if(this.itemdef.instanceOfPowerup)
- {
- if(autocvar_g_powerups > 0)
- return true;
- if(autocvar_g_powerups == 0)
- return false;
- }
- else
- {
- if(autocvar_g_pickup_items > 0)
- return true;
- if(autocvar_g_pickup_items == 0)
- return false;
- if(g_weaponarena)
- if(STAT(WEAPONS, this) || this.itemdef.instanceOfAmmo) // no item or ammo pickups in weaponarena
- return false;
- }
- return true;
-}
-
-void Item_Show(entity e, int mode)
-{
- e.effects &= ~(EF_ADDITIVE | EF_STARDUST | EF_FULLBRIGHT | EF_NODEPTHTEST);
- e.ItemStatus &= ~ITS_STAYWEP;
- entity def = e.itemdef;
- if (mode > 0)
- {
- // make the item look normal, and be touchable
- e.model = e.mdl;
- e.solid = SOLID_TRIGGER;
- e.spawnshieldtime = 1;
- e.ItemStatus |= ITS_AVAILABLE;
- }
- else if (mode < 0)
- {
- // hide the item completely
- e.model = string_null;
- e.solid = SOLID_NOT;
- e.spawnshieldtime = 1;
- e.ItemStatus &= ~ITS_AVAILABLE;
- }
- else
- {
- bool nostay = def.instanceOfWeaponPickup ? !!(def.m_weapon.m_wepset & WEPSET_SUPERWEAPONS) : false // no weapon-stay on superweapons
- || e.team // weapon stay isn't supported for teamed weapons
- ;
- if(def.instanceOfWeaponPickup && !nostay && g_weapon_stay)
- {
- // make the item translucent and not touchable
- e.model = e.mdl;
- e.solid = SOLID_TRIGGER; // can STILL be picked up!
- e.effects |= EF_STARDUST;
- e.spawnshieldtime = 0; // field indicates whether picking it up may give you anything other than the weapon
- e.ItemStatus |= (ITS_AVAILABLE | ITS_STAYWEP);
- }
- else
- {
- //setmodel(e, "null");
- e.solid = SOLID_NOT;
- e.colormod = '0 0 0';
- //e.glowmod = e.colormod;
- e.spawnshieldtime = 1;
- e.ItemStatus &= ~ITS_AVAILABLE;
- }
- }
-
- if (def.m_glow)
- e.ItemStatus |= ITS_GLOW;
-
- if (autocvar_g_nodepthtestitems)
- e.effects |= EF_NODEPTHTEST;
-
- if (autocvar_g_fullbrightitems)
- e.ItemStatus |= ITS_ALLOWFB;
- else
- e.ItemStatus &= ~ITS_ALLOWFB;
-
- if (autocvar_sv_simple_items)
- e.ItemStatus |= ITS_ALLOWSI;
-
- // relink entity (because solid may have changed)
- setorigin(e, e.origin);
- e.SendFlags |= ISF_STATUS;
-}
-
-void Item_Think(entity this)
-{
- this.nextthink = time;
- if(this.origin != this.oldorigin)
- ItemUpdate(this);
-}
-
-bool Item_ItemsTime_SpectatorOnly(GameItem it);
-bool Item_ItemsTime_Allow(GameItem it);
-float Item_ItemsTime_UpdateTime(entity e, float t);
-void Item_ItemsTime_SetTime(entity e, float t);
-void Item_ItemsTime_SetTimesForAllPlayers();
-
-void Item_Respawn(entity this)
-{
- Item_Show(this, 1);
- sound(this, CH_TRIGGER, this.itemdef.m_respawnsound, VOL_BASE, ATTEN_NORM); // play respawn sound
- setorigin(this, this.origin);
-
- if (Item_ItemsTime_Allow(this.itemdef) || (STAT(WEAPONS, this) & WEPSET_SUPERWEAPONS))
- {
- float t = Item_ItemsTime_UpdateTime(this, 0);
- Item_ItemsTime_SetTime(this, t);
- Item_ItemsTime_SetTimesForAllPlayers();
- }
-
- setthink(this, Item_Think);
- this.nextthink = time;
-
- //Send_Effect(EFFECT_ITEM_RESPAWN, this.origin + this.mins_z * '0 0 1' + '0 0 48', '0 0 0', 1);
- Send_Effect(EFFECT_ITEM_RESPAWN, CENTER_OR_VIEWOFS(this), '0 0 0', 1);
-}
-
-void Item_RespawnCountdown(entity this)
-{
- if(this.item_respawncounter >= ITEM_RESPAWN_TICKS)
- {
- if(this.waypointsprite_attached)
- WaypointSprite_Kill(this.waypointsprite_attached);
- Item_Respawn(this);
- }
- else
- {
- this.nextthink = time + 1;
- this.item_respawncounter += 1;
- if(this.item_respawncounter == 1)
- {
- do {
- {
- entity wi = REGISTRY_GET(Weapons, this.weapon);
- if (wi != WEP_Null) {
- entity wp = WaypointSprite_Spawn(WP_Weapon, 0, 0, this, '0 0 64', NULL, 0, this, waypointsprite_attached, true, RADARICON_Weapon);
- wp.wp_extra = wi.m_id;
- break;
- }
- }
- {
- entity ii = this.itemdef;
- if (ii != NULL) {
- entity wp = WaypointSprite_Spawn(WP_Item, 0, 0, this, '0 0 64', NULL, 0, this, waypointsprite_attached, true, RADARICON_Item);
- wp.wp_extra = ii.m_id;
- break;
- }
- }
- } while (0);
- bool mutator_returnvalue = MUTATOR_CALLHOOK(Item_RespawnCountdown, this);
- if(this.waypointsprite_attached)
- {
- GameItem def = this.itemdef;
- if (Item_ItemsTime_SpectatorOnly(def) && !mutator_returnvalue)
- WaypointSprite_UpdateRule(this.waypointsprite_attached, 0, SPRITERULE_SPECTATOR);
- WaypointSprite_UpdateBuildFinished(this.waypointsprite_attached, time + ITEM_RESPAWN_TICKS);
- }
- }
-
- if(this.waypointsprite_attached)
- {
- FOREACH_CLIENT(IS_REAL_CLIENT(it), {
- if(this.waypointsprite_attached.waypointsprite_visible_for_player(this.waypointsprite_attached, it, it))
- {
- msg_entity = it;
- soundto(MSG_ONE, this, CH_TRIGGER, SND(ITEMRESPAWNCOUNTDOWN), VOL_BASE, ATTEN_NORM); // play respawn sound
- }
- });
-
- WaypointSprite_Ping(this.waypointsprite_attached);
- //WaypointSprite_UpdateHealth(this.waypointsprite_attached, this.item_respawncounter);
- }
- }
-}
-
-void Item_RespawnThink(entity this)
-{
- this.nextthink = time;
- if(this.origin != this.oldorigin)
- ItemUpdate(this);
-
- if(time >= this.wait)
- Item_Respawn(this);
-}
-
-void Item_ScheduleRespawnIn(entity e, float t)
-{
- // if the respawn time is longer than 10 seconds, show a waypoint, otherwise, just respawn normally
- if ((Item_ItemsTime_Allow(e.itemdef) || (STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS) || MUTATOR_CALLHOOK(Item_ScheduleRespawn, e, t)) && (t - ITEM_RESPAWN_TICKS) > 0)
- {
- setthink(e, Item_RespawnCountdown);
- e.nextthink = time + max(0, t - ITEM_RESPAWN_TICKS);
- e.scheduledrespawntime = e.nextthink + ITEM_RESPAWN_TICKS;
- e.item_respawncounter = 0;
- if(Item_ItemsTime_Allow(e.itemdef) || (STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS))
- {
- t = Item_ItemsTime_UpdateTime(e, e.scheduledrespawntime);
- Item_ItemsTime_SetTime(e, t);
- Item_ItemsTime_SetTimesForAllPlayers();
- }
- }
- else
- {
- setthink(e, Item_RespawnThink);
- e.nextthink = time;
- e.scheduledrespawntime = time + t;
- e.wait = time + t;
-
- if(Item_ItemsTime_Allow(e.itemdef) || (STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS))
- {
- t = Item_ItemsTime_UpdateTime(e, e.scheduledrespawntime);
- Item_ItemsTime_SetTime(e, t);
- Item_ItemsTime_SetTimesForAllPlayers();
- }
- }
-}
-
-AUTOCVAR(g_pickup_respawntime_scaling_reciprocal, float, 0.0, "Multiply respawn time by `reciprocal / (p + offset) + linear` where `p` is the current number of players, takes effect with 2 or more players present, `reciprocal` (with `offset` and `linear` set to 0) can be used to achieve a constant number of items spawned *per player*");
-AUTOCVAR(g_pickup_respawntime_scaling_offset, float, 0.0, "Multiply respawn time by `reciprocal / (p + offset) + linear` where `p` is the current number of players, takes effect with 2 or more players present, `offset` offsets the curve left or right - the results are not intuitive and I recommend plotting the respawn time and the number of items per player to see what's happening");
-AUTOCVAR(g_pickup_respawntime_scaling_linear, float, 1.0, "Multiply respawn time by `reciprocal / (p + offset) + linear` where `p` is the current number of players, takes effect with 2 or more players present, `linear` can be used to simply scale the respawn time linearly");
-
-/// Adjust respawn time according to the number of players.
-float adjust_respawntime(float normal_respawntime) {
- float r = autocvar_g_pickup_respawntime_scaling_reciprocal;
- float o = autocvar_g_pickup_respawntime_scaling_offset;
- float l = autocvar_g_pickup_respawntime_scaling_linear;
-
- if (r == 0 && l == 1) {
- return normal_respawntime;
- }
-
- entity balance = TeamBalance_CheckAllowedTeams(NULL);
- TeamBalance_GetTeamCounts(balance, NULL);
- int players = 0;
- for (int i = 1; i <= NUM_TEAMS; ++i)
- {
- if (TeamBalance_IsTeamAllowed(balance, i))
- {
- players += TeamBalance_GetNumberOfPlayers(balance, i);
- }
- }
- TeamBalance_Destroy(balance);
-
- if (players >= 2) {
- return normal_respawntime * (r / (players + o) + l);
- } else {
- return normal_respawntime;
- }
-}
-
-void Item_ScheduleRespawn(entity e)
-{
- if(e.respawntime > 0)
- {
- Item_Show(e, 0);
-
- float adjusted_respawntime = adjust_respawntime(e.respawntime);
- //LOG_INFOF("item %s will respawn in %f", e.classname, adjusted_respawntime);
-
- // range: adjusted_respawntime - respawntimejitter .. adjusted_respawntime + respawntimejitter
- float respawn_in = adjusted_respawntime + crandom() * e.respawntimejitter;
- Item_ScheduleRespawnIn(e, respawn_in);
- }
- else // if respawntime is -1, this item does not respawn
- Item_Show(e, -1);
-}
-
-AUTOCVAR(g_pickup_respawntime_initial_random, int, 1,
- "For items that don't start spawned: 0: spawn after their normal respawntime; 1: spawn after `random * respawntime` with the *same* random; 2: same as 1 but each item has separate random");
-
-void Item_ScheduleInitialRespawn(entity e)
-{
- Item_Show(e, 0);
-
- float spawn_in;
- if (autocvar_g_pickup_respawntime_initial_random == 0)
- {
- // range: respawntime .. respawntime + respawntimejitter
- spawn_in = e.respawntime + random() * e.respawntimejitter;
- }
- else
- {
- float rnd;
- if (autocvar_g_pickup_respawntime_initial_random == 1)
- {
- static float shared_random = 0;
- // NOTE this code works only if items are scheduled at the same time (normal case)
- // NOTE2 random() can't return exactly 1 so this check always work as intended
- if (!shared_random || floor(time) > shared_random)
- shared_random = floor(time) + random();
- rnd = shared_random - floor(time);
- }
- else
- rnd = random();
-
- // range:
- // if respawntime >= ITEM_RESPAWN_TICKS: ITEM_RESPAWN_TICKS .. respawntime + respawntimejitter
- // else: 0 .. ITEM_RESPAWN_TICKS
- // this is to prevent powerups spawning unexpectedly without waypoints
- spawn_in = ITEM_RESPAWN_TICKS + rnd * (e.respawntime + e.respawntimejitter - ITEM_RESPAWN_TICKS);
- }
-
- Item_ScheduleRespawnIn(e, max(0, game_starttime - time) + ((e.respawntimestart) ? e.respawntimestart : spawn_in));
-}
-
-void GiveRandomWeapons(entity receiver, int num_weapons, string weapon_names,
- entity ammo_entity)
-{
- if (num_weapons == 0)
- {
- return;
- }
- int num_potential_weapons = tokenize_console(weapon_names);
- for (int give_attempt = 0; give_attempt < num_weapons; ++give_attempt)
- {
- RandomSelection_Init();
- for (int weapon_index = 0; weapon_index < num_potential_weapons;
- ++weapon_index)
- {
- string weapon = argv(weapon_index);
- FOREACH(Weapons, it != WEP_Null,
- {
- // Finding a weapon which player doesn't have.
- if (!(STAT(WEAPONS, receiver) & it.m_wepset) && (it.netname == weapon))
- {
- RandomSelection_AddEnt(it, 1, 1);
- break;
- }
- });
- }
- if (RandomSelection_chosen_ent == NULL)
- {
- return;
- }
- STAT(WEAPONS, receiver) |= RandomSelection_chosen_ent.m_wepset;
- if (RandomSelection_chosen_ent.ammo_type == RES_NONE)
- {
- continue;
- }
- if (GetResource(receiver,
- RandomSelection_chosen_ent.ammo_type) != 0)
- {
- continue;
- }
- GiveResource(receiver, RandomSelection_chosen_ent.ammo_type,
- GetResource(ammo_entity,
- RandomSelection_chosen_ent.ammo_type));
- }
-}
-
-bool Item_GiveAmmoTo(entity item, entity player, int res_type, float ammomax)
-{
- float amount = GetResource(item, res_type);
- if (amount == 0)
- {
- return false;
- }
- float player_amount = GetResource(player, res_type);
- if (item.spawnshieldtime)
- {
- if ((player_amount >= ammomax) && (item.pickup_anyway <= 0))
- return false;
- }
- else if (g_weapon_stay == 2)
- {
- ammomax = min(amount, ammomax);
- if(player_amount >= ammomax)
- return false;
- }
- else
- return false;
- if (amount < 0)
- TakeResourceWithLimit(player, res_type, -amount, ammomax);
- else
- GiveResourceWithLimit(player, res_type, amount, ammomax);
- return true;
-}
-
-bool Item_GiveTo(entity item, entity player)
-{
- // if nothing happens to player, just return without taking the item
- int _switchweapon = 0;
- // in case the player has autoswitch enabled do the following:
- // if the player is using their best weapon before items are given, they
- // probably want to switch to an even better weapon after items are given
-
- if(CS(player).autoswitch)
- {
- for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
- {
- .entity weaponentity = weaponentities[slot];
- if(player.(weaponentity).m_weapon != WEP_Null || slot == 0)
- {
- if(player.(weaponentity).m_switchweapon == w_getbestweapon(player, weaponentity))
- _switchweapon |= BIT(slot);
-
- if(!(STAT(WEAPONS, player) & WepSet_FromWeapon(player.(weaponentity).m_switchweapon)))
- _switchweapon |= BIT(slot);
- }
- }
- }
- bool pickedup = false;
- pickedup |= Item_GiveAmmoTo(item, player, RES_HEALTH, item.max_health);
- pickedup |= Item_GiveAmmoTo(item, player, RES_ARMOR, item.max_armorvalue);
- pickedup |= Item_GiveAmmoTo(item, player, RES_SHELLS, g_pickup_shells_max);
- pickedup |= Item_GiveAmmoTo(item, player, RES_BULLETS, g_pickup_nails_max);
- pickedup |= Item_GiveAmmoTo(item, player, RES_ROCKETS, g_pickup_rockets_max);
- pickedup |= Item_GiveAmmoTo(item, player, RES_CELLS, g_pickup_cells_max);
- pickedup |= Item_GiveAmmoTo(item, player, RES_PLASMA, g_pickup_plasma_max);
- pickedup |= Item_GiveAmmoTo(item, player, RES_FUEL, g_pickup_fuel_max);
- if (item.itemdef.instanceOfWeaponPickup)
- {
- WepSet w;
- w = STAT(WEAPONS, item);
- w &= ~STAT(WEAPONS, player);
-
- if (w || (item.spawnshieldtime && item.pickup_anyway > 0))
- {
- pickedup = true;
- FOREACH(Weapons, it != WEP_Null, {
- if(w & (it.m_wepset))
- {
- for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
- {
- .entity weaponentity = weaponentities[slot];
- if(player.(weaponentity).m_weapon != WEP_Null || slot == 0)
- W_DropEvent(wr_pickup, player, it.m_id, item, weaponentity);
- }
- W_GiveWeapon(player, it.m_id);
- }
- });
- }
- }
-
- if (item.itemdef.instanceOfPowerup)
- {
- if ((item.itemdef == ITEM_JetpackRegen) && !(player.items & IT_FUEL_REGEN))
- Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_ITEM_FUELREGEN_GOT);
- else if ((item.itemdef == ITEM_Jetpack) && !(player.items & IT_JETPACK))
- Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_ITEM_JETPACK_GOT);
- }
-
- int its;
- if((its = (item.items - (item.items & player.items)) & IT_PICKUPMASK))
- {
- pickedup = true;
- player.items |= its;
- // TODO: we probably want to show a message in the console, but not this one!
- //Send_Notification(NOTIF_ONE, player, MSG_INFO, INFO_ITEM_WEAPON_GOT, item.netname);
- }
-
- if (item.strength_finished)
- {
- pickedup = true;
- STAT(STRENGTH_FINISHED, player) = max(STAT(STRENGTH_FINISHED, player), time) + item.strength_finished;
- }
- if (item.invincible_finished)
- {
- pickedup = true;
- STAT(INVINCIBLE_FINISHED, player) = max(STAT(INVINCIBLE_FINISHED, player), time) + item.invincible_finished;
- }
- if (item.superweapons_finished)
- {
- pickedup = true;
- STAT(SUPERWEAPONS_FINISHED, player) = max(STAT(SUPERWEAPONS_FINISHED, player), time) + item.superweapons_finished;
- }
-
- // always eat teamed entities
- if(item.team)
- pickedup = true;
-
- if (!pickedup)
- return false;
-
- // crude hack to enforce switching weapons
- if(g_cts && item.itemdef.instanceOfWeaponPickup && !CS(player).cvar_cl_cts_noautoswitch)
- {
- for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
- {
- .entity weaponentity = weaponentities[slot];
- if(player.(weaponentity).m_weapon != WEP_Null || slot == 0)
- W_SwitchWeapon_Force(player, REGISTRY_GET(Weapons, item.weapon), weaponentity);
- }
- return true;
- }
-
- if(_switchweapon)
- {
- for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
- {
- .entity weaponentity = weaponentities[slot];
- if(_switchweapon & BIT(slot))
- if(player.(weaponentity).m_switchweapon != w_getbestweapon(player, weaponentity))
- W_SwitchWeapon_Force(player, w_getbestweapon(player, weaponentity), weaponentity);
- }
- }
-
- return true;
-}
-
-void Item_Touch(entity this, entity toucher)
-{
- // remove the item if it's currnetly in a NODROP brush or hits a NOIMPACT surface (such as sky)
- if (Item_IsLoot(this))
- {
- if (ITEM_TOUCH_NEEDKILL())
- {
- delete(this);
- return;
- }
- }
-
- if(!(toucher.flags & FL_PICKUPITEMS)
- || STAT(FROZEN, toucher)
- || IS_DEAD(toucher)
- || (this.solid != SOLID_TRIGGER)
- || (this.owner == toucher)
- || (time < this.item_spawnshieldtime)
- ) { return; }
-
- switch (MUTATOR_CALLHOOK(ItemTouch, this, toucher))
- {
- case MUT_ITEMTOUCH_RETURN: { return; }
- case MUT_ITEMTOUCH_PICKUP: { toucher = M_ARGV(1, entity); goto pickup; }
- }
-
- toucher = M_ARGV(1, entity);
-
- if (Item_IsExpiring(this))
- {
- this.strength_finished = max(0, this.strength_finished - time);
- this.invincible_finished = max(0, this.invincible_finished - time);
- this.superweapons_finished = max(0, this.superweapons_finished - time);
- }
- bool gave = ITEM_HANDLE(Pickup, this.itemdef, this, toucher);
- if (!gave)
- {
- if (Item_IsExpiring(this))
- {
- // undo what we did above
- this.strength_finished += time;
- this.invincible_finished += time;
- this.superweapons_finished += time;
- }
- return;
- }
-
-LABEL(pickup)
-
- if(this.target && this.target != "" && this.target != "###item###") // defrag support
- SUB_UseTargets(this, toucher, NULL);
-
- STAT(LAST_PICKUP, toucher) = time;
-
- Send_Effect(EFFECT_ITEM_PICKUP, CENTER_OR_VIEWOFS(this), '0 0 0', 1);
- _sound (toucher, (this.itemdef.instanceOfPowerup ? CH_TRIGGER_SINGLE : CH_TRIGGER), (this.item_pickupsound ? this.item_pickupsound : Sound_fixpath(this.item_pickupsound_ent)), VOL_BASE, ATTEN_NORM);
-
- MUTATOR_CALLHOOK(ItemTouched, this, toucher);
- if (wasfreed(this))
- {
- return;
- }
-
- if (Item_IsLoot(this))
- {
- delete(this);
- return;
- }
- if (!this.spawnshieldtime)
- {
- return;
- }
- entity e;
- if (this.team)
- {
- RandomSelection_Init();
- IL_EACH(g_items, it.team == this.team,
- {
- if (it.itemdef) // is a registered item
- {
- Item_Show(it, -1);
- it.scheduledrespawntime = 0;
- RandomSelection_AddEnt(it, it.cnt, 0);
- }
- });
- e = RandomSelection_chosen_ent;
- Item_Show(e, 1); // reset its state so it is visible (extra sendflags doesn't matter, this happens anyway)
- }
- else
- e = this;
- Item_ScheduleRespawn(e);
-}
-
-void Item_Reset(entity this)
-{
- Item_Show(this, !this.state);
- setorigin(this, this.origin);
-
- if (Item_IsLoot(this))
- {
- return;
- }
- setthink(this, Item_Think);
- this.nextthink = time;
- if (this.waypointsprite_attached)
- {
- WaypointSprite_Kill(this.waypointsprite_attached);
- }
- if (this.itemdef.instanceOfPowerup || (STAT(WEAPONS, this) & WEPSET_SUPERWEAPONS)) // do not spawn powerups initially!
- {
- Item_ScheduleInitialRespawn(this);
- }
-}
-
-void Item_FindTeam(entity this)
-{
- entity e;
-
- if(this.effects & EF_NODRAW)
- {
- // marker for item team search
- LOG_TRACE("Initializing item team ", ftos(this.team));
- RandomSelection_Init();
- IL_EACH(g_items, it.team == this.team,
- {
- if(it.itemdef) // is a registered item
- RandomSelection_AddEnt(it, it.cnt, 0);
- });
-
- e = RandomSelection_chosen_ent;
- if (!e)
- return;
-
- IL_EACH(g_items, it.team == this.team,
- {
- if(it.itemdef) // is a registered item
- {
- if(it != e)
- {
- // make it non-spawned
- Item_Show(it, -1);
- it.state = 1; // state 1 = initially hidden item, apparently
- }
- else
- Item_Reset(it);
- it.effects &= ~EF_NODRAW;
- }
- });
- }
-}
-
-// Savage: used for item garbage-collection
-void RemoveItem(entity this)
-{
- if(wasfreed(this) || !this) { return; }
- Send_Effect(EFFECT_ITEM_PICKUP, CENTER_OR_VIEWOFS(this), '0 0 0', 1);
- delete(this);
-}
-
-// pickup evaluation functions
-// these functions decide how desirable an item is to the bots
-
-float generic_pickupevalfunc(entity player, entity item) {return item.bot_pickupbasevalue;}
-
-float weapon_pickupevalfunc(entity player, entity item)
-{
- // See if I have it already
- if(STAT(WEAPONS, player) & STAT(WEAPONS, item))
- {
- // If I can pick it up
- if(!item.spawnshieldtime)
- return 0;
- return ammo_pickupevalfunc(player, item);
- }
-
- // reduce weapon value if bot already got a good arsenal
- float c = 1;
- int weapons_value = 0;
- FOREACH(Weapons, it != WEP_Null && (STAT(WEAPONS, player) & it.m_wepset), {
- weapons_value += it.bot_pickupbasevalue;
- });
- c -= bound(0, weapons_value / 20000, 1) * 0.5;
-
- return item.bot_pickupbasevalue * c;
-}
-
-float ammo_pickupevalfunc(entity player, entity item)
-{
- bool need_shells = false, need_nails = false, need_rockets = false, need_cells = false, need_plasma = false, need_fuel = false;
- entity wpn = NULL;
- float c = 0;
- float rating = 0;
-
- // Detect needed ammo
- if(item.itemdef.instanceOfWeaponPickup)
- {
- entity ammo = NULL;
- if(GetResource(item, RES_SHELLS)) { need_shells = true; ammo = ITEM_Shells; }
- else if(GetResource(item, RES_BULLETS)) { need_nails = true; ammo = ITEM_Bullets; }
- else if(GetResource(item, RES_ROCKETS)) { need_rockets = true; ammo = ITEM_Rockets; }
- else if(GetResource(item, RES_CELLS)) { need_cells = true; ammo = ITEM_Cells; }
- else if(GetResource(item, RES_PLASMA)) { need_plasma = true; ammo = ITEM_Plasma; }
- else if(GetResource(item, RES_FUEL)) { need_fuel = true; ammo = ITEM_JetpackFuel; }
-
- if(!ammo)
- return 0;
- wpn = item;
- rating = ammo.m_botvalue;
- }
- else
- {
- FOREACH(Weapons, it != WEP_Null, {
- if(!(STAT(WEAPONS, player) & (it.m_wepset)))
- continue;
-
- switch(it.ammo_type)
- {
- case RES_SHELLS: need_shells = true; break;
- case RES_BULLETS: need_nails = true; break;
- case RES_ROCKETS: need_rockets = true; break;
- case RES_CELLS: need_cells = true; break;
- case RES_PLASMA: need_plasma = true; break;
- case RES_FUEL: need_fuel = true; break;
- }
- });
- rating = item.bot_pickupbasevalue;
- }
-
- float noammorating = 0.5;
-
- if ((need_shells) && GetResource(item, RES_SHELLS) && (GetResource(player, RES_SHELLS) < g_pickup_shells_max))
- c = GetResource(item, RES_SHELLS) / max(noammorating, GetResource(player, RES_SHELLS));
-
- if ((need_nails) && GetResource(item, RES_BULLETS) && (GetResource(player, RES_BULLETS) < g_pickup_nails_max))
- c = GetResource(item, RES_BULLETS) / max(noammorating, GetResource(player, RES_BULLETS));
-
- if ((need_rockets) && GetResource(item, RES_ROCKETS) && (GetResource(player, RES_ROCKETS) < g_pickup_rockets_max))
- c = GetResource(item, RES_ROCKETS) / max(noammorating, GetResource(player, RES_ROCKETS));
-
- if ((need_cells) && GetResource(item, RES_CELLS) && (GetResource(player, RES_CELLS) < g_pickup_cells_max))
- c = GetResource(item, RES_CELLS) / max(noammorating, GetResource(player, RES_CELLS));
-
- if ((need_plasma) && GetResource(item, RES_PLASMA) && (GetResource(player, RES_PLASMA) < g_pickup_plasma_max))
- c = GetResource(item, RES_PLASMA) / max(noammorating, GetResource(player, RES_PLASMA));
-
- if ((need_fuel) && GetResource(item, RES_FUEL) && (GetResource(player, RES_FUEL) < g_pickup_fuel_max))
- c = GetResource(item, RES_FUEL) / max(noammorating, GetResource(player, RES_FUEL));
-
- rating *= min(c, 2);
- if(wpn)
- rating += wpn.bot_pickupbasevalue * 0.1;
- return rating;
-}
-
-float healtharmor_pickupevalfunc(entity player, entity item)
-{
- float c = 0;
- float rating = item.bot_pickupbasevalue;
-
- float itemarmor = GetResource(item, RES_ARMOR);
- float itemhealth = GetResource(item, RES_HEALTH);
-
- if(item.item_group)
- {
- itemarmor *= min(4, item.item_group_count);
- itemhealth *= min(4, item.item_group_count);
- }
-
- if (itemarmor && (GetResource(player, RES_ARMOR) < item.max_armorvalue))
- c = itemarmor / max(1, GetResource(player, RES_ARMOR) * 2/3 + GetResource(player, RES_HEALTH) * 1/3);
-
- if (itemhealth && (GetResource(player, RES_HEALTH) < item.max_health))
- c = itemhealth / max(1, GetResource(player, RES_HEALTH));
-
- rating *= min(2, c);
- return rating;
-}
-
-void Item_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force)
-{
- if(ITEM_DAMAGE_NEEDKILL(deathtype))
- RemoveItem(this);
-}
-
-void item_use(entity this, entity actor, entity trigger)
-{
- // use the touch function to handle collection
- gettouch(this)(this, actor);
-}
-
-void _StartItem(entity this, entity def, float defaultrespawntime, float defaultrespawntimejitter)
-{
- string itemname = def.m_name;
- Model itemmodel = def.m_model;
- Sound pickupsound = def.m_sound;
- float(entity player, entity item) pickupevalfunc = def.m_pickupevalfunc;
- float pickupbasevalue = def.m_botvalue;
- int itemflags = def.m_itemflags;
-
- startitem_failed = false;
-
- this.item_model_ent = itemmodel;
- this.item_pickupsound_ent = pickupsound;
-
- if(def.m_iteminit)
- def.m_iteminit(def, this);
-
- if(!this.respawntime) // both need to be set
- {
- this.respawntime = defaultrespawntime;
- this.respawntimejitter = defaultrespawntimejitter;
- }
-
- if(!this.pickup_anyway && def.m_pickupanyway)
- this.pickup_anyway = def.m_pickupanyway();
-
- int itemid = def.m_itemid;
- this.items = itemid;
- int weaponid = def.instanceOfWeaponPickup ? def.m_weapon.m_id : 0;
- this.weapon = weaponid;
-
- if(!this.fade_end)
- {
- this.fade_start = autocvar_g_items_mindist;
- this.fade_end = autocvar_g_items_maxdist;
- }
-
- if(weaponid)
- STAT(WEAPONS, this) = WepSet_FromWeapon(REGISTRY_GET(Weapons, weaponid));
-
- this.flags = FL_ITEM | itemflags;
- IL_PUSH(g_items, this);
-
- if(MUTATOR_CALLHOOK(FilterItem, this)) // error means we do not want the item
- {
- startitem_failed = true;
- delete(this);
- return;
- }
-
- precache_model(this.model);
- precache_sound(this.item_pickupsound);
-
- if (Item_IsLoot(this))
- {
- this.reset = SUB_Remove;
- set_movetype(this, MOVETYPE_TOSS);
-
- // Savage: remove thrown items after a certain period of time ("garbage collection")
- setthink(this, RemoveItem);
- this.nextthink = time + 20;
-
- this.takedamage = DAMAGE_YES;
- this.event_damage = Item_Damage;
-
- if (Item_IsExpiring(this))
- {
- // if item is worthless after a timer, have it expire then
- this.nextthink = max(this.strength_finished, this.invincible_finished, this.superweapons_finished);
- }
-
- // don't drop if in a NODROP zone (such as lava)
- traceline(this.origin, this.origin, MOVE_NORMAL, this);
- if (trace_dpstartcontents & DPCONTENTS_NODROP)
- {
- startitem_failed = true;
- delete(this);
- return;
- }
- }
- else
- {
- if(!have_pickup_item(this))
- {
- startitem_failed = true;
- delete(this);
- return;
- }
-
- if(this.angles != '0 0 0')
- this.SendFlags |= ISF_ANGLES;
-
- this.reset = Item_Reset;
- // it's a level item
- if(this.spawnflags & 1)
- this.noalign = 1;
- if (this.noalign > 0)
- set_movetype(this, MOVETYPE_NONE);
- else
- set_movetype(this, MOVETYPE_TOSS);
- // do item filtering according to game mode and other things
- if (this.noalign <= 0)
- {
- // first nudge it off the floor a little bit to avoid math errors
- setorigin(this, this.origin + '0 0 1');
- // set item size before we spawn a spawnfunc_waypoint
- setsize(this, def.m_mins, def.m_maxs);
- this.SendFlags |= ISF_SIZE;
- // note droptofloor returns false if stuck/or would fall too far
- if (!this.noalign)
- droptofloor(this);
- waypoint_spawnforitem(this);
- }
-
- /*
- * can't do it that way, as it would break maps
- * TODO make a target_give like entity another way, that perhaps has
- * the weapon name in a key
- if(this.targetname)
- {
- // target_give not yet supported; maybe later
- print("removed targeted ", this.classname, "\n");
- startitem_failed = true;
- delete(this);
- return;
- }
- */
-
- if(this.targetname != "" && (this.spawnflags & 16))
- this.use = item_use;
-
- if(autocvar_spawn_debug >= 2)
- {
- // why not flags & fl_item?
- FOREACH_ENTITY_RADIUS(this.origin, 3, it.is_item, {
- LOG_TRACE("XXX Found duplicated item: ", itemname, vtos(this.origin));
- LOG_TRACE(" vs ", it.netname, vtos(it.origin));
- error("Mapper sucks.");
- });
- this.is_item = true;
- }
-
- weaponsInMap |= WepSet_FromWeapon(REGISTRY_GET(Weapons, weaponid));
-
- if ( def.instanceOfPowerup
- || def.instanceOfWeaponPickup
- || (def.instanceOfHealth && def != ITEM_HealthSmall)
- || (def.instanceOfArmor && def != ITEM_ArmorSmall)
- || (itemid & (IT_KEY1 | IT_KEY2))
- )
- {
- if(!this.target || this.target == "")
- this.target = "###item###"; // for finding the nearest item using findnearest
- }
-
- Item_ItemsTime_SetTime(this, 0);
- }
-
- this.bot_pickup = true;
- this.bot_pickupevalfunc = pickupevalfunc;
- this.bot_pickupbasevalue = pickupbasevalue;
- this.mdl = this.model ? this.model : strzone(this.item_model_ent.model_str());
- this.netname = itemname;
- settouch(this, Item_Touch);
- setmodel(this, MDL_Null); // precision set below
- //this.effects |= EF_LOWPRECISION;
-
- setsize (this, this.pos1 = def.m_mins, this.pos2 = def.m_maxs);
-
- this.SendFlags |= ISF_SIZE;
-
- if (!(this.spawnflags & 1024)) {
- if(def.instanceOfPowerup)
- this.ItemStatus |= ITS_ANIMATE1;
-
- if(GetResource(this, RES_ARMOR) || GetResource(this, RES_HEALTH))
- this.ItemStatus |= ITS_ANIMATE2;
- }
-
- if(Item_IsLoot(this))
- this.gravity = 1;
-
- if(def.instanceOfWeaponPickup)
- {
- if (!Item_IsLoot(this)) // if dropped, colormap is already set up nicely
- this.colormap = 1024; // color shirt=0 pants=0 grey
- if (!(this.spawnflags & 1024))
- this.ItemStatus |= ITS_ANIMATE1;
- this.SendFlags |= ISF_COLORMAP;
- }
-
- this.state = 0;
- if(this.team)
- {
- if(!this.cnt)
- this.cnt = 1; // item probability weight
-
- this.effects |= EF_NODRAW; // marker for item team search
- InitializeEntity(this, Item_FindTeam, INITPRIO_FINDTARGET);
- }
- else
- Item_Reset(this);
-
- Net_LinkEntity(this, !(def.instanceOfPowerup || def.instanceOfHealth || def.instanceOfArmor), 0, ItemSend);
-
- // call this hook after everything else has been done
- if (MUTATOR_CALLHOOK(Item_Spawn, this))
- {
- startitem_failed = true;
- delete(this);
- return;
- }
-
- setItemGroup(this);
-}
-
-void StartItem(entity this, GameItem def)
-{
- def = def.m_spawnfunc_hookreplace(def, this);
- if (def.spawnflags & ITEM_FLAG_MUTATORBLOCKED)
- {
- delete(this);
- return;
- }
- this.classname = def.m_canonical_spawnfunc;
- _StartItem(
- this,
- this.itemdef = def,
- def.m_respawntime(), // defaultrespawntime
- def.m_respawntimejitter() // defaultrespawntimejitter
- );
-}
-
-#define IS_SMALL(def) ((def.instanceOfHealth && def == ITEM_HealthSmall) || (def.instanceOfArmor && def == ITEM_ArmorSmall))
-int group_count = 1;
-
-void setItemGroup(entity this)
-{
- if(!IS_SMALL(this.itemdef) || Item_IsLoot(this))
- return;
-
- FOREACH_ENTITY_RADIUS(this.origin, 120, (it != this) && IS_SMALL(it.itemdef),
- {
- if(!this.item_group)
- {
- if(!it.item_group)
- {
- it.item_group = group_count;
- group_count++;
- }
- this.item_group = it.item_group;
- }
- else // spawning item is already part of a item_group X
- {
- if(!it.item_group)
- it.item_group = this.item_group;
- else if(it.item_group != this.item_group) // found an item near the spawning item that is part of a different item_group Y
- {
- int grY = it.item_group;
- // move all items of item_group Y to item_group X
- IL_EACH(g_items, IS_SMALL(it.itemdef),
- {
- if(it.item_group == grY)
- it.item_group = this.item_group;
- });
- }
- }
- });
-}
-
-void setItemGroupCount()
-{
- for (int k = 1; k <= group_count; k++)
- {
- int count = 0;
- IL_EACH(g_items, IS_SMALL(it.itemdef) && it.item_group == k, { count++; });
- if (count)
- IL_EACH(g_items, IS_SMALL(it.itemdef) && it.item_group == k, { it.item_group_count = count; });
- }
-}
-
-void target_items_use(entity this, entity actor, entity trigger)
-{
- if(Item_IsLoot(actor))
- {
- EXACTTRIGGER_TOUCH(this, trigger);
- delete(actor);
- return;
- }
-
- if (!IS_PLAYER(actor) || IS_DEAD(actor))
- return;
-
- if(trigger.solid == SOLID_TRIGGER)
- {
- EXACTTRIGGER_TOUCH(this, trigger);
- }
-
- IL_EACH(g_items, it.enemy == actor && Item_IsLoot(it),
- {
- delete(it);
- });
-
- if(GiveItems(actor, 0, tokenize_console(this.netname)))
- centerprint(actor, this.message);
-}
-
-spawnfunc(target_items)
-{
- this.use = target_items_use;
- if(!this.strength_finished)
- this.strength_finished = autocvar_g_balance_powerup_strength_time;
- if(!this.invincible_finished)
- this.invincible_finished = autocvar_g_balance_powerup_invincible_time;
- if(!this.superweapons_finished)
- this.superweapons_finished = autocvar_g_balance_superweapons_time;
-
- string str;
- int n = tokenize_console(this.netname);
- if(argv(0) == "give")
- {
- str = substring(this.netname, argv_start_index(1), argv_end_index(-1) - argv_start_index(1));
- }
- else
- {
- for(int j = 0; j < n; ++j)
- {
- // this is from a time when unlimited superweapons were handled together with ammo in some parts of the code
- if (argv(j) == "unlimited_ammo") this.items |= IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS;
- else if(argv(j) == "unlimited_weapon_ammo") this.items |= IT_UNLIMITED_AMMO;
- else if(argv(j) == "unlimited_superweapons") this.items |= IT_UNLIMITED_SUPERWEAPONS;
- else if(argv(j) == "strength") this.items |= ITEM_Strength.m_itemid;
- else if(argv(j) == "invincible") this.items |= ITEM_Shield.m_itemid;
- else if(argv(j) == "superweapons") this.items |= IT_SUPERWEAPON;
- else if(argv(j) == "jetpack") this.items |= ITEM_Jetpack.m_itemid;
- else if(argv(j) == "fuel_regen") this.items |= ITEM_JetpackRegen.m_itemid;
- else
- {
- FOREACH(Buffs, it != BUFF_Null,
- {
- string s = Buff_UndeprecateName(argv(j));
- if(s == it.netname)
- {
- STAT(BUFFS, this) |= (it.m_itemid);
- if(!STAT(BUFF_TIME, this))
- STAT(BUFF_TIME, this) = it.m_time(it);
- break;
- }
- });
- FOREACH(Weapons, it != WEP_Null, {
- string s = W_UndeprecateName(argv(j));
- if(s == it.netname)
- {
- STAT(WEAPONS, this) |= (it.m_wepset);
- if(this.spawnflags == 0 || this.spawnflags == 2)
- it.wr_init(it);
- break;
- }
- });
- }
- }
-
- string itemprefix, valueprefix;
- if(this.spawnflags == 0)
- {
- itemprefix = "";
- valueprefix = "";
- }
- else if(this.spawnflags == 1)
- {
- itemprefix = "max ";
- valueprefix = "max ";
- }
- else if(this.spawnflags == 2)
- {
- itemprefix = "min ";
- valueprefix = "min ";
- }
- else if(this.spawnflags == 4)
- {
- itemprefix = "minus ";
- valueprefix = "max ";
- }
- else
- {
- error("invalid spawnflags");
- itemprefix = valueprefix = string_null;
- }
-
- str = "";
- str = sprintf("%s %s%d %s", str, itemprefix, boolean(this.items & IT_UNLIMITED_AMMO), "unlimited_weapon_ammo");
- str = sprintf("%s %s%d %s", str, itemprefix, boolean(this.items & IT_UNLIMITED_SUPERWEAPONS), "unlimited_superweapons");
- str = sprintf("%s %s%d %s", str, valueprefix, this.strength_finished * boolean(this.items & ITEM_Strength.m_itemid), "strength");
- str = sprintf("%s %s%d %s", str, valueprefix, this.invincible_finished * boolean(this.items & ITEM_Shield.m_itemid), "invincible");
- str = sprintf("%s %s%d %s", str, valueprefix, this.superweapons_finished * boolean(this.items & IT_SUPERWEAPON), "superweapons");
- str = sprintf("%s %s%d %s", str, itemprefix, boolean(this.items & ITEM_Jetpack.m_itemid), "jetpack");
- str = sprintf("%s %s%d %s", str, itemprefix, boolean(this.items & ITEM_JetpackRegen.m_itemid), "fuel_regen");
- float res;
- res = GetResource(this, RES_SHELLS); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "shells");
- res = GetResource(this, RES_BULLETS); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "nails");
- res = GetResource(this, RES_ROCKETS); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "rockets");
- res = GetResource(this, RES_CELLS); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "cells");
- res = GetResource(this, RES_PLASMA); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "plasma");
- res = GetResource(this, RES_FUEL); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "fuel");
- res = GetResource(this, RES_HEALTH); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "health");
- res = GetResource(this, RES_ARMOR); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "armor");
- // HACK: buffs share a single timer, so we need to include enabled buffs AFTER disabled ones to avoid loss
- FOREACH(Buffs, it != BUFF_Null && !(STAT(BUFFS, this) & it.m_itemid), str = sprintf("%s %s%d %s", str, valueprefix, max(0, STAT(BUFF_TIME, this)), it.netname));
- FOREACH(Buffs, it != BUFF_Null && (STAT(BUFFS, this) & it.m_itemid), str = sprintf("%s %s%d %s", str, valueprefix, max(0, STAT(BUFF_TIME, this)), it.netname));
- FOREACH(Weapons, it != WEP_Null, str = sprintf("%s %s%d %s", str, itemprefix, !!(STAT(WEAPONS, this) & (it.m_wepset)), it.netname));
- }
- this.netname = strzone(str);
-
- n = tokenize_console(this.netname);
- for(int j = 0; j < n; ++j)
- {
- FOREACH(Weapons, it != WEP_Null && W_UndeprecateName(argv(j)) == it.netname, {
- it.wr_init(it);
- break;
- });
- }
-}
-
-float GiveWeapon(entity e, float wpn, float op, float val)
-{
- WepSet v0, v1;
- WepSet s = WepSet_FromWeapon(REGISTRY_GET(Weapons, wpn));
- v0 = (STAT(WEAPONS, e) & s);
- switch(op)
- {
- case OP_SET:
- if(val > 0)
- STAT(WEAPONS, e) |= s;
- else
- STAT(WEAPONS, e) &= ~s;
- break;
- case OP_MIN:
- case OP_PLUS:
- if(val > 0)
- STAT(WEAPONS, e) |= s;
- break;
- case OP_MAX:
- if(val <= 0)
- STAT(WEAPONS, e) &= ~s;
- break;
- case OP_MINUS:
- if(val > 0)
- STAT(WEAPONS, e) &= ~s;
- break;
- }
- v1 = (STAT(WEAPONS, e) & s);
- return (v0 != v1);
-}
-
-bool GiveBuff(entity e, Buff thebuff, int op, int val)
-{
- bool had_buff = (STAT(BUFFS, e) & thebuff.m_itemid);
- float new_buff_time = ((had_buff) ? STAT(BUFF_TIME, e) : 0);
- switch (op)
- {
- case OP_SET:
- new_buff_time = val;
- break;
- case OP_MIN:
- new_buff_time = max(new_buff_time, val);
- break;
- case OP_MAX:
- new_buff_time = min(new_buff_time, val);
- break;
- case OP_PLUS:
- new_buff_time += val;
- break;
- case OP_MINUS:
- new_buff_time -= val;
- break;
- }
- if(new_buff_time <= 0)
- {
- if(had_buff)
- STAT(BUFF_TIME, e) = new_buff_time;
- STAT(BUFFS, e) &= ~thebuff.m_itemid;
- }
- else
- {
- STAT(BUFF_TIME, e) = new_buff_time;
- STAT(BUFFS, e) = thebuff.m_itemid; // NOTE: replaces any existing buffs on the player!
- }
- bool have_buff = (STAT(BUFFS, e) & thebuff.m_itemid);
- return (had_buff != have_buff);
-}
-
-void GiveSound(entity e, float v0, float v1, float t, Sound snd_incr, Sound snd_decr)
-{
- if(v1 == v0)
- return;
- if(v1 <= v0 - t)
- {
- if(snd_decr != NULL)
- sound (e, CH_TRIGGER, snd_decr, VOL_BASE, ATTEN_NORM);
- }
- else if(v0 >= v0 + t)
- {
- if(snd_incr != NULL)
- sound (e, CH_TRIGGER, snd_incr, VOL_BASE, ATTEN_NORM);
- }
-}
-
-void GiveRot(entity e, float v0, float v1, .float rotfield, float rottime, .float regenfield, float regentime)
-{
- if(v0 < v1)
- e.(rotfield) = max(e.(rotfield), time + rottime);
- else if(v0 > v1)
- e.(regenfield) = max(e.(regenfield), time + regentime);
-}
-bool GiveResourceValue(entity e, int res_type, int op, int val)
-{
- int v0 = GetResource(e, res_type);
- float new_val = 0;
- switch (op)
- {
- // min 100 cells = at least 100 cells
- case OP_SET: new_val = val; break;
- case OP_MIN: new_val = max(v0, val); break;
- case OP_MAX: new_val = min(v0, val); break;
- case OP_PLUS: new_val = v0 + val; break;
- case OP_MINUS: new_val = v0 - val; break;
- default: return false;
- }
-
- return SetResourceExplicit(e, res_type, new_val);
-}
-
-float GiveItems(entity e, float beginarg, float endarg)
-{
- float got, i, val, op;
- string cmd;
-
- val = 999;
- op = OP_SET;
-
- got = 0;
-
- int _switchweapon = 0;
-
- if(CS(e).autoswitch)
- {
- for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
- {
- .entity weaponentity = weaponentities[slot];
- if(e.(weaponentity).m_weapon != WEP_Null || slot == 0)
- if(e.(weaponentity).m_switchweapon == w_getbestweapon(e, weaponentity))
- _switchweapon |= BIT(slot);
- }
- }
-
- STAT(STRENGTH_FINISHED, e) = max(0, STAT(STRENGTH_FINISHED, e) - time);
- STAT(INVINCIBLE_FINISHED, e) = max(0, STAT(INVINCIBLE_FINISHED, e) - time);
- STAT(SUPERWEAPONS_FINISHED, e) = max(0, STAT(SUPERWEAPONS_FINISHED, e) - time);
- STAT(BUFF_TIME, e) = max(0, STAT(BUFF_TIME, e) - time);
-
- PREGIVE(e, items);
- PREGIVE_WEAPONS(e);
- PREGIVE(e, stat_STRENGTH_FINISHED);
- PREGIVE(e, stat_INVINCIBLE_FINISHED);
- PREGIVE(e, stat_SUPERWEAPONS_FINISHED);
- PREGIVE_RESOURCE(e, RES_BULLETS);
- PREGIVE_RESOURCE(e, RES_CELLS);
- PREGIVE_RESOURCE(e, RES_PLASMA);
- PREGIVE_RESOURCE(e, RES_SHELLS);
- PREGIVE_RESOURCE(e, RES_ROCKETS);
- PREGIVE_RESOURCE(e, RES_FUEL);
- PREGIVE_RESOURCE(e, RES_ARMOR);
- PREGIVE_RESOURCE(e, RES_HEALTH);
-
- for(i = beginarg; i < endarg; ++i)
- {
- cmd = argv(i);
-
- if(cmd == "0" || stof(cmd))
- {
- val = stof(cmd);
- continue;
- }
- switch(cmd)
- {
- case "no":
- op = OP_MAX;
- val = 0;
- continue;
- case "max":
- op = OP_MAX;
- continue;
- case "min":
- op = OP_MIN;
- continue;
- case "plus":
- op = OP_PLUS;
- continue;
- case "minus":
- op = OP_MINUS;
- continue;
- case "ALL":
- got += GiveBit(e, items, ITEM_JetpackRegen.m_itemid, op, val);
- got += GiveValue(e, stat_STRENGTH_FINISHED, op, val);
- got += GiveValue(e, stat_INVINCIBLE_FINISHED, op, val);
- got += GiveValue(e, stat_SUPERWEAPONS_FINISHED, op, val);
- got += GiveBit(e, items, IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS, op, val);
- case "all":
- got += GiveBit(e, items, ITEM_Jetpack.m_itemid, op, val);
- got += GiveResourceValue(e, RES_HEALTH, op, val);
- got += GiveResourceValue(e, RES_ARMOR, op, val);
- case "allweapons":
- FOREACH(Weapons, it != WEP_Null && !(it.spawnflags & (WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_SPECIALATTACK)), got += GiveWeapon(e, it.m_id, op, val));
- //case "allbuffs": // all buffs makes a player god, do not want!
- //FOREACH(Buffs, it != BUFF_Null, got += GiveBuff(e, it.m_itemid, op, val));
- case "allammo":
- got += GiveResourceValue(e, RES_CELLS, op, val);
- got += GiveResourceValue(e, RES_PLASMA, op, val);
- got += GiveResourceValue(e, RES_SHELLS, op, val);
- got += GiveResourceValue(e, RES_BULLETS, op, val);
- got += GiveResourceValue(e, RES_ROCKETS, op, val);
- got += GiveResourceValue(e, RES_FUEL, op, val);
- break;
- case "unlimited_ammo":
- // this is from a time when unlimited superweapons were handled together with ammo in some parts of the code
- got += GiveBit(e, items, IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS, op, val);
- break;
- case "unlimited_weapon_ammo":
- got += GiveBit(e, items, IT_UNLIMITED_AMMO, op, val);
- break;
- case "unlimited_superweapons":
- got += GiveBit(e, items, IT_UNLIMITED_SUPERWEAPONS, op, val);
- break;
- case "jetpack":
- got += GiveBit(e, items, ITEM_Jetpack.m_itemid, op, val);
- break;
- case "fuel_regen":
- got += GiveBit(e, items, ITEM_JetpackRegen.m_itemid, op, val);
- break;
- case "strength":
- got += GiveValue(e, stat_STRENGTH_FINISHED, op, val);
- break;
- case "invincible":
- got += GiveValue(e, stat_INVINCIBLE_FINISHED, op, val);
- break;
- case "superweapons":
- got += GiveValue(e, stat_SUPERWEAPONS_FINISHED, op, val);
- break;
- case "cells":
- got += GiveResourceValue(e, RES_CELLS, op, val);
- break;
- case "plasma":
- got += GiveResourceValue(e, RES_PLASMA, op, val);
- break;
- case "shells":
- got += GiveResourceValue(e, RES_SHELLS, op, val);
- break;
- case "nails":
- case "bullets":
- got += GiveResourceValue(e, RES_BULLETS, op, val);
- break;
- case "rockets":
- got += GiveResourceValue(e, RES_ROCKETS, op, val);
- break;
- case "health":
- got += GiveResourceValue(e, RES_HEALTH, op, val);
- break;
- case "armor":
- got += GiveResourceValue(e, RES_ARMOR, op, val);
- break;
- case "fuel":
- got += GiveResourceValue(e, RES_FUEL, op, val);
- break;
- default:
- FOREACH(Buffs, it != BUFF_Null && buff_Available(it) && Buff_UndeprecateName(cmd) == it.netname,
- {
- got += GiveBuff(e, it, op, val);
- break;
- });
- FOREACH(Weapons, it != WEP_Null && W_UndeprecateName(cmd) == it.netname, {
- got += GiveWeapon(e, it.m_id, op, val);
- break;
- });
- break;
- }
- val = 999;
- op = OP_SET;
- }
-
- POSTGIVE_BIT(e, items, ITEM_JetpackRegen.m_itemid, SND_ITEMPICKUP, SND_Null);
- POSTGIVE_BIT(e, items, IT_UNLIMITED_SUPERWEAPONS, SND_POWERUP, SND_POWEROFF);
- POSTGIVE_BIT(e, items, IT_UNLIMITED_AMMO, SND_POWERUP, SND_POWEROFF);
- POSTGIVE_BIT(e, items, ITEM_Jetpack.m_itemid, SND_ITEMPICKUP, SND_Null);
- FOREACH(Weapons, it != WEP_Null, {
- POSTGIVE_WEAPON(e, it, SND_WEAPONPICKUP, SND_Null);
- if(!(save_weapons & (it.m_wepset)))
- if(STAT(WEAPONS, e) & (it.m_wepset))
- it.wr_init(it);
- });
- POSTGIVE_VALUE(e, stat_STRENGTH_FINISHED, 1, SND_POWERUP, SND_POWEROFF);
- POSTGIVE_VALUE(e, stat_INVINCIBLE_FINISHED, 1, SND_Shield, SND_POWEROFF);
- //POSTGIVE_VALUE(e, stat_SUPERWEAPONS_FINISHED, 1, SND_Null, SND_Null);
- POSTGIVE_RESOURCE(e, RES_BULLETS, 0, SND_ITEMPICKUP, SND_Null);
- POSTGIVE_RESOURCE(e, RES_CELLS, 0, SND_ITEMPICKUP, SND_Null);
- POSTGIVE_RESOURCE(e, RES_PLASMA, 0, SND_ITEMPICKUP, SND_Null);
- POSTGIVE_RESOURCE(e, RES_SHELLS, 0, SND_ITEMPICKUP, SND_Null);
- POSTGIVE_RESOURCE(e, RES_ROCKETS, 0, SND_ITEMPICKUP, SND_Null);
- POSTGIVE_RES_ROT(e, RES_FUEL, 1, pauserotfuel_finished, autocvar_g_balance_pause_fuel_rot, pauseregen_finished, autocvar_g_balance_pause_fuel_regen, SND_ITEMPICKUP, SND_Null);
- POSTGIVE_RES_ROT(e, RES_ARMOR, 1, pauserotarmor_finished, autocvar_g_balance_pause_armor_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, SND_ARMOR25, SND_Null);
- POSTGIVE_RES_ROT(e, RES_HEALTH, 1, pauserothealth_finished, autocvar_g_balance_pause_health_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, SND_MEGAHEALTH, SND_Null);
-
- if(STAT(SUPERWEAPONS_FINISHED, e) <= 0)
- if(!g_weaponarena && (STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS))
- STAT(SUPERWEAPONS_FINISHED, e) = autocvar_g_balance_superweapons_time;
-
- if(STAT(STRENGTH_FINISHED, e) <= 0)
- STAT(STRENGTH_FINISHED, e) = 0;
- else
- STAT(STRENGTH_FINISHED, e) += time;
- if(STAT(INVINCIBLE_FINISHED, e) <= 0)
- STAT(INVINCIBLE_FINISHED, e) = 0;
- else
- STAT(INVINCIBLE_FINISHED, e) += time;
- if(STAT(SUPERWEAPONS_FINISHED, e) <= 0)
- STAT(SUPERWEAPONS_FINISHED, e) = 0;
- else
- STAT(SUPERWEAPONS_FINISHED, e) += time;
- if(STAT(BUFF_TIME, e) <= 0)
- STAT(BUFF_TIME, e) = 0;
- else
- STAT(BUFF_TIME, e) += time;
-
- for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
- {
- .entity weaponentity = weaponentities[slot];
- if(e.(weaponentity).m_weapon != WEP_Null || slot == 0)
- if(!(STAT(WEAPONS, e) & WepSet_FromWeapon(e.(weaponentity).m_switchweapon)))
- _switchweapon |= BIT(slot);
- }
-
- if(_switchweapon)
- {
- for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
- {
- .entity weaponentity = weaponentities[slot];
- if(_switchweapon & BIT(slot))
- {
- Weapon wep = w_getbestweapon(e, weaponentity);
- if(wep != e.(weaponentity).m_switchweapon)
- W_SwitchWeapon_Force(e, wep, weaponentity);
- }
- }
- }
-
- return got;
-}
-#endif
+++ /dev/null
-#pragma once
-
-const int AMMO_COUNT = 4; // amount of ammo types to show in the ammo panel
-
-// item networking
-const int ISF_LOCATION = BIT(1);
-const int ISF_MODEL = BIT(2);
-const int ISF_STATUS = BIT(3);
- const int ITS_STAYWEP = BIT(0);
- const int ITS_ANIMATE1 = BIT(1);
- const int ITS_ANIMATE2 = BIT(2);
- const int ITS_AVAILABLE = BIT(3);
- const int ITS_ALLOWFB = BIT(4);
- const int ITS_ALLOWSI = BIT(5);
- const int ITS_GLOW = BIT(6);
-const int ISF_COLORMAP = BIT(4);
-const int ISF_DROP = BIT(5);
-const int ISF_ANGLES = BIT(6);
-const int ISF_SIZE = BIT(7);
-
-.int ItemStatus;
-
-.float onground_time;
-.float fade_start;
-.float fade_end;
-
-#ifdef SVQC
-void StartItem(entity this, entity a);
-.int item_group;
-.int item_group_count;
-#endif
-
-#ifdef CSQC
-
-bool autocvar_cl_items_nofade;
-float autocvar_cl_animate_items = 1;
-float autocvar_cl_ghost_items = 0.45;
-vector autocvar_cl_ghost_items_color = '-1 -1 -1';
-vector autocvar_cl_weapon_stay_color = '2 0.5 0.5';
-float autocvar_cl_weapon_stay_alpha = 0.75;
-float autocvar_cl_simple_items = 0;
-string autocvar_cl_simpleitems_postfix = "_simple";
-.float spawntime;
-.float gravity;
-.vector colormod;
-
-void ItemDraw(entity this);
-
-#endif
-#ifdef SVQC
-
-float autocvar_sv_simple_items;
-bool ItemSend(entity this, entity to, int sf);
-
-bool have_pickup_item(entity this);
-
-const float ITEM_RESPAWN_TICKS = 10;
-
-.float max_armorvalue;
-.float pickup_anyway;
-
-.float item_respawncounter;
-
-void Item_Show (entity e, int mode);
-
-void Item_Respawn (entity this);
-
-void Item_RespawnCountdown(entity this);
-void Item_ScheduleRespawnIn(entity e, float t);
-
-void Item_ScheduleRespawn(entity e);
-
-void Item_ScheduleInitialRespawn(entity e);
-
-/// \brief Give several random weapons and ammo to the entity.
-/// \param[in,out] receiver Entity to give weapons to.
-/// \param[in] num_weapons Number of weapons to give.
-/// \param[in] weapon_names Names of weapons to give separated by spaces.
-/// \param[in] ammo Entity containing the ammo amount for each possible weapon.
-/// \return No return.
-void GiveRandomWeapons(entity receiver, int num_weapons, string weapon_names, entity ammo_entity);
-
-bool Item_GiveAmmoTo(entity item, entity player, int res_type, float ammomax);
-
-bool Item_GiveTo(entity item, entity player);
-
-void Item_Touch(entity this, entity toucher);
-
-void Item_Reset(entity this);
-
-void Item_FindTeam(entity this);
-// Savage: used for item garbage-collection
-
-bool ItemSend(entity this, entity to, int sf);
-void ItemUpdate(entity this);
-
-void UpdateItemAfterTeleport(entity this);
-
-// pickup evaluation functions
-// these functions decide how desirable an item is to the bots
-
-float generic_pickupevalfunc(entity player, entity item);// {return item.bot_pickupbasevalue;} // WEAPONTODO
-
-float weapon_pickupevalfunc(entity player, entity item);
-float ammo_pickupevalfunc(entity player, entity item);
-float healtharmor_pickupevalfunc(entity player, entity item);
-
-.bool is_item;
-.entity itemdef;
-void _StartItem(entity this, entity def, float defaultrespawntime, float defaultrespawntimejitter);
-
-void setItemGroup(entity this);
-void setItemGroupCount();
-
-float GiveWeapon(entity e, float wpn, float op, float val);
-
-float GiveBit(entity e, .float fld, float bit, float op, float val);
-
-float GiveValue(entity e, .float fld, float op, float val);
-
-void GiveSound(entity e, float v0, float v1, float t, Sound snd_incr, Sound snd_decr);
-
-void GiveRot(entity e, float v0, float v1, .float rotfield, float rottime, .float regenfield, float regentime);
-
-spawnfunc(target_items);
-
-#define PREGIVE_WEAPONS(e) WepSet save_weapons; save_weapons = STAT(WEAPONS, e)
-#define PREGIVE(e,f) float save_##f; save_##f = (e).f
-#define PREGIVE_RESOURCE(e,f) float save_##f = GetResource((e), (f))
-#define POSTGIVE_WEAPON(e,b,snd_incr,snd_decr) GiveSound((e), !!(save_weapons & WepSet_FromWeapon(b)), !!(STAT(WEAPONS, e) & WepSet_FromWeapon(b)), 0, snd_incr, snd_decr)
-#define POSTGIVE_BIT(e,f,b,snd_incr,snd_decr) GiveSound((e), save_##f & (b), (e).f & (b), 0, snd_incr, snd_decr)
-#define POSTGIVE_RESOURCE(e,f,t,snd_incr,snd_decr) GiveSound((e), save_##f, GetResource((e), (f)), t, snd_incr, snd_decr)
-#define POSTGIVE_RES_ROT(e,f,t,rotfield,rottime,regenfield,regentime,snd_incr,snd_decr) GiveRot((e),save_##f,GetResource((e),(f)),rotfield,rottime,regenfield,regentime);GiveSound((e),save_##f,GetResource((e),(f)),t,snd_incr,snd_decr)
-#define POSTGIVE_VALUE(e,f,t,snd_incr,snd_decr) GiveSound((e), save_##f, (e).f, t, snd_incr, snd_decr)
-#define POSTGIVE_VALUE_ROT(e,f,t,rotfield,rottime,regenfield,regentime,snd_incr,snd_decr) GiveRot((e), save_##f, (e).f, rotfield, rottime, regenfield, regentime); GiveSound((e), save_##f, (e).f, t, snd_incr, snd_decr)
-
-float GiveItems(entity e, float beginarg, float endarg);
-#endif
this.origin = ReadVector();
setorigin(this, this.origin);
- this.angles_x = ReadAngle();
- this.angles_y = ReadAngle();
+ this.angles = ReadAngleVector2D();
turret_construct(this, isnew);
this.colormap = 1024;
#include "sv_turrets.qh"
#ifdef SVQC
#include <server/autocvars.qh>
+#include <server/g_damage.qh>
+#include <server/weapons/weaponsystem.qh>
+#include <common/mapobjects/defs.qh>
// Generic aiming
vector turret_aim_generic(entity this)
bool turret_send(entity this, entity to, float sf)
{
-
WriteHeader(MSG_ENTITY, ENT_CLIENT_TURRET);
WriteByte(MSG_ENTITY, sf);
if(sf & TNSF_SETUP)
WriteVector(MSG_ENTITY, this.origin);
- WriteAngle(MSG_ENTITY, this.angles_x);
- WriteAngle(MSG_ENTITY, this.angles_y);
+ WriteAngleVector2D(MSG_ENTITY, this.angles);
}
if(sf & TNSF_ANG)
this.event_damage = func_null;
#ifdef TURRET_DEBUG
float d;
- d = RadiusDamage (this, this.owner, this.owner.shot_dmg, 0, this.owner.shot_radius, this, NULL, this.owner.shot_force, this.totalfrags, DMG_NOWEP, NULL);
+ d = RadiusDamage (this, this.owner, this.owner.shot_dmg, 0, this.owner.shot_radius, this, NULL, this.owner.shot_force, this.projectiledeathtype, DMG_NOWEP, NULL);
this.owner.tur_debug_dmg_t_h = this.owner.tur_debug_dmg_t_h + d;
this.owner.tur_debug_dmg_t_f = this.owner.tur_debug_dmg_t_f + this.owner.shot_dmg;
#else
- RadiusDamage (this, this.realowner, this.owner.shot_dmg, 0, this.owner.shot_radius, this, NULL, this.owner.shot_force, this.totalfrags, DMG_NOWEP, NULL);
+ RadiusDamage (this, this.realowner, this.owner.shot_dmg, 0, this.owner.shot_radius, this, NULL, this.owner.shot_force, this.projectiledeathtype, DMG_NOWEP, NULL);
#endif
delete(this);
}
IL_PUSH(g_projectiles, proj);
IL_PUSH(g_bot_dodge, proj);
proj.enemy = actor.enemy;
- proj.totalfrags = _death;
+ proj.projectiledeathtype = _death;
PROJECTILE_MAKETRIGGER(proj);
if(_health)
{
setorigin(this, this.enemy.origin + randomvec() * this.owner.shot_radius);
#ifdef TURRET_DEBUG
- float d = RadiusDamage (this, this.owner, this.owner.shot_dmg, this.owner.shot_dmg, this.owner.shot_radius, this, NULL, this.owner.shot_force, this.totalfrags, DMG_NOWEP, NULL);
+ float d = RadiusDamage (this, this.owner, this.owner.shot_dmg, this.owner.shot_dmg, this.owner.shot_radius, this, NULL, this.owner.shot_force, this.projectiledeathtype, DMG_NOWEP, NULL);
this.owner.tur_debug_dmg_t_h = this.owner.tur_debug_dmg_t_h + d;
this.owner.tur_debug_dmg_t_f = this.owner.tur_debug_dmg_t_f + this.owner.shot_dmg;
#else
- RadiusDamage (this, this.realowner, this.owner.shot_dmg, this.owner.shot_dmg, this.owner.shot_radius, this, NULL, this.owner.shot_force, this.totalfrags, DMG_NOWEP, NULL);
+ RadiusDamage (this, this.realowner, this.owner.shot_dmg, this.owner.shot_dmg, this.owner.shot_radius, this, NULL, this.owner.shot_force, this.projectiledeathtype, DMG_NOWEP, NULL);
#endif
delete(this);
}
actor.tur_head = actor;
weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, 0, w_ready);
}
- fireBullet(actor, weaponentity, actor.tur_shotorg, actor.tur_shotdir_updated, actor.shot_spread, 0, actor.shot_dmg, actor.shot_force, DEATH_TURRET_MACHINEGUN.m_id, EFFECT_BULLET);
+ fireBullet(actor, weaponentity, actor.tur_shotorg, actor.tur_shotdir_updated, actor.shot_spread, 0, actor.shot_dmg, 0, actor.shot_force, DEATH_TURRET_MACHINEGUN.m_id, EFFECT_BULLET);
W_MuzzleFlash_Model(actor.(weaponentity), MDL_MACHINEGUN_MUZZLEFLASH);
setattachment(actor.(weaponentity).muzzle_flash, actor.tur_head, "tag_fire");
}
if(MUTATOR_IS_ENABLED(mutator_instagib))
{
.entity weaponentity = weaponentities[0]; // TODO: unhardcode
- FireRailgunBullet (it, weaponentity, it.tur_shotorg, it.tur_shotorg + it.tur_shotdir_updated * max_shot_distance, 10000000000,
+ FireRailgunBullet (it, weaponentity, it.tur_shotorg, it.tur_shotorg + it.tur_shotdir_updated * max_shot_distance, 10000000000, false,
800, 0, 0, 0, 0, DEATH_TURRET_PLASMA.m_id);
Send_Effect(EFFECT_VORTEX_MUZZLEFLASH, it.tur_shotorg, it.tur_shotdir_updated * 1000, 1);
{
if (MUTATOR_IS_ENABLED(mutator_instagib)) {
.entity weaponentity = weaponentities[0]; // TODO: unhardcode
- FireRailgunBullet (it, weaponentity, it.tur_shotorg, it.tur_shotorg + it.tur_shotdir_updated * max_shot_distance, 10000000000,
+ FireRailgunBullet (it, weaponentity, it.tur_shotorg, it.tur_shotorg + it.tur_shotdir_updated * max_shot_distance, 10000000000, false,
800, 0, 0, 0, 0, DEATH_TURRET_PLASMA.m_id);
weapon_thinkf(actor, weaponentity, WFRAME_FIRE1, WEP_CVAR_PRI(electro, animtime), w_ready);
}
sound (actor, CH_WEAPON_A, SND_UZI_FIRE, VOL_BASE, ATTEN_NORM);
- fireBullet(actor, weaponentity, actor.tur_shotorg, actor.tur_shotdir_updated, actor.shot_spread, 0, actor.shot_dmg, actor.shot_force, DEATH_TURRET_WALK_GUN.m_id, EFFECT_BULLET);
+ fireBullet(actor, weaponentity, actor.tur_shotorg, actor.tur_shotdir_updated, actor.shot_spread, 0, actor.shot_dmg, 0, actor.shot_force, DEATH_TURRET_WALK_GUN.m_id, EFFECT_BULLET);
Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, actor.tur_shotorg, actor.tur_shotdir_updated * 1000, 1);
}
}
#include "sv_vehicles.qh"
+#include <server/g_damage.qh>
+#include <common/mapobjects/defs.qh>
+
bool SendAuxiliaryXhair(entity this, entity to, int sf)
{
WriteHeader(MSG_ENTITY, ENT_CLIENT_AUXILIARYXHAIR);
PROJECTILE_TOUCH(this, toucher);
this.event_damage = func_null;
- RadiusDamage (this, this.realowner, this.shot_dmg, 0, this.shot_radius, this, NULL, this.shot_force, this.totalfrags, DMG_NOWEP, toucher);
+ RadiusDamage (this, this.realowner, this.shot_dmg, 0, this.shot_radius, this, NULL, this.shot_force, this.projectiledeathtype, DMG_NOWEP, toucher);
delete(this);
}
proj.shot_dmg = _dmg;
proj.shot_radius = _radi;
proj.shot_force = _force;
- proj.totalfrags = _deahtype;
+ proj.projectiledeathtype = _deahtype;
proj.solid = SOLID_BBOX;
set_movetype(proj, MOVETYPE_FLYMISSILE);
proj.flags = FL_PROJECTILE;
WriteByte (MSG_ONE, SVC_SETVIEWPORT);
WriteEntity( MSG_ONE, player);
+ // NOTE: engine networked
WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
WriteAngle(MSG_ONE, 0);
WriteAngle(MSG_ONE, vehic.angles_y);
veh.vehicle_hudmodel.viewmodelforclient = pl;
- pl.crouch = false;
+ UNSET_DUCKED(pl);
pl.view_ofs = STAT(PL_VIEW_OFS, pl);
setsize(pl, STAT(PL_MIN, pl), STAT(PL_MAX, pl));
WriteByte (MSG_ONE, SVC_SETVIEWPORT);
WriteEntity(MSG_ONE, veh.vehicle_viewport);
+ // NOTE: engine networked
WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
if(veh.tur_head)
{
WriteByte(MSG_ONE, SVC_SETVIEWPORT);
WriteEntity(MSG_ONE, player);
+ // NOTE: engine networked
WriteByte(MSG_ONE, SVC_SETVIEWANGLES);
WriteAngle(MSG_ONE, 0);
WriteAngle(MSG_ONE, vehic.angles.y);
WriteByte(MSG_ONE, SVC_SETVIEWPORT);
WriteEntity(MSG_ONE, gunner.vehicle_viewport);
+ // NOTE: engine networked
WriteByte(MSG_ONE, SVC_SETVIEWANGLES);
WriteAngle(MSG_ONE, gunner.angles_x + vehic.angles_x); // tilt
WriteAngle(MSG_ONE, gunner.angles_y + vehic.angles_y); // yaw
#include "racer.qh"
+#if defined(SVQC)
+ #include <common/gamemodes/gamemode/ctf/sv_ctf.qh>
+#endif
+
#ifdef GAMEQC
#ifdef SVQC
#include "raptor.qh"
+#if defined(SVQC)
+ #include <common/gamemodes/gamemode/ctf/sv_ctf.qh>
+#endif
+
#ifdef GAMEQC
#ifdef SVQC
bool incoming = false;
IL_EACH(g_projectiles, it.enemy == vehic,
{
- if(MISSILE_IS_TRACKING(it))
+ if(it.missile_flags & MIF_GUIDED_TRACKING)
if(vdist(vehic.origin - it.origin, <, 2 * autocvar_g_vehicle_raptor_flare_range))
{
incoming = true;
if(incoming)
{
msg_entity = this;
- soundto(MSG_ONE, vehic, CH_PAIN_SINGLE, SND(VEH_MISSILE_ALARM), VOL_BASE, ATTEN_NONE);
+ soundto(MSG_ONE, vehic, CH_PAIN_SINGLE, SND(VEH_MISSILE_ALARM), VOL_BASE, ATTEN_NONE, 0);
}
vehic.bomb1.cnt = time + 1;
#include "spiderbot.qh"
+#if defined(SVQC)
+ #include <common/gamemodes/gamemode/ctf/sv_ctf.qh>
+#endif
+
#ifdef GAMEQC
const int SBRM_FIRST = 1;
.entity weaponentity = weaponentities[0]; // TODO: unhardcode
fireBullet(this, weaponentity, v, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_solidpenetration,
- autocvar_g_vehicle_spiderbot_minigun_damage, autocvar_g_vehicle_spiderbot_minigun_force, DEATH_VH_SPID_MINIGUN.m_id, EFFECT_BULLET);
+ autocvar_g_vehicle_spiderbot_minigun_damage, 0, autocvar_g_vehicle_spiderbot_minigun_force, DEATH_VH_SPID_MINIGUN.m_id, EFFECT_BULLET);
sound (gun, CH_WEAPON_A, SND_UZI_FIRE, VOL_BASE, ATTEN_NORM);
//trailparticles(this, _particleeffectnum("spiderbot_minigun_trail"), v, trace_endpos);
#include "config.qh"
#include <server/weapons/csqcprojectile.qh>
#include <server/weapons/tracing.qh>
- #include "../t_items.qh"
+ #include <server/items/spawning.qh>
#include <server/autocvars.qh>
#include <server/constants.qh>
#include <server/defs.qh>
vector md = wepent.movedir_aligned;
vector vecs = ((md.x > 0) ? md : '0 0 0');
- vector dv = right * -vecs.y + up * vecs.z;
+ vector dv = forward * vecs.x + right * -vecs.y + up * vecs.z;
vector org = rlplayer.origin + rlplayer.view_ofs + dv;
- tracebox(org, '0 0 0', '0 0 0', org + forward * (vecs.x + 1), MOVE_NORMAL, rlplayer);
- org = trace_endpos - forward * 1;
pointparticles(thiswep.m_muzzleeffect, org, forward * 1000, 1);
}
if(sf & ARC_SF_BEAMDIR) // beam direction
{
- WriteAngle(MSG_ENTITY, this.beam_dir.x);
- WriteAngle(MSG_ENTITY, this.beam_dir.y);
- WriteAngle(MSG_ENTITY, this.beam_dir.z);
+ WriteAngleVector(MSG_ENTITY, this.beam_dir);
}
if(sf & ARC_SF_BEAMTYPE) // beam type
{
if(sf & ARC_SF_BEAMDIR) // beam direction
{
- this.angles_x = ReadAngle();
- this.angles_y = ReadAngle();
- this.angles_z = ReadAngle();
+ this.angles = ReadAngleVector();
}
if(sf & ARC_SF_BEAMTYPE) // beam type
spread = WEP_CVAR_PRI(hlac, spread_min) + (WEP_CVAR_PRI(hlac, spread_add) * actor.(weaponentity).misc_bulletcounter);
spread = min(spread,WEP_CVAR_PRI(hlac, spread_max));
- if(actor.crouch)
+ if(IS_DUCKED(actor))
spread = spread * WEP_CVAR_PRI(hlac, spread_crouchmod);
W_SetupShot(actor, weaponentity, false, 3, SND_LASERGUN_FIRE, CH_WEAPON_A, WEP_CVAR_PRI(hlac, damage), thiswep.m_id);
spread = WEP_CVAR_SEC(hlac, spread);
- if(actor.crouch)
+ if(IS_DUCKED(actor))
spread = spread * WEP_CVAR_SEC(hlac, spread_crouchmod);
W_SetupShot(actor, weaponentity, false, 3, SND_LASERGUN_FIRE, CH_WEAPON_A, WEP_CVAR_SEC(hlac, damage), thiswep.m_id | HITTYPE_SECONDARY);
ATTACK_FINISHED(actor, weaponentity) = time + WEP_CVAR(machinegun, first_refire) * W_WeaponRateFactor(actor);
if(actor.(weaponentity).misc_bulletcounter == 1)
- fireBullet(actor, weaponentity, w_shotorg, w_shotdir, WEP_CVAR(machinegun, first_spread), WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, first_damage), WEP_CVAR(machinegun, first_force), deathtype, EFFECT_BULLET);
+ fireBullet(actor, weaponentity, w_shotorg, w_shotdir, WEP_CVAR(machinegun, first_spread), WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, first_damage), 0, WEP_CVAR(machinegun, first_force), deathtype, EFFECT_BULLET);
else
- fireBullet(actor, weaponentity, w_shotorg, w_shotdir, WEP_CVAR(machinegun, sustained_spread), WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, sustained_damage), WEP_CVAR(machinegun, sustained_force), deathtype, EFFECT_BULLET);
+ fireBullet(actor, weaponentity, w_shotorg, w_shotdir, WEP_CVAR(machinegun, sustained_spread), WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, sustained_damage), 0, WEP_CVAR(machinegun, sustained_force), deathtype, EFFECT_BULLET);
W_MuzzleFlash(thiswep, actor, weaponentity, w_shotorg, w_shotdir);
}
machinegun_spread = bound(WEP_CVAR(machinegun, spread_min), WEP_CVAR(machinegun, spread_min) + (WEP_CVAR(machinegun, spread_add) * actor.(weaponentity).misc_bulletcounter), WEP_CVAR(machinegun, spread_max));
- fireBullet(actor, weaponentity, w_shotorg, w_shotdir, machinegun_spread, WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, sustained_damage), WEP_CVAR(machinegun, sustained_force), thiswep.m_id, EFFECT_BULLET);
+ fireBullet(actor, weaponentity, w_shotorg, w_shotdir, machinegun_spread, WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, sustained_damage), 0, WEP_CVAR(machinegun, sustained_force), thiswep.m_id, EFFECT_BULLET);
actor.(weaponentity).misc_bulletcounter = actor.(weaponentity).misc_bulletcounter + 1;
actor.punchangle_y = random() - 0.5;
}
- fireBullet(actor, weaponentity, w_shotorg, w_shotdir, WEP_CVAR(machinegun, burst_spread), WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, sustained_damage), WEP_CVAR(machinegun, sustained_force), thiswep.m_id, EFFECT_BULLET);
+ fireBullet(actor, weaponentity, w_shotorg, w_shotdir, WEP_CVAR(machinegun, burst_spread), WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, sustained_damage), 0, WEP_CVAR(machinegun, sustained_force), thiswep.m_id, EFFECT_BULLET);
W_MuzzleFlash(thiswep, actor, weaponentity, w_shotorg, w_shotdir);
.float porto_forbidden;
void W_Porto_Fail(entity this, float failhard);
+void W_Porto_Remove (entity p);
#endif
#ifdef SVQC
-void W_Rifle_FireBullet(Weapon thiswep, .entity weaponentity, float pSpread, float pDamage, float pForce, float pSolidPenetration, float pAmmo, int deathtype, float pTracer, float pShots, Sound pSound, entity actor)
+void W_Rifle_FireBullet(Weapon thiswep, .entity weaponentity, float pSpread, float pDamage, float pHeadshotDamage, float pForce, float pSolidPenetration, float pAmmo, int deathtype, float pTracer, float pShots, Sound pSound, entity actor)
{
float i;
}
for(i = 0; i < pShots; ++i)
- fireBullet(actor, weaponentity, w_shotorg, w_shotdir, pSpread, pSolidPenetration, pDamage, pForce, deathtype, (pTracer ? EFFECT_RIFLE : EFFECT_RIFLE_WEAK));
+ fireBullet(actor, weaponentity, w_shotorg, w_shotdir, pSpread, pSolidPenetration, pDamage, pHeadshotDamage, pForce, deathtype, (pTracer ? EFFECT_RIFLE : EFFECT_RIFLE_WEAK));
if(autocvar_g_casings >= 2)
{
void W_Rifle_Attack(Weapon thiswep, entity actor, .entity weaponentity)
{
- W_Rifle_FireBullet(thiswep, weaponentity, WEP_CVAR_PRI(rifle, spread), WEP_CVAR_PRI(rifle, damage), WEP_CVAR_PRI(rifle, force), WEP_CVAR_PRI(rifle, solidpenetration), WEP_CVAR_PRI(rifle, ammo), thiswep.m_id, WEP_CVAR_PRI(rifle, tracer), WEP_CVAR_PRI(rifle, shots), SND_CAMPINGRIFLE_FIRE, actor);
+ W_Rifle_FireBullet(thiswep, weaponentity, WEP_CVAR_PRI(rifle, spread), WEP_CVAR_PRI(rifle, damage), WEP_CVAR_PRI(rifle, headshot_multiplier), WEP_CVAR_PRI(rifle, force), WEP_CVAR_PRI(rifle, solidpenetration), WEP_CVAR_PRI(rifle, ammo), thiswep.m_id, WEP_CVAR_PRI(rifle, tracer), WEP_CVAR_PRI(rifle, shots), SND_CAMPINGRIFLE_FIRE, actor);
}
void W_Rifle_Attack2(Weapon thiswep, entity actor, .entity weaponentity)
{
- W_Rifle_FireBullet(thiswep, weaponentity, WEP_CVAR_SEC(rifle, spread), WEP_CVAR_SEC(rifle, damage), WEP_CVAR_SEC(rifle, force), WEP_CVAR_SEC(rifle, solidpenetration), WEP_CVAR_SEC(rifle, ammo), thiswep.m_id | HITTYPE_SECONDARY, WEP_CVAR_SEC(rifle, tracer), WEP_CVAR_SEC(rifle, shots), SND_CAMPINGRIFLE_FIRE2, actor);
+ W_Rifle_FireBullet(thiswep, weaponentity, WEP_CVAR_SEC(rifle, spread), WEP_CVAR_SEC(rifle, damage), WEP_CVAR_SEC(rifle, headshot_multiplier), WEP_CVAR_SEC(rifle, force), WEP_CVAR_SEC(rifle, solidpenetration), WEP_CVAR_SEC(rifle, ammo), thiswep.m_id | HITTYPE_SECONDARY, WEP_CVAR_SEC(rifle, tracer), WEP_CVAR_SEC(rifle, shots), SND_CAMPINGRIFLE_FIRE2, actor);
}
.void(Weapon thiswep, entity actor, .entity weaponentity) rifle_bullethail_attackfunc;
P(class, prefix, bursttime, float, NONE) \
P(class, prefix, damage, float, BOTH) \
P(class, prefix, force, float, BOTH) \
+ P(class, prefix, headshot_multiplier, float, BOTH) \
P(class, prefix, refire, float, BOTH) \
P(class, prefix, reload, float, SEC) \
P(class, prefix, reload_ammo, float, NONE) \
antilag_takeback_all(actor, lag);
for(int sc = 0;sc < bullets;sc = sc + 1)
- fireBullet_antilag(actor, weaponentity, w_shotorg, w_shotdir, spread, solidpenetration, damage, force, thiswep.m_id, bullet_trail_effect, false);
+ fireBullet_antilag(actor, weaponentity, w_shotorg, w_shotdir, spread, solidpenetration, damage, 0, force, thiswep.m_id, bullet_trail_effect, false);
if(lag && bullets > 0)
antilag_restore_all(actor);
yoda = 0;
damage_goodhits = 0;
- FireRailgunBullet(actor, weaponentity, w_shotorg, w_shotorg + w_shotdir * max_shot_distance, vaporizer_damage, WEP_CVAR_PRI(vaporizer, force), 0, 0, 0, 0, thiswep.m_id);
+ FireRailgunBullet(actor, weaponentity, w_shotorg, w_shotorg + w_shotdir * max_shot_distance, vaporizer_damage, true, WEP_CVAR_PRI(vaporizer, force), 0, 0, 0, 0, thiswep.m_id);
// do this now, as goodhits is disabled below
vector v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
yoda = 0;
damage_goodhits = 0;
- FireRailgunBullet(actor, weaponentity, w_shotorg, w_shotorg + w_shotdir * max_shot_distance, mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, dtype);
+ FireRailgunBullet(actor, weaponentity, w_shotorg, w_shotorg + w_shotdir * max_shot_distance, mydmg, false, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, dtype);
if(yoda && flying)
Send_Notification(NOTIF_ONE, actor, MSG_ANNCE, ANNCE_ACHIEVEMENT_YODA);
\
PROP(false, porto_v_angle_held, WEPENT_SET_NORMAL, \
{ WriteByte(chan, this.porto_v_angle_held); if(this.porto_v_angle_held) { \
- WriteAngle(chan, this.owner.porto_v_angle.x); WriteAngle(chan, this.owner.porto_v_angle.y); \
+ WriteAngleVector2D(chan, this.owner.porto_v_angle); \
} }, \
{ (viewmodels[this.m_wepent_slot]).angles_held_status = ReadByte(); if((viewmodels[this.m_wepent_slot]).angles_held_status) { \
- (viewmodels[this.m_wepent_slot]).angles_held = vec2(ReadAngle(), ReadAngle()); } \
+ (viewmodels[this.m_wepent_slot]).angles_held = ReadAngleVector2D(); } \
else { (viewmodels[this.m_wepent_slot]).angles_held = '0 0 0'; } }) \
\
PROP(false, tuba_instrument, WEPENT_SET_NORMAL, \
//const int PMF_DUCKED = 4;
//const int PMF_ONGROUND = 8;
-const int FL_DUCKED = BIT(19);
-
void CSQCPlayer_SetCamera();
float CSQCPlayer_PreUpdate(entity this);
float CSQCPlayer_PostUpdate(entity this);
#define ReadFloat() ReadCoord()
#define ReadVector() vec3(ReadFloat(), ReadFloat(), ReadFloat())
#define ReadVector2D() vec2(ReadFloat(), ReadFloat())
+ #define ReadAngleVector() vec3(ReadAngle(), ReadAngle(), ReadAngle())
+ #define ReadAngleVector2D() vec2(ReadAngle(), ReadAngle())
int Readbits(int num)
{
#define WriteFloat(to, f) WriteCoord(to, f)
#define WriteVector(to, v) MACRO_BEGIN WriteFloat(to, v.x); WriteFloat(to, v.y); WriteFloat(to, v.z); MACRO_END
#define WriteVector2D(to, v) MACRO_BEGIN WriteFloat(to, v.x); WriteFloat(to, v.y); MACRO_END
+ #define WriteAngleVector(to, v) MACRO_BEGIN WriteAngle(to, v.x); WriteAngle(to, v.y); WriteAngle(to, v.z); MACRO_END
+ #define WriteAngleVector2D(to, v) MACRO_BEGIN WriteAngle(to, v.x); WriteAngle(to, v.y); MACRO_END
void Writebits(float dst, float val, int num)
{
#include "common.qh"
#if defined(CSQC)
- #include <common/t_items.qh>
+ #include <client/items/items.qh>
#elif defined(MENUQC)
#elif defined(SVQC)
#include <common/weapons/_all.qh>
void XonoticLanguageList_drawListBoxItem(entity me, int i, vector absSize, bool isSelected, bool isFocused)
{
- string s, p;
if(isSelected)
draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
else if(isFocused)
draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_FOCUSED, me.focusedItemAlpha);
}
- s = me.languageParameter(me, i, LANGPARM_NAME_LOCALIZED);
+ string p = me.languageParameter(me, i, LANGPARM_PERCENTAGE);
+ float alpha_factor = 1;
+ if (p != "")
+ {
+ float percent = stof(p);
+ if (percent >= 90)
+ alpha_factor = 1;
+ else if (percent >= 50)
+ alpha_factor = 0.65;
+ else
+ alpha_factor = 0.3;
+ }
+ else
+ p = "\xE2\x9C\x94"; // Unicode Character 'HEAVY CHECK MARK' (U+2714)
+
+ string s = me.languageParameter(me, i, LANGPARM_NAME_LOCALIZED);
vector save_fontscale = draw_fontscale;
float f = draw_CondensedFontFactor(s, false, me.realFontSize, 1);
draw_fontscale.x *= f;
vector fs = me.realFontSize;
fs.x *= f;
- draw_Text(me.realUpperMargin * eY + me.columnNameOrigin * eX, s, fs, SKINCOLOR_TEXT, SKINALPHA_TEXT, 0);
+ draw_Text(me.realUpperMargin * eY + me.columnNameOrigin * eX, s, fs, SKINCOLOR_TEXT * alpha_factor, SKINALPHA_TEXT, 0);
draw_fontscale = save_fontscale;
- p = me.languageParameter(me, i, LANGPARM_PERCENTAGE);
if(p != "")
{
vector save_fontscale = draw_fontscale;
draw_fontscale.x *= f;
vector fs = me.realFontSize;
fs.x *= f;
- draw_Text(me.realUpperMargin * eY + (me.columnPercentageOrigin + (me.columnPercentageSize - draw_TextWidth(p, 0, fs))) * eX, p, fs, SKINCOLOR_TEXT, SKINALPHA_TEXT, 0);
+ float x_ofs = me.columnPercentageOrigin + (me.columnPercentageSize - draw_TextWidth(p, 0, fs));
+ draw_Text(me.realUpperMargin * eY + x_ofs * eX, p, fs, SKINCOLOR_TEXT, SKINALPHA_TEXT * alpha_factor, 0);
draw_fontscale = save_fontscale;
}
}
#include "slider_resolution.qh"
/* private static */ float XonoticResolutionSlider_DataHasChanged;
+/* attrib */ float vid_conwidth;
+/* attrib */ float vid_conheight;
// Updates cvars (to be called by menu.qc at startup or on detected res change)
float updateConwidths(float width, float height, float pixelheight)
cvar_set("_menu_vid_pixelheight", ftos(pixelheight));
cvar_set("_menu_vid_desktopfullscreen", cvar_string("vid_desktopfullscreen"));
+ // engine is handling conwidth calculations!
+ if((cvar_type("vid_conwidthauto") & CVAR_TYPEFLAG_ENGINE) && cvar("vid_conwidthauto"))
+ {
+ if(vid_conwidth != cvar("vid_conwidth") || vid_conheight != cvar("vid_conheight"))
+ {
+ // Please reload resolutions list and such stuff.
+ XonoticResolutionSlider_DataHasChanged = true;
+ vid_conwidth = cvar("vid_conwidth");
+ vid_conheight = cvar("vid_conheight");
+ return 1;
+ }
+ return 0; // No recalculation
+ }
+
r_x = width;
r_y = height;
r_z = pixelheight;
#include <server/handicap.qc>
#include <server/impulse.qc>
#include <server/ipban.qc>
-#include <server/items.qc>
#include <server/mapvoting.qc>
#include <server/matrix.qc>
#include <server/miscfunctions.qc>
#include <server/bot/_mod.inc>
#include <server/command/_mod.inc>
#include <server/compat/_mod.inc>
+#include <server/items/_mod.inc>
#include <server/mutators/_mod.inc>
#include <server/pathlib/_mod.inc>
#include <server/weapons/_mod.inc>
#include <server/handicap.qh>
#include <server/impulse.qh>
#include <server/ipban.qh>
-#include <server/items.qh>
#include <server/mapvoting.qh>
#include <server/matrix.qh>
#include <server/miscfunctions.qh>
#include <server/bot/_mod.qh>
#include <server/command/_mod.qh>
#include <server/compat/_mod.qh>
+#include <server/items/_mod.qh>
#include <server/mutators/_mod.qh>
#include <server/pathlib/_mod.qh>
#include <server/weapons/_mod.qh>
#include "autocvars.qh"
#include "defs.qh"
#include <server/gamelog.qh>
+#include <server/sv_main.qh>
#include "miscfunctions.qh"
#include "command/common.qh"
.float ignoregoaltime;
.entity ignoregoal;
+bool bots_would_leave;
+
+int player_count;
+int currentbots;
+
.entity bot_basewaypoint;
.bool navigation_dynamicgoal;
void navigation_dynamicgoal_init(entity this, bool initially_static);
#include "../../client.qh"
#include "../../constants.qh"
#include "../../defs.qh"
+#include <server/g_damage.qh>
#include "../../race.qh"
-#include <common/t_items.qh>
+#include <server/items/items.qh>
#include <server/mutators/_mod.qh>
#include <server/defs.qh>
#include <server/miscfunctions.qh>
+#include <server/weapons/selection.qh>
+#include <server/weapons/weaponsystem.qh>
#include "../cvars.qh"
#include "../aim.qh"
#include <common/mapobjects/func/ladder.qh>
#include <common/mapobjects/teleporters.qh>
+#include <common/mapobjects/trigger/hurt.qh>
#include <common/mapobjects/trigger/jumppads.qh>
#include <lib/warpzone/common.qh>
#include <server/defs.qh>
#include <server/miscfunctions.qh>
-#include <server/items.qh>
+#include <server/items/spawning.qh>
#include <server/resources.qh>
#include "havocbot.qh"
#include "bot.qh"
#include "waypoints.qh"
-#include <common/t_items.qh>
+#include <server/items/items.qh>
#include <common/items/_mod.qh>
#include <common/constants.qh>
#include <common/net_linked.qh>
#include <common/mapobjects/func/ladder.qh>
+#include <common/mapobjects/trigger/hurt.qh>
#include <common/mapobjects/trigger/jumppads.qh>
.float speed;
#include <server/defs.qh>
#include <server/miscfunctions.qh>
+#include <server/weapons/selection.qh>
+#include <server/weapons/weaponsystem.qh>
#include "cvars.qh"
#include <common/state.qh>
+#include <common/gamemodes/gamemode/ctf/sv_ctf.qh>
#include <common/physics/player.qh>
#include <common/wepent.qh>
#include <server/miscfunctions.qh>
#include <common/effects/all.qh>
#include <server/resources.qh>
+#include <server/sv_main.qh>
#include "g_damage.qh"
#include "clientkill.qh"
setthink(this, func_null);
this.nextthink = 0;
this.deadflag = DEAD_NO;
- this.crouch = false;
+ UNSET_DUCKED(this);
STAT(REVIVE_PROGRESS, this) = 0;
this.revival_time = 0;
this.draggable = drag_undraggable;
this.spawnpoint_targ = NULL;
- this.crouch = false;
+ UNSET_DUCKED(this);
this.view_ofs = STAT(PL_VIEW_OFS, this);
setsize(this, STAT(PL_MIN, this), STAT(PL_MAX, this));
this.spawnorigin = spot.origin;
}
}
+void calculate_player_respawn_time(entity this)
+{
+ if(MUTATOR_CALLHOOK(CalculateRespawnTime, this))
+ return;
+
+ float gametype_setting_tmp;
+ float sdelay_max = GAMETYPE_DEFAULTED_SETTING(respawn_delay_max);
+ float sdelay_small = GAMETYPE_DEFAULTED_SETTING(respawn_delay_small);
+ float sdelay_large = GAMETYPE_DEFAULTED_SETTING(respawn_delay_large);
+ float sdelay_small_count = GAMETYPE_DEFAULTED_SETTING(respawn_delay_small_count);
+ float sdelay_large_count = GAMETYPE_DEFAULTED_SETTING(respawn_delay_large_count);
+ float waves = GAMETYPE_DEFAULTED_SETTING(respawn_waves);
+
+ float pcount = 1; // Include myself whether or not team is already set right and I'm a "player".
+ if (teamplay)
+ {
+ FOREACH_CLIENT(IS_PLAYER(it) && it != this, {
+ if(it.team == this.team)
+ ++pcount;
+ });
+ if (sdelay_small_count == 0)
+ sdelay_small_count = 1;
+ if (sdelay_large_count == 0)
+ sdelay_large_count = 1;
+ }
+ else
+ {
+ FOREACH_CLIENT(IS_PLAYER(it) && it != this, {
+ ++pcount;
+ });
+ if (sdelay_small_count == 0)
+ {
+ if (IS_INDEPENDENT_PLAYER(this))
+ {
+ // Players play independently. No point in requiring enemies.
+ sdelay_small_count = 1;
+ }
+ else
+ {
+ // Players play AGAINST each other. Enemies required.
+ sdelay_small_count = 2;
+ }
+ }
+ if (sdelay_large_count == 0)
+ {
+ if (IS_INDEPENDENT_PLAYER(this))
+ {
+ // Players play independently. No point in requiring enemies.
+ sdelay_large_count = 1;
+ }
+ else
+ {
+ // Players play AGAINST each other. Enemies required.
+ sdelay_large_count = 2;
+ }
+ }
+ }
+
+ float sdelay;
+
+ if (pcount <= sdelay_small_count)
+ sdelay = sdelay_small;
+ else if (pcount >= sdelay_large_count)
+ sdelay = sdelay_large;
+ else // NOTE: this case implies sdelay_large_count > sdelay_small_count.
+ sdelay = sdelay_small + (sdelay_large - sdelay_small) * (pcount - sdelay_small_count) / (sdelay_large_count - sdelay_small_count);
+
+ if(waves)
+ this.respawn_time = ceil((time + sdelay) / waves) * waves;
+ else
+ this.respawn_time = time + sdelay;
+
+ if(sdelay < sdelay_max)
+ this.respawn_time_max = time + sdelay_max;
+ else
+ this.respawn_time_max = this.respawn_time;
+
+ if((sdelay + waves >= 5.0) && (this.respawn_time - time > 1.75))
+ this.respawn_countdown = 10; // first number to count down from is 10
+ else
+ this.respawn_countdown = -1; // do not count down
+
+ if(autocvar_g_forced_respawn)
+ this.respawn_flags = this.respawn_flags | RESPAWN_FORCE;
+}
// LordHavoc: this hack will be removed when proper _pants/_shirt layers are
// added to the model skins
this.dmg_team = max(0, this.dmg_team - autocvar_g_teamdamage_resetspeed * frametime);
}
- secrets_setstatus(this);
monsters_setstatus(this);
return true;
return false;
}
+//flood fields
+.float nickspamtime; // time of last nick change
+.float nickspamcount;
+.float floodcontrol_chat;
+.float floodcontrol_chatteam;
+.float floodcontrol_chattell;
+.float floodcontrol_voice;
+.float floodcontrol_voiceteam;
+
+// respawning
+.int respawn_flags;
+.float respawn_time;
+.float respawn_time_max;
+
+.float respawn_countdown; // next number to count
+
+// g_<gametype>_str:
+// If 0, default is used.
+// If <0, 0 is used.
+// Otherwise, g_str (default value) is used.
+// For consistency, negative values there are mapped to zero too.
+#define GAMETYPE_DEFAULTED_SETTING(str) \
+ ((gametype_setting_tmp = cvar(strcat("g_", GetGametype(), "_" #str))), \
+ (gametype_setting_tmp < 0) ? 0 \
+ : (gametype_setting_tmp == 0 || autocvar_g_respawn_delay_forced) ? max(0, autocvar_g_##str) \
+ : gametype_setting_tmp)
+
+void calculate_player_respawn_time(entity this);
+
bool PlayerInList(entity player, string list);
+void ClientData_Touch(entity e);
+
+int nJoinAllowed(entity this, entity ignore);
+
+void FixIntermissionClient(entity e);
+
+void checkSpectatorBlock(entity this);
+
+void PlayerUseKey(entity this);
+
+void FixClientCvars(entity e);
+
+// called when a client connects, useful for updating sounds and such of static objects
+.void(entity this, entity player) init_for_player;
+
/// \brief Print the string to the client's chat.
/// \param[in] client Client to print to.
/// \param[in] text Text to print.
this.killindicator.count = bound(0, ceil(killtime), 10);
//sprint(this, strcat("^1You'll be dead in ", ftos(this.killindicator.cnt), " seconds\n"));
- IL_EACH(g_clones, it.enemy == this && !(it.effects & CSQCMODEL_EF_RESPAWNGHOST),
+ IL_EACH(g_clones, it.enemy == this && !(it.effects & CSQCMODEL_EF_RESPAWNGHOST) && !it.killindicator,
{
it.killindicator = spawn();
it.killindicator.owner = it;
#include "common.qh"
+#include <server/client.qh>
#include <server/defs.qh>
#include <server/miscfunctions.qh>
totalspawned += 1;
WarpZone_TraceBox(CENTER_OR_VIEWOFS(caller), caller.mins, caller.maxs, CENTER_OR_VIEWOFS(caller) + v_forward * 150, true, caller);
- mon = spawnmonster(spawn(), arg_lower, 0, caller, caller, trace_endpos, false, false, moveflag);
+ mon = spawnmonster(spawn(), arg_lower, MON_Null, caller, caller, trace_endpos, false, false, moveflag);
print_to(caller, strcat("Spawned ", mon.monster_name));
return;
}
if (!autocvar_g_monsters_edit) { print_to(caller, "Monster editing is disabled"); return; }
if (!is_visible) { print_to(caller, "You must look at your monster to edit it"); return; }
if (mon.realowner != caller && autocvar_g_monsters_edit < 2) { print_to(caller, "This monster does not belong to you"); return; }
- if (mon.monsterid == MON_MAGE.monsterid) { print_to(caller, "Mage skins can't be changed"); return; } // TODO
+ if (mon.monsterdef == MON_MAGE) { print_to(caller, "Mage skins can't be changed"); return; } // TODO
mon.skin = stof(argument);
print_to(caller, strcat("Monster skin successfully changed to ", ftos(mon.skin)));
#include <server/defs.qh>
#include <server/miscfunctions.qh>
-#include <server/items.qh>
+#include <server/items/items.qh>
+#include <server/items/spawning.qh>
#include <server/resources.qh>
#include <common/gamemodes/_mod.qh>
-#include <common/t_items.qh>
#include <common/gamemodes/gamemode/ctf/sv_ctf.qh>
#include <common/mapobjects/triggers.qh>
#include <common/mapobjects/trigger/counter.qh>
#include <server/defs.qh>
#include <server/miscfunctions.qh>
-#include <server/items.qh>
+#include <server/items/spawning.qh>
#include <common/weapons/_all.qh>
spawnfunc(item_haste);
#include <common/weapons/_all.qh>
#include <common/stats.qh>
-#define INDEPENDENT_ATTACK_FINISHED 1
-
// Globals
float g_footsteps, g_grappling_hook;
float sv_clones;
float sv_foginterval;
-float player_count;
-float currentbots;
-float bots_would_leave;
-
-void UpdateFrags(entity player, int f);
-.int totalfrags;
-
-// flag set on worldspawn so that the code knows if it is dedicated or not
-float server_is_dedicated;
-
// Fields
.void(entity this, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force) event_damage;
//.string map;
//.float worldtype;
-// Needed for dynamic clientwalls
-.bool inactive; // Clientwall disappears when inactive
-.float alpha_max, alpha_min;
-.float fade_start, fade_end, fade_vertical_offset;
-.float default_solid; // Variable to store default .solid for clientwalls
.float pain_finished; //Added by Supajoe
.float pain_frame; //"
-.float crouch; // Crouching or not?
.float superweapons_finished; // NOTE: this field is used only by map entities, it does not directly apply the superweapons stat
const .float air_finished = _STAT(AIR_FINISHED);
.float count;
//.float cnt2;
-.int respawn_flags;
-.float respawn_time;
-.float respawn_time_max;
.float death_time;
.float fade_time;
.float fade_rate;
-void player_setupanimsformodel(entity this);
-
.string mdl;
.string playermodel;
.float respawntimestart;
//.float chasecam;
-.float damageforcescale;
-const float MIN_DAMAGEEXTRARADIUS = 2;
-const float MAX_DAMAGEEXTRARADIUS = 16;
-.float damageextraradius;
-
//.float gravity;
.float dmg;
// WEAPONTODO
.float autoswitch;
-bool client_hasweapon(entity this, Weapon wpn, .entity weaponentity, float andammo, bool complain);
-void w_clear(Weapon thiswep, entity actor, .entity weaponentity, int fire);
-void w_ready(Weapon thiswep, entity actor, .entity weaponentity, int fire);
-// VorteX: standalone think for weapons, so normal think on weaponentity can be reserved by weaponflashes (which needs update even player dies)
-.float weapon_nextthink;
-.void(Weapon thiswep, entity actor, .entity weaponentity, int fire) weapon_think;
-
-
-// there is 2 weapon tics that can run in one server frame
-const int W_TICSPERFRAME = 2;
-
-void weapon_defaultspawnfunc(entity this, Weapon e);
float intermission_running;
float intermission_exittime;
float blockSpectators; //if set, new or existing spectators or observers will be removed unless they become a player within g_maxplayers_spectator_blocktime seconds
.float spectatortime; //point in time since the client is spectating or observing
-void checkSpectatorBlock(entity this);
.float winning;
.float jointime; // time of connecting
.float alivetime; // time of being alive
.float motd_actived_time; // used for both motd and campaign_message
-int nJoinAllowed(entity this, entity ignore);
-
.float spawnshieldtime;
-.float item_spawnshieldtime;
-
-.entity flagcarried;
.int playerid;
.float noalign; // if set to 1, the item or spawnpoint won't be dropped to the floor
string gamemode_name;
-string W_Apply_Weaponreplace(string in);
-
-void FixIntermissionClient(entity e);
-void FixClientCvars(entity e);
-
-.float respawn_countdown; // next number to count
-
float bot_waypoints_for_items;
-.float attack_finished_for[REGISTRY_MAX(Weapons) * MAX_WEAPONSLOTS];
-.float attack_finished_single[MAX_WEAPONSLOTS];
-#if INDEPENDENT_ATTACK_FINISHED
-#define ATTACK_FINISHED_FOR(ent, w, slot) ((ent).(attack_finished_for[((w) - WEP_FIRST) * MAX_WEAPONSLOTS + (slot)]))
-#else
-#define ATTACK_FINISHED_FOR(ent, w, slot) ((ent).attack_finished_single[slot])
-#endif
-#define ATTACK_FINISHED(ent, w) ATTACK_FINISHED_FOR(ent, ent.(w).m_weapon.m_id, weaponslot(w))
-
// speedrun: when 1, player auto teleports back when capture timeout happens
.float speedrunning;
.bool canteamdamage;
-void Damage (entity targ, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force);
-
// WEAPONTODO
#define DMG_NOWEP (weaponentities[0])
int sv_maxidle_slots;
bool sv_maxidle_slots_countbots;
-float tracebox_hits_trigger_hurt(vector start, vector mi, vector ma, vector end);
-
-float next_pingtime;
-
// autotaunt system
.float cvar_cl_autotaunt;
.float cvar_cl_voice_directional;
//float game_starttime; //point in time when the countdown to game start is over
//float round_starttime; //point in time when the countdown to round start is over
-void W_Porto_Remove (entity p);
-
.int projectiledeathtype;
.string message2;
.void(entity this) reset; // if set, an entity is reset using this
.void(entity this) reset2; // if set, an entity is reset using this (after calling ALL the reset functions for other entities)
-void ClientData_Touch(entity e);
-
-//vector debug_shotorg; // if non-zero, overrides the shot origin of all weapons
-
.bool wasplayer;
-float servertime, serverprevtime, serverframetime;
-
-.float ammo_fuel;
-
-//flood fields
-.float nickspamtime; // time of last nick change
-.float nickspamcount;
-.float floodcontrol_chat;
-.float floodcontrol_chatteam;
-.float floodcontrol_chattell;
-.float floodcontrol_voice;
-.float floodcontrol_voiceteam;
-
string matchid;
-bool radar_showennemies;
-
-.float weapon_load[REGISTRY_MAX(Weapons)];
-.int ammo_none; // used by the reloading system, must always be 0
-.int clip_load;
-.int old_clip_load;
-.int clip_size;
+bool radar_showenemies;
.int minelayer_mines;
.float vortex_charge;
const int FROZEN_TEMP_REVIVING = 2;
const int FROZEN_TEMP_DYING = 3;
-const int ACTIVE_NOT = 0;
-const int ACTIVE_ACTIVE = 1;
-const int ACTIVE_IDLE = 2;
-const int ACTIVE_BUSY = 2;
-const int ACTIVE_TOGGLE = 3;
-.int active;
-.void (entity this, int act_state) setactive;
.entity realowner;
//float serverflags;
.float misc_bulletcounter; // replaces uzi & hlac bullet counter.
-void PlayerUseKey(entity this);
-
-USING(spawn_evalfunc_t, vector(entity this, entity player, entity spot, vector current));
-.spawn_evalfunc_t spawn_evalfunc;
-
string modname;
-.int missile_flags;
-const int MIF_SPLASH = BIT(1);
-const int MIF_ARC = BIT(2);
-const int MIF_PROXY = BIT(3);
-const int MIF_GUIDED_MANUAL = BIT(4);
-const int MIF_GUIDED_HEAT = BIT(5);
-const int MIF_GUIDED_LASER = BIT(6);
-const int MIF_GUIDED_AI = BIT(7);
-const int MIF_GUIDED_TAG = BIT(7);
-const int MIF_GUIDED_ALL = MIF_GUIDED_MANUAL | MIF_GUIDED_HEAT | MIF_GUIDED_LASER | MIF_GUIDED_AI | MIF_GUIDED_TAG;
-const int MIF_GUIDED_TRACKING = MIF_GUIDED_HEAT | MIF_GUIDED_LASER | MIF_GUIDED_AI | MIF_GUIDED_TAG;
-const int MIF_GUIDED_CONFUSABLE = MIF_GUIDED_HEAT | MIF_GUIDED_AI;
-
-#define MISSILE_IS_CONFUSABLE(m) ((m.missile_flags & MIF_GUIDED_CONFUSABLE) ? true : false)
-#define MISSILE_IS_GUIDED(m) ((m.missile_flags & MIF_GUIDED_ALL) ? true : false)
-#define MISSILE_IS_TRACKING(m) ((m.missile_flags & MIF_GUIDED_TRACKING) ? true : false)
-
////
.string cvar_cl_physics;
-.void(entity this, entity player) init_for_player;
-
.WepSet dual_weapons;
IntrusiveList g_monsters;
#include "bot/api.qh"
#include "g_hook.qh"
#include <server/gamelog.qh>
+#include <server/items/items.qh>
#include <server/mutators/_mod.qh>
#include "teamplay.qh"
#include "scores.qh"
#include "spawnpoints.qh"
#include "../common/state.qh"
#include "../common/physics/player.qh"
-#include "../common/t_items.qh"
#include "resources.qh"
#include "../common/vehicles/all.qh"
#include "../common/items/_mod.qh"
#include "weapons/selection.qh"
#include "../common/constants.qh"
#include "../common/deathtypes/all.qh"
+#include <common/mapobjects/defs.qh>
#include "../common/notifications/all.qh"
#include "../common/physics/movetypes/movetypes.qh"
#include "../common/playerstats.qh"
#elif defined(MENUQC)
#elif defined(SVQC)
#include <server/defs.qh>
+ #include <server/items/items.qh>
#include <server/miscfunctions.qh>
#include <lib/warpzone/common.qh>
#include <common/constants.qh>
#include "weapons/accuracy.qh"
#include "weapons/csqcprojectile.qh"
#include "weapons/selection.qh"
- #include <common/t_items.qh>
#include "autocvars.qh"
#include "constants.qh"
#include "defs.qh"
.bool istypefrag;
.float taunt_soundtime;
+.int totalfrags;
+
float IsFlying(entity a);
void UpdateFrags(entity player, int f);
float RadiusDamage (entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity cantbe, entity mustbe, float forceintensity, int deathtype, .entity weaponentity, entity directhitentity);
+.float damageforcescale;
+const float MIN_DAMAGEEXTRARADIUS = 2;
+const float MAX_DAMAGEEXTRARADIUS = 16;
+.float damageextraradius;
+
// Calls .event_heal on the target so that they can handle healing themselves
// a limit of RES_LIMIT_NONE should be handled by the entity as its max health (if applicable)
bool Heal(entity targ, entity inflictor, float amount, float limit);
#include "g_hook.qh"
#include <server/defs.qh>
+#include <server/g_damage.qh>
#include <server/miscfunctions.qh>
#include <common/effects/all.qh>
#include "weapons/common.qh"
Nagger_Init();
- next_pingtime = time + 5;
-
// set up information replies for clients and server to use
maplist_reply = strzone(getmaplist());
lsmaps_reply = strzone(getlsmaps());
float checkrules_suddendeathend;
float checkrules_overtimesadded; //how many overtimes have been already added
+// flag set on worldspawn so that the code knows if it is dedicated or not
+bool server_is_dedicated;
+
string cache_mutatormsg;
string cache_lastmutatormsg;
#include "weapons/throwing.qh"
#include "command/common.qh"
#include "cheats.qh"
+#include "client.qh"
#include "clientkill.qh"
#include "weapons/selection.qh"
#include "weapons/tracing.qh"
{
if (this.vehicle) return;
if (IS_DEAD(this)) return;
+ bool is_dualwielding = W_DualWielding(this);
for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
{
.entity weaponentity = weaponentities[slot];
- W_ThrowWeapon(this, weaponentity, W_CalculateProjectileVelocity(this, this.velocity, v_forward * 750, false), '0 0 0', true);
-
- if(autocvar_g_weaponswitch_debug != 1)
- break;
+ vector md = this.(weaponentity).movedir;
+ vector vecs = ((md.x > 0) ? md : '0 0 0');
+ vector dv = v_right * -vecs.y;
+ if(!is_dualwielding)
+ dv = '0 0 0'; // don't override!
+ W_ThrowWeapon(this, weaponentity, W_CalculateProjectileVelocity(this, this.velocity, v_forward * 750, false), dv, true);
+
+ if(autocvar_g_weaponswitch_debug == 2)
+ break; // in this mode, the off-hand weapon is selected based on the primary weapon, don't drop it twice!
}
}
+++ /dev/null
-#include "items.qh"
-
-/// \file
-/// \brief Source file that contains implementation of the functions related to
-/// game items.
-/// \copyright GNU GPLv2 or any later version.
-
-#include <server/mutators/_mod.qh>
-#include <common/weapons/all.qh>
-#include <common/mapobjects/subs.qh>
-
-.bool m_isloot; ///< Holds whether item is loot.
-/// \brief Holds whether strength, shield or superweapon timers expire while
-/// this item is on the ground.
-.bool m_isexpiring;
-
-entity Item_FindDefinition(string class_name)
-{
- FOREACH(Items, it.m_canonical_spawnfunc == class_name,
- {
- return it;
- });
- FOREACH(Weapons, it.m_canonical_spawnfunc == class_name,
- {
- return it.m_pickup;
- });
- return NULL;
-}
-
-bool Item_IsAllowed(string class_name)
-{
- entity definition = Item_FindDefinition(class_name);
- if (definition == NULL)
- {
- return false;
- }
- return Item_IsDefinitionAllowed(definition);
-}
-
-bool Item_IsDefinitionAllowed(entity definition)
-{
- return !MUTATOR_CALLHOOK(FilterItemDefinition, definition);
-}
-
-entity Item_Create(string class_name, vector position, bool no_align)
-{
- entity item = spawn();
- item.classname = class_name;
- item.spawnfunc_checked = true;
- setorigin(item, position);
- item.noalign = no_align;
- Item_Initialize(item, class_name);
- if (wasfreed(item))
- {
- return NULL;
- }
- return item;
-}
-
-void Item_Initialize(entity item, string class_name)
-{
- FOREACH(Weapons, it.m_canonical_spawnfunc == class_name,
- {
- weapon_defaultspawnfunc(item, it);
- return;
- });
- FOREACH(Items, it.m_canonical_spawnfunc == class_name,
- {
- StartItem(item, it);
- return;
- });
- LOG_FATALF("Item_Initialize: Invalid classname: %s", class_name);
-}
-
-entity Item_CreateLoot(string class_name, vector position, vector vel,
- float time_to_live)
-{
- entity item = spawn();
- if (!Item_InitializeLoot(item, class_name, position, vel, time_to_live))
- {
- return NULL;
- }
- return item;
-}
-
-bool Item_InitializeLoot(entity item, string class_name, vector position,
- vector vel, float time_to_live)
-{
- item.classname = class_name;
- Item_SetLoot(item, true);
- item.noalign = true;
- setorigin(item, position);
- item.pickup_anyway = true;
- item.spawnfunc_checked = true;
- Item_Initialize(item, class_name);
- if (wasfreed(item))
- {
- return false;
- }
- item.gravity = 1;
- item.velocity = vel;
- SUB_SetFade(item, time + time_to_live, 1);
- return true;
-}
-
-bool Item_IsLoot(entity item)
-{
- return item.m_isloot || item.classname == "droppedweapon";
-}
-
-void Item_SetLoot(entity item, bool loot)
-{
- item.m_isloot = loot;
-}
-
-bool Item_ShouldKeepPosition(entity item)
-{
- return item.noalign || (item.spawnflags & 1);
-}
-
-bool Item_IsExpiring(entity item)
-{
- return item.m_isexpiring;
-}
-
-void Item_SetExpiring(entity item, bool expiring)
-{
- item.m_isexpiring = expiring;
-}
-
-// Compatibility spawn functions
-
-SPAWNFUNC_ITEM_COND(item_armor1, cvar("sv_mapformat_is_quake3"), ITEM_ArmorSmall, ITEM_ArmorMedium)
-
-SPAWNFUNC_ITEM(item_armor25, ITEM_ArmorMega)
-
-SPAWNFUNC_ITEM(item_armor_large, ITEM_ArmorMega)
-
-SPAWNFUNC_ITEM(item_health1, ITEM_HealthSmall)
-
-SPAWNFUNC_ITEM(item_health25, ITEM_HealthMedium)
-
-SPAWNFUNC_ITEM(item_health_large, ITEM_HealthBig)
-
-SPAWNFUNC_ITEM(item_health100, ITEM_HealthMega)
-
-SPAWNFUNC_ITEM(item_quad, ITEM_Strength)
+++ /dev/null
-#pragma once
-
-/// \file
-/// \brief Header file that describes the functions related to game items.
-/// \copyright GNU GPLv2 or any later version.
-
-bool startitem_failed;
-
-/// \brief Returns the item definition corresponding to the given class name.
-/// \param[in] class_name Class name to search for.
-/// \return Item definition corresponding to the given class name or NULL is not
-/// found.
-entity Item_FindDefinition(string class_name);
-
-/// \brief Checks whether the items with the specified class name are allowed to
-/// spawn.
-/// \param[in] class_name Item class name to check.
-/// \return True items with the specified class name are allowed to spawn, false
-/// otherwise.
-bool Item_IsAllowed(string class_name);
-
-/// \brief Checks whether the items with the specified definition are allowed to
-/// spawn.
-/// \param[in] definition Item definition to check.
-/// \return True items with the specified definition are allowed to spawn, false
-/// otherwise.
-bool Item_IsDefinitionAllowed(entity definition);
-
-/// \brief Creates a new item.
-/// \param[in] class_name Class name of the item.
-/// \param[in] position Position of the item.
-/// \param[in] no_align True if item should be placed directly at specified
-/// position, false to let it drop to the ground.
-/// \return Item on success, NULL otherwise.
-entity Item_Create(string class_name, vector position, bool no_align);
-
-/// \brief Initializes the item according to class name.
-/// \param[in,out] item Item to initialize.
-/// \param[in] class_name Class name to use.
-/// \return No return.
-/// \nore This function is useful if you want to set some item properties before
-/// initialization.
-void Item_Initialize(entity item, string class_name);
-
-/// \brief Creates a loot item.
-/// \param[in] class_name Class name of the item.
-/// \param[in] position Position of the item.
-/// \param[in] velocity of the item.
-/// \param[in] time_to_live Amount of time after which the item will disappear.
-/// \return Item on success, NULL otherwise.
-entity Item_CreateLoot(string class_name, vector position, vector vel,
- float time_to_live);
-
-/// \brief Initializes the loot item.
-/// \param[in] class_name Class name of the item.
-/// \param[in] position Position of the item.
-/// \param[in] velocity of the item.
-/// \param[in] time_to_live Amount of time after which the item will disappear.
-/// \return True on success, false otherwise.
-/// \nore This function is useful if you want to set some item properties before
-/// initialization.
-bool Item_InitializeLoot(entity item, string class_name, vector position,
- vector vel, float time_to_live);
-
-/// \brief Returns whether the item is loot.
-/// \param[in] item Item to check.
-/// \return True if the item is loot, false otherwise.
-bool Item_IsLoot(entity item);
-
-/// \brief Sets the item loot status.
-/// \param[in,out] item Item to adjust.
-/// \param[in] loot Whether item is loot.
-/// \return No return.
-void Item_SetLoot(entity item, bool loot);
-
-/// \brief Returns whether item should keep its position or be dropped to the
-/// ground.
-/// \param[in] item Item to check.
-/// \return True if item should keep its position or false if it should be
-/// dropped to the ground.
-bool Item_ShouldKeepPosition(entity item);
-
-/// \brief Returns whether the item is expiring (i.e. its strength, shield and
-/// superweapon timers expire while it is on the ground).
-/// \param[in] item Item to check.
-/// \return True if the item is expiring, false otherwise.
-bool Item_IsExpiring(entity item);
-
-/// \brief Sets the item expiring status (i.e. whether its strength, shield
-/// and superweapon timers expire while it is on the ground).
-/// \param[in,out] item Item to adjust.
-/// \param[in] expiring Whether item is expiring.
-/// \return No return.
-void Item_SetExpiring(entity item, bool expiring);
--- /dev/null
+// generated file; do not modify
+#include <server/items/items.qc>
+#include <server/items/spawning.qc>
--- /dev/null
+// generated file; do not modify
+#include <server/items/items.qh>
+#include <server/items/spawning.qh>
--- /dev/null
+#include "items.qh"
+
+#include <common/items/_mod.qh>
+
+#include <server/bot/api.qh>
+
+#include <server/mutators/_mod.qh>
+
+#include <server/teamplay.qh>
+
+#include <server/weapons/common.qh>
+#include <server/weapons/selection.qh>
+#include <server/weapons/weaponsystem.qh>
+
+#include <common/constants.qh>
+#include <common/deathtypes/all.qh>
+#include <common/notifications/all.qh>
+#include <common/mapobjects/subs.qh>
+#include <common/mapobjects/triggers.qh>
+#include <common/util.qh>
+
+#include <common/monsters/_mod.qh>
+
+#include <common/wepent.qh>
+#include <common/weapons/_all.qh>
+
+#include <common/mutators/mutator/buffs/buffs.qh>
+#include <common/mutators/mutator/buffs/sv_buffs.qh>
+
+#include <lib/warpzone/util_server.qh>
+
+bool ItemSend(entity this, entity to, int sf)
+{
+ if(this.gravity)
+ sf |= ISF_DROP;
+ else
+ sf &= ~ISF_DROP;
+
+ WriteHeader(MSG_ENTITY, ENT_CLIENT_ITEM);
+ WriteByte(MSG_ENTITY, sf);
+
+ //WriteByte(MSG_ENTITY, this.cnt);
+ if(sf & ISF_LOCATION)
+ {
+ WriteVector(MSG_ENTITY, this.origin);
+ }
+
+ if(sf & ISF_ANGLES)
+ {
+ WriteAngleVector(MSG_ENTITY, this.angles);
+ }
+
+ // sets size on the client, unused on server
+ //if(sf & ISF_SIZE)
+
+ if(sf & ISF_STATUS)
+ WriteByte(MSG_ENTITY, this.ItemStatus);
+
+ if(sf & ISF_MODEL)
+ {
+ WriteShort(MSG_ENTITY, this.fade_end);
+ WriteShort(MSG_ENTITY, this.fade_start);
+
+ if(this.mdl == "")
+ LOG_TRACE("^1WARNING!^7 this.mdl is unset for item ", this.classname, "expect a crash just about now");
+
+ WriteString(MSG_ENTITY, this.mdl);
+ }
+
+
+ if(sf & ISF_COLORMAP)
+ {
+ WriteShort(MSG_ENTITY, this.colormap);
+ WriteByte(MSG_ENTITY, this.glowmod.x * 255.0);
+ WriteByte(MSG_ENTITY, this.glowmod.y * 255.0);
+ WriteByte(MSG_ENTITY, this.glowmod.z * 255.0);
+ }
+
+ if(sf & ISF_DROP)
+ {
+ WriteVector(MSG_ENTITY, this.velocity);
+ }
+
+ return true;
+}
+
+void ItemUpdate(entity this)
+{
+ this.oldorigin = this.origin;
+ this.SendFlags |= ISF_LOCATION;
+}
+
+void UpdateItemAfterTeleport(entity this)
+{
+ if(getSendEntity(this) == ItemSend)
+ ItemUpdate(this);
+}
+
+bool have_pickup_item(entity this)
+{
+ if(this.itemdef.instanceOfPowerup)
+ {
+ if(autocvar_g_powerups > 0)
+ return true;
+ if(autocvar_g_powerups == 0)
+ return false;
+ }
+ else
+ {
+ if(autocvar_g_pickup_items > 0)
+ return true;
+ if(autocvar_g_pickup_items == 0)
+ return false;
+ if(g_weaponarena)
+ if(STAT(WEAPONS, this) || this.itemdef.instanceOfAmmo) // no item or ammo pickups in weaponarena
+ return false;
+ }
+ return true;
+}
+
+void Item_Show(entity e, int mode)
+{
+ e.effects &= ~(EF_ADDITIVE | EF_STARDUST | EF_FULLBRIGHT | EF_NODEPTHTEST);
+ e.ItemStatus &= ~ITS_STAYWEP;
+ entity def = e.itemdef;
+ if (mode > 0)
+ {
+ // make the item look normal, and be touchable
+ e.model = e.mdl;
+ e.solid = SOLID_TRIGGER;
+ e.spawnshieldtime = 1;
+ e.ItemStatus |= ITS_AVAILABLE;
+ }
+ else if (mode < 0)
+ {
+ // hide the item completely
+ e.model = string_null;
+ e.solid = SOLID_NOT;
+ e.spawnshieldtime = 1;
+ e.ItemStatus &= ~ITS_AVAILABLE;
+ }
+ else
+ {
+ bool nostay = def.instanceOfWeaponPickup ? !!(def.m_weapon.m_wepset & WEPSET_SUPERWEAPONS) : false // no weapon-stay on superweapons
+ || e.team // weapon stay isn't supported for teamed weapons
+ ;
+ if(def.instanceOfWeaponPickup && !nostay && g_weapon_stay)
+ {
+ // make the item translucent and not touchable
+ e.model = e.mdl;
+ e.solid = SOLID_TRIGGER; // can STILL be picked up!
+ e.effects |= EF_STARDUST;
+ e.spawnshieldtime = 0; // field indicates whether picking it up may give you anything other than the weapon
+ e.ItemStatus |= (ITS_AVAILABLE | ITS_STAYWEP);
+ }
+ else
+ {
+ //setmodel(e, "null");
+ e.solid = SOLID_NOT;
+ e.colormod = '0 0 0';
+ //e.glowmod = e.colormod;
+ e.spawnshieldtime = 1;
+ e.ItemStatus &= ~ITS_AVAILABLE;
+ }
+ }
+
+ if (def.m_glow)
+ e.ItemStatus |= ITS_GLOW;
+
+ if (autocvar_g_nodepthtestitems)
+ e.effects |= EF_NODEPTHTEST;
+
+ if (autocvar_g_fullbrightitems)
+ e.ItemStatus |= ITS_ALLOWFB;
+ else
+ e.ItemStatus &= ~ITS_ALLOWFB;
+
+ if (autocvar_sv_simple_items)
+ e.ItemStatus |= ITS_ALLOWSI;
+
+ // relink entity (because solid may have changed)
+ setorigin(e, e.origin);
+ e.SendFlags |= ISF_STATUS;
+}
+
+void Item_Think(entity this)
+{
+ this.nextthink = time;
+ if(this.origin != this.oldorigin)
+ ItemUpdate(this);
+}
+
+bool Item_ItemsTime_SpectatorOnly(GameItem it);
+bool Item_ItemsTime_Allow(GameItem it);
+float Item_ItemsTime_UpdateTime(entity e, float t);
+void Item_ItemsTime_SetTime(entity e, float t);
+void Item_ItemsTime_SetTimesForAllPlayers();
+
+void Item_Respawn(entity this)
+{
+ Item_Show(this, 1);
+ sound(this, CH_TRIGGER, this.itemdef.m_respawnsound, VOL_BASE, ATTEN_NORM); // play respawn sound
+ setorigin(this, this.origin);
+
+ if (Item_ItemsTime_Allow(this.itemdef) || (STAT(WEAPONS, this) & WEPSET_SUPERWEAPONS))
+ {
+ float t = Item_ItemsTime_UpdateTime(this, 0);
+ Item_ItemsTime_SetTime(this, t);
+ Item_ItemsTime_SetTimesForAllPlayers();
+ }
+
+ setthink(this, Item_Think);
+ this.nextthink = time;
+
+ //Send_Effect(EFFECT_ITEM_RESPAWN, this.origin + this.mins_z * '0 0 1' + '0 0 48', '0 0 0', 1);
+ Send_Effect(EFFECT_ITEM_RESPAWN, CENTER_OR_VIEWOFS(this), '0 0 0', 1);
+}
+
+void Item_RespawnCountdown(entity this)
+{
+ if(this.item_respawncounter >= ITEM_RESPAWN_TICKS)
+ {
+ if(this.waypointsprite_attached)
+ WaypointSprite_Kill(this.waypointsprite_attached);
+ Item_Respawn(this);
+ }
+ else
+ {
+ this.nextthink = time + 1;
+ this.item_respawncounter += 1;
+ if(this.item_respawncounter == 1)
+ {
+ do {
+ {
+ entity wi = REGISTRY_GET(Weapons, this.weapon);
+ if (wi != WEP_Null) {
+ entity wp = WaypointSprite_Spawn(WP_Weapon, 0, 0, this, '0 0 64', NULL, 0, this, waypointsprite_attached, true, RADARICON_Weapon);
+ wp.wp_extra = wi.m_id;
+ break;
+ }
+ }
+ {
+ entity ii = this.itemdef;
+ if (ii != NULL) {
+ entity wp = WaypointSprite_Spawn(WP_Item, 0, 0, this, '0 0 64', NULL, 0, this, waypointsprite_attached, true, RADARICON_Item);
+ wp.wp_extra = ii.m_id;
+ break;
+ }
+ }
+ } while (0);
+ bool mutator_returnvalue = MUTATOR_CALLHOOK(Item_RespawnCountdown, this);
+ if(this.waypointsprite_attached)
+ {
+ GameItem def = this.itemdef;
+ if (Item_ItemsTime_SpectatorOnly(def) && !mutator_returnvalue)
+ WaypointSprite_UpdateRule(this.waypointsprite_attached, 0, SPRITERULE_SPECTATOR);
+ WaypointSprite_UpdateBuildFinished(this.waypointsprite_attached, time + ITEM_RESPAWN_TICKS);
+ }
+ }
+
+ if(this.waypointsprite_attached)
+ {
+ FOREACH_CLIENT(IS_REAL_CLIENT(it), {
+ if(this.waypointsprite_attached.waypointsprite_visible_for_player(this.waypointsprite_attached, it, it))
+ {
+ msg_entity = it;
+ soundto(MSG_ONE, this, CH_TRIGGER, SND(ITEMRESPAWNCOUNTDOWN), VOL_BASE, ATTEN_NORM, 0); // play respawn sound
+ }
+ });
+
+ WaypointSprite_Ping(this.waypointsprite_attached);
+ //WaypointSprite_UpdateHealth(this.waypointsprite_attached, this.item_respawncounter);
+ }
+ }
+}
+
+void Item_RespawnThink(entity this)
+{
+ this.nextthink = time;
+ if(this.origin != this.oldorigin)
+ ItemUpdate(this);
+
+ if(time >= this.wait)
+ Item_Respawn(this);
+}
+
+void Item_ScheduleRespawnIn(entity e, float t)
+{
+ // if the respawn time is longer than 10 seconds, show a waypoint, otherwise, just respawn normally
+ if ((Item_ItemsTime_Allow(e.itemdef) || (STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS) || MUTATOR_CALLHOOK(Item_ScheduleRespawn, e, t)) && (t - ITEM_RESPAWN_TICKS) > 0)
+ {
+ setthink(e, Item_RespawnCountdown);
+ e.nextthink = time + max(0, t - ITEM_RESPAWN_TICKS);
+ e.scheduledrespawntime = e.nextthink + ITEM_RESPAWN_TICKS;
+ e.item_respawncounter = 0;
+ if(Item_ItemsTime_Allow(e.itemdef) || (STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS))
+ {
+ t = Item_ItemsTime_UpdateTime(e, e.scheduledrespawntime);
+ Item_ItemsTime_SetTime(e, t);
+ Item_ItemsTime_SetTimesForAllPlayers();
+ }
+ }
+ else
+ {
+ setthink(e, Item_RespawnThink);
+ e.nextthink = time;
+ e.scheduledrespawntime = time + t;
+ e.wait = time + t;
+
+ if(Item_ItemsTime_Allow(e.itemdef) || (STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS))
+ {
+ t = Item_ItemsTime_UpdateTime(e, e.scheduledrespawntime);
+ Item_ItemsTime_SetTime(e, t);
+ Item_ItemsTime_SetTimesForAllPlayers();
+ }
+ }
+}
+
+AUTOCVAR(g_pickup_respawntime_scaling_reciprocal, float, 0.0, "Multiply respawn time by `reciprocal / (p + offset) + linear` where `p` is the current number of players, takes effect with 2 or more players present, `reciprocal` (with `offset` and `linear` set to 0) can be used to achieve a constant number of items spawned *per player*");
+AUTOCVAR(g_pickup_respawntime_scaling_offset, float, 0.0, "Multiply respawn time by `reciprocal / (p + offset) + linear` where `p` is the current number of players, takes effect with 2 or more players present, `offset` offsets the curve left or right - the results are not intuitive and I recommend plotting the respawn time and the number of items per player to see what's happening");
+AUTOCVAR(g_pickup_respawntime_scaling_linear, float, 1.0, "Multiply respawn time by `reciprocal / (p + offset) + linear` where `p` is the current number of players, takes effect with 2 or more players present, `linear` can be used to simply scale the respawn time linearly");
+
+/// Adjust respawn time according to the number of players.
+float adjust_respawntime(float normal_respawntime) {
+ float r = autocvar_g_pickup_respawntime_scaling_reciprocal;
+ float o = autocvar_g_pickup_respawntime_scaling_offset;
+ float l = autocvar_g_pickup_respawntime_scaling_linear;
+
+ if (r == 0 && l == 1) {
+ return normal_respawntime;
+ }
+
+ entity balance = TeamBalance_CheckAllowedTeams(NULL);
+ TeamBalance_GetTeamCounts(balance, NULL);
+ int players = 0;
+ for (int i = 1; i <= NUM_TEAMS; ++i)
+ {
+ if (TeamBalance_IsTeamAllowed(balance, i))
+ {
+ players += TeamBalance_GetNumberOfPlayers(balance, i);
+ }
+ }
+ TeamBalance_Destroy(balance);
+
+ if (players >= 2) {
+ return normal_respawntime * (r / (players + o) + l);
+ } else {
+ return normal_respawntime;
+ }
+}
+
+void Item_ScheduleRespawn(entity e)
+{
+ if(e.respawntime > 0)
+ {
+ Item_Show(e, 0);
+
+ float adjusted_respawntime = adjust_respawntime(e.respawntime);
+ //LOG_INFOF("item %s will respawn in %f", e.classname, adjusted_respawntime);
+
+ // range: adjusted_respawntime - respawntimejitter .. adjusted_respawntime + respawntimejitter
+ float respawn_in = adjusted_respawntime + crandom() * e.respawntimejitter;
+ Item_ScheduleRespawnIn(e, respawn_in);
+ }
+ else // if respawntime is -1, this item does not respawn
+ Item_Show(e, -1);
+}
+
+AUTOCVAR(g_pickup_respawntime_initial_random, int, 1,
+ "For items that don't start spawned: 0: spawn after their normal respawntime; 1: spawn after `random * respawntime` with the *same* random; 2: same as 1 but each item has separate random");
+
+void Item_ScheduleInitialRespawn(entity e)
+{
+ Item_Show(e, 0);
+
+ float spawn_in;
+ if (autocvar_g_pickup_respawntime_initial_random == 0)
+ {
+ // range: respawntime .. respawntime + respawntimejitter
+ spawn_in = e.respawntime + random() * e.respawntimejitter;
+ }
+ else
+ {
+ float rnd;
+ if (autocvar_g_pickup_respawntime_initial_random == 1)
+ {
+ static float shared_random = 0;
+ // NOTE this code works only if items are scheduled at the same time (normal case)
+ // NOTE2 random() can't return exactly 1 so this check always work as intended
+ if (!shared_random || floor(time) > shared_random)
+ shared_random = floor(time) + random();
+ rnd = shared_random - floor(time);
+ }
+ else
+ rnd = random();
+
+ // range:
+ // if respawntime >= ITEM_RESPAWN_TICKS: ITEM_RESPAWN_TICKS .. respawntime + respawntimejitter
+ // else: 0 .. ITEM_RESPAWN_TICKS
+ // this is to prevent powerups spawning unexpectedly without waypoints
+ spawn_in = ITEM_RESPAWN_TICKS + rnd * (e.respawntime + e.respawntimejitter - ITEM_RESPAWN_TICKS);
+ }
+
+ Item_ScheduleRespawnIn(e, max(0, game_starttime - time) + ((e.respawntimestart) ? e.respawntimestart : spawn_in));
+}
+
+void GiveRandomWeapons(entity receiver, int num_weapons, string weapon_names,
+ entity ammo_entity)
+{
+ if (num_weapons == 0)
+ {
+ return;
+ }
+ int num_potential_weapons = tokenize_console(weapon_names);
+ for (int give_attempt = 0; give_attempt < num_weapons; ++give_attempt)
+ {
+ RandomSelection_Init();
+ for (int weapon_index = 0; weapon_index < num_potential_weapons;
+ ++weapon_index)
+ {
+ string weapon = argv(weapon_index);
+ FOREACH(Weapons, it != WEP_Null,
+ {
+ // Finding a weapon which player doesn't have.
+ if (!(STAT(WEAPONS, receiver) & it.m_wepset) && (it.netname == weapon))
+ {
+ RandomSelection_AddEnt(it, 1, 1);
+ break;
+ }
+ });
+ }
+ if (RandomSelection_chosen_ent == NULL)
+ {
+ return;
+ }
+ STAT(WEAPONS, receiver) |= RandomSelection_chosen_ent.m_wepset;
+ if (RandomSelection_chosen_ent.ammo_type == RES_NONE)
+ {
+ continue;
+ }
+ if (GetResource(receiver,
+ RandomSelection_chosen_ent.ammo_type) != 0)
+ {
+ continue;
+ }
+ GiveResource(receiver, RandomSelection_chosen_ent.ammo_type,
+ GetResource(ammo_entity,
+ RandomSelection_chosen_ent.ammo_type));
+ }
+}
+
+bool Item_GiveAmmoTo(entity item, entity player, int res_type, float ammomax)
+{
+ float amount = GetResource(item, res_type);
+ if (amount == 0)
+ {
+ return false;
+ }
+ float player_amount = GetResource(player, res_type);
+ if (item.spawnshieldtime)
+ {
+ if ((player_amount >= ammomax) && (item.pickup_anyway <= 0))
+ return false;
+ }
+ else if (g_weapon_stay == 2)
+ {
+ ammomax = min(amount, ammomax);
+ if(player_amount >= ammomax)
+ return false;
+ }
+ else
+ return false;
+ if (amount < 0)
+ TakeResourceWithLimit(player, res_type, -amount, ammomax);
+ else
+ GiveResourceWithLimit(player, res_type, amount, ammomax);
+ return true;
+}
+
+bool Item_GiveTo(entity item, entity player)
+{
+ // if nothing happens to player, just return without taking the item
+ int _switchweapon = 0;
+ // in case the player has autoswitch enabled do the following:
+ // if the player is using their best weapon before items are given, they
+ // probably want to switch to an even better weapon after items are given
+
+ if(CS(player).autoswitch)
+ {
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ .entity weaponentity = weaponentities[slot];
+ if(player.(weaponentity).m_weapon != WEP_Null || slot == 0)
+ {
+ if(player.(weaponentity).m_switchweapon == w_getbestweapon(player, weaponentity))
+ _switchweapon |= BIT(slot);
+
+ if(!(STAT(WEAPONS, player) & WepSet_FromWeapon(player.(weaponentity).m_switchweapon)))
+ _switchweapon |= BIT(slot);
+ }
+ }
+ }
+ bool pickedup = false;
+ pickedup |= Item_GiveAmmoTo(item, player, RES_HEALTH, item.max_health);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_ARMOR, item.max_armorvalue);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_SHELLS, g_pickup_shells_max);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_BULLETS, g_pickup_nails_max);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_ROCKETS, g_pickup_rockets_max);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_CELLS, g_pickup_cells_max);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_PLASMA, g_pickup_plasma_max);
+ pickedup |= Item_GiveAmmoTo(item, player, RES_FUEL, g_pickup_fuel_max);
+ if (item.itemdef.instanceOfWeaponPickup)
+ {
+ WepSet w;
+ w = STAT(WEAPONS, item);
+ w &= ~STAT(WEAPONS, player);
+
+ if (w || (item.spawnshieldtime && item.pickup_anyway > 0))
+ {
+ pickedup = true;
+ FOREACH(Weapons, it != WEP_Null, {
+ if(w & (it.m_wepset))
+ {
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ .entity weaponentity = weaponentities[slot];
+ if(player.(weaponentity).m_weapon != WEP_Null || slot == 0)
+ W_DropEvent(wr_pickup, player, it.m_id, item, weaponentity);
+ }
+ W_GiveWeapon(player, it.m_id);
+ }
+ });
+ }
+ }
+
+ if (item.itemdef.instanceOfPowerup)
+ {
+ if ((item.itemdef == ITEM_JetpackRegen) && !(player.items & IT_FUEL_REGEN))
+ Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_ITEM_FUELREGEN_GOT);
+ else if ((item.itemdef == ITEM_Jetpack) && !(player.items & IT_JETPACK))
+ Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_ITEM_JETPACK_GOT);
+ }
+
+ int its;
+ if((its = (item.items - (item.items & player.items)) & IT_PICKUPMASK))
+ {
+ pickedup = true;
+ player.items |= its;
+ // TODO: we probably want to show a message in the console, but not this one!
+ //Send_Notification(NOTIF_ONE, player, MSG_INFO, INFO_ITEM_WEAPON_GOT, item.netname);
+ }
+
+ if (item.strength_finished)
+ {
+ pickedup = true;
+ STAT(STRENGTH_FINISHED, player) = max(STAT(STRENGTH_FINISHED, player), time) + item.strength_finished;
+ }
+ if (item.invincible_finished)
+ {
+ pickedup = true;
+ STAT(INVINCIBLE_FINISHED, player) = max(STAT(INVINCIBLE_FINISHED, player), time) + item.invincible_finished;
+ }
+ if (item.superweapons_finished)
+ {
+ pickedup = true;
+ STAT(SUPERWEAPONS_FINISHED, player) = max(STAT(SUPERWEAPONS_FINISHED, player), time) + item.superweapons_finished;
+ }
+
+ // always eat teamed entities
+ if(item.team)
+ pickedup = true;
+
+ if (!pickedup)
+ return false;
+
+ // crude hack to enforce switching weapons
+ if(g_cts && item.itemdef.instanceOfWeaponPickup && !CS(player).cvar_cl_cts_noautoswitch)
+ {
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ .entity weaponentity = weaponentities[slot];
+ if(player.(weaponentity).m_weapon != WEP_Null || slot == 0)
+ W_SwitchWeapon_Force(player, REGISTRY_GET(Weapons, item.weapon), weaponentity);
+ }
+ return true;
+ }
+
+ if(_switchweapon)
+ {
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ .entity weaponentity = weaponentities[slot];
+ if(_switchweapon & BIT(slot))
+ if(player.(weaponentity).m_switchweapon != w_getbestweapon(player, weaponentity))
+ W_SwitchWeapon_Force(player, w_getbestweapon(player, weaponentity), weaponentity);
+ }
+ }
+
+ return true;
+}
+
+void Item_Touch(entity this, entity toucher)
+{
+ // remove the item if it's currnetly in a NODROP brush or hits a NOIMPACT surface (such as sky)
+ if (Item_IsLoot(this))
+ {
+ if (ITEM_TOUCH_NEEDKILL())
+ {
+ delete(this);
+ return;
+ }
+ }
+
+ if(!(toucher.flags & FL_PICKUPITEMS)
+ || STAT(FROZEN, toucher)
+ || IS_DEAD(toucher)
+ || (this.solid != SOLID_TRIGGER)
+ || (this.owner == toucher)
+ || (time < this.item_spawnshieldtime)
+ ) { return; }
+
+ switch (MUTATOR_CALLHOOK(ItemTouch, this, toucher))
+ {
+ case MUT_ITEMTOUCH_RETURN: { return; }
+ case MUT_ITEMTOUCH_PICKUP: { toucher = M_ARGV(1, entity); goto pickup; }
+ }
+
+ toucher = M_ARGV(1, entity);
+
+ if (Item_IsExpiring(this))
+ {
+ this.strength_finished = max(0, this.strength_finished - time);
+ this.invincible_finished = max(0, this.invincible_finished - time);
+ this.superweapons_finished = max(0, this.superweapons_finished - time);
+ }
+ bool gave = ITEM_HANDLE(Pickup, this.itemdef, this, toucher);
+ if (!gave)
+ {
+ if (Item_IsExpiring(this))
+ {
+ // undo what we did above
+ this.strength_finished += time;
+ this.invincible_finished += time;
+ this.superweapons_finished += time;
+ }
+ return;
+ }
+
+LABEL(pickup)
+
+ if(this.target && this.target != "" && this.target != "###item###") // defrag support
+ SUB_UseTargets(this, toucher, NULL);
+
+ STAT(LAST_PICKUP, toucher) = time;
+
+ Send_Effect(EFFECT_ITEM_PICKUP, CENTER_OR_VIEWOFS(this), '0 0 0', 1);
+ _sound (toucher, (this.itemdef.instanceOfPowerup ? CH_TRIGGER_SINGLE : CH_TRIGGER), (this.item_pickupsound ? this.item_pickupsound : Sound_fixpath(this.item_pickupsound_ent)), VOL_BASE, ATTEN_NORM);
+
+ MUTATOR_CALLHOOK(ItemTouched, this, toucher);
+ if (wasfreed(this))
+ {
+ return;
+ }
+
+ if (Item_IsLoot(this))
+ {
+ delete(this);
+ return;
+ }
+ if (!this.spawnshieldtime)
+ {
+ return;
+ }
+ entity e;
+ if (this.team)
+ {
+ RandomSelection_Init();
+ IL_EACH(g_items, it.team == this.team,
+ {
+ if (it.itemdef) // is a registered item
+ {
+ Item_Show(it, -1);
+ it.scheduledrespawntime = 0;
+ RandomSelection_AddEnt(it, it.cnt, 0);
+ }
+ });
+ e = RandomSelection_chosen_ent;
+ Item_Show(e, 1); // reset its state so it is visible (extra sendflags doesn't matter, this happens anyway)
+ }
+ else
+ e = this;
+ Item_ScheduleRespawn(e);
+}
+
+void Item_Reset(entity this)
+{
+ Item_Show(this, !this.state);
+ setorigin(this, this.origin);
+
+ if (Item_IsLoot(this))
+ {
+ return;
+ }
+ setthink(this, Item_Think);
+ this.nextthink = time;
+ if (this.waypointsprite_attached)
+ {
+ WaypointSprite_Kill(this.waypointsprite_attached);
+ }
+ if (this.itemdef.instanceOfPowerup || (STAT(WEAPONS, this) & WEPSET_SUPERWEAPONS)) // do not spawn powerups initially!
+ {
+ Item_ScheduleInitialRespawn(this);
+ }
+}
+
+void Item_FindTeam(entity this)
+{
+ entity e;
+
+ if(this.effects & EF_NODRAW)
+ {
+ // marker for item team search
+ LOG_TRACE("Initializing item team ", ftos(this.team));
+ RandomSelection_Init();
+ IL_EACH(g_items, it.team == this.team,
+ {
+ if(it.itemdef) // is a registered item
+ RandomSelection_AddEnt(it, it.cnt, 0);
+ });
+
+ e = RandomSelection_chosen_ent;
+ if (!e)
+ return;
+
+ IL_EACH(g_items, it.team == this.team,
+ {
+ if(it.itemdef) // is a registered item
+ {
+ if(it != e)
+ {
+ // make it non-spawned
+ Item_Show(it, -1);
+ it.state = 1; // state 1 = initially hidden item, apparently
+ }
+ else
+ Item_Reset(it);
+ it.effects &= ~EF_NODRAW;
+ }
+ });
+ }
+}
+
+// Savage: used for item garbage-collection
+void RemoveItem(entity this)
+{
+ if(wasfreed(this) || !this) { return; }
+ Send_Effect(EFFECT_ITEM_PICKUP, CENTER_OR_VIEWOFS(this), '0 0 0', 1);
+ delete(this);
+}
+
+// pickup evaluation functions
+// these functions decide how desirable an item is to the bots
+
+float generic_pickupevalfunc(entity player, entity item) {return item.bot_pickupbasevalue;}
+
+float weapon_pickupevalfunc(entity player, entity item)
+{
+ // See if I have it already
+ if(STAT(WEAPONS, player) & STAT(WEAPONS, item))
+ {
+ // If I can pick it up
+ if(!item.spawnshieldtime)
+ return 0;
+ return ammo_pickupevalfunc(player, item);
+ }
+
+ // reduce weapon value if bot already got a good arsenal
+ float c = 1;
+ int weapons_value = 0;
+ FOREACH(Weapons, it != WEP_Null && (STAT(WEAPONS, player) & it.m_wepset), {
+ weapons_value += it.bot_pickupbasevalue;
+ });
+ c -= bound(0, weapons_value / 20000, 1) * 0.5;
+
+ return item.bot_pickupbasevalue * c;
+}
+
+float ammo_pickupevalfunc(entity player, entity item)
+{
+ bool need_shells = false, need_nails = false, need_rockets = false, need_cells = false, need_plasma = false, need_fuel = false;
+ entity wpn = NULL;
+ float c = 0;
+ float rating = 0;
+
+ // Detect needed ammo
+ if(item.itemdef.instanceOfWeaponPickup)
+ {
+ entity ammo = NULL;
+ if(GetResource(item, RES_SHELLS)) { need_shells = true; ammo = ITEM_Shells; }
+ else if(GetResource(item, RES_BULLETS)) { need_nails = true; ammo = ITEM_Bullets; }
+ else if(GetResource(item, RES_ROCKETS)) { need_rockets = true; ammo = ITEM_Rockets; }
+ else if(GetResource(item, RES_CELLS)) { need_cells = true; ammo = ITEM_Cells; }
+ else if(GetResource(item, RES_PLASMA)) { need_plasma = true; ammo = ITEM_Plasma; }
+ else if(GetResource(item, RES_FUEL)) { need_fuel = true; ammo = ITEM_JetpackFuel; }
+
+ if(!ammo)
+ return 0;
+ wpn = item;
+ rating = ammo.m_botvalue;
+ }
+ else
+ {
+ FOREACH(Weapons, it != WEP_Null, {
+ if(!(STAT(WEAPONS, player) & (it.m_wepset)))
+ continue;
+
+ switch(it.ammo_type)
+ {
+ case RES_SHELLS: need_shells = true; break;
+ case RES_BULLETS: need_nails = true; break;
+ case RES_ROCKETS: need_rockets = true; break;
+ case RES_CELLS: need_cells = true; break;
+ case RES_PLASMA: need_plasma = true; break;
+ case RES_FUEL: need_fuel = true; break;
+ }
+ });
+ rating = item.bot_pickupbasevalue;
+ }
+
+ float noammorating = 0.5;
+
+ if ((need_shells) && GetResource(item, RES_SHELLS) && (GetResource(player, RES_SHELLS) < g_pickup_shells_max))
+ c = GetResource(item, RES_SHELLS) / max(noammorating, GetResource(player, RES_SHELLS));
+
+ if ((need_nails) && GetResource(item, RES_BULLETS) && (GetResource(player, RES_BULLETS) < g_pickup_nails_max))
+ c = GetResource(item, RES_BULLETS) / max(noammorating, GetResource(player, RES_BULLETS));
+
+ if ((need_rockets) && GetResource(item, RES_ROCKETS) && (GetResource(player, RES_ROCKETS) < g_pickup_rockets_max))
+ c = GetResource(item, RES_ROCKETS) / max(noammorating, GetResource(player, RES_ROCKETS));
+
+ if ((need_cells) && GetResource(item, RES_CELLS) && (GetResource(player, RES_CELLS) < g_pickup_cells_max))
+ c = GetResource(item, RES_CELLS) / max(noammorating, GetResource(player, RES_CELLS));
+
+ if ((need_plasma) && GetResource(item, RES_PLASMA) && (GetResource(player, RES_PLASMA) < g_pickup_plasma_max))
+ c = GetResource(item, RES_PLASMA) / max(noammorating, GetResource(player, RES_PLASMA));
+
+ if ((need_fuel) && GetResource(item, RES_FUEL) && (GetResource(player, RES_FUEL) < g_pickup_fuel_max))
+ c = GetResource(item, RES_FUEL) / max(noammorating, GetResource(player, RES_FUEL));
+
+ rating *= min(c, 2);
+ if(wpn)
+ rating += wpn.bot_pickupbasevalue * 0.1;
+ return rating;
+}
+
+float healtharmor_pickupevalfunc(entity player, entity item)
+{
+ float c = 0;
+ float rating = item.bot_pickupbasevalue;
+
+ float itemarmor = GetResource(item, RES_ARMOR);
+ float itemhealth = GetResource(item, RES_HEALTH);
+
+ if(item.item_group)
+ {
+ itemarmor *= min(4, item.item_group_count);
+ itemhealth *= min(4, item.item_group_count);
+ }
+
+ if (itemarmor && (GetResource(player, RES_ARMOR) < item.max_armorvalue))
+ c = itemarmor / max(1, GetResource(player, RES_ARMOR) * 2/3 + GetResource(player, RES_HEALTH) * 1/3);
+
+ if (itemhealth && (GetResource(player, RES_HEALTH) < item.max_health))
+ c = itemhealth / max(1, GetResource(player, RES_HEALTH));
+
+ rating *= min(2, c);
+ return rating;
+}
+
+void Item_Damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force)
+{
+ if(ITEM_DAMAGE_NEEDKILL(deathtype))
+ RemoveItem(this);
+}
+
+void item_use(entity this, entity actor, entity trigger)
+{
+ // use the touch function to handle collection
+ gettouch(this)(this, actor);
+}
+
+void _StartItem(entity this, entity def, float defaultrespawntime, float defaultrespawntimejitter)
+{
+ string itemname = def.m_name;
+ Model itemmodel = def.m_model;
+ Sound pickupsound = def.m_sound;
+ float(entity player, entity item) pickupevalfunc = def.m_pickupevalfunc;
+ float pickupbasevalue = def.m_botvalue;
+ int itemflags = def.m_itemflags;
+
+ startitem_failed = false;
+
+ this.item_model_ent = itemmodel;
+ this.item_pickupsound_ent = pickupsound;
+
+ if(def.m_iteminit)
+ def.m_iteminit(def, this);
+
+ if(!this.respawntime) // both need to be set
+ {
+ this.respawntime = defaultrespawntime;
+ this.respawntimejitter = defaultrespawntimejitter;
+ }
+
+ if(!this.pickup_anyway && def.m_pickupanyway)
+ this.pickup_anyway = def.m_pickupanyway();
+
+ int itemid = def.m_itemid;
+ this.items = itemid;
+ int weaponid = def.instanceOfWeaponPickup ? def.m_weapon.m_id : 0;
+ this.weapon = weaponid;
+
+ if(!this.fade_end)
+ {
+ this.fade_start = autocvar_g_items_mindist;
+ this.fade_end = autocvar_g_items_maxdist;
+ }
+
+ if(weaponid)
+ STAT(WEAPONS, this) = WepSet_FromWeapon(REGISTRY_GET(Weapons, weaponid));
+
+ this.flags = FL_ITEM | itemflags;
+ IL_PUSH(g_items, this);
+
+ if(MUTATOR_CALLHOOK(FilterItem, this)) // error means we do not want the item
+ {
+ startitem_failed = true;
+ delete(this);
+ return;
+ }
+
+ precache_model(this.model);
+ precache_sound(this.item_pickupsound);
+
+ if (Item_IsLoot(this))
+ {
+ this.reset = SUB_Remove;
+ set_movetype(this, MOVETYPE_TOSS);
+
+ // Savage: remove thrown items after a certain period of time ("garbage collection")
+ setthink(this, RemoveItem);
+ this.nextthink = time + 20;
+
+ this.takedamage = DAMAGE_YES;
+ this.event_damage = Item_Damage;
+
+ if (Item_IsExpiring(this))
+ {
+ // if item is worthless after a timer, have it expire then
+ this.nextthink = max(this.strength_finished, this.invincible_finished, this.superweapons_finished);
+ }
+
+ // don't drop if in a NODROP zone (such as lava)
+ traceline(this.origin, this.origin, MOVE_NORMAL, this);
+ if (trace_dpstartcontents & DPCONTENTS_NODROP)
+ {
+ startitem_failed = true;
+ delete(this);
+ return;
+ }
+ }
+ else
+ {
+ if(!have_pickup_item(this))
+ {
+ startitem_failed = true;
+ delete(this);
+ return;
+ }
+
+ if(this.angles != '0 0 0')
+ this.SendFlags |= ISF_ANGLES;
+
+ this.reset = Item_Reset;
+ // it's a level item
+ if(this.spawnflags & 1)
+ this.noalign = 1;
+ if (this.noalign > 0)
+ set_movetype(this, MOVETYPE_NONE);
+ else
+ set_movetype(this, MOVETYPE_TOSS);
+ // do item filtering according to game mode and other things
+ if (this.noalign <= 0)
+ {
+ // first nudge it off the floor a little bit to avoid math errors
+ setorigin(this, this.origin + '0 0 1');
+ // set item size before we spawn a spawnfunc_waypoint
+ setsize(this, def.m_mins, def.m_maxs);
+ this.SendFlags |= ISF_SIZE;
+ // note droptofloor returns false if stuck/or would fall too far
+ if (!this.noalign)
+ droptofloor(this);
+ waypoint_spawnforitem(this);
+ }
+
+ /*
+ * can't do it that way, as it would break maps
+ * TODO make a target_give like entity another way, that perhaps has
+ * the weapon name in a key
+ if(this.targetname)
+ {
+ // target_give not yet supported; maybe later
+ print("removed targeted ", this.classname, "\n");
+ startitem_failed = true;
+ delete(this);
+ return;
+ }
+ */
+
+ if(this.targetname != "" && (this.spawnflags & 16))
+ this.use = item_use;
+
+ if(autocvar_spawn_debug >= 2)
+ {
+ // why not flags & fl_item?
+ FOREACH_ENTITY_RADIUS(this.origin, 3, it.is_item, {
+ LOG_TRACE("XXX Found duplicated item: ", itemname, vtos(this.origin));
+ LOG_TRACE(" vs ", it.netname, vtos(it.origin));
+ error("Mapper sucks.");
+ });
+ this.is_item = true;
+ }
+
+ weaponsInMap |= WepSet_FromWeapon(REGISTRY_GET(Weapons, weaponid));
+
+ if ( def.instanceOfPowerup
+ || def.instanceOfWeaponPickup
+ || (def.instanceOfHealth && def != ITEM_HealthSmall)
+ || (def.instanceOfArmor && def != ITEM_ArmorSmall)
+ || (itemid & (IT_KEY1 | IT_KEY2))
+ )
+ {
+ if(!this.target || this.target == "")
+ this.target = "###item###"; // for finding the nearest item using findnearest
+ }
+
+ Item_ItemsTime_SetTime(this, 0);
+ }
+
+ this.bot_pickup = true;
+ this.bot_pickupevalfunc = pickupevalfunc;
+ this.bot_pickupbasevalue = pickupbasevalue;
+ this.mdl = this.model ? this.model : strzone(this.item_model_ent.model_str());
+ this.netname = itemname;
+ settouch(this, Item_Touch);
+ setmodel(this, MDL_Null); // precision set below
+ //this.effects |= EF_LOWPRECISION;
+
+ setsize (this, this.pos1 = def.m_mins, this.pos2 = def.m_maxs);
+
+ this.SendFlags |= ISF_SIZE;
+
+ if (!(this.spawnflags & 1024)) {
+ if(def.instanceOfPowerup)
+ this.ItemStatus |= ITS_ANIMATE1;
+
+ if(GetResource(this, RES_ARMOR) || GetResource(this, RES_HEALTH))
+ this.ItemStatus |= ITS_ANIMATE2;
+ }
+
+ if(Item_IsLoot(this))
+ this.gravity = 1;
+
+ if(def.instanceOfWeaponPickup)
+ {
+ if (!Item_IsLoot(this)) // if dropped, colormap is already set up nicely
+ this.colormap = 1024; // color shirt=0 pants=0 grey
+ if (!(this.spawnflags & 1024))
+ this.ItemStatus |= ITS_ANIMATE1;
+ this.SendFlags |= ISF_COLORMAP;
+ }
+
+ this.state = 0;
+ if(this.team)
+ {
+ if(!this.cnt)
+ this.cnt = 1; // item probability weight
+
+ this.effects |= EF_NODRAW; // marker for item team search
+ InitializeEntity(this, Item_FindTeam, INITPRIO_FINDTARGET);
+ }
+ else
+ Item_Reset(this);
+
+ Net_LinkEntity(this, !(def.instanceOfPowerup || def.instanceOfHealth || def.instanceOfArmor), 0, ItemSend);
+
+ // call this hook after everything else has been done
+ if (MUTATOR_CALLHOOK(Item_Spawn, this))
+ {
+ startitem_failed = true;
+ delete(this);
+ return;
+ }
+
+ setItemGroup(this);
+}
+
+void StartItem(entity this, GameItem def)
+{
+ def = def.m_spawnfunc_hookreplace(def, this);
+ if (def.spawnflags & ITEM_FLAG_MUTATORBLOCKED)
+ {
+ delete(this);
+ return;
+ }
+ this.classname = def.m_canonical_spawnfunc;
+ _StartItem(
+ this,
+ this.itemdef = def,
+ def.m_respawntime(), // defaultrespawntime
+ def.m_respawntimejitter() // defaultrespawntimejitter
+ );
+}
+
+#define IS_SMALL(def) ((def.instanceOfHealth && def == ITEM_HealthSmall) || (def.instanceOfArmor && def == ITEM_ArmorSmall))
+int group_count = 1;
+
+void setItemGroup(entity this)
+{
+ if(!IS_SMALL(this.itemdef) || Item_IsLoot(this))
+ return;
+
+ FOREACH_ENTITY_RADIUS(this.origin, 120, (it != this) && IS_SMALL(it.itemdef),
+ {
+ if(!this.item_group)
+ {
+ if(!it.item_group)
+ {
+ it.item_group = group_count;
+ group_count++;
+ }
+ this.item_group = it.item_group;
+ }
+ else // spawning item is already part of a item_group X
+ {
+ if(!it.item_group)
+ it.item_group = this.item_group;
+ else if(it.item_group != this.item_group) // found an item near the spawning item that is part of a different item_group Y
+ {
+ int grY = it.item_group;
+ // move all items of item_group Y to item_group X
+ IL_EACH(g_items, IS_SMALL(it.itemdef),
+ {
+ if(it.item_group == grY)
+ it.item_group = this.item_group;
+ });
+ }
+ }
+ });
+}
+
+void setItemGroupCount()
+{
+ for (int k = 1; k <= group_count; k++)
+ {
+ int count = 0;
+ IL_EACH(g_items, IS_SMALL(it.itemdef) && it.item_group == k, { count++; });
+ if (count)
+ IL_EACH(g_items, IS_SMALL(it.itemdef) && it.item_group == k, { it.item_group_count = count; });
+ }
+}
+
+void target_items_use(entity this, entity actor, entity trigger)
+{
+ if(Item_IsLoot(actor))
+ {
+ EXACTTRIGGER_TOUCH(this, trigger);
+ delete(actor);
+ return;
+ }
+
+ if (!IS_PLAYER(actor) || IS_DEAD(actor))
+ return;
+
+ if(trigger.solid == SOLID_TRIGGER)
+ {
+ EXACTTRIGGER_TOUCH(this, trigger);
+ }
+
+ IL_EACH(g_items, it.enemy == actor && Item_IsLoot(it),
+ {
+ delete(it);
+ });
+
+ if(GiveItems(actor, 0, tokenize_console(this.netname)))
+ centerprint(actor, this.message);
+}
+
+spawnfunc(target_items)
+{
+ this.use = target_items_use;
+ if(!this.strength_finished)
+ this.strength_finished = autocvar_g_balance_powerup_strength_time;
+ if(!this.invincible_finished)
+ this.invincible_finished = autocvar_g_balance_powerup_invincible_time;
+ if(!this.superweapons_finished)
+ this.superweapons_finished = autocvar_g_balance_superweapons_time;
+
+ string str;
+ int n = tokenize_console(this.netname);
+ if(argv(0) == "give")
+ {
+ str = substring(this.netname, argv_start_index(1), argv_end_index(-1) - argv_start_index(1));
+ }
+ else
+ {
+ for(int j = 0; j < n; ++j)
+ {
+ // this is from a time when unlimited superweapons were handled together with ammo in some parts of the code
+ if (argv(j) == "unlimited_ammo") this.items |= IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS;
+ else if(argv(j) == "unlimited_weapon_ammo") this.items |= IT_UNLIMITED_AMMO;
+ else if(argv(j) == "unlimited_superweapons") this.items |= IT_UNLIMITED_SUPERWEAPONS;
+ else if(argv(j) == "strength") this.items |= ITEM_Strength.m_itemid;
+ else if(argv(j) == "invincible") this.items |= ITEM_Shield.m_itemid;
+ else if(argv(j) == "superweapons") this.items |= IT_SUPERWEAPON;
+ else if(argv(j) == "jetpack") this.items |= ITEM_Jetpack.m_itemid;
+ else if(argv(j) == "fuel_regen") this.items |= ITEM_JetpackRegen.m_itemid;
+ else
+ {
+ FOREACH(Buffs, it != BUFF_Null,
+ {
+ string s = Buff_UndeprecateName(argv(j));
+ if(s == it.netname)
+ {
+ STAT(BUFFS, this) |= (it.m_itemid);
+ if(!STAT(BUFF_TIME, this))
+ STAT(BUFF_TIME, this) = it.m_time(it);
+ break;
+ }
+ });
+ FOREACH(Weapons, it != WEP_Null, {
+ string s = W_UndeprecateName(argv(j));
+ if(s == it.netname)
+ {
+ STAT(WEAPONS, this) |= (it.m_wepset);
+ if(this.spawnflags == 0 || this.spawnflags == 2)
+ it.wr_init(it);
+ break;
+ }
+ });
+ }
+ }
+
+ string itemprefix, valueprefix;
+ if(this.spawnflags == 0)
+ {
+ itemprefix = "";
+ valueprefix = "";
+ }
+ else if(this.spawnflags == 1)
+ {
+ itemprefix = "max ";
+ valueprefix = "max ";
+ }
+ else if(this.spawnflags == 2)
+ {
+ itemprefix = "min ";
+ valueprefix = "min ";
+ }
+ else if(this.spawnflags == 4)
+ {
+ itemprefix = "minus ";
+ valueprefix = "max ";
+ }
+ else
+ {
+ error("invalid spawnflags");
+ itemprefix = valueprefix = string_null;
+ }
+
+ str = "";
+ str = sprintf("%s %s%d %s", str, itemprefix, boolean(this.items & IT_UNLIMITED_AMMO), "unlimited_weapon_ammo");
+ str = sprintf("%s %s%d %s", str, itemprefix, boolean(this.items & IT_UNLIMITED_SUPERWEAPONS), "unlimited_superweapons");
+ str = sprintf("%s %s%d %s", str, valueprefix, this.strength_finished * boolean(this.items & ITEM_Strength.m_itemid), "strength");
+ str = sprintf("%s %s%d %s", str, valueprefix, this.invincible_finished * boolean(this.items & ITEM_Shield.m_itemid), "invincible");
+ str = sprintf("%s %s%d %s", str, valueprefix, this.superweapons_finished * boolean(this.items & IT_SUPERWEAPON), "superweapons");
+ str = sprintf("%s %s%d %s", str, itemprefix, boolean(this.items & ITEM_Jetpack.m_itemid), "jetpack");
+ str = sprintf("%s %s%d %s", str, itemprefix, boolean(this.items & ITEM_JetpackRegen.m_itemid), "fuel_regen");
+ float res;
+ res = GetResource(this, RES_SHELLS); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "shells");
+ res = GetResource(this, RES_BULLETS); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "nails");
+ res = GetResource(this, RES_ROCKETS); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "rockets");
+ res = GetResource(this, RES_CELLS); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "cells");
+ res = GetResource(this, RES_PLASMA); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "plasma");
+ res = GetResource(this, RES_FUEL); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "fuel");
+ res = GetResource(this, RES_HEALTH); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "health");
+ res = GetResource(this, RES_ARMOR); if(res != 0) str = sprintf("%s %s%d %s", str, valueprefix, max(0, res), "armor");
+ // HACK: buffs share a single timer, so we need to include enabled buffs AFTER disabled ones to avoid loss
+ FOREACH(Buffs, it != BUFF_Null && !(STAT(BUFFS, this) & it.m_itemid), str = sprintf("%s %s%d %s", str, valueprefix, max(0, STAT(BUFF_TIME, this)), it.netname));
+ FOREACH(Buffs, it != BUFF_Null && (STAT(BUFFS, this) & it.m_itemid), str = sprintf("%s %s%d %s", str, valueprefix, max(0, STAT(BUFF_TIME, this)), it.netname));
+ FOREACH(Weapons, it != WEP_Null, str = sprintf("%s %s%d %s", str, itemprefix, !!(STAT(WEAPONS, this) & (it.m_wepset)), it.netname));
+ }
+ this.netname = strzone(str);
+
+ n = tokenize_console(this.netname);
+ for(int j = 0; j < n; ++j)
+ {
+ FOREACH(Weapons, it != WEP_Null && W_UndeprecateName(argv(j)) == it.netname, {
+ it.wr_init(it);
+ break;
+ });
+ }
+}
+
+float GiveWeapon(entity e, float wpn, float op, float val)
+{
+ WepSet v0, v1;
+ WepSet s = WepSet_FromWeapon(REGISTRY_GET(Weapons, wpn));
+ v0 = (STAT(WEAPONS, e) & s);
+ switch(op)
+ {
+ case OP_SET:
+ if(val > 0)
+ STAT(WEAPONS, e) |= s;
+ else
+ STAT(WEAPONS, e) &= ~s;
+ break;
+ case OP_MIN:
+ case OP_PLUS:
+ if(val > 0)
+ STAT(WEAPONS, e) |= s;
+ break;
+ case OP_MAX:
+ if(val <= 0)
+ STAT(WEAPONS, e) &= ~s;
+ break;
+ case OP_MINUS:
+ if(val > 0)
+ STAT(WEAPONS, e) &= ~s;
+ break;
+ }
+ v1 = (STAT(WEAPONS, e) & s);
+ return (v0 != v1);
+}
+
+bool GiveBuff(entity e, Buff thebuff, int op, int val)
+{
+ bool had_buff = (STAT(BUFFS, e) & thebuff.m_itemid);
+ float new_buff_time = ((had_buff) ? STAT(BUFF_TIME, e) : 0);
+ switch (op)
+ {
+ case OP_SET:
+ new_buff_time = val;
+ break;
+ case OP_MIN:
+ new_buff_time = max(new_buff_time, val);
+ break;
+ case OP_MAX:
+ new_buff_time = min(new_buff_time, val);
+ break;
+ case OP_PLUS:
+ new_buff_time += val;
+ break;
+ case OP_MINUS:
+ new_buff_time -= val;
+ break;
+ }
+ if(new_buff_time <= 0)
+ {
+ if(had_buff)
+ STAT(BUFF_TIME, e) = new_buff_time;
+ STAT(BUFFS, e) &= ~thebuff.m_itemid;
+ }
+ else
+ {
+ STAT(BUFF_TIME, e) = new_buff_time;
+ STAT(BUFFS, e) = thebuff.m_itemid; // NOTE: replaces any existing buffs on the player!
+ }
+ bool have_buff = (STAT(BUFFS, e) & thebuff.m_itemid);
+ return (had_buff != have_buff);
+}
+
+void GiveSound(entity e, float v0, float v1, float t, Sound snd_incr, Sound snd_decr)
+{
+ if(v1 == v0)
+ return;
+ if(v1 <= v0 - t)
+ {
+ if(snd_decr != NULL)
+ sound (e, CH_TRIGGER, snd_decr, VOL_BASE, ATTEN_NORM);
+ }
+ else if(v0 >= v0 + t)
+ {
+ if(snd_incr != NULL)
+ sound (e, CH_TRIGGER, snd_incr, VOL_BASE, ATTEN_NORM);
+ }
+}
+
+void GiveRot(entity e, float v0, float v1, .float rotfield, float rottime, .float regenfield, float regentime)
+{
+ if(v0 < v1)
+ e.(rotfield) = max(e.(rotfield), time + rottime);
+ else if(v0 > v1)
+ e.(regenfield) = max(e.(regenfield), time + regentime);
+}
+bool GiveResourceValue(entity e, int res_type, int op, int val)
+{
+ int v0 = GetResource(e, res_type);
+ float new_val = 0;
+ switch (op)
+ {
+ // min 100 cells = at least 100 cells
+ case OP_SET: new_val = val; break;
+ case OP_MIN: new_val = max(v0, val); break;
+ case OP_MAX: new_val = min(v0, val); break;
+ case OP_PLUS: new_val = v0 + val; break;
+ case OP_MINUS: new_val = v0 - val; break;
+ default: return false;
+ }
+
+ return SetResourceExplicit(e, res_type, new_val);
+}
+
+float GiveItems(entity e, float beginarg, float endarg)
+{
+ float got, i, val, op;
+ string cmd;
+
+ val = 999;
+ op = OP_SET;
+
+ got = 0;
+
+ int _switchweapon = 0;
+
+ if(CS(e).autoswitch)
+ {
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ .entity weaponentity = weaponentities[slot];
+ if(e.(weaponentity).m_weapon != WEP_Null || slot == 0)
+ if(e.(weaponentity).m_switchweapon == w_getbestweapon(e, weaponentity))
+ _switchweapon |= BIT(slot);
+ }
+ }
+
+ STAT(STRENGTH_FINISHED, e) = max(0, STAT(STRENGTH_FINISHED, e) - time);
+ STAT(INVINCIBLE_FINISHED, e) = max(0, STAT(INVINCIBLE_FINISHED, e) - time);
+ STAT(SUPERWEAPONS_FINISHED, e) = max(0, STAT(SUPERWEAPONS_FINISHED, e) - time);
+ STAT(BUFF_TIME, e) = max(0, STAT(BUFF_TIME, e) - time);
+
+ PREGIVE(e, items);
+ PREGIVE_WEAPONS(e);
+ PREGIVE(e, stat_STRENGTH_FINISHED);
+ PREGIVE(e, stat_INVINCIBLE_FINISHED);
+ PREGIVE(e, stat_SUPERWEAPONS_FINISHED);
+ PREGIVE_RESOURCE(e, RES_BULLETS);
+ PREGIVE_RESOURCE(e, RES_CELLS);
+ PREGIVE_RESOURCE(e, RES_PLASMA);
+ PREGIVE_RESOURCE(e, RES_SHELLS);
+ PREGIVE_RESOURCE(e, RES_ROCKETS);
+ PREGIVE_RESOURCE(e, RES_FUEL);
+ PREGIVE_RESOURCE(e, RES_ARMOR);
+ PREGIVE_RESOURCE(e, RES_HEALTH);
+
+ for(i = beginarg; i < endarg; ++i)
+ {
+ cmd = argv(i);
+
+ if(cmd == "0" || stof(cmd))
+ {
+ val = stof(cmd);
+ continue;
+ }
+ switch(cmd)
+ {
+ case "no":
+ op = OP_MAX;
+ val = 0;
+ continue;
+ case "max":
+ op = OP_MAX;
+ continue;
+ case "min":
+ op = OP_MIN;
+ continue;
+ case "plus":
+ op = OP_PLUS;
+ continue;
+ case "minus":
+ op = OP_MINUS;
+ continue;
+ case "ALL":
+ got += GiveBit(e, items, ITEM_JetpackRegen.m_itemid, op, val);
+ got += GiveValue(e, stat_STRENGTH_FINISHED, op, val);
+ got += GiveValue(e, stat_INVINCIBLE_FINISHED, op, val);
+ got += GiveValue(e, stat_SUPERWEAPONS_FINISHED, op, val);
+ got += GiveBit(e, items, IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS, op, val);
+ case "all":
+ got += GiveBit(e, items, ITEM_Jetpack.m_itemid, op, val);
+ got += GiveResourceValue(e, RES_HEALTH, op, val);
+ got += GiveResourceValue(e, RES_ARMOR, op, val);
+ case "allweapons":
+ FOREACH(Weapons, it != WEP_Null && !(it.spawnflags & (WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_SPECIALATTACK)), got += GiveWeapon(e, it.m_id, op, val));
+ //case "allbuffs": // all buffs makes a player god, do not want!
+ //FOREACH(Buffs, it != BUFF_Null, got += GiveBuff(e, it.m_itemid, op, val));
+ case "allammo":
+ got += GiveResourceValue(e, RES_CELLS, op, val);
+ got += GiveResourceValue(e, RES_PLASMA, op, val);
+ got += GiveResourceValue(e, RES_SHELLS, op, val);
+ got += GiveResourceValue(e, RES_BULLETS, op, val);
+ got += GiveResourceValue(e, RES_ROCKETS, op, val);
+ got += GiveResourceValue(e, RES_FUEL, op, val);
+ break;
+ case "unlimited_ammo":
+ // this is from a time when unlimited superweapons were handled together with ammo in some parts of the code
+ got += GiveBit(e, items, IT_UNLIMITED_AMMO | IT_UNLIMITED_SUPERWEAPONS, op, val);
+ break;
+ case "unlimited_weapon_ammo":
+ got += GiveBit(e, items, IT_UNLIMITED_AMMO, op, val);
+ break;
+ case "unlimited_superweapons":
+ got += GiveBit(e, items, IT_UNLIMITED_SUPERWEAPONS, op, val);
+ break;
+ case "jetpack":
+ got += GiveBit(e, items, ITEM_Jetpack.m_itemid, op, val);
+ break;
+ case "fuel_regen":
+ got += GiveBit(e, items, ITEM_JetpackRegen.m_itemid, op, val);
+ break;
+ case "strength":
+ got += GiveValue(e, stat_STRENGTH_FINISHED, op, val);
+ break;
+ case "invincible":
+ got += GiveValue(e, stat_INVINCIBLE_FINISHED, op, val);
+ break;
+ case "superweapons":
+ got += GiveValue(e, stat_SUPERWEAPONS_FINISHED, op, val);
+ break;
+ case "cells":
+ got += GiveResourceValue(e, RES_CELLS, op, val);
+ break;
+ case "plasma":
+ got += GiveResourceValue(e, RES_PLASMA, op, val);
+ break;
+ case "shells":
+ got += GiveResourceValue(e, RES_SHELLS, op, val);
+ break;
+ case "nails":
+ case "bullets":
+ got += GiveResourceValue(e, RES_BULLETS, op, val);
+ break;
+ case "rockets":
+ got += GiveResourceValue(e, RES_ROCKETS, op, val);
+ break;
+ case "health":
+ got += GiveResourceValue(e, RES_HEALTH, op, val);
+ break;
+ case "armor":
+ got += GiveResourceValue(e, RES_ARMOR, op, val);
+ break;
+ case "fuel":
+ got += GiveResourceValue(e, RES_FUEL, op, val);
+ break;
+ default:
+ FOREACH(Buffs, it != BUFF_Null && buff_Available(it) && Buff_UndeprecateName(cmd) == it.netname,
+ {
+ got += GiveBuff(e, it, op, val);
+ break;
+ });
+ FOREACH(Weapons, it != WEP_Null && W_UndeprecateName(cmd) == it.netname, {
+ got += GiveWeapon(e, it.m_id, op, val);
+ break;
+ });
+ break;
+ }
+ val = 999;
+ op = OP_SET;
+ }
+
+ POSTGIVE_BIT(e, items, ITEM_JetpackRegen.m_itemid, SND_ITEMPICKUP, SND_Null);
+ POSTGIVE_BIT(e, items, IT_UNLIMITED_SUPERWEAPONS, SND_POWERUP, SND_POWEROFF);
+ POSTGIVE_BIT(e, items, IT_UNLIMITED_AMMO, SND_POWERUP, SND_POWEROFF);
+ POSTGIVE_BIT(e, items, ITEM_Jetpack.m_itemid, SND_ITEMPICKUP, SND_Null);
+ FOREACH(Weapons, it != WEP_Null, {
+ POSTGIVE_WEAPON(e, it, SND_WEAPONPICKUP, SND_Null);
+ if(!(save_weapons & (it.m_wepset)))
+ if(STAT(WEAPONS, e) & (it.m_wepset))
+ it.wr_init(it);
+ });
+ POSTGIVE_VALUE(e, stat_STRENGTH_FINISHED, 1, SND_POWERUP, SND_POWEROFF);
+ POSTGIVE_VALUE(e, stat_INVINCIBLE_FINISHED, 1, SND_Shield, SND_POWEROFF);
+ //POSTGIVE_VALUE(e, stat_SUPERWEAPONS_FINISHED, 1, SND_Null, SND_Null);
+ POSTGIVE_RESOURCE(e, RES_BULLETS, 0, SND_ITEMPICKUP, SND_Null);
+ POSTGIVE_RESOURCE(e, RES_CELLS, 0, SND_ITEMPICKUP, SND_Null);
+ POSTGIVE_RESOURCE(e, RES_PLASMA, 0, SND_ITEMPICKUP, SND_Null);
+ POSTGIVE_RESOURCE(e, RES_SHELLS, 0, SND_ITEMPICKUP, SND_Null);
+ POSTGIVE_RESOURCE(e, RES_ROCKETS, 0, SND_ITEMPICKUP, SND_Null);
+ POSTGIVE_RES_ROT(e, RES_FUEL, 1, pauserotfuel_finished, autocvar_g_balance_pause_fuel_rot, pauseregen_finished, autocvar_g_balance_pause_fuel_regen, SND_ITEMPICKUP, SND_Null);
+ POSTGIVE_RES_ROT(e, RES_ARMOR, 1, pauserotarmor_finished, autocvar_g_balance_pause_armor_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, SND_ARMOR25, SND_Null);
+ POSTGIVE_RES_ROT(e, RES_HEALTH, 1, pauserothealth_finished, autocvar_g_balance_pause_health_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, SND_MEGAHEALTH, SND_Null);
+
+ if(STAT(SUPERWEAPONS_FINISHED, e) <= 0)
+ if(!g_weaponarena && (STAT(WEAPONS, e) & WEPSET_SUPERWEAPONS))
+ STAT(SUPERWEAPONS_FINISHED, e) = autocvar_g_balance_superweapons_time;
+
+ if(STAT(STRENGTH_FINISHED, e) <= 0)
+ STAT(STRENGTH_FINISHED, e) = 0;
+ else
+ STAT(STRENGTH_FINISHED, e) += time;
+ if(STAT(INVINCIBLE_FINISHED, e) <= 0)
+ STAT(INVINCIBLE_FINISHED, e) = 0;
+ else
+ STAT(INVINCIBLE_FINISHED, e) += time;
+ if(STAT(SUPERWEAPONS_FINISHED, e) <= 0)
+ STAT(SUPERWEAPONS_FINISHED, e) = 0;
+ else
+ STAT(SUPERWEAPONS_FINISHED, e) += time;
+ if(STAT(BUFF_TIME, e) <= 0)
+ STAT(BUFF_TIME, e) = 0;
+ else
+ STAT(BUFF_TIME, e) += time;
+
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ .entity weaponentity = weaponentities[slot];
+ if(e.(weaponentity).m_weapon != WEP_Null || slot == 0)
+ if(!(STAT(WEAPONS, e) & WepSet_FromWeapon(e.(weaponentity).m_switchweapon)))
+ _switchweapon |= BIT(slot);
+ }
+
+ if(_switchweapon)
+ {
+ for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+ {
+ .entity weaponentity = weaponentities[slot];
+ if(_switchweapon & BIT(slot))
+ {
+ Weapon wep = w_getbestweapon(e, weaponentity);
+ if(wep != e.(weaponentity).m_switchweapon)
+ W_SwitchWeapon_Force(e, wep, weaponentity);
+ }
+ }
+ }
+
+ return got;
+}
--- /dev/null
+#pragma once
+
+#include <common/sounds/sound.qh>
+
+void StartItem(entity this, entity a);
+.int item_group;
+.int item_group_count;
+
+float autocvar_sv_simple_items;
+bool ItemSend(entity this, entity to, int sf);
+
+bool have_pickup_item(entity this);
+
+const float ITEM_RESPAWN_TICKS = 10;
+
+.float max_armorvalue;
+.float pickup_anyway;
+
+.float item_respawncounter;
+
+// delay before this item can be picked up
+.float item_spawnshieldtime;
+
+void Item_Show (entity e, int mode);
+
+void Item_Respawn (entity this);
+
+void Item_RespawnCountdown(entity this);
+void Item_ScheduleRespawnIn(entity e, float t);
+
+void Item_ScheduleRespawn(entity e);
+
+void Item_ScheduleInitialRespawn(entity e);
+
+/// \brief Give several random weapons and ammo to the entity.
+/// \param[in,out] receiver Entity to give weapons to.
+/// \param[in] num_weapons Number of weapons to give.
+/// \param[in] weapon_names Names of weapons to give separated by spaces.
+/// \param[in] ammo Entity containing the ammo amount for each possible weapon.
+/// \return No return.
+void GiveRandomWeapons(entity receiver, int num_weapons, string weapon_names, entity ammo_entity);
+
+bool Item_GiveAmmoTo(entity item, entity player, int res_type, float ammomax);
+
+bool Item_GiveTo(entity item, entity player);
+
+void Item_Touch(entity this, entity toucher);
+
+void Item_Reset(entity this);
+
+void Item_FindTeam(entity this);
+// Savage: used for item garbage-collection
+
+bool ItemSend(entity this, entity to, int sf);
+void ItemUpdate(entity this);
+
+void UpdateItemAfterTeleport(entity this);
+
+// pickup evaluation functions
+// these functions decide how desirable an item is to the bots
+
+float generic_pickupevalfunc(entity player, entity item);// {return item.bot_pickupbasevalue;} // WEAPONTODO
+
+float weapon_pickupevalfunc(entity player, entity item);
+float ammo_pickupevalfunc(entity player, entity item);
+float healtharmor_pickupevalfunc(entity player, entity item);
+
+.bool is_item;
+.entity itemdef;
+void _StartItem(entity this, entity def, float defaultrespawntime, float defaultrespawntimejitter);
+
+void setItemGroup(entity this);
+void setItemGroupCount();
+
+float GiveWeapon(entity e, float wpn, float op, float val);
+
+float GiveBit(entity e, .float fld, float bit, float op, float val);
+
+float GiveValue(entity e, .float fld, float op, float val);
+
+void GiveSound(entity e, float v0, float v1, float t, Sound snd_incr, Sound snd_decr);
+
+void GiveRot(entity e, float v0, float v1, .float rotfield, float rottime, .float regenfield, float regentime);
+
+spawnfunc(target_items);
+
+#define PREGIVE_WEAPONS(e) WepSet save_weapons; save_weapons = STAT(WEAPONS, e)
+#define PREGIVE(e,f) float save_##f; save_##f = (e).f
+#define PREGIVE_RESOURCE(e,f) float save_##f = GetResource((e), (f))
+#define POSTGIVE_WEAPON(e,b,snd_incr,snd_decr) GiveSound((e), !!(save_weapons & WepSet_FromWeapon(b)), !!(STAT(WEAPONS, e) & WepSet_FromWeapon(b)), 0, snd_incr, snd_decr)
+#define POSTGIVE_BIT(e,f,b,snd_incr,snd_decr) GiveSound((e), save_##f & (b), (e).f & (b), 0, snd_incr, snd_decr)
+#define POSTGIVE_RESOURCE(e,f,t,snd_incr,snd_decr) GiveSound((e), save_##f, GetResource((e), (f)), t, snd_incr, snd_decr)
+#define POSTGIVE_RES_ROT(e,f,t,rotfield,rottime,regenfield,regentime,snd_incr,snd_decr) GiveRot((e),save_##f,GetResource((e),(f)),rotfield,rottime,regenfield,regentime);GiveSound((e),save_##f,GetResource((e),(f)),t,snd_incr,snd_decr)
+#define POSTGIVE_VALUE(e,f,t,snd_incr,snd_decr) GiveSound((e), save_##f, (e).f, t, snd_incr, snd_decr)
+#define POSTGIVE_VALUE_ROT(e,f,t,rotfield,rottime,regenfield,regentime,snd_incr,snd_decr) GiveRot((e), save_##f, (e).f, rotfield, rottime, regenfield, regentime); GiveSound((e), save_##f, (e).f, t, snd_incr, snd_decr)
+
+float GiveItems(entity e, float beginarg, float endarg);
--- /dev/null
+#include "spawning.qh"
+
+/// \file
+/// \brief Source file that contains implementation of the functions related to
+/// creation of game items.
+/// \copyright GNU GPLv2 or any later version.
+
+#include <server/mutators/_mod.qh>
+#include <server/weapons/spawning.qh>
+#include <common/weapons/all.qh>
+#include <common/mapobjects/subs.qh>
+
+.bool m_isloot; ///< Holds whether item is loot.
+/// \brief Holds whether strength, shield or superweapon timers expire while
+/// this item is on the ground.
+.bool m_isexpiring;
+
+entity Item_FindDefinition(string class_name)
+{
+ FOREACH(Items, it.m_canonical_spawnfunc == class_name,
+ {
+ return it;
+ });
+ FOREACH(Weapons, it.m_canonical_spawnfunc == class_name,
+ {
+ return it.m_pickup;
+ });
+ return NULL;
+}
+
+bool Item_IsAllowed(string class_name)
+{
+ entity definition = Item_FindDefinition(class_name);
+ if (definition == NULL)
+ {
+ return false;
+ }
+ return Item_IsDefinitionAllowed(definition);
+}
+
+bool Item_IsDefinitionAllowed(entity definition)
+{
+ return !MUTATOR_CALLHOOK(FilterItemDefinition, definition);
+}
+
+entity Item_Create(string class_name, vector position, bool no_align)
+{
+ entity item = spawn();
+ item.classname = class_name;
+ item.spawnfunc_checked = true;
+ setorigin(item, position);
+ item.noalign = no_align;
+ Item_Initialize(item, class_name);
+ if (wasfreed(item))
+ {
+ return NULL;
+ }
+ return item;
+}
+
+void Item_Initialize(entity item, string class_name)
+{
+ FOREACH(Weapons, it.m_canonical_spawnfunc == class_name,
+ {
+ weapon_defaultspawnfunc(item, it);
+ return;
+ });
+ FOREACH(Items, it.m_canonical_spawnfunc == class_name,
+ {
+ StartItem(item, it);
+ return;
+ });
+ LOG_FATALF("Item_Initialize: Invalid classname: %s", class_name);
+}
+
+entity Item_CreateLoot(string class_name, vector position, vector vel,
+ float time_to_live)
+{
+ entity item = spawn();
+ if (!Item_InitializeLoot(item, class_name, position, vel, time_to_live))
+ {
+ return NULL;
+ }
+ return item;
+}
+
+bool Item_InitializeLoot(entity item, string class_name, vector position,
+ vector vel, float time_to_live)
+{
+ item.classname = class_name;
+ Item_SetLoot(item, true);
+ item.noalign = true;
+ setorigin(item, position);
+ item.pickup_anyway = true;
+ item.spawnfunc_checked = true;
+ Item_Initialize(item, class_name);
+ if (wasfreed(item))
+ {
+ return false;
+ }
+ item.gravity = 1;
+ item.velocity = vel;
+ SUB_SetFade(item, time + time_to_live, 1);
+ return true;
+}
+
+bool Item_IsLoot(entity item)
+{
+ return item.m_isloot || item.classname == "droppedweapon";
+}
+
+void Item_SetLoot(entity item, bool loot)
+{
+ item.m_isloot = loot;
+}
+
+bool Item_ShouldKeepPosition(entity item)
+{
+ return item.noalign || (item.spawnflags & 1);
+}
+
+bool Item_IsExpiring(entity item)
+{
+ return item.m_isexpiring;
+}
+
+void Item_SetExpiring(entity item, bool expiring)
+{
+ item.m_isexpiring = expiring;
+}
+
+// Compatibility spawn functions
+
+SPAWNFUNC_ITEM_COND(item_armor1, cvar("sv_mapformat_is_quake3"), ITEM_ArmorSmall, ITEM_ArmorMedium)
+
+SPAWNFUNC_ITEM(item_armor25, ITEM_ArmorMega)
+
+SPAWNFUNC_ITEM(item_armor_large, ITEM_ArmorMega)
+
+SPAWNFUNC_ITEM(item_health1, ITEM_HealthSmall)
+
+SPAWNFUNC_ITEM(item_health25, ITEM_HealthMedium)
+
+SPAWNFUNC_ITEM(item_health_large, ITEM_HealthBig)
+
+SPAWNFUNC_ITEM(item_health100, ITEM_HealthMega)
+
+SPAWNFUNC_ITEM(item_quad, ITEM_Strength)
--- /dev/null
+#pragma once
+
+/// \file
+/// \brief Header file that describes the functions related to game items.
+/// \copyright GNU GPLv2 or any later version.
+
+bool startitem_failed;
+
+/// \brief Returns the item definition corresponding to the given class name.
+/// \param[in] class_name Class name to search for.
+/// \return Item definition corresponding to the given class name or NULL is not
+/// found.
+entity Item_FindDefinition(string class_name);
+
+/// \brief Checks whether the items with the specified class name are allowed to
+/// spawn.
+/// \param[in] class_name Item class name to check.
+/// \return True items with the specified class name are allowed to spawn, false
+/// otherwise.
+bool Item_IsAllowed(string class_name);
+
+/// \brief Checks whether the items with the specified definition are allowed to
+/// spawn.
+/// \param[in] definition Item definition to check.
+/// \return True items with the specified definition are allowed to spawn, false
+/// otherwise.
+bool Item_IsDefinitionAllowed(entity definition);
+
+/// \brief Creates a new item.
+/// \param[in] class_name Class name of the item.
+/// \param[in] position Position of the item.
+/// \param[in] no_align True if item should be placed directly at specified
+/// position, false to let it drop to the ground.
+/// \return Item on success, NULL otherwise.
+entity Item_Create(string class_name, vector position, bool no_align);
+
+/// \brief Initializes the item according to class name.
+/// \param[in,out] item Item to initialize.
+/// \param[in] class_name Class name to use.
+/// \return No return.
+/// \nore This function is useful if you want to set some item properties before
+/// initialization.
+void Item_Initialize(entity item, string class_name);
+
+/// \brief Creates a loot item.
+/// \param[in] class_name Class name of the item.
+/// \param[in] position Position of the item.
+/// \param[in] velocity of the item.
+/// \param[in] time_to_live Amount of time after which the item will disappear.
+/// \return Item on success, NULL otherwise.
+entity Item_CreateLoot(string class_name, vector position, vector vel,
+ float time_to_live);
+
+/// \brief Initializes the loot item.
+/// \param[in] class_name Class name of the item.
+/// \param[in] position Position of the item.
+/// \param[in] velocity of the item.
+/// \param[in] time_to_live Amount of time after which the item will disappear.
+/// \return True on success, false otherwise.
+/// \nore This function is useful if you want to set some item properties before
+/// initialization.
+bool Item_InitializeLoot(entity item, string class_name, vector position,
+ vector vel, float time_to_live);
+
+/// \brief Returns whether the item is loot.
+/// \param[in] item Item to check.
+/// \return True if the item is loot, false otherwise.
+bool Item_IsLoot(entity item);
+
+/// \brief Sets the item loot status.
+/// \param[in,out] item Item to adjust.
+/// \param[in] loot Whether item is loot.
+/// \return No return.
+void Item_SetLoot(entity item, bool loot);
+
+/// \brief Returns whether item should keep its position or be dropped to the
+/// ground.
+/// \param[in] item Item to check.
+/// \return True if item should keep its position or false if it should be
+/// dropped to the ground.
+bool Item_ShouldKeepPosition(entity item);
+
+/// \brief Returns whether the item is expiring (i.e. its strength, shield and
+/// superweapon timers expire while it is on the ground).
+/// \param[in] item Item to check.
+/// \return True if the item is expiring, false otherwise.
+bool Item_IsExpiring(entity item);
+
+/// \brief Sets the item expiring status (i.e. whether its strength, shield
+/// and superweapon timers expire while it is on the ground).
+/// \param[in,out] item Item to adjust.
+/// \param[in] expiring Whether item is expiring.
+/// \return No return.
+void Item_SetExpiring(entity item, bool expiring);
#include "mapvoting.qh"
+#include <server/client.qh>
#include <server/defs.qh>
#include <server/gamelog.qh>
#include <server/miscfunctions.qh>
#include "command/common.qh"
#include "constants.qh"
#include "g_hook.qh"
+#include "g_world.qh"
#include <server/gamelog.qh>
#include "ipban.qh"
+#include <server/items/items.qh>
#include <server/mutators/_mod.qh>
-#include "../common/t_items.qh"
#include "mapvoting.qh"
#include "resources.qh"
-#include "items.qh"
+#include <server/items/spawning.qh>
#include "player.qh"
#include "weapons/accuracy.qh"
#include "weapons/csqcprojectile.qh"
#include "../common/playerstats.qh"
#include "../common/teams.qh"
#include "../common/mapobjects/subs.qh"
+#include <common/mapobjects/trigger/hurt.qh>
#include "../common/util.qh"
#include "../common/turrets/sv_turrets.qh"
#include <common/weapons/_all.qh>
#include <server/defs.qh>
#include <server/g_world.qh>
-#include <common/t_items.qh>
+#include <server/items/items.qh>
#include <server/mutators/_mod.qh>
void InitializeEntitiesRun();
void stopsoundto(float _dest, entity e, float chan);
-void soundtoat(float _dest, entity e, vector o, float chan, string samp, float vol, float _atten);
+void soundtoat(float _dest, entity e, vector o, float chan, string samp, float vol, float _atten, float _pitch);
void droptofloor(entity this);
+float trace_hits_box_1d(float end, float thmi, float thma);
+
+float trace_hits_box(vector start, vector end, vector thmi, vector thma);
+
+float tracebox_hits_box(vector start, vector mi, vector ma, vector end, vector thmi, vector thma);
+
void attach_sameorigin(entity e, entity to, string tag);
void crosshair_trace(entity pl);
void SetMovetypeFollow(entity ent, entity e);
-void soundto(float dest, entity e, float chan, string samp, float vol, float atten);
+void soundto(float dest, entity e, float chan, string samp, float vol, float atten, float _pitch);
void stopsound(entity e, float chan);
/**
- Manhattan Menas we expect to move up,down left or right
- No diagonal moves espected. (like moving bewteen city blocks)
+ Manhattan heuristic means we expect to move up, down left or right
+ No diagonal moves expected. (like moving between city blocks)
**/
-float pathlib_h_manhattan(vector a,vector b)
+float pathlib_h_manhattan(vector a, vector b)
{
//h(n) = D * (abs(n.x-goal.x) + abs(n.y-goal.y))
}
/**
- This heuristic consider both stright and disagonal moves
- to have teh same cost.
+ This heuristic consider both straight and diagonal moves
+ to have the same cost.
**/
-float pathlib_h_diagonal(vector a,vector b)
+float pathlib_h_diagonal(vector a, vector b)
{
//h(n) = D * max(abs(n.x-goal.x), abs(n.y-goal.y))
float hx = fabs(a.x - b.x);
float hy = fabs(a.y - b.y);
- float h = pathlib_movecost * max(hx,hy);
+ float h = pathlib_movecost * max(hx, hy);
return h;
}
/**
- This heuristic only considers the stright line distance.
- Will usualy mean a lower H then G meaning A* Will speand more
- and run slower.
+ This heuristic only considers the straight line distance.
+ Usually means a lower H then G, resulting in A* spreading more
+ (and running slower).
**/
-float pathlib_h_euclidean(vector a,vector b)
+float pathlib_h_euclidean(vector a, vector b)
{
return vlen(a - b);
}
/**
- This heuristic consider both stright and disagonal moves,
- But has a separate cost for diagonal moves.
+ This heuristic consider both straight and diagonal moves,
+ but has a separate cost for diagonal moves.
**/
float pathlib_h_diagonal2(vector a,vector b)
{
}
/**
- This heuristic consider both stright and disagonal moves,
+ This heuristic consider both straight and diagonal moves,
But has a separate cost for diagonal moves.
**/
-float pathlib_h_diagonal2sdp(vector preprev,vector prev,vector point,vector end)
+float pathlib_h_diagonal2sdp(vector preprev, vector prev, vector point, vector end)
{
//h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
//h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
vector d1 = normalize(preprev - point);
vector d2 = normalize(prev - point);
- float m = vlen(d1-d2);
+ float m = vlen(d1 - d2);
return h * m;
}
-float pathlib_h_diagonal3(vector a,vector b)
+float pathlib_h_diagonal3(vector a, vector b)
{
float hx = fabs(a.x - b.x);
float hy = fabs(a.y - b.y);
#include "pathlib.qh"
#include "utility.qh"
+/*
vector plib_points2[8];
vector plib_points[8];
float plib_fvals[8];
++fc2;
}
- /*
- nap = pathlib_nodeatpoint(plib_points[i]);
- if(nap)
- if not nap.owner == closedlist)
- {
- }
- */
+ //nap = pathlib_nodeatpoint(plib_points[i]);
+ //if(nap)
+ //if not nap.owner == closedlist)
+ //{
+ //}
}
pathlib_makenode(node, start, bp, goal, pathlib_gridsize);
return pathlib_open_cnt;
}
+*/
float pathlib_expandnode_star(entity node, vector start, vector goal)
{
return pathlib_open_cnt;
}
+/*
float pathlib_expandnode_octagon(entity node, vector start, vector goal)
{
vector point;
point = where + f + r;
pathlib_makenode(node, start, point, goal, pathlib_movecost);
-
// Forward-left
point = where + f - r;
pathlib_makenode(node, start, point, goal, pathlib_movecost);
-
// Back-right
point = where - f + r;
pathlib_makenode(node, start, point, goal, pathlib_movecost);
return pathlib_open_cnt;
}
+*/
float pathlib_expandnode_box(entity node, vector start, vector goal)
{
float pathlib_wpp_expand(entity wp)
{
- if(wp.wp00) pathlib_wpp_open(wp,wp.wp00,wp.wp00mincost); else return 0;
- if(wp.wp01) pathlib_wpp_open(wp,wp.wp01,wp.wp01mincost); else return 1;
- if(wp.wp02) pathlib_wpp_open(wp,wp.wp02,wp.wp02mincost); else return 2;
- if(wp.wp03) pathlib_wpp_open(wp,wp.wp03,wp.wp03mincost); else return 3;
- if(wp.wp04) pathlib_wpp_open(wp,wp.wp04,wp.wp04mincost); else return 4;
- if(wp.wp05) pathlib_wpp_open(wp,wp.wp05,wp.wp05mincost); else return 5;
- if(wp.wp06) pathlib_wpp_open(wp,wp.wp06,wp.wp06mincost); else return 6;
- if(wp.wp07) pathlib_wpp_open(wp,wp.wp07,wp.wp07mincost); else return 7;
- if(wp.wp08) pathlib_wpp_open(wp,wp.wp08,wp.wp08mincost); else return 8;
- if(wp.wp09) pathlib_wpp_open(wp,wp.wp09,wp.wp09mincost); else return 9;
- if(wp.wp10) pathlib_wpp_open(wp,wp.wp10,wp.wp10mincost); else return 10;
- if(wp.wp11) pathlib_wpp_open(wp,wp.wp11,wp.wp11mincost); else return 11;
- if(wp.wp12) pathlib_wpp_open(wp,wp.wp12,wp.wp12mincost); else return 12;
- if(wp.wp13) pathlib_wpp_open(wp,wp.wp13,wp.wp13mincost); else return 13;
- if(wp.wp14) pathlib_wpp_open(wp,wp.wp14,wp.wp14mincost); else return 14;
- if(wp.wp15) pathlib_wpp_open(wp,wp.wp15,wp.wp15mincost); else return 15;
- if(wp.wp16) pathlib_wpp_open(wp,wp.wp16,wp.wp16mincost); else return 16;
- if(wp.wp17) pathlib_wpp_open(wp,wp.wp17,wp.wp17mincost); else return 17;
- if(wp.wp18) pathlib_wpp_open(wp,wp.wp18,wp.wp18mincost); else return 18;
- if(wp.wp19) pathlib_wpp_open(wp,wp.wp19,wp.wp19mincost); else return 19;
- if(wp.wp20) pathlib_wpp_open(wp,wp.wp20,wp.wp20mincost); else return 20;
- if(wp.wp21) pathlib_wpp_open(wp,wp.wp21,wp.wp21mincost); else return 21;
- if(wp.wp22) pathlib_wpp_open(wp,wp.wp22,wp.wp22mincost); else return 22;
- if(wp.wp23) pathlib_wpp_open(wp,wp.wp23,wp.wp23mincost); else return 23;
- if(wp.wp24) pathlib_wpp_open(wp,wp.wp24,wp.wp24mincost); else return 24;
- if(wp.wp25) pathlib_wpp_open(wp,wp.wp25,wp.wp25mincost); else return 25;
- if(wp.wp26) pathlib_wpp_open(wp,wp.wp26,wp.wp26mincost); else return 26;
- if(wp.wp27) pathlib_wpp_open(wp,wp.wp27,wp.wp27mincost); else return 27;
- if(wp.wp28) pathlib_wpp_open(wp,wp.wp28,wp.wp28mincost); else return 28;
- if(wp.wp29) pathlib_wpp_open(wp,wp.wp29,wp.wp29mincost); else return 29;
- if(wp.wp30) pathlib_wpp_open(wp,wp.wp30,wp.wp30mincost); else return 30;
- if(wp.wp31) pathlib_wpp_open(wp,wp.wp31,wp.wp31mincost); else return 31;
+ if(wp.wp00) pathlib_wpp_open(wp,wp.wp00, wp.wp00mincost); else return 0;
+ if(wp.wp01) pathlib_wpp_open(wp,wp.wp01, wp.wp01mincost); else return 1;
+ if(wp.wp02) pathlib_wpp_open(wp,wp.wp02, wp.wp02mincost); else return 2;
+ if(wp.wp03) pathlib_wpp_open(wp,wp.wp03, wp.wp03mincost); else return 3;
+ if(wp.wp04) pathlib_wpp_open(wp,wp.wp04, wp.wp04mincost); else return 4;
+ if(wp.wp05) pathlib_wpp_open(wp,wp.wp05, wp.wp05mincost); else return 5;
+ if(wp.wp06) pathlib_wpp_open(wp,wp.wp06, wp.wp06mincost); else return 6;
+ if(wp.wp07) pathlib_wpp_open(wp,wp.wp07, wp.wp07mincost); else return 7;
+ if(wp.wp08) pathlib_wpp_open(wp,wp.wp08, wp.wp08mincost); else return 8;
+ if(wp.wp09) pathlib_wpp_open(wp,wp.wp09, wp.wp09mincost); else return 9;
+ if(wp.wp10) pathlib_wpp_open(wp,wp.wp10, wp.wp10mincost); else return 10;
+ if(wp.wp11) pathlib_wpp_open(wp,wp.wp11, wp.wp11mincost); else return 11;
+ if(wp.wp12) pathlib_wpp_open(wp,wp.wp12, wp.wp12mincost); else return 12;
+ if(wp.wp13) pathlib_wpp_open(wp,wp.wp13, wp.wp13mincost); else return 13;
+ if(wp.wp14) pathlib_wpp_open(wp,wp.wp14, wp.wp14mincost); else return 14;
+ if(wp.wp15) pathlib_wpp_open(wp,wp.wp15, wp.wp15mincost); else return 15;
+ if(wp.wp16) pathlib_wpp_open(wp,wp.wp16, wp.wp16mincost); else return 16;
+ if(wp.wp17) pathlib_wpp_open(wp,wp.wp17, wp.wp17mincost); else return 17;
+ if(wp.wp18) pathlib_wpp_open(wp,wp.wp18, wp.wp18mincost); else return 18;
+ if(wp.wp19) pathlib_wpp_open(wp,wp.wp19, wp.wp19mincost); else return 19;
+ if(wp.wp20) pathlib_wpp_open(wp,wp.wp20, wp.wp20mincost); else return 20;
+ if(wp.wp21) pathlib_wpp_open(wp,wp.wp21, wp.wp21mincost); else return 21;
+ if(wp.wp22) pathlib_wpp_open(wp,wp.wp22, wp.wp22mincost); else return 22;
+ if(wp.wp23) pathlib_wpp_open(wp,wp.wp23, wp.wp23mincost); else return 23;
+ if(wp.wp24) pathlib_wpp_open(wp,wp.wp24, wp.wp24mincost); else return 24;
+ if(wp.wp25) pathlib_wpp_open(wp,wp.wp25, wp.wp25mincost); else return 25;
+ if(wp.wp26) pathlib_wpp_open(wp,wp.wp26, wp.wp26mincost); else return 26;
+ if(wp.wp27) pathlib_wpp_open(wp,wp.wp27, wp.wp27mincost); else return 27;
+ if(wp.wp28) pathlib_wpp_open(wp,wp.wp28, wp.wp28mincost); else return 28;
+ if(wp.wp29) pathlib_wpp_open(wp,wp.wp29, wp.wp29mincost); else return 29;
+ if(wp.wp30) pathlib_wpp_open(wp,wp.wp30, wp.wp30mincost); else return 30;
+ if(wp.wp31) pathlib_wpp_open(wp,wp.wp31, wp.wp31mincost); else return 31;
return 32;
}
else
pathlib_wpp_open = pathlib_wpp_openncb;
- pathlib_heuristic = pathlib_h_none;
+ pathlib_heuristic = pathlib_h_none; // We run Dijkstra, A* does not make sense with variable distanced nodes.
if (!openlist)
openlist = spawn();
vector pathlib_walknode(entity this, vector start, vector end, float doedge);
var vector pathlib_movenode(entity this, vector start, vector end, float doedge);
+//float pathlib_expandnode_starf(entity node, vector start, vector goal);
float pathlib_expandnode_star(entity node, vector start, vector goal);
float pathlib_expandnode_box(entity node, vector start, vector goal);
-float pathlib_expandnode_octagon(entity node, vector start, vector goal);
+//float pathlib_expandnode_octagon(entity node, vector start, vector goal);
var float pathlib_expandnode(entity node, vector start, vector goal);
float pathlib_g_static(entity parent, vector to, float static_cost);
#include <common/effects/all.qh>
#include "bot/api.qh"
#include "cheats.qh"
+#include "client.qh"
#include "clientkill.qh"
#include "g_damage.qh"
#include "handicap.qh"
#include "../common/wepent.qh"
#include "weapons/weaponstats.qh"
+#include <server/weapons/weaponsystem.qh>
#include "../common/animdecide.qh"
animbits |= ANIMSTATE_FROZEN;
if(this.move_movetype == MOVETYPE_FOLLOW)
animbits |= ANIMSTATE_FOLLOW;
- if(this.crouch)
+ if(IS_DUCKED(this))
animbits |= ANIMSTATE_DUCK;
animdecide_setstate(this, animbits, false);
animdecide_setimplicitstate(this, IS_ONGROUND(this));
}
}
-void calculate_player_respawn_time(entity this)
-{
- if(MUTATOR_CALLHOOK(CalculateRespawnTime, this))
- return;
-
- float gametype_setting_tmp;
- float sdelay_max = GAMETYPE_DEFAULTED_SETTING(respawn_delay_max);
- float sdelay_small = GAMETYPE_DEFAULTED_SETTING(respawn_delay_small);
- float sdelay_large = GAMETYPE_DEFAULTED_SETTING(respawn_delay_large);
- float sdelay_small_count = GAMETYPE_DEFAULTED_SETTING(respawn_delay_small_count);
- float sdelay_large_count = GAMETYPE_DEFAULTED_SETTING(respawn_delay_large_count);
- float waves = GAMETYPE_DEFAULTED_SETTING(respawn_waves);
-
- float pcount = 1; // Include myself whether or not team is already set right and I'm a "player".
- if (teamplay)
- {
- FOREACH_CLIENT(IS_PLAYER(it) && it != this, {
- if(it.team == this.team)
- ++pcount;
- });
- if (sdelay_small_count == 0)
- sdelay_small_count = 1;
- if (sdelay_large_count == 0)
- sdelay_large_count = 1;
- }
- else
- {
- FOREACH_CLIENT(IS_PLAYER(it) && it != this, {
- ++pcount;
- });
- if (sdelay_small_count == 0)
- {
- if (IS_INDEPENDENT_PLAYER(this))
- {
- // Players play independently. No point in requiring enemies.
- sdelay_small_count = 1;
- }
- else
- {
- // Players play AGAINST each other. Enemies required.
- sdelay_small_count = 2;
- }
- }
- if (sdelay_large_count == 0)
- {
- if (IS_INDEPENDENT_PLAYER(this))
- {
- // Players play independently. No point in requiring enemies.
- sdelay_large_count = 1;
- }
- else
- {
- // Players play AGAINST each other. Enemies required.
- sdelay_large_count = 2;
- }
- }
- }
-
- float sdelay;
-
- if (pcount <= sdelay_small_count)
- sdelay = sdelay_small;
- else if (pcount >= sdelay_large_count)
- sdelay = sdelay_large;
- else // NOTE: this case implies sdelay_large_count > sdelay_small_count.
- sdelay = sdelay_small + (sdelay_large - sdelay_small) * (pcount - sdelay_small_count) / (sdelay_large_count - sdelay_small_count);
-
- if(waves)
- this.respawn_time = ceil((time + sdelay) / waves) * waves;
- else
- this.respawn_time = time + sdelay;
-
- if(sdelay < sdelay_max)
- this.respawn_time_max = time + sdelay_max;
- else
- this.respawn_time_max = this.respawn_time;
-
- if((sdelay + waves >= 5.0) && (this.respawn_time - time > 1.75))
- this.respawn_countdown = 10; // first number to count down from is 10
- else
- this.respawn_countdown = -1; // do not count down
-
- if(autocvar_g_forced_respawn)
- this.respawn_flags = this.respawn_flags | RESPAWN_FORCE;
-}
-
void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force)
{
vector v;
void PlayerCorpseDamage(entity this, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force);
-// g_<gametype>_str:
-// If 0, default is used.
-// If <0, 0 is used.
-// Otherwise, g_str (default value) is used.
-// For consistency, negative values there are mapped to zero too.
-#define GAMETYPE_DEFAULTED_SETTING(str) \
- ((gametype_setting_tmp = cvar(strcat("g_", GetGametype(), "_" #str))), \
- (gametype_setting_tmp < 0) ? 0 \
- : (gametype_setting_tmp == 0 || autocvar_g_respawn_delay_forced) ? max(0, autocvar_g_##str) \
- : gametype_setting_tmp)
-
-void calculate_player_respawn_time(entity this);
-
void PlayerDamage(entity this, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force);
bool PlayerHeal(entity targ, entity inflictor, float amount, float limit);
#include "../lib/warpzone/common.qh"
#include "../common/vehicles/vehicle.qh"
#include "../common/vehicles/sv_vehicles.qh"
+#include <common/weapons/weapon/porto.qh>
#include <server/player.qh>
#define PORTALS_ARE_NOT_SOLID
#include "race.qh"
#include <server/defs.qh>
+#include <server/g_damage.qh>
#include <server/miscfunctions.qh>
#include "client.qh"
#include "portals.qh"
#include "command/common.qh"
#include "defs.qh"
+#include "client.qh"
#include <server/g_world.qh>
#include <server/miscfunctions.qh>
#include <server/mutators/_mod.qh>
entity SelectSpawnPoint(entity this, bool anypoint);
spawnfunc(info_player_deathmatch);
void spawnpoint_use(entity this, entity actor, entity trigger);
+
+USING(spawn_evalfunc_t, vector(entity this, entity player, entity spot, vector current));
+.spawn_evalfunc_t spawn_evalfunc;
float client_cefc_accumulatortime;
#endif
+float servertime, serverprevtime, serverframetime;
+
/*
==================
main
#undef IT_SUIT
#undef IT_QUAD
+#undef STATE_TOP
+#undef STATE_BOTTOM
+#undef STATE_UP
+#undef STATE_DOWN
+
#pragma noref 0
#define IT_SUIT _IT_SUIT /* BIT(21) */
#define IT_QUAD _IT_QUAD /* BIT(22) */
+#define STATE_TOP _STATE_TOP /* 0 */
+#define STATE_BOTTOM _STATE_BOTTOM /* 1 */
+#define STATE_UP _STATE_UP /* 2 */
+#define STATE_DOWN _STATE_DOWN /* 3 */
+
#pragma noref 1
#include "client.qh"
#include <server/gamelog.qh>
+#include <server/g_damage.qh>
#include "race.qh"
#include "scores.qh"
#include "scores_rules.qh"
#include "weapons/common.qh"
#include "weapons/selection.qh"
#include <common/items/item.qh>
+#include <common/mapobjects/defs.qh>
#include <common/physics/player.qh>
#include <common/weapons/_all.qh>
#include <common/vehicles/all.qh>
#include "common.qh"
#include <server/defs.qh>
+#include <server/items/items.qh>
#include <server/miscfunctions.qh>
-#include <common/t_items.qh>
#include <common/constants.qh>
#include <common/net_linked.qh>
#include <common/deathtypes/all.qh>
void W_PlayStrengthSound(entity player);
float W_CheckProjectileDamage(entity inflictor, entity projowner, int deathtype, float exception);
void W_PrepareExplosionByDamage(entity this, entity attacker, void(entity this) explode);
+
+.int missile_flags;
+const int MIF_SPLASH = BIT(1);
+const int MIF_ARC = BIT(2);
+const int MIF_PROXY = BIT(3);
+const int MIF_GUIDED_MANUAL = BIT(4);
+const int MIF_GUIDED_HEAT = BIT(5);
+const int MIF_GUIDED_LASER = BIT(6);
+const int MIF_GUIDED_AI = BIT(7);
+const int MIF_GUIDED_TAG = BIT(7);
+const int MIF_GUIDED_ALL = MIF_GUIDED_MANUAL | MIF_GUIDED_HEAT | MIF_GUIDED_LASER | MIF_GUIDED_AI | MIF_GUIDED_TAG;
+const int MIF_GUIDED_TRACKING = MIF_GUIDED_HEAT | MIF_GUIDED_LASER | MIF_GUIDED_AI | MIF_GUIDED_TAG;
+const int MIF_GUIDED_CONFUSABLE = MIF_GUIDED_HEAT | MIF_GUIDED_AI;
#include "csqcprojectile.qh"
#include <server/defs.qh>
+#include <server/items/items.qh>
#include <server/miscfunctions.qh>
-#include <common/t_items.qh>
#include "../command/common.qh"
#include "selection.qh"
#include "weaponsystem.qh"
-#include <common/t_items.qh>
-#include <server/items.qh>
+#include <server/items/items.qh>
+#include <server/items/spawning.qh>
#include <common/constants.qh>
#include <common/net_linked.qh>
#include <common/util.qh>
#include "weaponsystem.qh"
#include "../resources.qh"
#include <server/mutators/_mod.qh>
-#include <common/t_items.qh>
-#include <server/items.qh>
+#include <server/items/items.qh>
+#include <server/items/spawning.qh>
#include <common/weapons/_all.qh>
.bool m_isreplaced; ///< Holds whether the weapon has been replaced.
#include "weaponsystem.qh"
#include "../resources.qh"
-#include "../items.qh"
+#include <server/items/spawning.qh>
#include <server/mutators/_mod.qh>
-#include <common/t_items.qh>
+#include <server/items/items.qh>
#include "../g_damage.qh"
#include <common/items/item.qh>
#include <common/mapinfo.qh>
// Ballistics Tracing
// ====================
-void FireRailgunBullet (entity this, .entity weaponentity, vector start, vector end, float bdamage, float bforce, float mindist, float maxdist, float halflifedist, float forcehalflifedist, int deathtype)
+bool Headshot(entity targ, entity ent, vector start, vector end)
+{
+ if(!IS_PLAYER(targ) || IS_DEAD(targ) || STAT(FROZEN, targ) || !targ.takedamage)
+ return false;
+ vector org = targ.origin; // antilag is already taken into consideration //antilag_takebackorigin(targ, CS(targ), time - ANTILAG_LATENCY(ent));
+ vector headmins = org + '0.6 0 0' * targ.mins_x + '0 0.6 0' * targ.mins_y + '0 0 1' * (1.3 * targ.view_ofs_z - 0.3 * targ.maxs_z);
+ vector headmaxs = org + '0.6 0 0' * targ.maxs_x + '0 0.6 0' * targ.maxs_y + '0 0 1' * targ.maxs_z;
+
+ return trace_hits_box(start, end, headmins, headmaxs);
+}
+
+void FireRailgunBullet (entity this, .entity weaponentity, vector start, vector end, float bdamage, bool headshot_notify, float bforce, float mindist, float maxdist, float halflifedist, float forcehalflifedist, int deathtype)
{
vector dir = normalize(end - start);
vector force = dir * bforce;
end = end + dir;
float totaldmg = 0;
+ bool headshot = false; // indicates that one of the targets hit was a headshot
// trace multiple times until we hit a wall, each obstacle will be made
// non-solid so we can hit the next, while doing this we spawn effects and
if (trace_ent == NULL || trace_fraction == 1)
break;
+ if(headshot_notify && !headshot && Headshot(trace_ent, this, start, end))
+ headshot = true;
+
// make the entity non-solid so we can hit the next one
IL_PUSH(g_railgunhit, trace_ent);
trace_ent.railgunhit = true;
msg_entity = it;
// we want this to be very loud when close but fall off quickly -> using max base volume and high attenuation
- soundtoat(MSG_ONE, pseudoprojectile, beampos, CH_SHOTS, SND(NEXWHOOSH_RANDOM()), VOL_BASEVOICE, ATTEN_IDLE);
+ soundtoat(MSG_ONE, pseudoprojectile, beampos, CH_SHOTS, SND(NEXWHOOSH_RANDOM()), VOL_BASEVOICE, ATTEN_IDLE, 0);
});
if(pseudoprojectile)
delete(pseudoprojectile);
IL_CLEAR(g_railgunhit);
+ if(headshot)
+ Send_Notification(NOTIF_ONE, this, MSG_ANNCE, ANNCE_HEADSHOT);
+
// calculate hits and fired shots for hitscan
if(this.(weaponentity))
accuracy_add(this, this.(weaponentity).m_weapon, 0, min(bdamage, totaldmg));
fireBullet_last_hit = NULL;
}
-void fireBullet_antilag(entity this, .entity weaponentity, vector start, vector dir, float spread, float max_solid_penetration, float damage, float force, float dtype, entity tracer_effect, bool do_antilag)
+void fireBullet_antilag(entity this, .entity weaponentity, vector start, vector dir, float spread, float max_solid_penetration, float damage, float headshot_multiplier, float force, float dtype, entity tracer_effect, bool do_antilag)
{
dir = normalize(dir + randomvec() * spread);
vector end = start + dir * max_shot_distance;
WarpZone_trace_forent = this;
+ bool headshot = false; // indicates that one of the hit targets was a headshot
for (;;)
{
WarpZone_TraceBox_ThroughZone(start, '0 0 0', '0 0 0', end, false, WarpZone_trace_forent, NULL, fireBullet_trace_callback);
yoda = 0;
MUTATOR_CALLHOOK(FireBullet_Hit, this, hit, start, end, damage, this.(weaponentity));
damage = M_ARGV(4, float);
+ if(headshot_multiplier && Headshot(hit, this, start, end))
+ {
+ damage *= headshot_multiplier;
+ headshot = true;
+ }
bool gooddamage = accuracy_isgooddamage(this, hit);
Damage(hit, this, this, damage * damage_fraction, dtype, weaponentity, start, force * dir * damage_fraction);
// calculate hits for ballistic weapons
Damage_DamageInfo(start, 0, 0, 0, max(1, force) * normalize(dir) * -damage_fraction, dtype, 0, this);
}
+ if(headshot)
+ Send_Notification(NOTIF_ONE, this, MSG_ANNCE, ANNCE_HEADSHOT);
+
if(lag)
antilag_restore_all(this);
this.dphitcontentsmask = oldsolid;
}
-void fireBullet(entity this, .entity weaponentity, vector start, vector dir, float spread, float max_solid_penetration, float damage, float force, float dtype, entity tracer_effect)
+void fireBullet(entity this, .entity weaponentity, vector start, vector dir, float spread, float max_solid_penetration, float damage, float headshot_multiplier, float force, float dtype, entity tracer_effect)
{
- fireBullet_antilag(this, weaponentity, start, dir, spread, max_solid_penetration, damage, force, dtype, tracer_effect, true);
+ fireBullet_antilag(this, weaponentity, start, dir, spread, max_solid_penetration, damage, headshot_multiplier, force, dtype, tracer_effect, true);
}
.float railgundistance;
.vector railgunforce;
-void FireRailgunBullet (entity this, .entity weaponentity, vector start, vector end, float bdamage, float bforce, float mindist, float maxdist, float halflifedist, float forcehalflifedist, int deathtype);
+void FireRailgunBullet (entity this, .entity weaponentity, vector start, vector end, float bdamage, bool headshot_notify, float bforce, float mindist, float maxdist, float halflifedist, float forcehalflifedist, int deathtype);
entity fireBullet_trace_callback_eff;
entity fireBullet_last_hit;
void fireBullet_trace_callback(vector start, vector hit, vector end);
-void fireBullet_antilag(entity this, .entity weaponentity, vector start, vector dir, float spread, float max_solid_penetration, float damage, float force, float dtype, entity tracer_effect, bool do_antilag);
-void fireBullet(entity this, .entity weaponentity, vector start, vector dir, float spread, float max_solid_penetration, float damage, float force, float dtype, entity tracer_effect);
+void fireBullet_antilag(entity this, .entity weaponentity, vector start, vector dir, float spread, float max_solid_penetration, float damage, float headshot_multiplier, float force, float dtype, entity tracer_effect, bool do_antilag);
+void fireBullet(entity this, .entity weaponentity, vector start, vector dir, float spread, float max_solid_penetration, float damage, float headshot_multiplier, float force, float dtype, entity tracer_effect);
#include "selection.qh"
#include "../command/common.qh"
+#include <server/items/items.qh>
#include <server/mutators/_mod.qh>
#include "../round_handler.qh"
#include <server/cheats.qh>
#include <server/resources.qh>
-#include <common/t_items.qh>
#include <common/animdecide.qh>
#include <common/constants.qh>
#include <common/net_linked.qh>
#pragma once
-#include <server/defs.qh>
#include <server/miscfunctions.qh>
+#define INDEPENDENT_ATTACK_FINISHED 1
+
+// there is 2 weapon tics that can run in one server frame
+const int W_TICSPERFRAME = 2;
+
+// VorteX: standalone think for weapons, so normal think on weaponentity can be reserved by weaponflashes (which needs update even player dies)
+.float weapon_nextthink;
+.void(Weapon thiswep, entity actor, .entity weaponentity, int fire) weapon_think;
+
float internalteam;
entity weapon_dropevent_item;
..entity weaponentity_fld;
+.float weapon_load[REGISTRY_MAX(Weapons)];
+.int ammo_none; // used by the reloading system, must always be 0
+.int clip_load;
+.int old_clip_load;
+.int clip_size;
+
+.float attack_finished_for[REGISTRY_MAX(Weapons) * MAX_WEAPONSLOTS];
+.float attack_finished_single[MAX_WEAPONSLOTS];
+#if INDEPENDENT_ATTACK_FINISHED
+#define ATTACK_FINISHED_FOR(ent, w, slot) ((ent).(attack_finished_for[((w) - WEP_FIRST) * MAX_WEAPONSLOTS + (slot)]))
+#else
+#define ATTACK_FINISHED_FOR(ent, w, slot) ((ent).attack_finished_single[slot])
+#endif
+#define ATTACK_FINISHED(ent, w) ATTACK_FINISHED_FOR(ent, ent.(w).m_weapon.m_id, weaponslot(w))
+
void CL_SpawnWeaponentity(entity e, .entity weaponentity);
+void w_clear(Weapon thiswep, entity actor, .entity weaponentity, int fire);
+
+void w_ready(Weapon thiswep, entity actor, .entity weaponentity, int fire);
+
vector CL_Weapon_GetShotOrg(float wpn);
bool weaponUseForbidden(entity player);
set sv_gibhealth 100 "Minus health a dead body must have in order to get gibbed"
// use default physics
+sv_playerphysicsqc 1
set sv_friction_on_land 0 "movement friction applied for half a second upon landing on the ground"
set sv_friction_slick 0.5 "movement friction while on slick surfaces"