- wget -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints
- wget -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache
- make
- - EXPECT=d1a65371174a5210320fa85b3f059d0f
+ - EXPECT=eb10d49149a894afd1c3e8af610dc98f
- HASH=$(${ENGINE} -noconfig -nohome +exec serverbench.cfg
| tee /dev/stderr
| grep '^:'
-Wed Feb 14 07:23:42 CET 2018
+Fri Mar 2 07:24:40 CET 2018
set sv_vote_command_restriction_movetopink "1;"
set sv_vote_command_restriction_movetospec "1;"
+// help messages for votes that aren't implemeneted in the game code
+// examples used here are based on the usage output of implemented votes
+set sv_vote_command_help_restart "\nUsage:^3 vcall restart\n^7 No arguments required."
+set sv_vote_command_help_gotomap "\nUsage:^3 vcall gotomap mapname\n^7 Where 'mapname' is the name of the map to go to.\n Type ^3lsmaps^7 to get a list of available maps to vote for."
+
// =================================
// voting - server/command/vote.qc
// =================================
// aliases for both client and server
alias vcall "qc_cmd_svcmd vote call ${* ?}"
-alias vhelp "qc_cmd_svcmd vote help"
+alias vhelp "qc_cmd_svcmd vote help ${* ?}"
alias vstatus "qc_cmd_svcmd vote status"
alias vstop "qc_cmd_svcmd vote stop"
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# a b <taibr.martin@gmail.com>, 2017
+# Martin Taibr <taibr.martin@gmail.com>, 2017
+# Martin Taibr <taibr.martin@gmail.com>, 2017
# NONE <nechtom@gmail.com>, 2015
# Tomáš Volavka <czheron@gmail.com>, 2015
# Tomáš Volavka <czheron@gmail.com>, 2015
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# GunChleoc, 2017
+# GunChleoc, 2017-2018
# GunChleoc, 2017
# GunChleoc, 2017
msgid ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-09 00:35+0200\n"
-"PO-Revision-Date: 2017-12-08 17:43+0000\n"
+"PO-Revision-Date: 2018-02-28 14:07+0000\n"
"Last-Translator: GunChleoc\n"
"Language-Team: Gaelic, Scottish (http://www.transifex.com/team-xonotic/"
"xonotic/language/gd/)\n"
#: qcsrc/common/minigames/cl_minigames_hud.qc:403
msgid "Exit Menu"
-msgstr ""
+msgstr "Fàg an clàr-taice"
#: qcsrc/common/minigames/cl_minigames_hud.qc:415
#: qcsrc/menu/xonotic/dialog_multiplayer.qc:16
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-09 00:35+0200\n"
-"PO-Revision-Date: 2018-02-13 16:58+0000\n"
+"PO-Revision-Date: 2018-03-01 20:50+0000\n"
"Last-Translator: Andrei Stepanov\n"
"Language-Team: Russian (http://www.transifex.com/team-xonotic/xonotic/"
"language/ru/)\n"
#: qcsrc/client/hud/panel/infomessages.qc:111
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
-msgstr "^1Нажмите ^3%s^1 для показа информации о режиме игры"
+msgstr "^1Нажмите ^3%s^1 для показа сведений о режиме игры"
#: qcsrc/client/hud/panel/infomessages.qc:111
#: qcsrc/menu/xonotic/keybinder.qc:94
#: qcsrc/client/hud/panel/infomessages.qc:126
msgid "^1You have no more lives left"
-msgstr "^1У Ð\92ас закончились жизни"
+msgstr "^1У вас закончились жизни"
#: qcsrc/client/hud/panel/infomessages.qc:128
#: qcsrc/client/hud/panel/infomessages.qc:131
#: qcsrc/client/hud/panel/infomessages.qc:139
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
-msgstr "^1Ð\9dаÑ\87ало игÑ\80Ñ\8b Ñ\87еÑ\80ез ^3%d^1 Ñ\81екÑ\83нд"
+msgstr "^1СÑ\82аÑ\80Ñ\82 игÑ\80Ñ\8b Ñ\87еÑ\80ез ^3%d^1 Ñ\81екÑ\83нд(Ñ\8b)"
#: qcsrc/client/hud/panel/infomessages.qc:145
msgid "^2Currently in ^1warmup^2 stage!"
#: qcsrc/client/hud/panel/infomessages.qc:162
#, c-format
msgid "%sPress ^3%s%s once you are ready"
-msgstr "%sÐ\9fо гоÑ\82овноÑ\81Ñ\82и нажмиÑ\82е ^3%s%s"
+msgstr "%sÐ\9dажмиÑ\82е ^3%s%s по гоÑ\82овноÑ\81Ñ\82и"
#: qcsrc/client/hud/panel/infomessages.qc:167
msgid "^2Waiting for others to ready up to end warmup..."
#: qcsrc/client/hud/panel/infomessages.qc:196
msgid "Teamnumbers are unbalanced!"
-msgstr "Команды не равны!"
+msgstr "Команды не равны по составу!"
#: qcsrc/client/hud/panel/infomessages.qc:199
#, c-format
#: qcsrc/client/hud/panel/scoreboard.qc:80
msgid "SCO^caps"
-msgstr "SCO^захваты"
+msgstr "SCO^захватов"
#: qcsrc/client/hud/panel/scoreboard.qc:81
msgid "SCO^captime"
#: qcsrc/client/hud/panel/scoreboard.qc:300
msgid "The following field names are recognized (case insensitive):\n"
-msgstr "Ð\91Ñ\8bли Ñ\80аÑ\81познанÑ\8b Ñ\81ледÑ\83Ñ\8eÑ\89ие имена полей (без Ñ\83Ñ\87ета регистра):\n"
+msgstr "РаÑ\81познанÑ\8b Ñ\81ледÑ\83Ñ\8eÑ\89ие имена полей (без Ñ\83Ñ\87Ñ\91та регистра):\n"
#: qcsrc/client/hud/panel/scoreboard.qc:301
msgid "You can use a ^3|^7 to start the right-aligned fields.\n"
msgid ""
"^3caps^7 How often a flag (CTF) or a key (KeyHunt) was "
"captured\n"
-msgstr "^3caps^7 Как часто флаг (CTF) или ключ (KeyHunt) был захвачен\n"
+msgstr ""
+"^3caps^7 Как часто флаг (Захват флага) или ключ (Охота за ключами) был "
+"захвачен\n"
#: qcsrc/client/hud/panel/scoreboard.qc:317
msgid ""
"^3pickups^7 How often a flag (CTF) or a key (KeyHunt) or a "
"ball (Keepaway) was picked up\n"
msgstr ""
-"^3pickups^7 Как часто флаг (CTF) или ключ (KeyHunt) или мяч (Keepaway) были "
-"подобраны\n"
+"^3pickups^7 Как часто флаг (Захват флага) или ключ (Охота за ключами) или "
+"мÑ\8fÑ\87 (Ð\9fÑ\80Ñ\8fÑ\82ки) бÑ\8bли подобÑ\80анÑ\8b\n"
#: qcsrc/client/hud/panel/scoreboard.qc:318
msgid "^3captime^7 Time of fastest cap (CTF)\n"
-msgstr "^3captime^7 Ð\92Ñ\80емÑ\8f наибÑ\8bÑ\81Ñ\82Ñ\80ейÑ\88его заÑ\85ваÑ\82а(CTF)\n"
+msgstr "^3captime^7 Ð\92Ñ\80емÑ\8f бÑ\8bÑ\81Ñ\82Ñ\80ейÑ\88его заÑ\85ваÑ\82а (CTF)\n"
#: qcsrc/client/hud/panel/scoreboard.qc:319
msgid "^3fckills^7 Number of flag carrier kills\n"
-msgstr "^3фубийств^7 Число убийств флагоносцев\n"
+msgstr "^3фубийств^7 Число убитых флагоносцев\n"
#: qcsrc/client/hud/panel/scoreboard.qc:320
msgid "^3returns^7 Number of flag returns\n"
-msgstr "^3returns^7 Число возращённых флагов\n"
+msgstr "^3returns^7 Число возвращённых флагов\n"
#: qcsrc/client/hud/panel/scoreboard.qc:321
msgid "^3drops^7 Number of flag drops\n"
msgid ""
"^3bctime^7 Total amount of time holding the ball in "
"Keepaway\n"
-msgstr "^3bctime^7 Общее число продержанных мячей в режиме Keepaway\n"
+msgstr "^3bctime^7 Общее число продержанных мячей в режиме Прятки\n"
#: qcsrc/client/hud/panel/scoreboard.qc:335
msgid "^3score^7 Total score\n"
"\n"
msgstr ""
"Специальные имена типов игры 'teams' и 'noteams' могут быть\n"
-"иÑ\81полÑ\8cзованÑ\8b длÑ\8f вклÑ\8eÑ\87ениÑ\8f/вÑ\8bключения ВСЕХ командных/не\n"
+"иÑ\81полÑ\8cзованÑ\8b длÑ\8f вклÑ\8eÑ\87ениÑ\8f/оÑ\82ключения ВСЕХ командных/не\n"
"командных игровых режимов.\n"
#: qcsrc/client/hud/panel/scoreboard.qc:346
#: qcsrc/client/hud/panel/scoreboard.qc:1156
#, c-format
msgid "Accuracy stats (average %d%%)"
-msgstr "СÑ\82аÑ\82иÑ\81Ñ\82ика Ñ\82оÑ\87ноÑ\81Ñ\82и (средняя %d%%)"
+msgstr "ТоÑ\87ноÑ\81Ñ\82Ñ\8c попаданий (средняя %d%%)"
#: qcsrc/client/hud/panel/scoreboard.qc:1295
msgid "Map stats:"
#: qcsrc/client/hud/panel/scoreboard.qc:1688
#, c-format
msgid "^1Respawning in ^3%s^1..."
-msgstr "^1Возрождение после ^3%s^1..."
+msgstr "^1Возрождение через ^3%s^1..."
#: qcsrc/client/hud/panel/scoreboard.qc:1698
#, c-format
#: qcsrc/client/main.qc:1020
msgid " mph"
-msgstr "милÑ\8f/ч"
+msgstr "милÑ\8c/ч"
#: qcsrc/client/main.qc:1022
msgid " knots"
#: qcsrc/client/mapvoting.qc:382
#, c-format
msgid "%d seconds left"
-msgstr "Осталось %d секунд"
+msgstr "Осталось %d секунд(ы)"
#: qcsrc/client/mapvoting.qc:497
msgid ""
#: qcsrc/client/mapvoting.qc:507
msgid "^1Error:^7 Couldn't find pak index.\n"
-msgstr "^1Error:^7 Невозможно найти индекс пака.\n"
+msgstr "^1Error:^7 Не удалось найти индекс пака.\n"
#: qcsrc/client/mapvoting.qc:516
msgid "Requesting preview...\n"
#: qcsrc/common/items/item/armor.qh:147
msgid "Mega armor"
-msgstr "Мега броня"
+msgstr "Мега-броня"
#: qcsrc/common/items/item/health.qh:111
msgid "Big health"
#: qcsrc/common/items/item/jetpack.qh:82
msgid "Fuel regen"
-msgstr "ÐнеÑ\80гиÑ\8f Ñ\80егенеÑ\80аÑ\86ии"
+msgstr "РегенеÑ\80аÑ\82оÑ\80 Ñ\82оплива"
#: qcsrc/common/items/item/powerup.qh:44
msgid "Strength"
#: qcsrc/common/minigames/minigame/bd.qc:1172
msgid "Tubular! Press \"Next Level\" to continue!"
-msgstr "ТÑ\83бÑ\83лаÑ\80! Ð\9dажмиÑ\82е \"СледÑ\83Ñ\8eÑ\89ий Ñ\83Ñ\80овнь\" для продолжения!"
+msgstr "Ð\9fÑ\80евоÑ\81Ñ\85одно! Ð\9dажмиÑ\82е \"СледÑ\83Ñ\8eÑ\89ий Ñ\83Ñ\80овень\" для продолжения!"
#: qcsrc/common/minigames/minigame/bd.qc:1174
msgid "Wicked! Press \"Next Level\" to continue!"
-msgstr "Ð\93Ñ\80еÑ\88ник! Ð\9dажмиÑ\82е \"СледÑ\83Ñ\8eÑ\89ий Ñ\83Ñ\80овнь\" для продолжения!"
+msgstr "Ð\9eзоÑ\80ник! Ð\9dажмиÑ\82е \"СледÑ\83Ñ\8eÑ\89ий Ñ\83Ñ\80овень\" для продолжения!"
#: qcsrc/common/minigames/minigame/bd.qc:1177
msgid "Press the space bar to change your currently selected tile"
#: qcsrc/common/minigames/minigame/pp.qc:451
#: qcsrc/common/minigames/minigame/ttt.qc:332
msgid "Wait for your opponent to confirm the rematch"
-msgstr "Дождитесь пока соперник подтвердит начало переигровки"
+msgstr "Дождитесь пока соперник подтвердит старт переигровки"
#: qcsrc/common/minigames/minigame/pp.qc:582
#: qcsrc/common/minigames/minigame/ttt.qc:665
#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:8
msgid "Damage text"
-msgstr "ТекÑ\81Ñ\82 урона"
+msgstr "ЦиÑ\84Ñ\80Ñ\8b урона"
#: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:18
msgid "Draw damage numbers"
#: qcsrc/common/mutators/mutator/overkill/hmg.qh:17
msgid "Heavy Machine Gun"
-msgstr "ТÑ\8fжÑ\91лÑ\8bй пулемёт"
+msgstr "ТÑ\8fжÑ\91лÑ\8bй Ð\9fулемёт"
#: qcsrc/common/mutators/mutator/overkill/rpc.qh:17
msgid "Rocket Propelled Chainsaw"
#: qcsrc/common/mutators/mutator/waypoints/all.inc:13
#: qcsrc/common/mutators/mutator/waypoints/waypointsprites.qc:252
msgid "Finish"
-msgstr "Ð\9aонеÑ\86"
+msgstr "ФиниÑ\88"
#: qcsrc/common/mutators/mutator/waypoints/all.inc:14
#: qcsrc/common/mutators/mutator/waypoints/all.inc:15
#: qcsrc/common/mutators/mutator/waypoints/waypointsprites.qc:252
msgid "Start"
-msgstr "Ð\9dаÑ\87ало"
+msgstr "СÑ\82аÑ\80Ñ\82"
#: qcsrc/common/mutators/mutator/waypoints/all.inc:17
msgid "Defend"
#: qcsrc/common/mutators/mutator/waypoints/all.inc:39
msgid "Run here"
-msgstr "Беги сюда"
+msgstr "Бегите сюда"
#: qcsrc/common/mutators/mutator/waypoints/all.inc:45
#: qcsrc/common/mutators/mutator/waypoints/all.inc:48
#: qcsrc/common/notifications/all.inc:239
msgid "^F4NOTE: ^BGSpectator chat is not sent to players during the match"
-msgstr "^F4Ð\9fÐ Ð\98Ð\9cÐ\95ЧÐ\90Ð\9dÐ\98Ð\95: ^BGЧаÑ\82 зÑ\80иÑ\82елей не виден длÑ\8f игÑ\80оков во время матча"
+msgstr "^F4Ð\9fÐ Ð\98Ð\9cÐ\95ЧÐ\90Ð\9dÐ\98Ð\95: ^BGÐ\98гÑ\80оки не видÑ\8fÑ\82 Ñ\87аÑ\82 зÑ\80иÑ\82елей во время матча"
#: qcsrc/common/notifications/all.inc:241
#, c-format
#: qcsrc/common/notifications/all.inc:246
msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
-msgstr "^BG ^TC^TT^BG Флаг был возвращен на базу владельцем"
+msgstr "^BG ^TC^TT^BG Флаг был возвращён на базу владельцем"
#: qcsrc/common/notifications/all.inc:247
msgid "^BGThe flag was returned by its owner"
-msgstr "^BGФлаг был возвращен на базу владельцем"
+msgstr "^BGФлаг был возвращён на базу владельцем"
#: qcsrc/common/notifications/all.inc:248
msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
-msgstr "^BG ^TC^TT^BG Флаг был уничтожен и возвращен на базу"
+msgstr "^BG ^TC^TT^BG Флаг был уничтожен и возвращён на базу"
#: qcsrc/common/notifications/all.inc:249
msgid "^BGThe flag was destroyed and returned to base"
-msgstr "^BGФлаг был уничтожен и возвращен на базу"
+msgstr "^BGФлаг был уничтожен и возвращён на базу"
#: qcsrc/common/notifications/all.inc:250
msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
-msgstr "^BG ^TC^TT^BG Флаг бÑ\8bл бÑ\80оÑ\88ен в базе и возвÑ\80аÑ\89ен на нее"
+msgstr "^BG ^TC^TT^BG Флаг бÑ\8bл бÑ\80оÑ\88ен на базе и возвÑ\80аÑ\89Ñ\91н"
#: qcsrc/common/notifications/all.inc:251
msgid "^BGThe flag was dropped in the base and returned itself"
msgid "^F2You lack a UID, superspec options will not be saved/restored"
msgstr ""
"^F2У вас нет UID, настройки суперспектатора не будут сохранены или "
-"востановлены"
+"воÑ\81Ñ\81Ñ\82ановленÑ\8b"
#: qcsrc/common/notifications/all.inc:271
msgid "^F1Round already started, you will join the game in the next round"
-msgstr "^F1РаÑ\83нд Ñ\83же наÑ\87алÑ\81Ñ\8f, вÑ\8b наÑ\87нÑ\91Ñ\82е игÑ\80Ñ\83 Ñ\81о Ñ\81ледÑ\83Ñ\8eÑ\89его Ñ\80аÑ\83ндда"
+msgstr "^F1Раунд уже начался, вы начнёте игру со следующего раунда"
#: qcsrc/common/notifications/all.inc:272
msgid "^F2You will spectate in the next round"
#: qcsrc/common/notifications/all.inc:278
#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
-msgstr "^BG%s%s^K1 бÑ\8bл немного подожжен ^BG%s^K1^K1%s%s"
+msgstr "^BG%s%s^K1 бÑ\8bл немного подпалÑ\91н из ^BG%s^K1^K1%s%s"
#: qcsrc/common/notifications/all.inc:278
#, c-format
#: qcsrc/common/notifications/all.inc:282
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
-msgstr "^BG%s%s^K1 слишком близко подошел к взрыву напалма%s%s"
+msgstr "^BG%s%s^K1 слишком близко подошёл к взрыву напалма%s%s"
#: qcsrc/common/notifications/all.inc:282
#, c-format
#: qcsrc/common/notifications/all.inc:289
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
-msgstr "^BG%s%s^K1 бÑ\8bл Ñ\83биÑ\82 ^BG%s^K1%s%s в пÑ\80оÑ\86еÑ\81Ñ\81е Ñ\82елепоÑ\80Ñ\82аÑ\86ии"
+msgstr "^BG%s%s^K1 бÑ\8bл Ñ\82елеÑ\84Ñ\80агнÑ\83Ñ\82 ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:290
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-"^BG%s%s^K1 зацепило взрывной волной от подорвавшегося с Bumblebee ^BG%s^K1%s"
-"%s"
+"^BG%s%s^K1 зацепило взрывной волной от подорвавшегося со Шмеля ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:292
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-"^BG%s%s^K1 долюбовался огоньками из пушки Bumblebee, управляемого ^BG%s^K1%s"
-"%s"
+"^BG%s%s^K1 засмотрелся на огоньки из пушки Шмеля, управляемого ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:293
#, c-format
#: qcsrc/common/notifications/all.inc:294
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
-msgstr "^BG%s%s^K1 был завален кассетными бомбами с Raptor'а ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 был завален кассетными бомбами с Ящера ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:295
#, c-format
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-"^BG%s%s^K1 зацепило взрывной волной от взорвавшегося на Raptor'e ^BG%s^K1%s%s"
+"^BG%s%s^K1 зацепило взрывной волной от взорвавшегося на Ящере ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:297
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-"^BG%s%s^K1 зацепило взрывной волной от взорвавшегося на Spiderbot'e ^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 зацепило взрывной волной от взорвавшегося на Пауке-боте ^BG%s^K1%s"
+"%s"
#: qcsrc/common/notifications/all.inc:298
#, c-format
msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr "^BG%s%s^K1 измельчён Spiderbot'ом, управляемым ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 измельчён Пуком-ботом, управляемым ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:299
#, c-format
msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
-"^BG%s%s^K1 был разорван на куски Spiderbot'ом, управляемым ^BG%s^K1%s%s"
+"^BG%s%s^K1 был разорван на куски Пауком-ботом, управляемым ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:300
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
-"^BG%s%s^K1 зацепило взрывной волной от взорвавшегося на Racer'e ^BG%s^K1%s%s"
+"^BG%s%s^K1 зацепило взрывной волной от взорвавшегося на Гонщике ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:301
#, c-format
msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
-msgstr "^BG%s%s^K1 пригвоздило Racer'ом, управляемым ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 пригвоздило Гонщиком, управляемым ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:302
#, c-format
msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
-msgstr "^BG%s%s^K1 не смог скрыться от Racer'а, управляемого ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 не смог скрыться от Гонщика, управляемого ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:303
#, c-format
#: qcsrc/common/notifications/all.inc:317
#, c-format
msgid "^BG%s^K1 was smashed by a Shambler%s%s"
-msgstr "^BG%s^K1 был раздавлен Шаблером%s%s"
+msgstr "^BG%s^K1 бÑ\8bл Ñ\80аздавлен ШамблеÑ\80ом%s%s"
#: qcsrc/common/notifications/all.inc:318
#, c-format
#: qcsrc/common/notifications/all.inc:320
#, c-format
msgid "^BG%s^K1 was fireballed by a Wyvern%s%s"
-msgstr "^BG%s^K1 был поражён огненым шаром Виверна%s%s"
+msgstr "^BG%s^K1 был поражён огненным шаром Виверна%s%s"
#: qcsrc/common/notifications/all.inc:321
#, c-format
#: qcsrc/common/notifications/all.inc:330
#, c-format
msgid "^BG%s^K1 became a shooting star%s%s"
-msgstr "^BG%s^K1 стал падующей звездой%s%s"
+msgstr "^BG%s^K1 стал падающей звездой%s%s"
#: qcsrc/common/notifications/all.inc:331
#, c-format
#: qcsrc/common/notifications/all.inc:338
#, c-format
msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
-msgstr "^BG%s^K1 попал под огонÑ\8c зениÑ\82ки FLAC%s%s"
+msgstr "^BG%s^K1 попал под огонÑ\8c Ð\97ениÑ\82ной Ð\9fÑ\83Ñ\88ки %s%s"
#: qcsrc/common/notifications/all.inc:339
#, c-format
#: qcsrc/common/notifications/all.inc:346
#, c-format
msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
-msgstr "^BG%s^K1 обогащён свинцом из турели Walker'a%s%s"
+msgstr "^BG%s^K1 обогащён свинцом из турели Ходунa%s%s"
#: qcsrc/common/notifications/all.inc:347
#, c-format
msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
-msgstr "^BG%s^K1 был пронзён турелью Walker'а%s%s"
+msgstr "^BG%s^K1 был пронзён турелью Ходуна%s%s"
#: qcsrc/common/notifications/all.inc:348
#, c-format
msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
-msgstr "^BG%s^K1 был разорван в клочья турелью Walker'а%s%s"
+msgstr "^BG%s^K1 был разорван в клочья турелью Ходуна%s%s"
#: qcsrc/common/notifications/all.inc:349
#, c-format
msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
-msgstr "^BG%s^K1 зацепило взрывной волной от Bumblebee%s%s"
+msgstr "^BG%s^K1 зацепило взрывной волной от Шмеля %s%s"
#: qcsrc/common/notifications/all.inc:350
#, c-format
#: qcsrc/common/notifications/all.inc:351
#, c-format
msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
-msgstr "^BG%s^K1 был накрыт кассетными бомбами с Raptor'а%s%s"
+msgstr "^BG%s^K1 был накрыт кассетными бомбами с Ящера%s%s"
#: qcsrc/common/notifications/all.inc:352
#, c-format
msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
-msgstr "^BG%s^K1 задело взрывной волной от Raptor'a%s%s"
+msgstr "^BG%s^K1 задело взрывной волной от Ящера %s%s"
#: qcsrc/common/notifications/all.inc:353
#, c-format
msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
-msgstr "^BG%s^K1 задело взрывной волной от Spiderbot'а%s%s"
+msgstr "^BG%s^K1 задело взрывной волной от Паука-бота%s%s"
#: qcsrc/common/notifications/all.inc:354
#, c-format
msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
-msgstr "^BG%s^K1 был разорван на кусочки ракетой Spiderbot'а%s%s"
+msgstr "^BG%s^K1 был разорван на кусочки ракетой Паука-бота%s%s"
#: qcsrc/common/notifications/all.inc:355
#, c-format
msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
-msgstr "^BG%s^K1 задело взрывной волной от Racer'а%s%s"
+msgstr "^BG%s^K1 задело взрывной волной от Гонщика%s%s"
#: qcsrc/common/notifications/all.inc:356
#, c-format
msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
-msgstr "^BG%s^K1 не смог укрыться от ракеты Racer'а%s%s"
+msgstr "^BG%s^K1 не смог укрыться от ракеты Гонщика%s%s"
#: qcsrc/common/notifications/all.inc:359
#, c-format
#: qcsrc/common/notifications/all.inc:375
#, c-format
msgid "^BGGodmode saved you %s units of damage, cheater!"
-msgstr "^BGРежим Бога спас тебя от %s единиц урона, читер!"
+msgstr "^BGРежим Бога спас вас от %s единиц урона, читер!"
#: qcsrc/common/notifications/all.inc:377
#, c-format
#: qcsrc/common/notifications/all.inc:692
#, c-format
msgid "^BGYou dropped the %s^BG buff!"
-msgstr "^BGÐ\92Ñ\8b Ñ\83Ñ\80онили усилитель %s^BG!"
+msgstr "^BGÐ\92Ñ\8b Ñ\81бÑ\80оÑ\81или усилитель %s^BG!"
#: qcsrc/common/notifications/all.inc:380
#: qcsrc/common/notifications/all.inc:693
#, c-format
msgid "^BGYou got the %s^BG buff!"
-msgstr "^BGÐ\92Ñ\8b забÑ\80али усилитель %s^BG!"
+msgstr "^BGÐ\92Ñ\8b поднÑ\8fли усилитель %s^BG!"
#: qcsrc/common/notifications/all.inc:382
#: qcsrc/common/notifications/all.inc:696
#: qcsrc/common/notifications/all.inc:697
#, c-format
msgid "^BGYou dropped the ^F1%s^BG%s"
-msgstr "^BGВы выбросили ^F1%s^BG%s"
+msgstr "^BGВы сбросили ^F1%s^BG%s"
#: qcsrc/common/notifications/all.inc:384
#: qcsrc/common/notifications/all.inc:698
#: qcsrc/common/notifications/all.inc:391
#, c-format
msgid "^BG%s^F3 connected and joined the ^TC^TT team"
-msgstr "^BG%s^F3 подключен и присоединен к ^TC^TT коменде"
+msgstr "^BG%s^F3 подключён и присоединён к ^TC^TT команде"
#: qcsrc/common/notifications/all.inc:392
#, c-format
#: qcsrc/common/notifications/all.inc:706
#, c-format
msgid "^BG%s^BG has dropped the ball!"
-msgstr "^BG%s^BG Ð\9fоÑ\82еÑ\80Ñ\8fл мяч!"
+msgstr "^BG%s^BG вÑ\8bбÑ\80оÑ\81ил мяч!"
#: qcsrc/common/notifications/all.inc:396
#: qcsrc/common/notifications/all.inc:707
#: qcsrc/common/notifications/all.inc:399
#, c-format
msgid "^BG%s^BG dropped the ^TC^TT Key"
-msgstr "^BG%s^BG выбросил ^TC^TT Ключ"
+msgstr "^BG%s^BG уронил ^TC^TT Ключ"
#: qcsrc/common/notifications/all.inc:400
#, c-format
"^F2You were kicked from the server because you are a spectator and "
"spectators aren't allowed at the moment."
msgstr ""
-"^F2ТÑ\8b бÑ\8bл вÑ\8bкинÑ\83Ñ\82 Ñ\81 Ñ\81еÑ\80веÑ\80а, поÑ\82омÑ\83 Ñ\87Ñ\82о Ñ\82Ñ\8b зÑ\80иÑ\82елÑ\8c, а зÑ\80иÑ\82ели не допÑ\83Ñ\81каÑ\8eÑ\82Ñ\81Ñ\8f "
-"на данный момент."
+"^F2Ð\92Ñ\8b вÑ\8bкинÑ\83Ñ\82Ñ\8b Ñ\81 Ñ\81еÑ\80веÑ\80а, поÑ\82омÑ\83 Ñ\87Ñ\82о вÑ\8b бÑ\8bли зÑ\80иÑ\82елем, а зÑ\80иÑ\82ели не "
+"допÑ\83Ñ\81каÑ\8eÑ\82Ñ\81Ñ\8f на даннÑ\8bй моменÑ\82."
#: qcsrc/common/notifications/all.inc:425
#, c-format
msgid "^BG%s^F3 is now spectating"
-msgstr "^BG%s^F3 Ñ\82епеÑ\80Ñ\8c наблÑ\8eдатель"
+msgstr "^BG%s^F3 Ñ\82епеÑ\80Ñ\8c зÑ\80итель"
#: qcsrc/common/notifications/all.inc:427
#, c-format
"kicked, because spectating isn't allowed at this time!"
msgstr ""
"^F2Вы должны присоединиться к игре в течение %s, в противном случае вы "
-"бÑ\83деÑ\82е оÑ\82Ñ\81оединенÑ\8b оÑ\82 Ñ\81еÑ\80веÑ\80а, Ñ\82ак как бÑ\8bÑ\82Ñ\8c наблÑ\8eдателем временно запрещено!"
+"бÑ\83деÑ\82е оÑ\82Ñ\81оединенÑ\8b оÑ\82 Ñ\81еÑ\80веÑ\80а, Ñ\82ак как бÑ\8bÑ\82Ñ\8c зÑ\80ителем временно запрещено!"
#: qcsrc/common/notifications/all.inc:443
#, c-format
#: qcsrc/common/notifications/all.inc:460
#, c-format
msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
-msgstr "^BG%s%s^K1 испытал на себе силу Crylink'а ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 испытал на себе силу Крайлинка ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:461
#, c-format
msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
-msgstr "^BG%s^K1 испытал на себе силу собственного Crylink'а%s%s"
+msgstr "^BG%s^K1 испытал на себе силу собственного Крайлинка%s%s"
#: qcsrc/common/notifications/all.inc:462
#, c-format
#: qcsrc/common/notifications/all.inc:465
#, c-format
msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
-msgstr "^BG%s%s^K1 был разорван зарядом Electro от ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 был разорван зарядом Электро от ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:466
#, c-format
msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
-msgstr "^BG%s%s^K1 почуял запах озона от Electro комбо ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 почуял запах озона от комбо Электро ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:467
#, c-format
msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro orb%s%s"
-msgstr "^BG%s%s^K1 подошел слишком близко сфере Электро ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 подошёл слишком близко сфере Электро ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:468
#, c-format
msgid "^BG%s^K1 played with Electro bolts%s%s"
-msgstr "^BG%s^K1 доигÑ\80алÑ\81Ñ\8f Ñ\81 ÐлекÑ\82Ñ\80иÑ\87еÑ\81кими заÑ\80Ñ\8fдами%s%s"
+msgstr "^BG%s^K1 доигÑ\80алÑ\81Ñ\8f Ñ\81 заÑ\80Ñ\8fдами ÐлекÑ\82Ñ\80о %s%s"
#: qcsrc/common/notifications/all.inc:469
#, c-format
#: qcsrc/common/notifications/all.inc:474
#, c-format
msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
-msgstr "^BG%s%s^K1 утрамбован очередью из Hagar'а от ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 утрамбован очередью из Хагара от ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:475
#, c-format
msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
-msgstr "^BG%s%s^K1 обстрелян из Hagar'а со стороны ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 обстрелян из Хагара со стороны ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:476
#, c-format
msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
-msgstr "^BG%s^K1 доигрался с ракетками из Hagar'а%s%s"
+msgstr "^BG%s^K1 доигрался с ракетками из Хагара%s%s"
#: qcsrc/common/notifications/all.inc:477
#, c-format
msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
-msgstr "^BG%s%s^K1 был порезан HLAC'ом ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 был порезан из ТЛО ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:478
#, c-format
msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
-msgstr "^BG%s^K1 не соблюдал технику безопасности при обращении с HLAC%s%s"
+msgstr "^BG%s^K1 не соблюдал технику безопасности при обращении с ТЛО %s%s"
#: qcsrc/common/notifications/all.inc:479
#, c-format
msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Heavy Machine Gun%s%s"
-msgstr "^BG%s%s^K1 заÑ\81Ñ\82Ñ\80елен из ТÑ\8fжÑ\91лого пулемёта ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 заÑ\81Ñ\82Ñ\80елен из ТÑ\8fжÑ\91лого Ð\9fулемёта ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:480
#, c-format
msgid "^BG%s%s^K1 was torn to bits by ^BG%s^K1's Heavy Machine Gun%s%s"
-msgstr "^BG%s%s^K1 Ñ\80азоÑ\80ван на кÑ\83Ñ\81ки из ТÑ\8fжÑ\91лого пулемёта ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 Ñ\80азоÑ\80ван на кÑ\83Ñ\81ки из ТÑ\8fжÑ\91лого Ð\9fулемёта ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:481
#, c-format
#, c-format
msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
msgstr ""
-"^BG%s%s^K1 оказался в зоне поражения гранаты, выпущенной из Mortar'a ^BG"
+"^BG%s%s^K1 оказался в зоне поражения гранаты, выпущенной из Мортиры ^BG"
"%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:490
#, c-format
msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
-msgstr "^BG%s%s^K1 отведал гранаты из Mortar'a ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 отведал гранаты из Мортиры ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:491
#, c-format
msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
-msgstr "^BG%s^K1 не уследил за гранатой, выпущенной из своего Mortar'a%s%s"
+msgstr "^BG%s^K1 не уследил за гранатой, выпущенной из своего Мортиры %s%s"
#: qcsrc/common/notifications/all.inc:492
#, c-format
msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
-msgstr "^BG%s^K1 взорвал сам себя с помощью Mortar'a%s%s"
+msgstr "^BG%s^K1 взорвал сам себя с помощью Мортиры %s%s"
#: qcsrc/common/notifications/all.inc:493
#, c-format
msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
-msgstr "^BG%s%s^K1 расстрелян из Rifle ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 расстрелян из Винтовки ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:494
#, c-format
msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
-msgstr "^BG%s%s^K1 погиб после знакомства с пулей из Rifle ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 погиб после знакомства с пулей из Винтовки ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:495
#, c-format
msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
-msgstr "^BG%s%s^K1 не смог избежать знакомства с пулей из Rifle ^BG%s^K1%s%s"
+msgstr ""
+"^BG%s%s^K1 не смог избежать знакомства с пулей из Винтовки ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:496
#, c-format
msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
-msgstr "^BG%s%s^K1 не смог спрятаться от Rifle ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 не смог спрятаться от Винтовки ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:497
#, c-format
#: qcsrc/common/notifications/all.inc:502
#, c-format
msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
-msgstr ""
-"^BG%s%s^K1 был захвачен системой самонаведения Самонаводчика ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 был захвачен системой Самонаводчика ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:503
#, c-format
#: qcsrc/common/notifications/all.inc:506
#, c-format
msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
-msgstr "^BG%s%s^K1 пристрелен из Shotgun'a ^BG%s^K1%s%s"
+msgstr "^BG%s%s^K1 пристрелен из Дробовика ^BG%s^K1%s%s"
#: qcsrc/common/notifications/all.inc:507
#, c-format
msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
-msgstr "^BG%s%s^K1 отшлёпал ^BG%s^K1 своим большим Shotgun'ом%s%s"
+msgstr "^BG%s%s^K1 отшлёпал ^BG%s^K1 своим большим Дробовиком%s%s"
#: qcsrc/common/notifications/all.inc:508
#, c-format
#: qcsrc/common/notifications/all.inc:545
msgid "^F4Round starts in ^COUNT"
-msgstr "^F4Раунд начнется через ^COUNT"
+msgstr "^F4Раунд начнётся через ^COUNT"
#: qcsrc/common/notifications/all.inc:546
msgid "^F4Round cannot start"
#: qcsrc/common/notifications/all.inc:569
msgid "^BGYou got the ^TC^TT^BG flag!"
-msgstr "^BGÐ\92Ñ\8b забÑ\80али ^TC^TT^BG флаг!"
+msgstr "^BGÐ\92Ñ\8b поднÑ\8fли ^TC^TT^BG флаг!"
#: qcsrc/common/notifications/all.inc:570
msgid "^BGYou got the flag!"
-msgstr "^BGÐ\92Ñ\8b забÑ\80али флаг!"
+msgstr "^BGÐ\92Ñ\8b поднÑ\8fли флаг!"
#: qcsrc/common/notifications/all.inc:571
#, c-format
#: qcsrc/common/notifications/all.inc:579
#, c-format
msgid "^BGYour %steam mate^BG got the ^TC^TT^BG flag! Protect them!"
-msgstr ""
-"^BGВаш %sтоварищ по команде^BG заполучил ^TC^TT^BG флаг! Защищайте его!"
+msgstr "^BGВаш %sсоюзник^BG заполучил ^TC^TT^BG флаг! Защищайте его!"
#: qcsrc/common/notifications/all.inc:580
#, c-format
msgid "^BGYour %steam mate (^BG%s%s)^BG got the ^TC^TT^BG flag! Protect them!"
-msgstr ""
-"^BGВаш %sтоварищ по команде (^BG%s%s)^BG заполучил ^TC^TT^BG флаг! Защищайте "
-"его!"
+msgstr "^BGВаш %sсоюзник (^BG%s%s)^BG заполучил ^TC^TT^BG флаг! Защищайте его!"
#: qcsrc/common/notifications/all.inc:581
#, c-format
msgid "^BGYour %steam mate^BG got the flag! Protect them!"
-msgstr "^BGÐ\92аÑ\88 %sÑ\82оваÑ\80иÑ\89 по команде^BG заполучил флаг! Защищайте его!"
+msgstr "^BGÐ\92аÑ\88 %sÑ\81оÑ\8eзник^BG заполучил флаг! Защищайте его!"
#: qcsrc/common/notifications/all.inc:582
#, c-format
msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
-msgstr ""
-"^BGВаш %sтоварищ по команде (^BG%s%s)^BG заполучил флаг! Защищайте его!"
+msgstr "^BGВаш %sсоюзник (^BG%s%s)^BG заполучил флаг! Защищайте его!"
#: qcsrc/common/notifications/all.inc:583
msgid "^BGEnemies can now see you on radar!"
#: qcsrc/common/notifications/all.inc:590
#, c-format
msgid "^K3%sYou fragged ^BG%s"
-msgstr "^K3%sÐ\92Ñ\8b Ñ\83били ^BG%s"
+msgstr "^K3%sÐ\92Ñ\8b Ñ\84Ñ\80агнÑ\83ли ^BG%s"
#: qcsrc/common/notifications/all.inc:591
#: qcsrc/common/notifications/all.inc:600
#: qcsrc/common/notifications/all.inc:592
#, c-format
msgid "^K1%sYou were fragged by ^BG%s"
-msgstr "^K1%sÐ\92аÑ\81 Ñ\83бил ^BG%s"
+msgstr "^K1%sÐ\92аÑ\81 Ñ\84Ñ\80агнÑ\83л ^BG%s"
#: qcsrc/common/notifications/all.inc:593
#: qcsrc/common/notifications/all.inc:602
#: qcsrc/common/notifications/all.inc:617
#, c-format
msgid "^K1%sYou typefragged ^BG%s"
-msgstr "^K1%sÐ\92Ñ\8b Ñ\83били ^BG%s, пока он писал"
+msgstr "^K1%sÐ\92Ñ\8b Ñ\84Ñ\80агнÑ\83ли ^BG%s, пока он писал"
#: qcsrc/common/notifications/all.inc:618
#, c-format
#: qcsrc/common/notifications/all.inc:619
#, c-format
msgid "^K1%sYou were typefragged by ^BG%s"
-msgstr "^K1%sÐ\9fока вÑ\8b пиÑ\81али, ваÑ\81 Ñ\83бил ^BG%s"
+msgstr "^K1%sÐ\9fока вÑ\8b пиÑ\81али, ваÑ\81 Ñ\84Ñ\80агнÑ\83л ^BG%s"
#: qcsrc/common/notifications/all.inc:620
#, c-format
msgid "^K1%sYou were scored against by ^BG%s^K1 while typing"
-msgstr "^K1%sВас фрагнул игрок ^BG%s^K1 пока вы печатали"
+msgstr "^K1%sВас фрагнул игрок ^BG%s^K1, пока вы писали"
#: qcsrc/common/notifications/all.inc:626
#, c-format
#: qcsrc/common/notifications/all.inc:630
msgid "^K1Don't go against your team mates!"
-msgstr "^K1Ð\9dе Ñ\83бивайÑ\82е Ñ\82оваÑ\80иÑ\89ей по команде!"
+msgstr "^K1Ð\9dе Ñ\83бивайÑ\82е Ñ\81оÑ\8eзников!"
#: qcsrc/common/notifications/all.inc:630
msgid "^K1Don't shoot your team mates!"
-msgstr "^K1Ð\9dе Ñ\81Ñ\82Ñ\80елÑ\8fйÑ\82е в Ñ\81воиÑ\85 Ñ\82оваÑ\80иÑ\89ей по команде!"
+msgstr "^K1Ð\9dе Ñ\81Ñ\82Ñ\80елÑ\8fйÑ\82е в Ñ\81воиÑ\85 Ñ\81оÑ\8eзников!"
#: qcsrc/common/notifications/all.inc:631
msgid "^K1Die camper!"
#: qcsrc/common/notifications/all.inc:642
msgid "^K1You felt a little chilly!"
-msgstr "^K1Ð\92Ñ\8b поÑ\87Ñ\83вÑ\81Ñ\82вовали пÑ\80оÑ\85ладеÑ\86!"
+msgstr "^K1Ð\92Ñ\8b поÑ\87Ñ\83вÑ\81Ñ\82вовали озноб!"
#: qcsrc/common/notifications/all.inc:642
msgid "^K1You got a little bit too cold!"
#: qcsrc/common/notifications/all.inc:645
msgid "^K1You grew too old without taking your medicine"
-msgstr "^K1Вы прожили слишком долго, для человека не принимающего лекарств"
+msgstr "^K1Вы прожили слишком долго для человека не принимающего лекарств"
#: qcsrc/common/notifications/all.inc:645
msgid "^K1You need to preserve your health"
#: qcsrc/common/notifications/all.inc:652
msgid "^K1You were fragged by a turret!"
-msgstr "^K1Ð\92Ñ\8b бÑ\8bли Ñ\83биты турелью!"
+msgstr "^K1Ð\92Ñ\8b бÑ\8bли Ñ\84Ñ\80агнÑ\83ты турелью!"
#: qcsrc/common/notifications/all.inc:653
msgid "^K1You had an unfortunate run in with an eWheel turret!"
#: qcsrc/common/notifications/all.inc:653
msgid "^K1You were fragged by an eWheel turret!"
-msgstr "^K1Ð\92Ñ\8b бÑ\8bли Ñ\83биты турелью еМобиля!"
+msgstr "^K1Ð\92Ñ\8b бÑ\8bли Ñ\84Ñ\80агнÑ\83ты турелью еМобиля!"
#: qcsrc/common/notifications/all.inc:654
msgid "^K1You had an unfortunate run in with a Walker turret!"
-msgstr "^K1Ваша встреча с турелью Walker закончилась плачевно!"
+msgstr "^K1Ваша встреча с турелью Ходуна закончилась плачевно!"
#: qcsrc/common/notifications/all.inc:654
msgid "^K1You were fragged by a Walker turret!"
-msgstr "^K1Ð\92Ñ\8b бÑ\8bли Ñ\83биÑ\82Ñ\8b Ñ\82Ñ\83Ñ\80елÑ\8cÑ\8e Walker!"
+msgstr "^K1Ð\92Ñ\8b бÑ\8bли Ñ\84Ñ\80агнÑ\83Ñ\82Ñ\8b Ñ\82Ñ\83Ñ\80елÑ\8cÑ\8e ХодÑ\83на!"
#: qcsrc/common/notifications/all.inc:655
msgid "^K1You got caught in the blast of a Bumblebee explosion!"
-msgstr "^K1Ð\92аÑ\81 задело взÑ\80Ñ\8bвной волной оÑ\82 Bumblebee!"
+msgstr "^K1Ð\92аÑ\81 задело взÑ\80Ñ\8bвной волной ШмелÑ\8f!"
#: qcsrc/common/notifications/all.inc:656
msgid "^K1You were crushed by a vehicle!"
#: qcsrc/common/notifications/all.inc:657
msgid "^K1You were caught in a Raptor cluster bomb!"
-msgstr "^K1Вас накрыло кассетными бомбами с Raptor'а!"
+msgstr "^K1Вас накрыло кассетными бомбами с Ящера!"
#: qcsrc/common/notifications/all.inc:658
msgid "^K1You got caught in the blast of a Raptor explosion!"
-msgstr "^K1Вас задело взрывной волной от Raptor'a!"
+msgstr "^K1Вас задело взрывной волной от Ящера!"
#: qcsrc/common/notifications/all.inc:659
msgid "^K1You got caught in the blast of a Spiderbot explosion!"
-msgstr "^K1Вас задело взрывной волной от Spiderbot'a!"
+msgstr "^K1Вас задело взрывной волной от Паука-ботa!"
#: qcsrc/common/notifications/all.inc:660
msgid "^K1You were blasted to bits by a Spiderbot rocket!"
-msgstr "^K1Ракета Spiderbot'а порвала Вас в клочья!"
+msgstr "^K1Ракета Паука-бота порвала вас в клочья!"
#: qcsrc/common/notifications/all.inc:661
msgid "^K1You got caught in the blast of a Racer explosion!"
-msgstr "^K1Вас задело взрывной волной от Racer'а!"
+msgstr "^K1Вас задело взрывной волной от Гонщика!"
#: qcsrc/common/notifications/all.inc:662
msgid "^K1You couldn't find shelter from a Racer rocket!"
-msgstr "^K1Вы не смогли укрыться от ракеты Racer'а!"
+msgstr "^K1Вы не смогли укрыться от ракеты Гонщика!"
#: qcsrc/common/notifications/all.inc:663
msgid "^K1Watch your step!"
#: qcsrc/common/notifications/all.inc:665
#, c-format
msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
-msgstr "^K1Ð\94ебил! ТÑ\8b Ñ\83бил ^BG%s^K1, Ñ\81воего Ñ\82оваÑ\80иÑ\89а по команде!"
+msgstr "^K1Ð\9dегодÑ\8fй! Ð\92Ñ\8b Ñ\84Ñ\80агнÑ\83ли ^BG%s^K1, Ñ\81воего Ñ\81оÑ\8eзника!"
#: qcsrc/common/notifications/all.inc:665
#, c-format
msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
-msgstr "^K1Ð\94ебил! ТÑ\8b напал на ^BG%s^K1, Ñ\81воего Ñ\82оваÑ\80иÑ\89а по команде!"
+msgstr "^K1Ð\9dегодÑ\8fй! Ð\92Ñ\8b напали на ^BG%s^K1, Ñ\81воего Ñ\81оÑ\8eзника!"
#: qcsrc/common/notifications/all.inc:666
#, c-format
msgid "^K1You were fragged by ^BG%s^K1, a team mate"
-msgstr "^K1Ð\92Ñ\8b бÑ\8bли Ñ\83биÑ\82Ñ\8b ^BG%s^K1, ваÑ\88им Ñ\82оваÑ\80иÑ\89ем по команде"
+msgstr "^K1Ð\92Ñ\8b бÑ\8bли Ñ\84Ñ\80агнÑ\83Ñ\82Ñ\8b ^BG%s^K1, ваÑ\88им Ñ\81оÑ\8eзником"
#: qcsrc/common/notifications/all.inc:666
#, c-format
msgid "^K1You were scored against by ^BG%s^K1, a team mate"
-msgstr "^K1Ð\92Ñ\8b пÑ\80оигÑ\80али оÑ\87ко ^BG%s^K1, Ñ\81воемÑ\83 Ñ\82оваÑ\80иÑ\89Ñ\83 по команде"
+msgstr "^K1Ð\92Ñ\8b пÑ\80оигÑ\80али оÑ\87ко ^BG%s^K1, Ñ\81воемÑ\83 Ñ\81оÑ\8eзникÑ\83"
#: qcsrc/common/notifications/all.inc:668
msgid ""
"^BGDisconnecting in ^COUNT..."
msgstr ""
"^K1Хватит бездельничать!\n"
-"^BGРаÑ\81Ñ\81оединение через ^COUNT..."
+"^BGÐ\9eÑ\82клÑ\8eÑ\87ение через ^COUNT..."
#: qcsrc/common/notifications/all.inc:670
#, c-format
#: qcsrc/common/notifications/all.inc:694
msgid "^BGYou got the ^F1Fuel regenerator"
-msgstr "^BGУ ваÑ\81 еÑ\81Ñ\82Ñ\8c ^F1Ð\92оÑ\81Ñ\81Ñ\82ановиÑ\82елÑ\8c топлива"
+msgstr "^BGУ ваÑ\81 еÑ\81Ñ\82Ñ\8c ^F1РегенеÑ\80аÑ\82оÑ\80 топлива"
#: qcsrc/common/notifications/all.inc:695
msgid "^BGYou got the ^F1Jet pack"
#: qcsrc/common/notifications/all.inc:756
msgid "^F2You are on speed"
-msgstr "^F2Ваша скорость передвижения повышена"
+msgstr "^F2Вы двигаетесь быстрее"
#: qcsrc/common/notifications/all.inc:757
msgid "^F2Speed has worn off"
#: qcsrc/common/notifications/all.inc:764
msgid "^BGSecondary fire inflicts no damage!"
-msgstr "^BGÐ\90лÑ\8cÑ\82еÑ\80наÑ\82ивный режим огня не наносит урона!"
+msgstr "^BGÐ\92Ñ\82оÑ\80иÑ\87ный режим огня не наносит урона!"
#: qcsrc/common/notifications/all.inc:766
msgid "^BGSequence completed!"
#: qcsrc/common/notifications/all.inc:767
msgid "^BGThere are more to go..."
-msgstr "^BGВпереди еще много чего..."
+msgstr "^BGВпереди ещё много чего..."
#: qcsrc/common/notifications/all.inc:768
#, c-format
#: qcsrc/common/notifications/all.inc:776
msgid "^K1Spectating in ^COUNT"
-msgstr "^K1Ð\92Ñ\8b Ñ\81Ñ\82анеÑ\82е наблÑ\8eдателем через ^COUNT"
+msgstr "^K1Ð\92Ñ\8b Ñ\81Ñ\82анеÑ\82е зÑ\80ителем через ^COUNT"
#: qcsrc/common/notifications/all.inc:777
msgid "^K1Suicide in ^COUNT"
#: qcsrc/common/notifications/all.inc:780
msgid "^F4Timeout ends in ^COUNT"
-msgstr "^F4Тайм-аут законится через ^COUNT"
+msgstr "^F4Тайм-аут закончится через ^COUNT"
#: qcsrc/common/notifications/all.inc:782
msgid "^K1Cannot join given minigame session!"
-msgstr "^K1Невозможно присоединиться к данной сессии миниигры!"
+msgstr "^K1Невозможно присоединиться к данной сессии мини-игры!"
#: qcsrc/common/notifications/all.inc:784
#, c-format
#: qcsrc/common/notifications/all.inc:785
#, c-format
msgid "^BGPress ^F2%s^BG to enter the vehicle gunner"
-msgstr "^BGНажмите ^F2%s^BG, чтобы стать пулемётчиком траспорта"
+msgstr "^BGНажмите ^F2%s^BG, чтобы стать пулемётчиком транспорта"
#: qcsrc/common/notifications/all.inc:786
#, c-format
#: qcsrc/common/notifications/all.qh:407 qcsrc/common/notifications/all.qh:408
msgid "secondary"
-msgstr "алÑ\8cÑ\82еÑ\80наÑ\82ивный"
+msgstr "вÑ\82оÑ\80иÑ\87ный"
#: qcsrc/common/notifications/all.qh:410
msgid "point"
#: qcsrc/common/notifications/all.qh:446
msgid "MASSACRE! "
-msgstr "РЕЗНЯ!"
+msgstr "РЕЗНЯ! "
#: qcsrc/common/notifications/all.qh:447
#, c-format
#: qcsrc/common/notifications/all.qh:448
#, c-format
msgid "%s^K1 is a BERSERKER! %s^BG"
-msgstr "%s^K1 БЕРСЕРКЕР! %s^BG"
+msgstr "%s^K1 БЕРСЕРК! %s^BG"
#: qcsrc/common/notifications/all.qh:448
#, c-format
#: qcsrc/common/notifications/all.qh:448
msgid "BERSERKER! "
-msgstr "БЕРСЕРКЕР! "
+msgstr "БЕРСЕРК! "
#: qcsrc/common/notifications/all.qh:449
#, c-format
#: qcsrc/common/notifications/all.qh:449
msgid "CARNAGE! "
-msgstr "БОЙНЯ!"
+msgstr "БОЙНЯ! "
#: qcsrc/common/notifications/all.qh:450
#, c-format
#: qcsrc/common/notifications/all.qh:450
msgid "ARMAGEDDON! "
-msgstr "АРМАГЕДДОН!"
+msgstr "АРМАГЕДДОН! "
#: qcsrc/common/notifications/all.qh:457
#, c-format
#: qcsrc/common/turrets/all.qh:51
msgid "Turrets dump command only works with sv_cmd.\n"
-msgstr "Команда выгрузки туреток работает только с sv_cmd.\n"
+msgstr "Команда выгрузки турелей работает только с sv_cmd.\n"
#: qcsrc/common/turrets/cl_turrets.qc:129
#, c-format
#: qcsrc/common/turrets/turret/flac.qh:13
msgid "FLAC Cannon"
-msgstr "Ð\97ениÑ\82наÑ\8f пушка"
+msgstr "Ð\97ениÑ\82наÑ\8f Ð\9fушка"
#: qcsrc/common/turrets/turret/flac_weapon.qh:7
msgid "FLAC"
#: qcsrc/common/turrets/turret/walker.qh:15
msgid "Walker Turret"
-msgstr "ХодÑ\8fÑ\87аÑ\8f Ñ\82Ñ\83Ñ\80елÑ\8c"
+msgstr "ТÑ\83Ñ\80елÑ\8c ХодÑ\83на"
#: qcsrc/common/turrets/turret/walker_weapon.qh:7
msgid "Walker"
-msgstr "Ходунки"
+msgstr "Ходун"
#: qcsrc/common/vehicles/cl_vehicles.qc:192
#, c-format
#: qcsrc/common/vehicles/vehicle/spiderbot.qh:19
msgid "Spiderbot"
-msgstr "Паук-робот"
+msgstr "Паук-бот"
#: qcsrc/common/weapons/all.qh:78
msgid "Weapons dump command only works with sv_cmd.\n"
#: qcsrc/menu/xonotic/credits.qc:116
msgid "Marketing / PR"
-msgstr "Маркетинг / Cвязи с общественностью"
+msgstr "Маркетинг / Связи с общественностью"
#: qcsrc/menu/xonotic/credits.qc:122
msgid "Legal"
#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:16
msgid "PNL^Disabled"
-msgstr "PNL^Ð\92Ñ\8bключена"
+msgstr "PNL^Ð\9eÑ\82ключена"
#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:17
msgid "PNL^Enabled spectating"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:54
msgid "mph"
-msgstr "милÑ\8f/ч"
+msgstr "милÑ\8c/ч"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:55
msgid "knots"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:67
msgid "Include vertical acceleration"
-msgstr "С вертикальним ускорением"
+msgstr "С вертикальным ускорением"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qh:6
msgid "Physics Panel"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:46
msgid "Zoomed in"
-msgstr "Приближён"
+msgstr "Приближен"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:47
msgid "Zoomed out"
-msgstr "Не приближён"
+msgstr "Не приближен"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:48
msgid "Always zoomed"
-msgstr "Всегда приближён"
+msgstr "Всегда приближен"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:49
msgid "Never zoomed"
-msgstr "Никогда не приближён"
+msgstr "Никогда не приближен"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qh:6
msgid "Radar Panel"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:41
msgid "Show only owned weapons"
-msgstr "Показывать только свое оружие"
+msgstr "Показывать только своё оружие"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:52
msgid "Show weapon ID as:"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:33
#: qcsrc/menu/xonotic/dialog_settings_user.qc:30
msgid "Set skin"
-msgstr "Ð\92Ñ\8bбÑ\80ать тему"
+msgstr "Ð\9fÑ\80именить тему"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:37
msgid "Save current skin"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:66
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:78
msgid "The amount of frags needed before the match will end"
-msgstr "Количество фрагов, необходимых для завершения состязания"
+msgstr "Количество фрагов, необходимых для завершения матча"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:67
msgid "Capture limit:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:67
msgid "The amount of captures needed before the match will end"
-msgstr "Количество захватов, необходимых для завершения состязания"
+msgstr "Количество захватов, необходимых для завершения матча"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:68
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:69
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:69
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:77
msgid "The amount of points needed before the match will end"
-msgstr "Количество очков, необходимых для завершения состязания"
+msgstr "Количество очков, необходимых для завершения матча"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:70
msgid "Lives:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:72
msgid "The amount of goals needed before the match will end"
-msgstr "Количество голов, необходимых для завершения состязания"
+msgstr "Количество голов, необходимых для завершения матча"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:97
msgid "Gametype"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:104
msgid "Timelimit in minutes that when hit, will end the match"
-msgstr ""
-"Ограничение времени в минутах, состязание закончится при его достижении"
+msgstr "Ограничение времени в минутах, после которого закончится матч"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:105
#, c-format
"Click here or Ctrl-F to provide a keyword to narrow down the map list. Ctrl-"
"Delete to clear; Enter when done."
msgstr ""
-"Нажмите здесь или Ctrl-F, чтобы задать ключевое слово для сужения списка "
-"карт. Ctrl-Delete, чтобы очистить; Enter, когда закончите."
+"Нажмите здесь или Ctrl+F, чтобы задать ключевое слово для сужения списка "
+"карт. Ctrl+Delete, чтобы очистить; Enter, когда закончите."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:207
msgid "Add shown"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:96
msgid "MAP^Play"
-msgstr "Играть"
+msgstr "MAP^Играть"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qh:7
msgid "Map Information"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:63
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:267
msgid "InstaGib"
-msgstr "Ð\98нÑ\81Ñ\82аÐ\93иб"
+msgstr "Ð\98нÑ\81Ñ\82агиб"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:65
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:216
msgid "New Toys"
-msgstr "Ð\9dовÑ\8bе Ð\98грушки"
+msgstr "Ð\9dовÑ\8bе игрушки"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:67
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:272
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:69
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:220
msgid "Rocket Flying"
-msgstr "РакеÑ\82нÑ\8bй Ð\9fолÑ\91Ñ\82"
+msgstr "Ð\9fолÑ\91Ñ\82 на Ñ\80акеÑ\82е"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:71
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:212
msgid "Invincible Projectiles"
-msgstr "Неразрушимые Снаряды"
+msgstr "Неразрушимые снаряды"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:75
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:282
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:230
msgid "Weapons stay after they are picked up"
-msgstr "Ð\92Ñ\81Ñ\91 Ñ\81обÑ\80анное оÑ\80Ñ\83жие оÑ\81Ñ\82аÑ\91Ñ\82Ñ\81Ñ\8f поÑ\81ле возÑ\80ождений"
+msgstr "Ð\9fÑ\83Ñ\88ки оÑ\81Ñ\82аÑ\8eÑ\82Ñ\81Ñ\8f поÑ\81ле подбоÑ\80а"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:235
msgid "Regular (no arena)"
msgstr ""
"Игроки получат только одно оружие, которое немедленно убьёт противника с "
"одного выстрела. Если игрок испытывает недостаток патронов, у него есть 10 "
-"Ñ\81екÑ\83нд, Ñ\87Ñ\82обÑ\8b найÑ\82и еÑ\89Ñ\91, инаÑ\87е он вÑ\81Ñ\82Ñ\80еÑ\82иÑ\82 Ñ\81меÑ\80Ñ\82Ñ\8c. Режим вÑ\82оÑ\80оÑ\81Ñ\82епенного "
-"огнÑ\8f не наноÑ\81иÑ\82 Ñ\83Ñ\80она, но он Ñ\85оÑ\80оÑ\88 длÑ\8f пÑ\80Ñ\8bжка."
+"Ñ\81екÑ\83нд, Ñ\87Ñ\82обÑ\8b найÑ\82и еÑ\89Ñ\91, инаÑ\87е он вÑ\81Ñ\82Ñ\80еÑ\82иÑ\82 Ñ\81меÑ\80Ñ\82Ñ\8c. Режим вÑ\82оÑ\80иÑ\87ного огнÑ\8f не "
+"наноÑ\81иÑ\82 Ñ\83Ñ\80она, но он Ñ\85оÑ\80оÑ\88 длÑ\8f Ñ\82Ñ\80Ñ\8eков."
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:273
msgid ""
"weapon. After some time, a countdown will start, after which everyone will "
"switch to another weapon."
msgstr ""
-"Xonotic без предметов — вместо подбора предметов, каждый играет с тем же "
-"оружием. Через некоторое время начнётся обратный отчёт, после чего "
-"переключится на другое оружие."
+"Xonotic без предметов — вместо подбора предметов, каждый играет одним и тем "
+"же оÑ\80Ñ\83жием. ЧеÑ\80ез некоÑ\82оÑ\80ое вÑ\80емÑ\8f наÑ\87нÑ\91Ñ\82Ñ\81Ñ\8f обÑ\80аÑ\82нÑ\8bй оÑ\82Ñ\87Ñ\91Ñ\82, поÑ\81ле Ñ\87его "
+"произойдёт переключение на другое оружие."
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:277
msgid "with blaster"
msgid ""
"Pause updating the server list to prevent servers from \"jumping around\""
msgstr ""
-"Приостановить обновление списка серверов для предотвращения их скакания"
+"Приостановить обновление списка серверов для закрепления серверов на одном "
+"месте"
#: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:53
msgid "Reload the server list"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:63
msgid "Non-solid"
-msgstr "Не твердый"
+msgstr "Не твёрдый"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:64
msgid "Solid"
-msgstr "Твердый"
+msgstr "Твёрдый"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:65
msgid "Set physics:"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:134
msgid "Swap stereo output channels"
-msgstr "Поменять местами стерео каналы"
+msgstr "Поменять местами каналы стерео"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:135
msgid "Swap left/right channels"
"Disable textures completely for very slow hardware. This gives a huge "
"performance boost, but looks very ugly. (default: disabled)"
msgstr ""
-"Ð\92Ñ\8bклÑ\8eÑ\87иÑ\82Ñ\8c Ñ\82екÑ\81Ñ\82Ñ\83Ñ\80Ñ\8b полноÑ\81Ñ\82Ñ\8cÑ\8e для очень слабых компьютеров. Это даст лучшую "
-"пÑ\80оизводиÑ\82елÑ\8cноÑ\81Ñ\82Ñ\8c, но бÑ\83деÑ\82 вÑ\8bглÑ\8fдеÑ\82Ñ\8c плоÑ\85о (по Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"Ð\9fолноÑ\81Ñ\82Ñ\8cÑ\8e оÑ\82клÑ\8eÑ\87иÑ\82Ñ\8c Ñ\82екÑ\81Ñ\82Ñ\83Ñ\80Ñ\8b для очень слабых компьютеров. Это даст лучшую "
+"пÑ\80оизводиÑ\82елÑ\8cноÑ\81Ñ\82Ñ\8c, но бÑ\83деÑ\82 вÑ\8bглÑ\8fдеÑ\82Ñ\8c не кÑ\80аÑ\81иво (по Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:135
msgid "Use lightmaps"
"\"pop out\" of the flat 2D surface (default: disabled)"
msgstr ""
"Эффект рельефного текстурирования, который сделает 2D-текстуры трёхмерными "
-"(по Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"(по Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:148
msgid "Relief mapping"
"(default: disabled)"
msgstr ""
"Более высокое качество рельефного текстурирования, которое также снизит "
-"пÑ\80оизводиÑ\82елÑ\8cноÑ\81Ñ\82Ñ\8c (по Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"пÑ\80оизводиÑ\82елÑ\8cноÑ\81Ñ\82Ñ\8c (по Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:152
msgid "Reflections:"
"with reflecting surfaces (default: disabled)"
msgstr ""
"Качество отражения и преломления, снижающее производительность на картах с "
-"зеÑ\80калÑ\8cнÑ\8bми повеÑ\80Ñ\85ноÑ\81Ñ\82Ñ\8fми (по Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"зеÑ\80калÑ\8cнÑ\8bми повеÑ\80Ñ\85ноÑ\81Ñ\82Ñ\8fми (по Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:156
msgid "Resolution of reflections/refractions (default: good)"
"of real dynamic lights (default: disabled)"
msgstr ""
"Включить быстрое, но некрасивое динамическое освещение отрисовкой ярких "
-"коÑ\80он вмеÑ\81Ñ\82о Ñ\80еалÑ\8cного динамиÑ\87еÑ\81кого оÑ\81веÑ\89ениÑ\8f (по Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"коÑ\80он вмеÑ\81Ñ\82о Ñ\80еалÑ\8cного динамиÑ\87еÑ\81кого оÑ\81веÑ\89ениÑ\8f (по Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:198
msgid "Realtime dynamic lighting"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:202
msgid "Enable rendering of shadows from dynamic lights (default: disabled)"
msgstr ""
-"Ð\92клÑ\8eÑ\87иÑ\82Ñ\8c оÑ\82Ñ\80иÑ\81овкÑ\83 Ñ\82еней оÑ\82 динамиÑ\87еÑ\81кого оÑ\81веÑ\89ениÑ\8f (по Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"Ð\92клÑ\8eÑ\87иÑ\82Ñ\8c оÑ\82Ñ\80иÑ\81овкÑ\83 Ñ\82еней оÑ\82 динамиÑ\87еÑ\81кого оÑ\81веÑ\89ениÑ\8f (по Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:205
msgid "Realtime world lighting"
msgstr ""
"Включить отрисовку полного освещения реального времени на картах, "
"поддерживающих это. Примечание: это скажется на производительности (по "
-"Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:208
msgid ""
"Enable rendering of shadows from realtime world lights (default: disabled)"
msgstr ""
-"Ð\92клÑ\8eÑ\87иÑ\82Ñ\8c оÑ\82Ñ\80иÑ\81овкÑ\83 Ñ\82еней оÑ\82 оÑ\81веÑ\89ениÑ\8f Ñ\80еалÑ\8cного вÑ\80емени (по Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"Ð\92клÑ\8eÑ\87иÑ\82Ñ\8c оÑ\82Ñ\80иÑ\81овкÑ\83 Ñ\82еней оÑ\82 оÑ\81веÑ\89ениÑ\8f Ñ\80еалÑ\8cного вÑ\80емени (по Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:212
msgid "Use normal maps"
msgstr ""
"Включить эффект свечения, который увеличивает яркость пикселей, "
"соседствующих с очень яркими. Очень снижает производительность (по "
-"Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:226
msgid "Extra postprocessing effects"
"using a powerup (default: disabled)"
msgstr ""
"Включить специальные эффекты пост-обработки, когда получен урон, под водой "
-"или вклÑ\8eÑ\87ен Ñ\81веÑ\82 (по Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"или иÑ\81полÑ\8cзÑ\83еÑ\82Ñ\81Ñ\8f Ñ\83Ñ\81илиÑ\82елÑ\8c (по Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:232
msgid "Motion blur strength - 0.4 recommended"
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:140
msgid "Enlarge crosshair if targeting an enemy"
-msgstr "Увеличивать прицел, при наведении на врага"
+msgstr "Увеличивать прицел при наведении на врага"
#: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:143
msgid "Animate crosshair when hitting an enemy"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:46
msgid "SPREES^Disabled"
-msgstr "SPREES^Ð\92Ñ\8bключены"
+msgstr "SPREES^Ð\9eÑ\82ключены"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:47
msgid "Target"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:32
msgid "Use simple 2D images instead of item models"
-msgstr "Показывать 2D изображения вместо моделей предметов"
+msgstr "Показывать иконки вместо моделей предметов"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:34
msgid "Unavailable alpha:"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:41
msgid "GHOITEMS^Tinted"
-msgstr "Окрашеные"
+msgstr "Окрашенные"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:42
msgid "GHOITEMS^Normal"
#: 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"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:42
msgid "View waving while idle"
-msgstr "РаÑ\81каÑ\87ивание камеÑ\80Ñ\8b пÑ\80и бездейÑ\81Ñ\82вовии"
+msgstr "Раскачивание камеры при бездействии"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:46
msgid "View bobbing while walking around"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:113
msgid "Display reticle 2D overlay while zooming"
-msgstr "Показывать 2D эффект увеличительного прицела"
+msgstr "Показывать 2D-эффект увеличительного прицела"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:116
msgid "Release zoom when you die or respawn"
-msgstr "Ð\92Ñ\8bключать увеличитель при смерти или возрождении"
+msgstr "Ð\9eÑ\82ключать увеличитель при смерти или возрождении"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:120
msgid "Release zoom when you switch weapons"
-msgstr "Ð\92Ñ\8bключать увеличитель при смене оружия"
+msgstr "Ð\9eÑ\82ключать увеличитель при смене оружия"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qh:7
#: qcsrc/menu/xonotic/keybinder.qc:76
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:50
msgid "Use priority list for weapon cycling"
-msgstr "Использовать приоритеты для прокрутки оружия"
+msgstr "Использовать приоритеты для переключения оружия"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:51
msgid ""
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:53
msgid "Cycle through only usable weapon selections"
-msgstr "ЦиклиÑ\80овать только готовые к использованию оружия"
+msgstr "Ð\9fеÑ\80еклÑ\8eÑ\87ать только готовые к использованию оружия"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:57
msgid "Auto switch weapons on pickup"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:61
msgid "Release attack buttons when you switch weapons"
-msgstr "Ð\92Ñ\8bключать кнопку атаки при смене оружия"
+msgstr "Ð\9eÑ\82ключать кнопку атаки при смене оружия"
#: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:64
msgid "Draw 1st person weapon model"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:79
msgid "Make use of DGA mouse input"
-msgstr "Использовать DGA ввод для мыши"
+msgstr "Использовать ввод с мыши через DGA"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:93
msgid "Pressing \"enter console\" key also closes it"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:96
msgid "Automatically repeat jumping if holding jump"
-msgstr "Повторять прыжок автоматически при удержании"
+msgstr "Повторять прыжок автоматически при удержании нажатия"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:99
msgid "Jetpack on jump:"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:101
msgid "JPJUMP^Disabled"
-msgstr "JPJUMP^Ð\92Ñ\8bключены"
+msgstr "JPJUMP^Ð\9eÑ\82ключены"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:102
msgid "Air only"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:11
#, c-format
msgid "%d fps"
-msgstr "%d фпс"
+msgstr "%d fps"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:12
#, c-format
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:31
msgid "Force client to use chosen port unless it is set to 0"
-msgstr "Ð\9fÑ\80инÑ\83диÑ\82елÑ\8cное иÑ\81полÑ\8cзованние клиенÑ\82ом вÑ\8bбÑ\80анного поÑ\80Ñ\82а, инаÑ\87е 0"
+msgstr "Принудительное использование клиентом выбранного порта, иначе 0"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:34
msgid "Bandwidth:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:82
msgid "Use encryption (AES) when available"
-msgstr "Использовать шифрование (AES) если возможно"
+msgstr "Использовать шифрование (AES), если возможно"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:85
msgid "Framerate"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:130
msgid "Show your rendered frames per second"
-msgstr "Показывать кол-во отрисованных кадров в секуду"
+msgstr "Ð\9fоказÑ\8bваÑ\82Ñ\8c кол-во оÑ\82Ñ\80иÑ\81ованнÑ\8bÑ\85 кадÑ\80ов в Ñ\81екÑ\83ндÑ\83"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:135
msgid "Menu tooltips:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:144
msgid "Show current date and time of day, useful on screenshots"
-msgstr "Ð\9fоказÑ\8bваÑ\82Ñ\8c Ñ\82екÑ\83Ñ\89ие даÑ\82Ñ\83 и вÑ\80емÑ\8f, полезно длÑ\8f Ñ\81нимков Ñ\8dкÑ\80ана"
+msgstr "Ð\9fоказÑ\8bваÑ\82Ñ\8c Ñ\82екÑ\83Ñ\89ие даÑ\82Ñ\83 и вÑ\80емÑ\8f, полезно длÑ\8f Ñ\81кÑ\80инÑ\88оÑ\82ов"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:147
msgid "Enable developer mode"
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:31
msgid "Cvar filter:"
-msgstr "Фильтр cvar:"
+msgstr "Фильтр переменных:"
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:38
msgid "Modified cvars only"
#: qcsrc/menu/xonotic/dialog_settings_user.qc:69
msgid "Set language"
-msgstr "Ð\92Ñ\8bбÑ\80ать язык"
+msgstr "Ð\9fÑ\80именить язык"
#: qcsrc/menu/xonotic/dialog_settings_user.qc:74
msgid "Disable gore effects and harsh language"
"Replace blood and gibs with content that does not have any gore effects "
"(default: disabled)"
msgstr ""
-"Заменить кровь и ошмётки контентом без элементов насилия (по умолчанию: "
-"выкл.)"
+"Заменить кровь и ошмётки эффектом без элементов насилия (по умолчанию: откл.)"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:10
msgid "While connected language changes will be applied only to the menu,"
-msgstr "Ð\9fока вÑ\8b подклÑ\8eÑ\87енÑ\8b, изменение Ñ\8fзÑ\8bка пÑ\80имениÑ\82Ñ\81Ñ\8f только для меню,"
+msgstr "Ð\9fока вÑ\8b подклÑ\8eÑ\87енÑ\8b, изменение Ñ\8fзÑ\8bка вÑ\81Ñ\82Ñ\83пиÑ\82 в Ñ\81илÑ\83 только для меню,"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:12
msgid "full language changes will take effect starting from the next game"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:16
msgid "Disconnect now"
-msgstr "СейÑ\87аÑ\81 оÑ\82клÑ\8eÑ\87ен"
+msgstr "Ð\9eÑ\82Ñ\81оединиÑ\82Ñ\8cÑ\81Ñ\8f Ñ\81ейÑ\87аÑ\81"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:17
msgid "Switch language"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:53
msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
-msgstr "Сколько бит на точку использовать для вывода, советуется 32"
+msgstr "Сколько бит на пиксель использовать для вывода, рекомендуется 32"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:54
msgid "16bit"
"Enable vertical synchronization to prevent tearing, will cap your fps to the "
"screen refresh rate (default: disabled)"
msgstr ""
-"Включить вертикальную синхронизацию для предотвращения образования трещин, "
-"ограничит частоту кадров в секунду частотой обновления экрана (по умолчанию: "
-"выкл.)"
+"Включить вертикальную синхронизацию для предотвращения разрывов кадров, это "
+"ограничит частоту кадров в секунду частотой обновления монитора (по "
+"умолчанию: откл.)"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:67
msgid "Flip view horizontally"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:68
msgid "Poor man's left handed mode (default: off)"
-msgstr "Режим левоÑ\80Ñ\83кого беднÑ\8fги (по Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл)"
+msgstr "Режим левоÑ\80Ñ\83кого беднÑ\8fги (по Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:71
msgid "Anisotropy:"
"might decrease performance by quite a lot (default: disabled)"
msgstr ""
"Включить сглаживание, которое сглаживает края 3D-геометрии. Примечание: это "
-"можеÑ\82 Ñ\81илÑ\8cно Ñ\81низиÑ\82Ñ\8c пÑ\80оизводиÑ\82елÑ\8cноÑ\81Ñ\82Ñ\8c (по Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"можеÑ\82 Ñ\81илÑ\8cно Ñ\81низиÑ\82Ñ\8c пÑ\80оизводиÑ\82елÑ\8cноÑ\81Ñ\82Ñ\8c (по Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:85
msgid "AA^Disabled"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:97
msgid "Depth first:"
-msgstr "СпеÑ\80ва глубина:"
+msgstr "СнаÑ\87ала глубина:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:99
msgid ""
"normal rendering starts (default: disabled)"
msgstr ""
"Устранить перерасход отрисовкой только глубокой версии сцен до нормального "
-"наÑ\87ала оÑ\82Ñ\80иÑ\81овки (по Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"наÑ\87ала оÑ\82Ñ\80иÑ\81овки (по Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:100
msgid "DF^Disabled"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:105
msgid "Vertex Buffer Objects (VBOs)"
-msgstr "Использовать Vertex Buffer Objects (VBO)"
+msgstr "Использовать вершинные буферы (VBO)"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:108
msgid "VBO^Off"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:109
msgid "Vertices, some Tris (compatible)"
-msgstr "Вершины и отдельные треугольники (безопасно)"
+msgstr "Вершины, отдельные треугольники (безопасно)"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:110
#: qcsrc/menu/xonotic/dialog_settings_video.qc:114
"Make the CPU wait for the GPU to finish each frame, can help with some "
"strange input or video lag on some machines (default: disabled)"
msgstr ""
-"Заставляет процессор ждать пока видеокарта закончит отрисовку каждого кадра, "
-"может помочь в случае задержек и лагов на некоторых компьютерах (по "
-"Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"Заставляет процессор ждать, пока видеокарта закончит отрисовку каждого "
+"кадÑ\80а, можеÑ\82 помоÑ\87Ñ\8c в Ñ\81лÑ\83Ñ\87ае задеÑ\80жек и лагов на некоÑ\82оÑ\80Ñ\8bÑ\85 компÑ\8cÑ\8eÑ\82еÑ\80аÑ\85 (по "
+"Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:158
msgid "Use OpenGL 2.0 shaders (GLSL)"
"Enable use of GLSL to apply gamma correction, note that it might decrease "
"performance by a lot (default: disabled)"
msgstr ""
-"Активировать GLSL, чтобы применить гамма-коррекцию. Примечание: это сильно "
-"Ñ\81низиÑ\82 пÑ\80оизводиÑ\82елÑ\8cноÑ\81Ñ\82Ñ\8c (по Ñ\83молÑ\87аниÑ\8e: вÑ\8bкл.)"
+"Активировать GLSL, чтобы применять гамма-коррекцию. Примечание: это сильно "
+"Ñ\81низиÑ\82 пÑ\80оизводиÑ\82елÑ\8cноÑ\81Ñ\82Ñ\8c (по Ñ\83молÑ\87аниÑ\8e: оÑ\82кл.)"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:168
msgid "Psycho coloring (easter egg)"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:131
msgid "CSKL^Easy"
-msgstr "Легкий"
+msgstr "Лёгкий"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:132
msgid "CSKL^Medium"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:33
msgid "Autoselect team (recommended)"
-msgstr "Ð\90вÑ\82овÑ\8bбоÑ\80 командÑ\8b (Ñ\81овеÑ\82уется)"
+msgstr "Ð\90вÑ\82овÑ\8bбоÑ\80 командÑ\8b (Ñ\80екомендуется)"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:37
msgid "red"
#: qcsrc/menu/xonotic/keybinder.qc:80
msgid "screen shot"
-msgstr "Ñ\81нимок Ñ\8dкÑ\80ана"
+msgstr "Ñ\81кÑ\80инÑ\88оÑ\82"
#: qcsrc/menu/xonotic/keybinder.qc:81
msgid "maximize radar"
#: qcsrc/menu/xonotic/keybinder.qc:82
msgid "3rd person view"
-msgstr "Ð\92ид от 3-го лица"
+msgstr "вид от 3-го лица"
#: qcsrc/menu/xonotic/keybinder.qc:83
msgid "enter spectator mode"
#: qcsrc/menu/xonotic/keybinder.qc:101
msgid "auto-join team"
-msgstr "авто-выбор команды"
+msgstr "автовыбор команды"
#: qcsrc/menu/xonotic/keybinder.qc:103
msgid "drop key / drop flag"
msgid ""
"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"
msgstr ""
-"Что? Не могу зайти (m = NULL). Перефильтрую, чтобы такого больше не "
+"Что? Не могу зайти (m = NULL). Перефильтровка, чтобы такого больше не "
"случалось.\n"
#: qcsrc/menu/xonotic/maplist.qc:299
"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
"again.\n"
msgstr ""
-"Что? Не могу зайти (неверный тип игры). Перефильтрую, чтобы такого больше не "
-"случалось.\n"
+"Что? Не могу зайти (неверный тип игры). Перефильтровка, чтобы такого больше "
+"не случалось.\n"
#: qcsrc/menu/xonotic/playerlist.qc:100 qcsrc/menu/xonotic/playerlist.qc:110
msgid "spectator"
#: qcsrc/menu/xonotic/statslist.qc:201 qcsrc/menu/xonotic/statslist.qc:245
#, c-format
msgid "%s_Matches:"
-msgstr "%s_матчей:"
+msgstr "Матчи_%s:"
#: qcsrc/menu/xonotic/statslist.qc:208
#, c-format
#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%d (unranked)"
-msgstr "%d (неÑ\80ейÑ\82инговÑ\8bе)"
+msgstr "%d (без Ñ\80ейÑ\82инга)"
#: qcsrc/menu/xonotic/util.qc:417
#, c-format
COLOR_SLIDER_F '1 1 1'
COLOR_SLIDER_N '1 1 1'
COLOR_SLIDER_S '1 1 1'
-TOLERANCE_SLIDER '0.2 2 0'
WIDTH_SLIDERTEXT 0.333333333333
// tooltip
COLOR_SLIDER_D '1 1 1'
COLOR_SLIDER_S '1 1 1'
WIDTH_SLIDERTEXT 0.333333333333
-TOLERANCE_SLIDER '0.2 2 0'
COLOR_SLIDER_D '1 1 1'
COLOR_SLIDER_S '0.25 0.25 0.25'
WIDTH_SLIDERTEXT 0.333333333333
-TOLERANCE_SLIDER '0.2 2 0'
COLOR_SLIDER_D '1 1 1'
COLOR_SLIDER_S '1 1 1'
WIDTH_SLIDERTEXT 0.333333333333
-TOLERANCE_SLIDER '0.2 2 0'
ast Asturian "Asturianu" 73%
-de German "Deutsch" 99%
-de_CH German "Deutsch (Schweiz)" 99%
+de German "Deutsch"
+de_CH German "Deutsch (Schweiz)"
en English "English"
en_AU English "English (Australia)" 86%
es Spanish "Español" 99%
-fr French "Français" 99%
-it Italian "Italiano" 99%
-hu Hungarian "Magyar" 55%
-nl Dutch "Nederlands" 70%
-pl Polish "Polski" 81%
-pt Portuguese "Português" 99%
+fr French "Français"
+ga Irish "Irish" 32%
+it Italian "Italiano"
+hu Hungarian "Magyar" 53%
+nl Dutch "Nederlands" 67%
+pl Polish "Polski" 80%
+pt Portuguese "Português"
ro Romanian "Romana" 83%
-fi Finnish "Suomi" 33%
-zh_TW "Chinese (Taiwan)" "國語" 68%
-el Greek "Ελληνική" 33%
-be Belarusian "Беларуская" 61%
-bg Bulgarian "Български" 68%
-ru Russian "Русский" 99%
-sr Serbian "Српски" 71%
-uk Ukrainian "Українська" 57%
+fi Finnish "Suomi" 31%
+zh_CN "Chinese (China)" "中文" 47%
+zh_TW "Chinese (Taiwan)" "國語" 67%
+ko Korean "한국의" 32%
+el Greek "Ελληνική" 32%
+be Belarusian "Беларуская" 59%
+bg Bulgarian "Български" 66%
+ru Russian "Русский"
+sr Serbian "Српски" 69%
+uk Ukrainian "Українська" 57%
\ No newline at end of file
registercvar("cl_jumpspeedcap_min", "");
registercvar("cl_jumpspeedcap_max", "");
+ registercvar("cl_shootfromfixedorigin", "");
+
registercvar("cl_multijump", "1");
registercvar("cl_spawn_near_teammate", "1");
vector slot = specialcommand_slots[j];
if(slot.y)
slot.y += SPECIALCOMMAND_SPEED * frametime;
- if(slot.z)
- slot.z = sin(SPECIALCOMMAND_TURNSPEED * M_PI * time);
+ //if(slot.z)
+ //slot.z = sin(SPECIALCOMMAND_TURNSPEED * M_PI * time);
if(slot.y >= vid_conheight)
slot = '0 0 0';
{
slot.x = bound(0, (random() * vid_conwidth + 1), vid_conwidth);
slot.y = 1; // start it off 0 so we can use it
- slot.z = random();
+ slot.z = floor(random() * Weapons_MAX);
sc_spawntime = time + bound(0.4, random(), 0.75); // prevent spawning another one for this amount of time!
vector newcolor = randomvec() * 2;
newcolor.x = bound(0.4, newcolor.x, 1);
vector splash_size = '0 0 0';
splash_size.x = max(vid_conwidth, vid_conheight) * SPECIALCOMMAND_SIZE;
splash_size.y = max(vid_conwidth, vid_conheight) * SPECIALCOMMAND_SIZE;
- drawpic(vec2(slot), "gfx/smile", vec2(splash_size), specialcommand_colors[j], 0.95, DRAWFLAG_NORMAL);
+ entity wep = Weapons_from(slot.z);
+ if(wep == WEP_Null)
+ drawpic(vec2(slot), "gfx/smile", vec2(splash_size), specialcommand_colors[j], 0.95, DRAWFLAG_NORMAL);
+ else
+ drawpic_skin(vec2(slot), wep.model2, vec2(splash_size), specialcommand_colors[j], 0.95, DRAWFLAG_NORMAL);
//drawrotpic(vec2(slot), slot.z, "gfx/smile", vec2(splash_size), vec2(splash_size) / 2, specialcommand_colors[j], 0.95, DRAWFLAG_NORMAL);
}
#pragma once
+
+// This includes some functions useful for debugging.
+// Some more bot-specific ones are in server/pathlib/debug.qc.
+// Look for other useful commands under prvm_* in console (apropos / search).
+
+
#ifdef CSQC
.entity tag_entity;
#endif
+
#ifdef GAMEQC
.bool debug;
.int sv_entnum;
}
#endif
+
#if ENABLE_DEBUGDRAW
#ifdef GAMEQC
/**
}
#endif
+
#ifdef SVQC
COMMON_COMMAND(debugdraw_sv, "Dump all server entities")
{
#endif
#endif
+
GENERIC_COMMAND(bufstr_get, "Examine a string buffer object")
{
switch (request)
}
}
+
GENERIC_COMMAND(version, "Print the current version")
{
switch (request)
}
}
+
#ifdef CSQC
void(float bufhandle, string pattern, string antipattern) buf_cvarlist = #517;
#endif
}
}
+
#if ENABLE_DEBUGTRACE
REGISTER_STAT(TRACE_ENT, int)
#ifdef SVQC
#endif
#endif
+
GENERIC_COMMAND(find, "Search through entities for matching classname")
{
switch (request)
}
}
+
GENERIC_COMMAND(findat, "Search through entities for matching origin")
{
switch (request)
}
}
}
+
+
+// debug_test() allows drawing text from server on the client anywhere in world coordinates.
+
+#ifdef GAMEQC
+REGISTER_NET_TEMP(debug_text_3d);
+#endif
+
+#ifdef CSQC
+
+CLASS(DebugText3d, Object)
+ // reusing existing fields
+ ATTRIB(DebugText3d, origin, vector);
+ ATTRIB(DebugText3d, message, string); // the text (i wanted to use the .text field but then this whole macro-based-inheritance thing shat itself)
+ ATTRIB(DebugText3d, health, float); // text alignment (recycled field)
+ ATTRIB(DebugText3d, hit_time, float); // when it was created
+ ATTRIB(DebugText3d, fade_rate, float); // how fast is should disappear
+ ATTRIB(DebugText3d, velocity, vector);
+
+ CONSTRUCTOR(DebugText3d, vector pos, string msg, float align, float fade_rate_, vector vel) {
+ CONSTRUCT(DebugText3d);
+ this.origin = pos;
+ this.message = strzone(msg);
+ this.health = align;
+ this.hit_time = time;
+ this.fade_rate = fade_rate_;
+ this.velocity = vel;
+ IL_PUSH(g_drawables_2d, this);
+ }
+
+ DESTRUCTOR(DebugText3d) {
+ strunzone(this.message);
+ }
+
+ void DebugText3d_draw2d(DebugText3d this) {
+ float since_created = time - this.hit_time;
+ float alpha_ = 1 - since_created * this.fade_rate;
+
+ if (alpha_ < 0) {
+ delete(this);
+ return;
+ }
+
+ int size = 8;
+ vector screen_pos = project_3d_to_2d(this.origin) + since_created * this.velocity;
+ float align = this.health;
+ if (align > 0)
+ screen_pos.x -= stringwidth(this.message, true, size * '1 1 0') * min(1, align);
+ if (screen_pos.z < 0) return; // behind camera
+ screen_pos.z = 0;
+
+ vector rgb = '1 1 0';
+ drawcolorcodedstring2_builtin(screen_pos, this.message, size * '1 1 0', rgb, alpha_, DRAWFLAG_NORMAL);
+ }
+ ATTRIB(DebugText3d, draw2d, void(DebugText3d), DebugText3d_draw2d);
+ENDCLASS(DebugText3d)
+
+NET_HANDLE(debug_text_3d, bool is_new) {
+ vector pos = ReadVector();
+ string msg = ReadString();
+ float align = ReadFloat();
+ float duration = ReadFloat();
+ vector vel = ReadVector();
+ make_impure(NEW(DebugText3d, pos, msg, align, 1 / duration, vel));
+ return true;
+}
+
+#endif // CSQC
+
+#ifdef SVQC
+
+// can't use autocvars because they give unused warning unless the macros are expanded
+#define debug_text_3d(...) EVAL(OVERLOAD(debug_text_3d, __VA_ARGS__))
+#define debug_text_3d_2(pos, msg) debug_text_3d_3(pos, msg, cvar("debug_text_3d_default_align"))
+#define debug_text_3d_3(pos, msg, align) debug_text_3d_4(pos, msg, align, cvar("debug_text_3d_default_duration"))
+#define debug_text_3d_4(pos, msg, align, dur) debug_text_3d_5(pos, msg, align, dur, stov(cvar_string("debug_text_3d_default_velocity")))
+#define debug_text_3d_5(pos, msg, align, dur, vel) debug_text_3d_fn(pos, msg, align, dur, vel)
+
+ERASEABLE
+void debug_text_3d_fn(vector pos, string msg, float align, float duration, vector velocity) {
+ WriteHeader(MSG_BROADCAST, debug_text_3d);
+ WriteVector(MSG_BROADCAST, pos);
+ WriteString(MSG_BROADCAST, msg);
+ WriteFloat(MSG_BROADCAST, align);
+ WriteFloat(MSG_BROADCAST, duration);
+ WriteVector(MSG_BROADCAST, velocity);
+}
+
+#endif // SVQC
if(f)
_MapInfo_Map_ApplyGametype (s, pGametypeToSet, f, true);
else if(!autocvar_g_mapinfo_ignore_warnings)
- LOG_WARN("Map ", pFilename, " supports unknown game type ", t, ", ignored");
+ LOG_DEBUG("Map ", pFilename, " supports unknown game type ", t, ", ignored");
}
else if(t == "gametype")
{
if(f)
_MapInfo_Map_ApplyGametypeEx (s, pGametypeToSet, f);
else if(!autocvar_g_mapinfo_ignore_warnings)
- LOG_WARN("Map ", pFilename, " supports unknown game type ", t, ", ignored");
+ LOG_DEBUG("Map ", pFilename, " supports unknown game type ", t, ", ignored");
}
else if(t == "size")
{
}
else
{
- LOG_WARN("Map ", pFilename, " has a setting for unknown game type ", t, ", ignored");
+ LOG_DEBUG("Map ", pFilename, " has a setting for unknown game type ", t, ", ignored");
}
}
else if(t == "clientsettemp_for_type")
}
else
{
- LOG_WARN("Map ", pFilename, " has a client setting for unknown game type ", t, ", ignored");
+ LOG_DEBUG("Map ", pFilename, " has a client setting for unknown game type ", t, ", ignored");
}
}
else if(t == "fog")
CSQCProjectile(fountain, true, PROJECTILE_NAPALM_FOUNTAIN, true);
}
-void nade_ice_freeze(entity freezefield, entity frost_target, float freeze_time)
+void nade_ice_freeze(entity freezefield, entity frost_target, float freezetime)
{
frost_target.frozen_by = freezefield.realowner;
Send_Effect(EFFECT_ELECTRO_IMPACT, frost_target.origin, '0 0 0', 1);
- Freeze(frost_target, 1/freeze_time, 3, false);
+ Freeze(frost_target, 1 / freezetime, 3, false);
Drop_Special_Items(frost_target);
}
-string autocvar_g_offhand_blaster;
+string autocvar_g_offhand_blaster = "0";
REGISTER_MUTATOR(offhand_blaster, expr_evaluate(autocvar_g_offhand_blaster));
float warmup_limit;
#endif
+#ifdef SVQC
+bool autocvar_g_shootfromcenter;
+bool autocvar_g_shootfromeye;
+#endif
+REGISTER_STAT(SHOOTFROMEYE, bool, autocvar_g_shootfromeye)
+REGISTER_STAT(SHOOTFROMCENTER, bool, autocvar_g_shootfromcenter)
+
REGISTER_STAT(MOVEVARS_AIRACCEL_QW_STRETCHFACTOR, float)
REGISTER_STAT(MOVEVARS_AIRCONTROL_PENALTY, float)
REGISTER_STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, float)
vector shotorg_adjust_values(vector vecs, bool y_is_right, bool visual, int algn)
{
-#ifdef SVQC
string s;
-#endif
if (visual)
{
vecs = shotorg_adjustfromclient(vecs, y_is_right, algn);
}
-#ifdef SVQC
- else if (autocvar_g_shootfromeye)
+ else if (STAT(SHOOTFROMEYE))
{
vecs.y = vecs.z = 0;
}
- else if (autocvar_g_shootfromcenter)
+ else if (STAT(SHOOTFROMCENTER))
{
vecs.y = 0;
vecs.z -= 2;
}
- else if ((s = autocvar_g_shootfromfixedorigin) != "")
+ else if ((s = G_SHOOTFROMFIXEDORIGIN) != "")
{
vector v = stov(s);
if (y_is_right) v.y = -v.y;
vecs.y = v.y;
vecs.z = v.z;
}
-#endif
else // just do the same as top
{
vecs = shotorg_adjustfromclient(vecs, y_is_right, algn);
.WFRAME wframe;
+#ifdef SVQC
+ #define G_SHOOTFROMFIXEDORIGIN autocvar_g_shootfromfixedorigin
+#elif defined(CSQC)
+ string autocvar_cl_shootfromfixedorigin;
+ #define G_SHOOTFROMFIXEDORIGIN autocvar_cl_shootfromfixedorigin
+#endif
+
vector shotorg_adjust_values(vector vecs, bool y_is_right, bool visual, int algn);
void CL_WeaponEntity_SetModel(entity this, string name, bool _anim);
#endif
this.beam_muzzlelight[1] = 1;
this.beam_muzzlelight[2] = 1;
this.beam_muzzlelight[3] = 1;
+ this.beam_image = "particles/lgbeam";
if(this.beam_muzzleeffect)
{
setmodel(flash, MDL_ARC_MUZZLEFLASH);
weapon_prepareattack_do(actor, weaponentity, true, WEP_CVAR_SEC(hagar, refire));
- W_SetupShot(actor, weaponentity, false, 2, SND_HAGAR_FIRE, CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage), WEP_HAGAR.m_id | HITTYPE_SECONDARY);
+ shots = actor.(weaponentity).hagar_load;
+ W_SetupShot(actor, weaponentity, false, 2, SND_HAGAR_FIRE, CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage) * shots, WEP_HAGAR.m_id | HITTYPE_SECONDARY);
Send_Effect(EFFECT_HAGAR_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
forward = v_forward;
right = v_right;
up = v_up;
- shots = actor.(weaponentity).hagar_load;
missile = NULL;
for(counter = 0; counter < shots; ++counter)
{
{ (viewmodels[this.m_wepent_slot]).minelayer_mines = ReadByte(); }) \
\
PROP(false, arc_heat_percent, WEPENT_SET_NORMAL, \
- { WriteByte(chan, this.arc_heat_percent * 16); }, \
- { (viewmodels[this.m_wepent_slot]).arc_heat_percent = ReadByte() / 16; }) \
+ { WriteByte(chan, this.arc_heat_percent * 255); }, \
+ { (viewmodels[this.m_wepent_slot]).arc_heat_percent = ReadByte() / 255; }) \
\
PROP(false, vortex_chargepool_ammo, WEPENT_SET_NORMAL, \
{ WriteByte(chan, this.vortex_chargepool_ammo * 16); }, \
return;
// FIXME needs a better check to know what is safe to teleport and what not
- if((toucher.move_movetype == MOVETYPE_NONE && toucher.move_movetype == MOVETYPE_NONE) || toucher.move_movetype == MOVETYPE_FOLLOW || toucher.move_movetype == MOVETYPE_FOLLOW || toucher.tag_entity
-#ifdef CSQC
- || tag_networkentity
-#endif
- )
+ if(toucher.move_movetype == MOVETYPE_NONE || toucher.move_movetype == MOVETYPE_FOLLOW || toucher.tag_entity)
return;
if(WarpZoneLib_ExactTrigger_Touch(this, toucher))
this.delta = e - s;
}
- METHOD(Animation, setValueStartDelta, void(entity this, float s, float d))
- {
- this.startValue = s;
- this.delta = d;
- }
-
METHOD(Animation, setObjectSetter, void(entity this, entity o, void(entity, float) s))
{
this.object = o;
METHOD(Animation, setTimeStartEnd, void(Animation this, float, float));
METHOD(Animation, setTimeStartDuration, void(Animation this, float, float));
METHOD(Animation, setValueStartEnd, void(Animation this, float, float));
- METHOD(Animation, setValueStartDelta, void(Animation this, float, float));
METHOD(Animation, setObjectSetter, void(Animation this, entity, void(entity, float)));
METHOD(Animation, tick, void(Animation this, float));
METHOD(Animation, calcValue, float(Animation this, float, float, float, float));
LOG_INFO(_("Usage: menu_cmd command..., where possible commands are:"));
LOG_INFO(_(" sync - reloads all cvars on the current menu page"));
LOG_INFO(_(" directmenu ITEM - select a menu item as main item"));
+ LOG_INFO(_(" dumptree - dump the state of the menu as a tree to the console"));
LOG_INFO("Generic commands shared by all programs:");
GenericCommand_macro_help();
return 1.0;
}
-float draw_clipSet;
+IntrusiveList draw_clip;
+STATIC_INIT(draw_clip) { draw_clip = IL_NEW(); }
+CLASS(ClipFrame, Object)
+ ATTRIB(ClipFrame, clip_shift, vector, '0 0 0');
+ ATTRIB(ClipFrame, clip_scale, vector, '0 0 0');
+ENDCLASS(ClipFrame)
+
+void _draw_SetClip(vector o, vector s)
+{
+ ClipFrame prev = IL_PEEK(draw_clip);
+ if (prev) {
+ o.x = bound(prev.clip_shift.x, o.x, prev.clip_shift.x + prev.clip_scale.x);
+ o.y = bound(prev.clip_shift.y, o.y, prev.clip_shift.y + prev.clip_scale.y);
+ s.x = bound(0, s.x, prev.clip_scale.x - (o.x - prev.clip_shift.x));
+ s.y = bound(0, s.y, prev.clip_scale.y - (o.y - prev.clip_shift.y));
+ }
+ ClipFrame e = NEW(ClipFrame);
+ e.clip_shift = o;
+ e.clip_scale = s;
+ IL_PUSH(draw_clip, e);
+ drawsetcliparea(o.x, o.y, s.x, s.y);
+}
+
void draw_SetClip()
{
- if(draw_clipSet)
- error("Already clipping, no stack implemented here, sorry");
- drawsetcliparea(draw_shift.x, draw_shift.y, draw_scale.x, draw_scale.y);
- draw_clipSet = 1;
+ _draw_SetClip(draw_shift, draw_scale);
}
void draw_SetClipRect(vector theOrigin, vector theScale)
{
- vector o, s;
- if(draw_clipSet)
- error("Already clipping, no stack implemented here, sorry");
- o = boxToGlobal(theOrigin, draw_shift, draw_scale);
- s = boxToGlobalSize(theScale, draw_scale);
- drawsetcliparea(o.x, o.y, s.x, s.y);
- draw_clipSet = 1;
+ _draw_SetClip(
+ boxToGlobal(theOrigin, draw_shift, draw_scale),
+ boxToGlobalSize(theScale, draw_scale)
+ );
}
void draw_ClearClip()
{
- if(!draw_clipSet)
- error("Not clipping, can't clear it then");
+ if (IL_EMPTY(draw_clip)) {
+ LOG_FATAL("Not clipping, can't clear it then");
+ }
+ entity currentSettings = IL_PEEK(draw_clip);
+ IL_REMOVE(draw_clip, currentSettings);
+ delete(currentSettings);
drawresetcliparea();
- draw_clipSet = 0;
+ ClipFrame e = IL_PEEK(draw_clip);
+ if (e) {
+ drawsetcliparea(e.clip_shift.x, e.clip_shift.y, e.clip_scale.x, e.clip_scale.y);
+ }
}
string draw_TextShortenToWidth(string theText, float maxWidth, float ICanHasKallerz, vector SizeThxBye)
return 0; // unhandled
}
- METHOD(Item, mousePress, float(Item this, vector pos))
+ METHOD(Item, mousePress, bool(Item this, vector pos))
{
- return 0; // unhandled
+ return false; // unhandled
}
METHOD(Item, mouseDrag, float(Item this, vector pos))
METHOD(Item, keyDown, float(Item, float, float, float));
METHOD(Item, keyUp, float(Item, float, float, float));
METHOD(Item, mouseMove, float(Item, vector));
- METHOD(Item, mousePress, float(Item, vector));
+ METHOD(Item, mousePress, bool(Item this, vector pos));
METHOD(Item, mouseDrag, float(Item, vector));
METHOD(Item, mouseRelease, float(Item, vector));
METHOD(Item, focusEnter, void(Item));
if (pos.y >= 1) me.pressed = 0;
return 1;
}
- float Button_mousePress(entity me, vector pos)
+ METHOD(Button, mousePress, bool(Button this, vector pos))
{
- me.mouseDrag(me, pos); // verify coordinates
- return 1;
+ this.mouseDrag(this, pos); // verify coordinates
+ return true;
}
float Button_mouseRelease(entity me, vector pos)
{
METHOD(Button, showNotify, void(entity));
METHOD(Button, resizeNotify, void(entity, vector, vector, vector, vector));
METHOD(Button, keyDown, float(entity, float, float, float));
- METHOD(Button, mousePress, float(entity, vector));
+ METHOD(Button, mousePress, bool(Button this, vector pos));
METHOD(Button, mouseDrag, float(entity, vector));
METHOD(Button, mouseRelease, float(entity, vector));
METHOD(Button, playClickSound, void(entity));
}
return 0;
}
- float Container_mousePress(entity me, vector pos)
+ METHOD(Container, mousePress, bool(Container this, vector pos))
{
- entity f;
- float r;
- f = me.focusedChild;
+ entity f = this.focusedChild;
if (f)
{
- me.enterSubitem(me, f);
- r = f.mousePress(f, globalToBox(pos, f.Container_origin, f.Container_size));
- me.leaveSubitem(me);
+ this.enterSubitem(this, f);
+ bool r = f.mousePress(f, globalToBox(pos, f.Container_origin, f.Container_size));
+ this.leaveSubitem(this);
return r;
}
- return 0;
+ return false;
}
float Container_mouseDrag(entity me, vector pos)
{
me.focusedChild.focused = 1;
me.focusedChild.focusEnter(me.focusedChild);
- if (me.focusedChild.instanceOfContainer) me.focusedChild.setFocus(me.focusedChild, me.focusedChild.savedFocus);
+ if (me.focusedChild.instanceOfContainer)
+ me.focusedChild.setFocus(me.focusedChild, me.focusedChild.savedFocus);
}
else
{
METHOD(Container, keyUp, float(entity, float, float, float));
METHOD(Container, keyDown, float(entity, float, float, float));
METHOD(Container, mouseMove, float(entity, vector));
- METHOD(Container, mousePress, float(entity, vector));
+ METHOD(Container, mousePress, bool(Container this, vector pos));
METHOD(Container, mouseDrag, float(entity, vector));
METHOD(Container, mouseRelease, float(entity, vector));
METHOD(Container, focusLeave, void(entity));
void Image_draw(entity me)
{
- if (me.imgSize.x > 1 || me.imgSize.y > 1) draw_SetClip();
+ bool willClip = me.imgSize.x > 1 || me.imgSize.y > 1;
+ if (willClip) draw_SetClip();
draw_Picture(me.imgOrigin, me.src, me.imgSize, me.color, 1);
- if (me.imgSize.x > 1 || me.imgSize.y > 1) draw_ClearClip();
+ if (willClip) draw_ClearClip();
SUPER(Image).draw(me);
}
void Image_updateAspect(entity me)
return 1;
}
- float InputBox_mousePress(entity me, vector pos)
+ METHOD(InputBox, mousePress, bool(InputBox this, vector pos))
{
- if (me.enableClearButton)
- if (over_ClearButton(me, pos))
+ if (this.enableClearButton)
+ if (over_ClearButton(this, pos))
{
- me.cb_pressed = 1;
- return 1;
+ this.cb_pressed = 1;
+ return true;
}
- me.dragScrollTimer = time;
- me.pressed = 1;
- return InputBox_mouseDrag(me, pos);
+ this.dragScrollTimer = time;
+ this.pressed = 1;
+ return InputBox_mouseDrag(this, pos);
}
float InputBox_mouseRelease(entity me, vector pos)
METHOD(InputBox, keyDown, float(entity, float, float, float));
METHOD(InputBox, mouseMove, float(entity, vector));
METHOD(InputBox, mouseRelease, float(entity, vector));
- METHOD(InputBox, mousePress, float(entity, vector));
+ METHOD(InputBox, mousePress, bool(InputBox this, vector pos));
METHOD(InputBox, mouseDrag, float(entity, vector));
METHOD(InputBox, showNotify, void(entity));
METHOD(InputBox, resizeNotify, void(entity, vector, vector, vector, vector));
if (e && !e.focusable) e = NULL;
entity prev = this.mouseFocusedChild;
this.mouseFocusedChild = e;
- if (!e) return false; // keep focus when hovering over non-focusable elements
if (e != prev)
{
this.setFocus(this, e);
- if (e.instanceOfInputContainer)
+ if (e && e.instanceOfInputContainer)
{
e.focusedChild = NULL;
e._changeFocusXY(e, globalToBox(pos, e.Container_origin, e.Container_size));
if (pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1) return 1;
return 0;
}
- float InputContainer_mousePress(entity me, vector pos)
+ METHOD(InputContainer, mousePress, bool(InputContainer this, vector pos))
{
- me.mouseFocusedChild = NULL; // force focusing
- if (me._changeFocusXY(me, pos))
- if (SUPER(InputContainer).mousePress(me, pos)) return 1;
- if (pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1) return 1;
- return 0;
+ this.mouseFocusedChild = NULL; // force focusing
+ if (this._changeFocusXY(this, pos))
+ if (SUPER(InputContainer).mousePress(this, pos)) return true;
+ if (pos.x >= 0 && pos.y >= 0 && pos.x < 1 && pos.y < 1) return true;
+ return false;
}
float InputContainer_mouseRelease(entity me, vector pos)
{
CLASS(InputContainer, Container)
METHOD(InputContainer, keyDown, float(entity, float, float, float));
METHOD(InputContainer, mouseMove, float(entity, vector));
- METHOD(InputContainer, mousePress, float(entity, vector));
+ METHOD(InputContainer, mousePress, bool(InputContainer this, vector pos));
METHOD(InputContainer, mouseRelease, float(entity, vector));
METHOD(InputContainer, mouseDrag, float(entity, vector));
METHOD(InputContainer, focusLeave, void(entity));
if (me.pressed == 1)
{
hit = 1;
- if (pos.x < 1 - me.controlWidth - me.tolerance.y * me.controlWidth) hit = 0;
- if (pos.y < 0 - me.tolerance.x) hit = 0;
- if (pos.x >= 1 + me.tolerance.y * me.controlWidth) hit = 0;
- if (pos.y >= 1 + me.tolerance.x) hit = 0;
+ if (pos.x < 1 - me.controlWidth - me.tolerance.x * me.controlWidth) hit = 0;
+ if (pos.y < 0 - me.tolerance.y) hit = 0;
+ if (pos.x >= 1 + me.tolerance.x * me.controlWidth) hit = 0;
+ if (pos.y >= 1 + me.tolerance.y) hit = 0;
if (hit)
{
// calculate new pos to v
}
return 1;
}
- float ListBox_mousePress(entity me, vector pos)
+ METHOD(ListBox, mousePress, bool(ListBox this, vector pos))
{
- if (pos.x < 0) return 0;
- if (pos.y < 0) return 0;
- if (pos.x >= 1) return 0;
- if (pos.y >= 1) return 0;
- me.dragScrollPos = pos;
- me.updateControlTopBottom(me);
- if (pos.x >= 1 - me.controlWidth)
+ if (pos.x < 0) return false;
+ if (pos.y < 0) return false;
+ if (pos.x >= 1) return false;
+ if (pos.y >= 1) return false;
+ this.dragScrollPos = pos;
+ this.updateControlTopBottom(this);
+ if (pos.x >= 1 - this.controlWidth)
{
- // if hit, set me.pressed, otherwise scroll by one page
- if (pos.y < me.controlTop)
+ // if hit, set this.pressed, otherwise scroll by one page
+ if (pos.y < this.controlTop)
{
// page up
- me.scrollPosTarget = max(me.scrollPosTarget - 1, 0);
+ this.scrollPosTarget = max(this.scrollPosTarget - 1, 0);
}
- else if (pos.y > me.controlBottom)
+ else if (pos.y > this.controlBottom)
{
// page down
- me.scrollPosTarget = min(me.scrollPosTarget + 1, me.getTotalHeight(me) - 1);
+ this.scrollPosTarget = min(this.scrollPosTarget + 1, this.getTotalHeight(this) - 1);
}
else
{
- me.pressed = 1;
- me.pressOffset = pos.y;
- me.previousValue = me.scrollPos;
+ this.pressed = 1;
+ this.pressOffset = pos.y;
+ this.previousValue = this.scrollPos;
}
}
else
{
// continue doing that while dragging (even when dragging outside). When releasing, forward the click to the then selected item.
- me.pressed = 2;
+ this.pressed = 2;
// an item has been clicked. Select it, ...
- me.setSelected(me, me.getItemAtPos(me, me.scrollPos + pos.y));
- me.setFocusedItem(me, me.selectedItem);
+ this.setSelected(this, this.getItemAtPos(this, this.scrollPos + pos.y));
+ this.setFocusedItem(this, this.selectedItem);
}
- return 1;
+ return true;
}
void ListBox_setFocusedItem(entity me, int item)
{
AUTOCVAR(menu_scroll_averaging_time_pressed, float, 0.06, "smooth scroll averaging time when dragging the scrollbar");
void ListBox_draw(entity me)
{
- float i;
- vector absSize, fillSize = '0 0 0';
- vector oldshift, oldscale;
+ vector fillSize = '0 0 0';
// we can't do this in mouseMove as the list can scroll without moving the cursor
if (me.mouseMoveOffset != -1) me.setFocusedItem(me, me.getItemAtPos(me, me.scrollPos + me.mouseMoveOffset));
}
}
draw_SetClip();
- oldshift = draw_shift;
- oldscale = draw_scale;
+ vector oldshift = draw_shift;
+ vector oldscale = draw_scale;
- i = me.getItemAtPos(me, me.scrollPos);
- float j = me.getItemStart(me, i) - me.scrollPos;
- for ( ; i < me.nItems && j < 1; ++i)
+ int i = me.getItemAtPos(me, me.scrollPos);
+ float y = me.getItemStart(me, i) - me.scrollPos;
+ for ( ; i < me.nItems && y < 1; ++i)
{
- draw_shift = boxToGlobal(eY * j, oldshift, oldscale);
+ draw_shift = boxToGlobal(eY * y, oldshift, oldscale);
vector relSize = eX * (1 - me.controlWidth) + eY * me.getItemHeight(me, i);
- absSize = boxToGlobalSize(relSize, me.size);
+ vector absSize = boxToGlobalSize(relSize, me.size);
draw_scale = boxToGlobalSize(relSize, oldscale);
me.drawListBoxItem(me, i, absSize, (me.selectedItem == i), (me.focusedItem == i));
- j += relSize.y;
+ y += relSize.y;
}
draw_ClearClip();
METHOD(ListBox, draw, void(entity));
METHOD(ListBox, keyDown, float(entity, float, float, float));
METHOD(ListBox, mouseMove, float(entity, vector));
- METHOD(ListBox, mousePress, float(entity, vector));
+ METHOD(ListBox, mousePress, bool(ListBox this, vector pos));
METHOD(ListBox, mouseDrag, float(entity, vector));
METHOD(ListBox, mouseRelease, float(entity, vector));
METHOD(ListBox, focusLeave, void(entity));
SUPER(Nexposee).draw(me);
}
- float Nexposee_mousePress(entity me, vector pos)
+ METHOD(Nexposee, mousePress, bool(Nexposee this, vector pos))
{
- if (me.animationState == 0)
+ if (this.animationState == 0)
{
- me.mouseFocusedChild = NULL;
- Nexposee_mouseMove(me, pos);
- if (me.mouseFocusedChild)
+ this.mouseFocusedChild = NULL;
+ Nexposee_mouseMove(this, pos);
+ if (this.mouseFocusedChild)
{
m_play_click_sound(MENU_SOUND_OPEN);
- me.animationState = 1;
- SUPER(Nexposee).setFocus(me, NULL);
+ this.animationState = 1;
+ SUPER(Nexposee).setFocus(this, NULL);
}
else
{
- me.close(me);
+ this.close(this);
}
- return 1;
+ return true;
}
- else if (me.animationState == 2)
+ else if (this.animationState == 2)
{
- if (!(SUPER(Nexposee).mousePress(me, pos)))
+ if (!(SUPER(Nexposee).mousePress(this, pos)))
{
m_play_click_sound(MENU_SOUND_CLOSE);
- me.animationState = 3;
- SUPER(Nexposee).setFocus(me, NULL);
+ this.animationState = 3;
+ SUPER(Nexposee).setFocus(this, NULL);
}
- return 1;
+ return true;
}
- return 0;
+ return false;
}
float Nexposee_mouseRelease(entity me, vector pos)
METHOD(Nexposee, draw, void(entity));
METHOD(Nexposee, keyDown, float(entity, float, float, float));
METHOD(Nexposee, keyUp, float(entity, float, float, float));
- METHOD(Nexposee, mousePress, float(entity, vector));
+ METHOD(Nexposee, mousePress, bool(Nexposee this, vector pos));
METHOD(Nexposee, mouseMove, float(entity, vector));
METHOD(Nexposee, mouseRelease, float(entity, vector));
METHOD(Nexposee, mouseDrag, float(entity, vector));
return 1;
}
- float Slider_mousePress(entity me, vector pos)
+ METHOD(Slider, mousePress, bool(Slider this, vector pos))
{
float controlCenter;
- if (me.disabled) return 0;
- if (pos.x < 0) return 0;
- if (pos.y < 0) return 0;
- if (pos.x >= 1 - me.textSpace) return 0;
- if (pos.y >= 1) return 0;
- controlCenter = (me.value - me.valueMin) / (me.valueMax - me.valueMin) * (1 - me.textSpace - me.controlWidth) + 0.5 * me.controlWidth;
- if (fabs(pos.x - controlCenter) <= 0.5 * me.controlWidth)
+ if (this.disabled) return false;
+ if (pos.x < 0) return false;
+ if (pos.y < 0) return false;
+ if (pos.x >= 1 - this.textSpace) return false;
+ if (pos.y >= 1) return false;
+ controlCenter = (this.value - this.valueMin) / (this.valueMax - this.valueMin) * (1 - this.textSpace - this.controlWidth) + 0.5 * this.controlWidth;
+ if (fabs(pos.x - controlCenter) <= 0.5 * this.controlWidth)
{
- me.pressed = 1;
- me.pressOffset = pos.x - controlCenter;
- me.previousValue = me.value;
- // me.mouseDrag(me, pos);
+ this.pressed = 1;
+ this.pressOffset = pos.x - controlCenter;
+ this.previousValue = this.value;
+ // this.mouseDrag(this, pos);
}
else
{
float clickValue, pageValue, inRange;
- clickValue = median(0, (pos.x - me.pressOffset - 0.5 * me.controlWidth) / (1 - me.textSpace - me.controlWidth), 1) * (me.valueMax - me.valueMin) + me.valueMin;
- inRange = (almost_in_bounds(me.valueMin, me.value, me.valueMax));
+ clickValue = median(0, (pos.x - this.pressOffset - 0.5 * this.controlWidth) / (1 - this.textSpace - this.controlWidth), 1) * (this.valueMax - this.valueMin) + this.valueMin;
+ inRange = (almost_in_bounds(this.valueMin, this.value, this.valueMax));
if (pos.x < controlCenter)
{
- pageValue = me.value - me.valuePageStep;
- if (me.valueStep) clickValue = floor(clickValue / me.valueStep) * me.valueStep;
+ pageValue = this.value - this.valuePageStep;
+ if (this.valueStep) clickValue = floor(clickValue / this.valueStep) * this.valueStep;
pageValue = max(pageValue, clickValue);
}
else
{
- pageValue = me.value + me.valuePageStep;
- if (me.valueStep) clickValue = ceil(clickValue / me.valueStep) * me.valueStep;
+ pageValue = this.value + this.valuePageStep;
+ if (this.valueStep) clickValue = ceil(clickValue / this.valueStep) * this.valueStep;
pageValue = min(pageValue, clickValue);
}
- if (inRange) me.setValue(me, median(me.valueMin, pageValue, me.valueMax));
- else me.setValue(me, me.valueMax);
- if(me.applyButton)
- me.applyButton.disabled = false;
+ if (inRange) this.setValue(this, median(this.valueMin, pageValue, this.valueMax));
+ else this.setValue(this, this.valueMax);
+ if(this.applyButton)
+ this.applyButton.disabled = false;
if (pageValue == clickValue)
{
- controlCenter = (me.value - me.valueMin) / (me.valueMax - me.valueMin) * (1 - me.textSpace - me.controlWidth) + 0.5 * me.controlWidth;
- me.pressed = 1;
- me.pressOffset = pos.x - controlCenter;
- me.previousValue = me.value;
- // me.mouseDrag(me, pos);
+ controlCenter = (this.value - this.valueMin) / (this.valueMax - this.valueMin) * (1 - this.textSpace - this.controlWidth) + 0.5 * this.controlWidth;
+ this.pressed = 1;
+ this.pressOffset = pos.x - controlCenter;
+ this.previousValue = this.value;
+ // this.mouseDrag(this, pos);
}
}
- return 1;
+ return true;
}
float Slider_mouseRelease(entity me, vector pos)
{
METHOD(Slider, draw, void(entity));
METHOD(Slider, keyDown, float(entity, float, float, float));
METHOD(Slider, keyUp, float(entity, float, float, float));
- METHOD(Slider, mousePress, float(entity, vector));
+ METHOD(Slider, mousePress, bool(Slider this, vector pos));
METHOD(Slider, mouseDrag, float(entity, vector));
METHOD(Slider, mouseRelease, float(entity, vector));
METHOD(Slider, valueToText, string(entity, float));
ATTRIB(Slider, pressed, float, 0);
ATTRIB(Slider, pressOffset, float, 0);
ATTRIB(Slider, previousValue, float, 0);
- ATTRIB(Slider, tolerance, vector, '0 0 0');
+ ATTRIB(Slider, tolerance, vector, '0 0 0'); // drag tolerance
ATTRIB(Slider, disabled, float, 0);
ATTRIB(Slider, color, vector, '1 1 1');
ATTRIB(Slider, color2, vector, '1 1 1');
SKINVECTOR(COLOR_SLIDER_D, '1 1 1');
SKINVECTOR(COLOR_SLIDER_S, '1 1 1');
SKINFLOAT(WIDTH_SLIDERTEXT, 0.333333333333);
- SKINVECTOR(TOLERANCE_SLIDER, '0.2 2 0');
SKINEND
#include <menu/xonotic/rootdialog.qc>
#include <menu/xonotic/screenshotimage.qc>
#include <menu/xonotic/screenshotlist.qc>
+#include <menu/xonotic/scrollpanel.qc>
#include <menu/xonotic/serverlist.qc>
#include <menu/xonotic/skinlist.qc>
#include <menu/xonotic/slider.qc>
#include <menu/xonotic/rootdialog.qh>
#include <menu/xonotic/screenshotimage.qh>
#include <menu/xonotic/screenshotlist.qh>
+#include <menu/xonotic/scrollpanel.qh>
#include <menu/xonotic/serverlist.qh>
#include <menu/xonotic/skinlist.qh>
#include <menu/xonotic/slider.qh>
me.configureImage(me, me.image);
}
-float XonoticColorpicker_mousePress(entity me, vector coords)
+METHOD(XonoticColorpicker, mousePress, bool(XonoticColorpicker this, vector pos))
{
- me.mouseDrag(me, coords);
- return 1;
+ this.mouseDrag(this, pos);
+ return true;
}
// must match hslimage.c
#include "../item/image.qh"
CLASS(XonoticColorpicker, Image)
METHOD(XonoticColorpicker, configureXonoticColorpicker, void(entity, entity));
- METHOD(XonoticColorpicker, mousePress, float(entity, vector));
+ METHOD(XonoticColorpicker, mousePress, bool(XonoticColorpicker this, vector pos));
METHOD(XonoticColorpicker, mouseRelease, float(entity, vector));
METHOD(XonoticColorpicker, mouseDrag, float(entity, vector));
ATTRIB(XonoticColorpicker, controlledTextbox, entity);
cvar_set(me.cvarName, sprintf("%v", hslimage_color(me.prevcoords, me.imagemargin)));
}
-float XonoticColorpickerString_mousePress(entity me, vector coords)
+METHOD(XonoticColorpickerString, mousePress, bool(XonoticColorpickerString this, vector pos))
{
- me.mouseDrag(me, coords);
- return 1;
+ this.mouseDrag(this, pos);
+ return true;
}
float XonoticColorpickerString_mouseDrag(entity me, vector coords)
#include "../item/image.qh"
CLASS(XonoticColorpickerString, Image)
METHOD(XonoticColorpickerString, configureXonoticColorpickerString, void(entity, string, string));
- METHOD(XonoticColorpickerString, mousePress, float(entity, vector));
+ METHOD(XonoticColorpickerString, mousePress, bool(XonoticColorpickerString this, vector pos));
METHOD(XonoticColorpickerString, mouseRelease, float(entity, vector));
METHOD(XonoticColorpickerString, mouseDrag, float(entity, vector));
METHOD(XonoticGameSettingsTab, topicChangeNotify, void(entity, entity this))
{
- entity c = this.currentPanel;
+ entity s = this.currentPanel;
+ s.viewportHeight = 15.5;
+ entity c = s.currentPanel;
entity removing = this.currentItem;
DataSource data = this.topicList.source;
entity adding = data.getEntry(data, this.topicList.selectedItem, func_null);
this.currentItem = adding;
adding.resizeNotify(adding, '0 0 0', c.size, '0 0 0', c.size);
c.addItem(c, adding, '0 0 0', '1 1 0', 1);
+ s.resizeNotify(s, '0 0 0', s.size, '0 0 0', s.size);
}
}
METHOD(XonoticGameSettingsTab, fill, void(entity this))
ENDCLASS(XonoticRegisteredSettingsList)
#include "tab.qh"
+#include "scrollpanel.qh"
CLASS(XonoticGameSettingsTab, XonoticTab)
ATTRIB(XonoticGameSettingsTab, intendedWidth, float, 0.9);
ATTRIB(XonoticGameSettingsTab, rows, float, 15.5);
ATTRIB(XonoticGameSettingsTab, columns, float, 6.5);
ATTRIB(XonoticGameSettingsTab, source, DataSource, NEW(SettingSource));
ATTRIB(XonoticGameSettingsTab, topicList, entity, NEW(XonoticRegisteredSettingsList, this.source));
- ATTRIB(XonoticGameSettingsTab, currentPanel, entity, NEW(XonoticTab));
+ ATTRIB(XonoticGameSettingsTab, currentPanel, entity, NEW(XonoticScrollPanel));
ATTRIB(XonoticGameSettingsTab, currentItem, entity);
METHOD(XonoticGameSettingsTab, topicChangeNotify, void(entity, entity this));
METHOD(XonoticGameSettingsTab, fill, void(entity this));
ATTRIB(XonoticListBox, fontSize, float, SKINFONTSIZE_NORMAL);
ATTRIB(XonoticListBox, scrollbarWidth, float, SKINWIDTH_SCROLLBAR);
ATTRIB(XonoticListBox, src, string, SKINGFX_SCROLLBAR);
- ATTRIB(XonoticListBox, tolerance, vector, SKINTOLERANCE_SLIDER);
+ ATTRIB(XonoticListBox, tolerance, vector, '2 0.2 0');
ATTRIB(XonoticListBox, rowsPerItem, float, 1);
METHOD(XonoticListBox, resizeNotify, void(entity, vector, vector, vector, vector));
ATTRIB(XonoticListBox, color, vector, SKINCOLOR_SCROLLBAR_N);
return me.mouseMove(me, coords);
}
-float XonoticPicker_mousePress(entity me, vector coords)
+METHOD(XonoticPicker, mousePress, bool(XonoticPicker this, vector pos))
{
- me.mouseMove(me, coords);
+ this.mouseMove(this, pos);
- if(me.focusedCell.x >= 0)
+ if(this.focusedCell.x >= 0)
{
- me.pressed = 1;
- me.pressedCell = me.focusedCell;
+ this.pressed = 1;
+ this.pressedCell = this.focusedCell;
}
- return 1;
+ return true;
}
float XonoticPicker_mouseRelease(entity me, vector coords)
#include "../item.qh"
CLASS(XonoticPicker, Item)
METHOD(XonoticPicker, configureXonoticPicker, void(entity));
- METHOD(XonoticPicker, mousePress, float(entity, vector));
+ METHOD(XonoticPicker, mousePress, bool(XonoticPicker this, vector pos));
METHOD(XonoticPicker, mouseRelease, float(entity, vector));
METHOD(XonoticPicker, mouseMove, float(entity, vector));
METHOD(XonoticPicker, mouseDrag, float(entity, vector));
me.setZoom(me, 0, 0);
}
-float XonoticScreenshotImage_mousePress(entity me, vector coords)
+METHOD(XonoticScreenshotImage, mousePress, bool(XonoticScreenshotImage this, vector pos))
{
- return me.drag_setStartPos(me, coords);
+ return this.drag_setStartPos(this, pos);
}
float XonoticScreenshotImage_mouseDrag(entity me, vector coords)
METHOD(XonoticScreenshotImage, load, void(entity, string));
METHOD(XonoticScreenshotImage, draw, void(entity));
ATTRIB(XonoticScreenshotImage, focusable, float, 1); // mousePress and mouseDrag work only if focusable is set
- METHOD(XonoticScreenshotImage, mousePress, float(entity, vector));
+ METHOD(XonoticScreenshotImage, mousePress, bool(XonoticScreenshotImage this, vector pos));
METHOD(XonoticScreenshotImage, mouseDrag, float(entity, vector));
METHOD(XonoticScreenshotImage, mouseMove, float(entity, vector));
METHOD(XonoticScreenshotImage, resizeNotify, void(entity, vector, vector, vector, vector));
--- /dev/null
+#include "scrollpanel.qh"
+
+METHOD(XonoticScrollPanel, drawListBoxItem, void(XonoticScrollPanel this, int i, vector absSize, bool isSelected, bool isFocused))
+{
+ XonoticTab p = this.currentPanel;
+ p.draw(p);
+}
+
+METHOD(XonoticScrollPanel, resizeNotify, void(XonoticScrollPanel this, vector relOrigin, vector relSize, vector absOrigin, vector absSize))
+{
+ SUPER(XonoticScrollPanel).resizeNotify(this, relOrigin, relSize, absOrigin, absSize);
+ this.scrollToItem(this, 0);
+ XonoticTab p = this.currentPanel;
+ float m = p.firstChild.rows / this.viewportHeight;
+ this.itemHeight = m;
+ relSize.y *= m;
+ absSize.y *= m;
+ p.resizeNotify(p, relOrigin, relSize, absOrigin, absSize);
+}
+
+#define X(mouseFunc) \
+METHOD(XonoticScrollPanel, mouseFunc, bool(XonoticScrollPanel this, vector pos)) \
+{ \
+ SUPER(XonoticScrollPanel).mouseFunc(this, pos); \
+ XonoticTab p = this.currentPanel; \
+ this.setFocus(this, p); \
+ \
+ vector o = -eY * this.scrollPos; \
+ vector s = eX * (1 - this.controlWidth) + eY * this.itemHeight; \
+ return p.mouseFunc(p, globalToBox(pos, o, s)); \
+}
+X(mouseMove)
+X(mousePress)
+X(mouseDrag)
+X(mouseRelease)
+#undef X
+
+#define X(keyFunc) \
+METHOD(XonoticScrollPanel, keyFunc, bool(XonoticScrollPanel this, int key, int ascii, bool shift)) \
+{ \
+ XonoticTab p = this.currentPanel; \
+ return p.keyFunc(p, key, ascii, shift) || SUPER(XonoticScrollPanel).keyFunc(this, key, ascii, shift); \
+}
+X(keyDown)
+X(keyUp)
+#undef X
--- /dev/null
+#pragma once
+
+#include "listbox.qh"
+#include "tab.qh"
+CLASS(XonoticScrollPanel, XonoticListBox)
+ /** container for single child panel */
+ ATTRIB(XonoticScrollPanel, currentPanel, entity, NEW(XonoticTab));
+ ATTRIB(XonoticScrollPanel, nItems, int, 1);
+ ATTRIB(XonoticScrollPanel, selectionDoesntMatter, bool, true);
+ ATTRIB(XonoticScrollPanel, itemHeight, float, 1);
+ /** number of rows to show at once */
+ ATTRIB(XonoticScrollPanel, viewportHeight, float, 12);
+ ATTRIB(XonoticScrollPanel, alphaBG, float, 0);
+
+ METHOD(XonoticScrollPanel, getItemAtPos, float(XonoticScrollPanel this, float pos)) { return 0; }
+ METHOD(XonoticScrollPanel, getItemHeight, float(XonoticScrollPanel this, int i)) { return this.itemHeight; }
+ METHOD(XonoticScrollPanel, getItemStart, float(XonoticScrollPanel this, int i)) { return 0; }
+ METHOD(XonoticScrollPanel, getTotalHeight, float(XonoticScrollPanel this)) { return this.itemHeight; }
+ METHOD(XonoticScrollPanel, setFocus, void(XonoticScrollPanel this, entity other)) { Container_setFocus(this, other); }
+ METHOD(XonoticScrollPanel, setSelected, void(XonoticScrollPanel this, int i)) { }
+
+ METHOD(XonoticScrollPanel, drawListBoxItem, void(XonoticScrollPanel this, int i, vector absSize, bool isSelected, bool isFocused));
+ METHOD(XonoticScrollPanel, resizeNotify, void(XonoticScrollPanel this, vector relOrigin, vector relSize, vector absOrigin, vector absSize));
+ENDCLASS(XonoticScrollPanel)
ATTRIB(XonoticSlider, fontSize, float, SKINFONTSIZE_NORMAL);
ATTRIB(XonoticSlider, valueSpace, float, SKINWIDTH_SLIDERTEXT);
ATTRIB(XonoticSlider, image, string, SKINGFX_SLIDER);
- ATTRIB(XonoticSlider, tolerance, vector, SKINTOLERANCE_SLIDER);
+ ATTRIB(XonoticSlider, tolerance, vector, '0.2 2 0');
ATTRIB(XonoticSlider, align, float, 0.5);
ATTRIB(XonoticSlider, color, vector, SKINCOLOR_SLIDER_N);
ATTRIB(XonoticSlider, colorC, vector, SKINCOLOR_SLIDER_C);
case "overall/last_seen_dt":
{
order = 1;
- outstr = _("Last_Seen:");
+ outstr = _("Last seen:");
data = XonoticStatsList_convertDate(car(data));
break;
}
case "overall/alivetime":
{
order = 1;
- outstr = _("Time_Played:");
+ outstr = _("Time played:");
data = process_time(3, stof(data));
break;
}
case "overall/favorite-map":
{
order = 2;
- outstr = _("Favorite_Map:");
+ outstr = _("Favorite map:");
data = car(data);
break;
}
if((order == -1) && (out_total_matches >= 0) && (out_total_wins >= 0))
{
- bufstr_add(me.listStats, sprintf("003Matches: %d", out_total_matches), true);
+ bufstr_add(me.listStats, sprintf("003%s\n%d", _("Matches:"), out_total_matches), true);
if(out_total_matches > 0) // don't show extra info if there are no matches played
{
out_total_losses = max(0, (out_total_matches - out_total_wins));
- bufstr_add(me.listStats, sprintf("003Wins/Losses: %d/%d", out_total_wins, out_total_losses), true);
- bufstr_add(me.listStats, sprintf("004Win_Percentage: %d%%", ((out_total_wins / out_total_matches) * 100)), true);
+ bufstr_add(me.listStats, sprintf("003%s\n%d/%d", _("Wins/Losses:"), out_total_wins, out_total_losses), true);
+ bufstr_add(me.listStats, sprintf("004%s\n%d%%", _("Win percentage:"), ((out_total_wins / out_total_matches) * 100)), true);
}
out_total_matches = -1;
if((order == -1) && (out_total_kills >= 0) && (out_total_deaths >= 0))
{
- bufstr_add(me.listStats, sprintf("005Kills/Deaths: %d/%d", out_total_kills, out_total_deaths), true);
+ bufstr_add(me.listStats, sprintf("005%s\n%d/%d", _("Kills/Deaths:"), out_total_kills, out_total_deaths), true);
// if there are no deaths, just show kill count
- if(out_total_deaths > 0)
- bufstr_add(me.listStats, sprintf("006Kill_Ratio: %.2f", (out_total_kills / out_total_deaths)), true);
- else
- bufstr_add(me.listStats, sprintf("006Kill_Ratio: %.2f", out_total_kills), true);
+ if(out_total_deaths == 0)
+ out_total_deaths = 1;
+
+ bufstr_add(me.listStats, sprintf("006%s\n%.2f", _("Kill ratio:"), (out_total_kills / out_total_deaths)), true);
out_total_kills = -1;
out_total_deaths = -1;
case "matches":
{
order = 1;
- outstr = sprintf(_("%s_Matches:"), strtoupper(gametype));
- //data = sprintf(_("%d (unranked)"), data);
+ outstr = _("Matches:");
break;
}
case "elo":
{
order = 2;
- outstr = sprintf(_("%s_ELO:"), strtoupper(gametype));
+ outstr = _("ELO:");
data = sprintf("%d", stof(data));
break;
}
case "rank":
{
order = 3;
- outstr = sprintf(_("%s_Rank:"), strtoupper(gametype));
+ outstr = _("Rank:");
data = sprintf("%d", stof(data));
break;
}
case "percentile":
{
order = 4;
- outstr = sprintf(_("%s_Percentile:"), strtoupper(gametype));
+ outstr = _("Percentile:");
data = sprintf("%d%%", stof(data));
break;
}
case "favorite-map":
{
order = 5;
- outstr = sprintf(_("%s_Favorite_Map:"), strtoupper(gametype));
- //data = sprintf(_("%d (unranked)"), data);
+ outstr = _("Favorite map:");
break;
}
#endif
default: continue; // nothing to see here
}
+ outstr = strcat(strtoupper(gametype), " ", outstr);
// now set up order for sorting later
orderstr = sprintf("%2.2s%d", gametype, order);
}
else if(event == "matches")
{
- outstr = sprintf(_("%s_Matches:"), strtoupper(gametype));
+ outstr = _("Matches:");
+ outstr = strcat(strtoupper(gametype), " ", outstr);
data = sprintf(_("%d (unranked)"), stof(data));
// unranked game modes ALWAYS get put last
else { continue; }
}
- bufstr_add(me.listStats, sprintf("%s%s %s", orderstr, outstr, data), true);
+ bufstr_add(me.listStats, sprintf("%s%s\n%s", orderstr, outstr, data), true);
}
me.nItems = buf_getsize(me.listStats);
}
string data = bufstr_get(me.listStats, i);
- string s = car(data);
- string d = cdr(data);
+ int ofs = strstrofs(data, "\n", 0);
- s = substring(s, 3, strlen(s) - 3);
- s = strreplace("_", " ", s);
+ string s = substring(data, 3, ofs - 3);
s = draw_TextShortenToWidth(s, 0.5 * me.columnNameSize, 0, me.realFontSize);
draw_Text(me.realUpperMargin * eY + me.columnNameOrigin * eX, s, me.realFontSize, '1 1 1', SKINALPHA_TEXT, 1);
+ string d = substring(data, ofs + 1, strlen(data) - (ofs + 1));
d = draw_TextShortenToWidth(d, me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize), 0, me.realFontSize);
draw_Text(me.realUpperMargin * eY + (me.columnNameOrigin + 1 * (me.columnNameSize - draw_TextWidth(d, 0, me.realFontSize))) * eX, d, me.realFontSize, '1 1 1', SKINALPHA_TEXT, 1);
}
ATTRIB(XonoticTextSlider, fontSize, float, SKINFONTSIZE_NORMAL);
ATTRIB(XonoticTextSlider, valueSpace, float, SKINWIDTH_SLIDERTEXT);
ATTRIB(XonoticTextSlider, image, string, SKINGFX_SLIDER);
- ATTRIB(XonoticTextSlider, tolerance, vector, SKINTOLERANCE_SLIDER);
+ ATTRIB(XonoticTextSlider, tolerance, vector, '0.2 2 0');
ATTRIB(XonoticTextSlider, align, float, 0.5);
ATTRIB(XonoticTextSlider, color, vector, SKINCOLOR_SLIDER_N);
ATTRIB(XonoticTextSlider, colorC, vector, SKINCOLOR_SLIDER_C);
float autocvar_g_respawn_ghosts_maxtime;
float autocvar_g_respawn_ghosts_speed;
int autocvar_g_respawn_waves;
-bool autocvar_g_shootfromcenter;
-bool autocvar_g_shootfromeye;
string autocvar_g_shootfromfixedorigin;
int autocvar_g_showweaponspawns;
bool autocvar_g_spawn_alloweffects;
stuffcmd(e, sprintf("\ncl_jumpspeedcap_min \"%s\"\n", autocvar_sv_jumpspeedcap_min));
stuffcmd(e, sprintf("\ncl_jumpspeedcap_max \"%s\"\n", autocvar_sv_jumpspeedcap_max));
+ stuffcmd(e, sprintf("\ncl_shootfromfixedorigin \"%s\"\n", autocvar_g_shootfromfixedorigin));
+
MUTATOR_CALLHOOK(FixClientCvars, e);
}
MUTATOR_CALLHOOK(ClientDisconnect, this);
if (CS(this).netname_previous) strunzone(CS(this).netname_previous); // needs to be before the CS entity is removed!
+ if (CS(this).weaponorder_byimpulse) strunzone(CS(this).weaponorder_byimpulse);
ClientState_detach(this);
Portal_ClearAll(this);
bot_relinkplayerlist();
if (this.clientstatus) strunzone(this.clientstatus);
- if (this.weaponorder_byimpulse) strunzone(this.weaponorder_byimpulse);
if (this.personal) delete(this.personal);
this.playerid = 0;
}
.int items_added;
+.string shootfromfixedorigin;
bool PlayerThink(entity this)
{
if (game_stopped || intermission_running) {
FixPlayermodel(this);
+ if (this.shootfromfixedorigin != autocvar_g_shootfromfixedorigin) {
+ this.shootfromfixedorigin = autocvar_g_shootfromfixedorigin;
+ stuffcmd(this, sprintf("\ncl_shootfromfixedorigin \"%s\"\n", autocvar_g_shootfromfixedorigin));
+ }
+
// LordHavoc: allow firing on move frames (sub-ticrate), this gives better timing on slow servers
//if(frametime)
{
}
if (IS_PLAYER(this)) {
+ if(this.death_time == time && IS_DEAD(this))
+ {
+ // player's bbox gets resized now, instead of in the damage event that killed the player,
+ // once all the damage events of this frame have been processed with normal size
+ this.maxs.z = 5;
+ setsize(this, this.mins, this.maxs);
+ }
DrownPlayer(this);
UpdateChatBubble(this);
if (CS(this).impulse) ImpulseCommands(this);
ATTRIB(Client, cmd_floodcount, int, this.cmd_floodcount);
ATTRIB(Client, cmd_floodtime, float, this.cmd_floodtime);
ATTRIB(Client, wasplayer, bool, this.wasplayer);
+ ATTRIB(Client, weaponorder_byimpulse, string, this.weaponorder_byimpulse);
// networked cvars
VOTE_COMMANDS(CMD_REQUEST_USAGE, caller, argc, "");
#undef VOTE_COMMAND
+
+ string cvarname = strcat("sv_vote_command_help_", argv(2));
+ if(cvar_type(cvarname) & CVAR_TYPEFLAG_EXISTS)
+ wordwrap_sprint(caller, cvar_string(cvarname), 1000);
+ else
+ print_to(caller, "No documentation exists for this vote");
}
}
.float revival_time; // time at which player was last revived
.float revive_speed; // NOTE: multiplier (anything above 1 is instaheal)
+.float freeze_time;
.entity iceblock;
.entity frozen_by; // for ice fields
this.nextthink = time;
}
-void Freeze(entity targ, float freeze_time, float frozen_type, float show_waypoint)
+void Freeze (entity targ, float revivespeed, float frozen_type, float show_waypoint)
{
if(!IS_PLAYER(targ) && !IS_MONSTER(targ)) // only specified entities can be freezed
return;
STAT(FROZEN, targ) = frozen_type;
STAT(REVIVE_PROGRESS, targ) = ((frozen_type == 3) ? 1 : 0);
SetResourceAmount(targ, RESOURCE_HEALTH, ((frozen_type == 3) ? targ_maxhealth : 1));
- targ.revive_speed = freeze_time;
+ targ.revive_speed = revivespeed;
if(targ.bot_attack)
IL_REMOVE(g_bot_targets, targ);
targ.bot_attack = false;
+ targ.freeze_time = time;
entity ice = new(ice);
ice.owner = targ;
return idx;
}
-float MapHasRightSize(string map)
+bool MapHasRightSize(string map)
{
- float fh;
if(currentbots || autocvar_bot_number || player_count < autocvar_minplayers)
if(autocvar_g_maplist_check_waypoints)
{
- LOG_TRACE("checkwp "); LOG_TRACE(map);
+ string checkwp_msg = strcat("checkwp ", map);
if(!fexists(strcat("maps/", map, ".waypoints")))
{
- LOG_TRACE(": no waypoints");
+ LOG_TRACE(checkwp_msg, ": no waypoints");
return false;
}
- LOG_TRACE(": has waypoints");
+ LOG_TRACE(checkwp_msg, ": has waypoints");
}
// open map size restriction file
- LOG_TRACE("opensize "); LOG_TRACE(map);
- fh = fopen(strcat("maps/", map, ".sizes"), FILE_READ);
+ string opensize_msg = strcat("opensize ", map);
+ float fh = fopen(strcat("maps/", map, ".sizes"), FILE_READ);
if(fh >= 0)
{
- float mapmin, mapmax;
- LOG_TRACE(": ok, ");
- mapmin = stof(fgets(fh));
- mapmax = stof(fgets(fh));
+ opensize_msg = strcat(opensize_msg, ": ok, ");
+ int mapmin = stoi(fgets(fh));
+ int mapmax = stoi(fgets(fh));
fclose(fh);
if(player_count < mapmin)
{
- LOG_TRACE("not enough");
+ LOG_TRACE(opensize_msg, "not enough");
return false;
}
- if(player_count > mapmax)
+ if(mapmax && player_count > mapmax)
{
- LOG_TRACE("too many");
+ LOG_TRACE(opensize_msg, "too many");
return false;
}
- LOG_TRACE("right size");
+ LOG_TRACE(opensize_msg, "right size");
return true;
}
- LOG_TRACE(": not found");
+ LOG_TRACE(opensize_msg, ": not found");
return true;
}
{
string o;
o = W_FixWeaponOrder_ForceComplete(wo);
- if(this.weaponorder_byimpulse)
+ if(CS(this).weaponorder_byimpulse)
{
- strunzone(this.weaponorder_byimpulse);
- this.weaponorder_byimpulse = string_null;
+ strunzone(CS(this).weaponorder_byimpulse);
+ CS(this).weaponorder_byimpulse = string_null;
}
- this.weaponorder_byimpulse = strzone(W_FixWeaponOrder_BuildImpulseList(o));
+ CS(this).weaponorder_byimpulse = strzone(W_FixWeaponOrder_BuildImpulseList(o));
return o;
}
/** bot */ i(entity, MUTATOR_ARGV_0_entity) \
/**/
MUTATOR_HOOKABLE(HavocBot_Aim, EV_HavocBot_Aim);
+
+/** return true to skip respawn time calculations */
+#define EV_CalculateRespawnTime(i, o) \
+ /** player */ i(entity, MUTATOR_ARGV_0_entity) \
+ /**/
+MUTATOR_HOOKABLE(CalculateRespawnTime, EV_CalculateRespawnTime);
GameRules_scoring_add_team(frag_attacker, SCORE, (frag_damage - excess) * autocvar_g_ca_damage2score_multiplier);
}
+MUTATOR_HOOKFUNCTION(ca, CalculateRespawnTime)
+{
+ // no respawn calculations needed, player is forced to spectate anyway
+ return true;
+}
+
MUTATOR_HOOKFUNCTION(ca, PlayerRegen)
{
// no regeneration in CA
vector v;
Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, this, attacker);
- // damage resistance (ignore most of the damage from a bullet or similar)
- damage = max(damage - 5, 1);
-
v = healtharmor_applydamage(this.armorvalue, autocvar_g_balance_armor_blockpercent, deathtype, damage);
take = v.x;
save = v.y;
void calculate_player_respawn_time(entity this)
{
- if(g_ca)
+ if(MUTATOR_CALLHOOK(CalculateRespawnTime, this))
return;
float gametype_setting_tmp;
animdecide_setstate(this, this.anim_state | ANIMSTATE_DEAD1, true);
else
animdecide_setstate(this, this.anim_state | ANIMSTATE_DEAD2, true);
- if (this.maxs.z > 5)
- {
- this.maxs_z = 5;
- setsize(this, this.mins, this.maxs);
- }
+
// set damage function to corpse damage
this.event_damage = PlayerCorpseDamage;
// call the corpse damage function just in case it wants to gib
if(autocvar_sv_gentle > 0 || autocvar_ekg || this.classname == "body") {
// remove corpse
// clones don't run any animation code any more, so we must gib them when they die :(
- PlayerCorpseDamage(this, inflictor, attacker, autocvar_sv_gibhealth+1.0, deathtype, weaponentity, hitloc, force);
+ this.event_damage(this, inflictor, attacker, autocvar_sv_gibhealth + 1, deathtype, weaponentity, hitloc, force);
}
// reset fields the weapons may use just in case
// _y: weight
vector Spawn_Score(entity this, entity spot, float mindist, float teamcheck)
{
- float shortest, thisdist;
- float prio;
-
- prio = 0;
-
// filter out spots for the wrong team
if(teamcheck >= 0)
if(spot.team != teamcheck)
return '-1 0 0';
}
- shortest = vlen(world.maxs - world.mins);
+ float prio = 0;
+ float shortest = vlen(world.maxs - world.mins);
FOREACH_CLIENT(IS_PLAYER(it) && it != this, {
- thisdist = vlen(it.origin - spot.origin);
+ float thisdist = vlen(it.origin - spot.origin);
if (thisdist < shortest)
shortest = thisdist;
});
entity a = CS(this).accuracy;
if (!a) return;
if (!hit && !fired) return;
+ if (w == WEP_Null.m_id) return;
w -= WEP_FIRST;
int b = accuracy_byte(a.accuracy_hit[w], a.accuracy_fired[w]);
if (hit) a.accuracy_hit [w] += hit;
int mutator_check = MUTATOR_CALLHOOK(AccuracyTargetValid, attacker, targ);
if (warmup_stage) return false;
- if (IS_DEAD(targ)) return false;
- if (STAT(FROZEN, targ)) return false;
+
+ // damage to dead/frozen players is good only if it happens in the frame they get killed / frozen
+ // so that stats for weapons that shoot multiple projectiles per shot are properly counted
+ if (IS_DEAD(targ) && time > targ.death_time) return false;
+ if (STAT(FROZEN, targ) && time > targ.freeze_time) return false;
if (SAME_TEAM(attacker, targ)) return false;
if (mutator_check == MUT_ACCADD_INVALID) return true;
if(list == 0)
W_CycleWeapon(this, weaponorder_byid, -1, weaponentity);
else if(list == 1)
- W_CycleWeapon(this, this.weaponorder_byimpulse, -1, weaponentity);
+ W_CycleWeapon(this, CS(this).weaponorder_byimpulse, -1, weaponentity);
else if(list == 2)
W_CycleWeapon(this, CS(this).cvar_cl_weaponpriority, -1, weaponentity);
}
if(list == 0)
W_CycleWeapon(this, weaponorder_byid, +1, weaponentity);
else if(list == 1)
- W_CycleWeapon(this, this.weaponorder_byimpulse, +1, weaponentity);
+ W_CycleWeapon(this, CS(this).weaponorder_byimpulse, +1, weaponentity);
else if(list == 2)
W_CycleWeapon(this, CS(this).cvar_cl_weaponpriority, +1, weaponentity);
}
float nudge = 1; // added to traceline target and subtracted from result TOOD(divVerent): do we still need this? Doesn't the engine do this now for us?
float oldsolid = ent.dphitcontentsmask;
Weapon wep = DEATH_WEAPONOF(deathtype);
- if (wep == WEP_Null)
- wep = ent.(weaponentity).m_weapon; // TODO: don't fall back, if the attack isn't a weapon we don't want it to affect the user's held weapon!
if(!IS_CLIENT(ent))
antilag = false; // no antilag for non-clients!
if (IS_PLAYER(ent) && (wep.spawnflags & WEP_FLAG_PENETRATEWALLS))
yoda = 0;
MUTATOR_CALLHOOK(FireBullet_Hit, this, hit, start, end, damage, this.(weaponentity));
damage = M_ARGV(4, float);
- float g = accuracy_isgooddamage(this, hit);
+ bool gooddamage = accuracy_isgooddamage(this, hit);
Damage(hit, this, this, damage * solid_penetration_left, dtype, weaponentity, start, force * dir * solid_penetration_left);
// calculate hits for ballistic weapons
- if(g)
+ if(gooddamage)
{
// do not exceed 100%
float added_damage = min(damage - total_damage, damage * solid_penetration_left);
set _independent_players 0 "DO NOT TOUCH"
set _notarget 0 "NO, REALLY, DON'T"
+set debug_text_3d_default_align 0 "Default text alignment for debug_text_3d()"
+set debug_text_3d_default_duration 10 "Default duration for debug_text_3d()"
+set debug_text_3d_default_velocity "0 -10 0" "Default velocity for debug_text_3d() in screen coords (X and Y from top left)"
+
// otherwise, antilag breaks
sv_gameplayfix_consistentplayerprethink 1