]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge MR 'func_door and func_plat fixes and Q3 compatibility'
authorbones_was_here <bones_was_here@xonotic.au>
Tue, 6 Feb 2024 14:15:01 +0000 (14:15 +0000)
committerbones_was_here <bones_was_here@xonotic.au>
Tue, 6 Feb 2024 14:15:01 +0000 (14:15 +0000)
See merge request xonotic/xonotic-data.pk3dir!1242

95 files changed:
.gitignore
.gitlab-ci.yml
.tx/merge-base
common.ast.po
common.be.po
common.bg.po
common.br.po
common.ca.po
common.cs.po
common.cy.po
common.da.po
common.de.po
common.de_CH.po
common.el.po
common.en@pirate.po
common.en_AU.po
common.en_GB.po
common.eo.po
common.es.po
common.es_AR.po
common.es_MX.po
common.fi.po
common.fr.po
common.ga.po
common.gd.po
common.gl.po
common.he.po
common.hu.po
common.id.po
common.id_ID.po
common.it.po
common.ja_JP.po
common.jbo.po
common.kk@Cyrl.po
common.ko.po
common.kw.po
common.la.po
common.mk.po
common.ms.po
common.nl.po
common.no.po
common.or.po
common.pl.po
common.pt.po
common.pt_BR.po
common.ro.po
common.ru.po
common.sq.po
common.sr.po
common.sv.po
common.tr.po
common.uk.po
common.uz@Latn.po
common.zh_CN.po
common.zh_HK.po
common.zh_TW.po
languages.txt
qcsrc/client/hud/crosshair.qc
qcsrc/client/main.qc
qcsrc/client/main.qh
qcsrc/client/view.qc
qcsrc/common/gamemodes/gamemode/freezetag/sv_freezetag.qc
qcsrc/common/mapobjects/trigger/jumppads.qc
qcsrc/common/mutators/mutator/damagetext/cl_damagetext.qc
qcsrc/common/mutators/mutator/damagetext/cl_damagetext.qh
qcsrc/common/mutators/mutator/damagetext/sv_damagetext.qc
qcsrc/common/mutators/mutator/overkill/okhmg.qc
qcsrc/common/mutators/mutator/overkill/okhmg.qh
qcsrc/common/mutators/mutator/overkill/okmachinegun.qh
qcsrc/common/mutators/mutator/overkill/okrpc.qc
qcsrc/common/mutators/mutator/overkill/okrpc.qh
qcsrc/common/mutators/mutator/powerups/powerup/invisibility.qh
qcsrc/common/mutators/mutator/powerups/powerup/speed.qh
qcsrc/common/physics/player.qc
qcsrc/common/playerstats.qc
qcsrc/common/stats.qh
qcsrc/common/util.qc
qcsrc/common/weapons/all.qc
qcsrc/common/weapons/weapon/arc.qc
qcsrc/common/weapons/weapon/devastator.qc
qcsrc/common/weapons/weapon/electro.qc
qcsrc/common/weapons/weapon/minelayer.qc
qcsrc/common/weapons/weapon/shockwave.qc
qcsrc/menu/menu.qc
qcsrc/menu/xonotic/playerlist.qc
qcsrc/server/compat/quake3.qc
qcsrc/server/damage.qc
qcsrc/server/damage.qh
qcsrc/server/impulse.qc
qcsrc/server/main.qc
qcsrc/server/weapons/tracing.qc
qcsrc/server/world.qc
qcsrc/tools/sv_game-hashtest.sh [new file with mode: 0755]
xonotic-client.cfg
xonotic-server.cfg

index cfb3f6fcb5945323788e0223f631b80fbc7c6947..86069d63def660981d90f2dd315662886d20c53a 100644 (file)
@@ -5,3 +5,11 @@ cscope*
 .DS_Store
 .idea/
 Thumbs.db
+
+# sv_game hashtest local test re-use
+data/maps/
+data/maps/_init.bsp
+data/maps/stormkeep.mapinfo
+data/maps/stormkeep.waypoints
+data/maps/stormkeep.waypoints.cache
+data/stormkeep.pk3
index fcb8cfbe05da5dae10b82bbc63ba083383e2efa4..aa2c105570ad6a953c9d5212219a4631373aa5f8 100644 (file)
-workflow:\r
-  rules:\r
-    - if: $CI_COMMIT_MESSAGE =~ /Transifex autosync/\r
-      when: never\r
-    - when: always\r
-\r
-before_script:\r
-  - ln -s $PWD data/xonotic-data.pk3dir\r
-\r
-  - export MAKEFLAGS=-j$(nproc); echo MAKEFLAGS=$MAKEFLAGS\r
-#   FIXME: -march=native -mtune=native _changes the hash_, why?!?\r
-# - export CC="gcc -pipe -march=native -mtune=native"\r
-  - export CC="gcc -pipe"\r
-\r
-  - >\r
-    if wget -nv https://beta.xonotic.org/pipeline-bin/gmqcc ; then\r
-      export QCC="$PWD/gmqcc"\r
-      chmod +x "$QCC"\r
-    else\r
-      git clone --depth=1 --branch=main https://gitlab.com/xonotic/gmqcc.git gmqcc\r
-      make -C gmqcc || exit 1\r
-      export QCC="$PWD/gmqcc/gmqcc"\r
-    fi\r
-\r
-  # Makefile: don't complain about lack of tags (fetching them is slow)\r
-  - export QCCFLAGS_WATERMARK=gitlab_pipeline\r
-  # Makefile: don't compress anything or complain about lack of zip program\r
-  - export ZIP=/bin/true\r
-\r
-test_compilation_units:\r
-  rules:\r
-    - changes:\r
-      - qcsrc/**/*\r
-  stage: test\r
-  script:\r
-    - make test\r
-\r
-test_sv_game:\r
-  stage: test\r
-  script:\r
-    - >\r
-      if wget -nv https://beta.xonotic.org/pipeline-bin/xonotic-linux64-dedicated ; then\r
-        export ENGINE="$PWD/xonotic-linux64-dedicated"\r
-        chmod +x "$ENGINE"\r
-      else\r
-        git clone --depth=1 --branch=div0-stable https://gitlab.com/xonotic/darkplaces.git darkplaces\r
-        make -C darkplaces sv-release || exit 1\r
-        export ENGINE="$PWD/darkplaces/darkplaces-dedicated -xonotic"\r
-      fi\r
-    - export ENGINE="$ENGINE -noconfig -nohome"\r
-\r
-    - make qc || exit 1\r
-\r
-    - mkdir -p data/maps\r
-    - wget -nv -O data/maps/_init.bsp https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/_init/_init.bsp\r
-\r
-    - while read LINE; do\r
-        echo $LINE;\r
-        [ "$LINE" = "All tests OK" ] && PASS=1;\r
-      done < <(${ENGINE} +developer 1 +map _init +sv_cmd runtest +wait +quit)\r
-    - test "$PASS" = "1" || { echo 'sv_cmd runtest failed!'; exit 1; }\r
-\r
-    - ${ENGINE} +map _init +sv_cmd dumpnotifs +wait +quit\r
-    - diff notifications.cfg data/data/notifications_dump.cfg ||\r
-        { echo 'Please update notifications.cfg using `dumpnotifs`!'; exit 1; }\r
-\r
-#    - wget -nv -O data/stormkeep.pk3 http://beta.xonotic.org/autobuild-bsp/latest/stormkeep.pk3\r
-# ^^ INCORRECT: /latest/stormkeep.pk3 is the most recently built, not necessarily the one built from master!\r
-# we can't get the one from master directly as there's no /stable/stormkeep.pk3 or /master/stormkeep.pk3\r
-# and we can't run misc/tools/xonotic-map-compiler-autobuild as it uses commit hashes from xonotic-maps.pk3dir to generate filenames\r
-# but the autobuild server can run it and provide us the resulting pk3:\r
-    - wget -nv -O data/stormkeep.pk3 https://beta.xonotic.org/pipeline-bin/stormkeep.pk3\r
-# see also: misc/infrastructure/xonotic-release-build.cron\r
-    - wget -nv -O data/maps/stormkeep.mapinfo https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.mapinfo\r
-    - wget -nv -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints\r
-    - wget -nv -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache\r
-\r
-    - EXPECT=27f38dfbbd72e4bf8f9b540882d5ccbe\r
-    - HASH=$(${ENGINE} +exec serverbench.cfg\r
-      | tee /dev/stderr\r
-      | grep '^:'\r
-      | grep -v '^:gamestart:'\r
-      | grep -v '^:anticheat:'\r
-      | md5sum | awk '{ print $1 }')\r
-    - echo 'expected:' $EXPECT\r
-    - echo '  actual:' $HASH\r
-    - test "$HASH" == "$EXPECT"\r
-    - exit $?\r
-\r
-\r
-# NOTE: The generated docs are incomplete - they don't contain code behind SVQC CSQC MENUQC GAMEQC ifdefs.\r
-# With them added to PREDEFINED, it would take over half an hour to generate the docs and even then\r
-# they might not be complete. Doxygen doesn't handle #elif and might not understand some QC definitions.\r
-#doxygen:  # rename to 'pages' when gitlab.com allows pages to exceed 100MiB\r
-#  before_script:\r
-#    - ln -s $PWD data/xonotic-data.pk3dir # is this needed?\r
-#    - apt-get update\r
-#    - apt-get -y install doxygen graphviz\r
-#  stage: deploy\r
-#  script:\r
-#    - cd qcsrc && doxygen\r
-#    - mv html ../public\r
-#    - mkdir -p ~/.ssh\r
-#    - for i in {0..0}; do eval $(printf "echo \$id_rsa_%02d\n" $i) >> ~/.ssh/id_rsa_base64; done\r
-#    - base64 --decode ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa\r
-#    - chmod 600 ~/.ssh/id_rsa\r
-#    - echo -e "Host *\n\tStrictHostKeyChecking no\n\tLogLevel ERROR\n" >> ~/.ssh/config\r
-#    - git config --global user.name "Gitlab CI"\r
-#    - git config --global user.email "<>"\r
-#    - git clone --single-branch --depth 1 ${DEPLOY_HOST}:${DEPLOY_REPO} ~/deploy_\r
-#    - mkdir ~/deploy && mv ~/deploy_/.git ~/deploy && rm -r ~/deploy_\r
-#    - cp -r ../public/* ~/deploy\r
-#    - cd ~/deploy && git add -A . && git commit -m "Deploy ${CI_BUILD_REF}" && git push origin gh-pages\r
-#  artifacts:\r
-#    paths:\r
-#      - public\r
-#  only:\r
-#    - master\r
+workflow:
+  rules:
+    - if: $CI_COMMIT_MESSAGE =~ /Transifex autosync/
+      when: never
+    - when: always
+
+before_script:
+  - ln -s $PWD data/xonotic-data.pk3dir
+
+  - export MAKEFLAGS=-j$(nproc); echo MAKEFLAGS=$MAKEFLAGS
+  - export CC="gcc -pipe"
+
+  - >
+    if wget -nv https://beta.xonotic.org/pipeline-bin/gmqcc ; then
+      export QCC="$PWD/gmqcc"
+      chmod +x "$QCC"
+    else
+      git clone --depth=1 --branch=main https://gitlab.com/xonotic/gmqcc.git gmqcc
+      make -C gmqcc || exit 1
+      export QCC="$PWD/gmqcc/gmqcc"
+    fi
+
+  # Makefile: don't complain about lack of tags (fetching them is slow)
+  - export QCCFLAGS_WATERMARK=gitlab_pipeline
+  # Makefile: don't compress anything or complain about lack of zip program
+  - export ZIP=/bin/true
+
+test_compilation_units:
+  rules:
+    - changes:
+      - qcsrc/**/*
+  stage: test
+  script:
+    - make test
+
+test_sv_game:
+  stage: test
+  script:
+    - export EXPECT=210a5126bffa3cd2acdb8d62bcec9e11
+    - qcsrc/tools/sv_game-hashtest.sh
+    - exit $?
+
+
+# NOTE: The generated docs are incomplete - they don't contain code behind SVQC CSQC MENUQC GAMEQC ifdefs.
+# With them added to PREDEFINED, it would take over half an hour to generate the docs and even then
+# they might not be complete. Doxygen doesn't handle #elif and might not understand some QC definitions.
+#doxygen:  # rename to 'pages' when gitlab.com allows pages to exceed 100MiB
+#  before_script:
+#    - ln -s $PWD data/xonotic-data.pk3dir # is this needed?
+#    - apt-get update
+#    - apt-get -y install doxygen graphviz
+#  stage: deploy
+#  script:
+#    - cd qcsrc && doxygen
+#    - mv html ../public
+#    - mkdir -p ~/.ssh
+#    - for i in {0..0}; do eval $(printf "echo \$id_rsa_%02d\n" $i) >> ~/.ssh/id_rsa_base64; done
+#    - base64 --decode ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
+#    - chmod 600 ~/.ssh/id_rsa
+#    - echo -e "Host *\n\tStrictHostKeyChecking no\n\tLogLevel ERROR\n" >> ~/.ssh/config
+#    - git config --global user.name "Gitlab CI"
+#    - git config --global user.email "<>"
+#    - git clone --single-branch --depth 1 ${DEPLOY_HOST}:${DEPLOY_REPO} ~/deploy_
+#    - mkdir ~/deploy && mv ~/deploy_/.git ~/deploy && rm -r ~/deploy_
+#    - cp -r ../public/* ~/deploy
+#    - cd ~/deploy && git add -A . && git commit -m "Deploy ${CI_BUILD_REF}" && git push origin gh-pages
+#  artifacts:
+#    paths:
+#      - public
+#  only:
+#    - master
index ac00185287316cf9e391e5ed78297ff56b1d3b4c..0514b49646ee49c95abcb0e445a576eea50306ae 100644 (file)
@@ -1 +1 @@
-Fri 15 Sep 2023 07:26:17 AM CEST
+Fri Jan 26 07:22:59 AM CET 2024
index c19312ab0d8276ffec59982df70718599b220346..a1876bc542d5367ab580419f26478ff5abb20e85 100644 (file)
@@ -2472,8 +2472,8 @@ msgstr "^BG%s^BG capturó la bandera del ^TC^TT"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG capturó bandera del ^TC^TT^BG en ^F1%s^BG segundos, superando'l "
 "récor anterior que fizo ^BG%s^BG de ^F2%s^BG segundos"
@@ -2706,8 +2706,8 @@ msgstr ""
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
-"^BG%s%s^K1 tentó d'ocupar l'espaciu de destín del teletresporte de ^BG%s^K1%s"
-"%s"
+"^BG%s%s^K1 tentó d'ocupar l'espaciu de destín del teletresporte de "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:291
 #, c-format
@@ -3484,8 +3484,8 @@ msgstr ""
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
-"^BG%s%s^K1 morrió pola bonísima interpretación de ^BG%s^K1 col @!#%% acordión"
-"%s%s"
+"^BG%s%s^K1 morrió pola bonísima interpretación de ^BG%s^K1 col @!#%% "
+"acordión%s%s"
 
 #: qcsrc/common/notifications/all.inc:461
 #, c-format
@@ -3702,8 +3702,8 @@ msgstr "^BG%s%s^K1 vaporióse pol Nex Desaxeráu de ^BG%s^K1%s%s"
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
@@ -3795,8 +3795,8 @@ msgstr "^K1Agora ^BG%s^K1 quedó pensando colos portales%s%s"
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
-"^BG%s%s^K1 morrió pola bonísima interpretación de ^BG%s^K1 cola @!#%% tuba%s"
-"%s"
+"^BG%s%s^K1 morrió pola bonísima interpretación de ^BG%s^K1 cola @!#%% "
+"tuba%s%s"
 
 #: qcsrc/common/notifications/all.inc:521
 #, c-format
index 92928511daff3a46fea46a6756382dcd37fce467..0b79aa3997aabc33c10653fc1266098b06dd14e8 100644 (file)
@@ -18,9 +18,9 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
-"%100>=11 && n%100<=14)? 2 : 3);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
+"(n%100>=11 && n%100<=14)? 2 : 3);\n"
 
 #: qcsrc/client/hud/hud_config.qc:80
 #, c-format
@@ -2464,8 +2464,8 @@ msgstr "^BG%s^BG захапіў ^TC^TT^BG сцяг"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG захапіў ^TC^TT^BG сцяг цягам ^F1%s^BG секунд, пабіўшы папярэдні "
 "рэкорд ^BG%s^BG - ^F2%s^BG секунд"
@@ -3676,8 +3676,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index cc90a3266483333dc8792e85b81c7e2fe4a7cd84..81e0978982c63d7e63e3e02cf9dd91efc21601e0 100644 (file)
@@ -2495,8 +2495,8 @@ msgstr "^BG%s^BG открадна ^TC^TT^BG знаме"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG плени ^TC^TT^BG знаме за ^F1%s^BG секунди, подобрявайки рекорда на "
 "^BG%s^BG от ^F2%s^BG секудни"
@@ -2776,16 +2776,16 @@ msgstr "^BG%s%s^K1 не можа да устои на розовите пръс
 #, 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-а на ^BG"
-"%s^K1 %s%s"
+"^BG%s%s^K1 бе хваната от взривната вълна когато експлодира Raptor-а на "
+"^BG%s^K1 %s%s"
 
 #: qcsrc/common/notifications/all.inc:299
 #, 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-а на ^BG"
-"%s^K1 %s%s"
+"^BG%s%s^K1 бе хванат от взривната вълна когато експлодира Spiderbot-а на "
+"^BG%s^K1 %s%s"
 
 #: qcsrc/common/notifications/all.inc:300
 #, c-format
@@ -3727,8 +3727,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index f98a00d2c4cf1f8cdfb16bb30c222cffcc63d07d..4368195a6ee8530b73743da97894768384b4393b 100644 (file)
@@ -17,10 +17,10 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !"
-"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n"
-"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > "
-"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 "
-"&& n % 1000000 == 0) ? 3 : 4);\n"
+"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && "
+"(n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 "
+"> 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != "
+"&& n % 1000000 == 0) ? 3 : 4);\n"
 
 #: qcsrc/client/hud/hud_config.qc:80
 #, c-format
@@ -2459,8 +2459,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3662,8 +3662,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index ba6f8d67ac5f49d21ab8d6277f4a793f43e2ba1b..1b0626311cb041167b943ddcbd2f318668bba578 100644 (file)
@@ -2484,8 +2484,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3687,8 +3687,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 57fb0ea04d867a572c9abe593801133c101ca73a..549be6098d20318a23eea24643cccb4bf84d6c43 100644 (file)
@@ -2469,8 +2469,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3672,8 +3672,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index d3871d6ba21e8e0e12bd72f94702cf585b59973c..ee06955c2dced53b58cf7aff091da219588f83ee 100644 (file)
@@ -2456,8 +2456,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3659,8 +3659,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 1251fe36c4b9ca8d381c2f71c651459032d2c97c..1482a13b946ff57fdab94a5cc026338aee151d44 100644 (file)
@@ -3,6 +3,8 @@
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Translators:
+# A Person, 2023
+# A Person, 2023
 # Archy Coder, 2022
 # Archy Coder, 2022
 msgid ""
@@ -54,12 +56,12 @@ msgstr ""
 
 #: qcsrc/client/hud/panel/centerprint.qc:211
 msgid "Generic message"
-msgstr ""
+msgstr "Generisk besked"
 
 #: qcsrc/client/hud/panel/centerprint.qc:293
 #: qcsrc/client/hud/panel/centerprint.qc:303
 msgid "vs"
-msgstr ""
+msgstr "mod"
 
 #: qcsrc/client/hud/panel/chat.qc:165
 msgid "^3Player^7: This is the chat area."
@@ -102,7 +104,7 @@ msgstr "næste våben"
 #: qcsrc/client/hud/panel/infomessages.qc:107
 #: qcsrc/client/hud/panel/infomessages.qc:111
 msgid "previous weapon"
-msgstr ""
+msgstr "forrige våben"
 
 #: qcsrc/client/hud/panel/infomessages.qc:111
 #, c-format
@@ -118,12 +120,12 @@ msgstr ""
 #: qcsrc/client/hud/panel/infomessages.qc:115
 #: qcsrc/common/vehicles/cl_vehicles.qc:171
 msgid "drop weapon"
-msgstr ""
+msgstr "lig våben"
 
 #: qcsrc/client/hud/panel/infomessages.qc:113
 #: qcsrc/menu/xonotic/keybinder.qc:51
 msgid "secondary fire"
-msgstr ""
+msgstr "sekundære skud"
 
 #: qcsrc/client/hud/panel/infomessages.qc:115
 #, c-format
@@ -138,7 +140,7 @@ msgstr ""
 #: qcsrc/client/hud/panel/infomessages.qc:118
 #: qcsrc/menu/xonotic/keybinder.qc:106
 msgid "server info"
-msgstr ""
+msgstr "server info"
 
 #: qcsrc/client/hud/panel/infomessages.qc:130
 #, c-format
@@ -148,12 +150,12 @@ msgstr ""
 #: qcsrc/client/hud/panel/infomessages.qc:130 qcsrc/client/main.qc:1409
 #: qcsrc/common/notifications/all.qh:442
 msgid "jump"
-msgstr "hoppe"
+msgstr "hop"
 
 #: qcsrc/client/hud/panel/infomessages.qc:139
 #, c-format
 msgid "^1Game starts in ^3%d^1 seconds"
-msgstr "^1Spil begynder om ^3%d^1 sekunder"
+msgstr "^1Spillet starter om ^3%d^1 sekunder"
 
 #: qcsrc/client/hud/panel/infomessages.qc:151
 msgid "^2Currently in ^1warmup^2 stage!"
@@ -161,7 +163,7 @@ msgstr ""
 
 #: qcsrc/client/hud/panel/infomessages.qc:163
 msgid "^31^2 more player is needed for the match to start."
-msgstr ""
+msgstr "^31^2 flere spillere kræves for at start kampen"
 
 #: qcsrc/client/hud/panel/infomessages.qc:165
 #, c-format
@@ -177,7 +179,7 @@ msgstr ""
 #: qcsrc/client/hud/panel/infomessages.qc:178
 #: qcsrc/menu/xonotic/keybinder.qc:102
 msgid "ready"
-msgstr ""
+msgstr "klar"
 
 #: qcsrc/client/hud/panel/infomessages.qc:175
 msgid "^2Waiting for others to ready up to end warmup..."
@@ -200,7 +202,7 @@ msgstr ""
 #: qcsrc/client/hud/panel/infomessages.qc:203
 #: qcsrc/menu/xonotic/keybinder.qc:117
 msgid "team selection"
-msgstr ""
+msgstr "hold selektion"
 
 #: qcsrc/client/hud/panel/infomessages.qc:213
 msgid "^1Spectating this player:"
@@ -249,7 +251,7 @@ msgstr "Kommando%d"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:667
 msgid "Continue..."
-msgstr ""
+msgstr "Fortsæt..."
 
 #: qcsrc/client/hud/panel/quickmenu.qc:818
 #: qcsrc/client/hud/panel/quickmenu.qc:825
@@ -270,11 +272,11 @@ msgstr ""
 
 #: qcsrc/client/hud/panel/quickmenu.qc:821
 msgid "QMCMD^good game"
-msgstr ""
+msgstr "QMCMD^god kamp"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:822
 msgid "QMCMD^hi / good luck"
-msgstr ""
+msgstr "QMCMD^hej / held og lykke"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:822
 msgid "QMCMD^hi / good luck and have fun"
@@ -282,7 +284,7 @@ msgstr ""
 
 #: qcsrc/client/hud/panel/quickmenu.qc:824
 msgid "QMCMD^Send in English"
-msgstr "QMCMD^Send i Engelsk"
+msgstr "QMCMD^Send  Engelsk"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:829
 #: qcsrc/client/hud/panel/quickmenu.qc:845
@@ -861,7 +863,7 @@ msgstr ""
 
 #: qcsrc/client/hud/panel/scoreboard.qc:172
 msgid "Number of suicides"
-msgstr "Antal selvmord"
+msgstr "Antal selvdrab"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:172
 msgid "SCO^suicides"
@@ -2457,8 +2459,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3660,8 +3662,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 8a4f533610dd7f1fef5bd706e125dca310476b5e..5162e9e022ba4b443b0fd564155e649d02abb6a9 100644 (file)
@@ -2537,11 +2537,11 @@ msgstr "^BG%s^BG hat die ^TC^TT^BG Flagge erobert"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
-"^BG%s^BG hat die ^TC^TT^BG Flagge in ^F1%s^BG Sekunden erobert, und damit ^BG"
-"%s^BGs Rekord von ^F2%s^BG Sekunden geschlagen"
+"^BG%s^BG hat die ^TC^TT^BG Flagge in ^F1%s^BG Sekunden erobert, und damit "
+"^BG%s^BGs Rekord von ^F2%s^BG Sekunden geschlagen"
 
 #: qcsrc/common/notifications/all.inc:242
 #, c-format
@@ -2698,8 +2698,8 @@ msgstr "^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1-Bonus getötet ^K1%s%s"
 #, c-format
 msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
 msgstr ""
-"^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1-Bonus zu Punkten verarbeitet ^K1%s"
-"%s"
+"^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1-Bonus zu Punkten verarbeitet "
+"^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:277
 #, c-format
@@ -3665,8 +3665,8 @@ msgstr "^BG%s^K1 hat mit Elektro-Blitzen gespielt%s%s"
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro orb%s%s"
 msgstr ""
-"^BG%s^K1 konnte sich nicht erinnern, wo noch einmal diese Elektro-Kugel lag%s"
-"%s"
+"^BG%s^K1 konnte sich nicht erinnern, wo noch einmal diese Elektro-Kugel "
+"lag%s%s"
 
 #: qcsrc/common/notifications/all.inc:477
 #, c-format
@@ -3809,8 +3809,8 @@ msgstr "^BG%s%s^K1 wurde von ^BG%s^K1s Overkill-Nex vaporisiert%s%s"
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 "^BG%s%s^K1 wurde von ^BG%s^K1s Overkill-Raketenkettensäge in zwei Teile "
 "zersägt%s%s"
index 539a25ccbac410bccff7c79c1720c3e98eb4425f..aaf55e83de87bb5816e790045ae67ff65e1f6430 100644 (file)
@@ -2537,11 +2537,11 @@ msgstr "^BG%s^BG hat die ^TC^TT^BG Flagge erobert"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
-"^BG%s^BG hat die ^TC^TT^BG Flagge in ^F1%s^BG Sekunden erobert, und damit ^BG"
-"%s^BGs Rekord von ^F2%s^BG Sekunden geschlagen"
+"^BG%s^BG hat die ^TC^TT^BG Flagge in ^F1%s^BG Sekunden erobert, und damit "
+"^BG%s^BGs Rekord von ^F2%s^BG Sekunden geschlagen"
 
 #: qcsrc/common/notifications/all.inc:242
 #, c-format
@@ -2698,8 +2698,8 @@ msgstr "^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1-Bonus getötet ^K1%s%s"
 #, c-format
 msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
 msgstr ""
-"^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1-Bonus zu Punkten verarbeitet ^K1%s"
-"%s"
+"^BG%s%s^K1 wurde durch ^BG%s^K1s ^BG%s^K1-Bonus zu Punkten verarbeitet "
+"^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:277
 #, c-format
@@ -3665,8 +3665,8 @@ msgstr "^BG%s^K1 hat mit Elektro-Blitzen gespielt%s%s"
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro orb%s%s"
 msgstr ""
-"^BG%s^K1 konnte sich nicht erinnern, wo noch einmal diese Elektro-Kugel lag%s"
-"%s"
+"^BG%s^K1 konnte sich nicht erinnern, wo noch einmal diese Elektro-Kugel "
+"lag%s%s"
 
 #: qcsrc/common/notifications/all.inc:477
 #, c-format
@@ -3809,8 +3809,8 @@ msgstr "^BG%s%s^K1 wurde von ^BG%s^K1s Overkill-Nex vaporisiert%s%s"
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 "^BG%s%s^K1 wurde von ^BG%s^K1s Overkill-Raketenkettensäge in zwei Teile "
 "zersägt%s%s"
index f7c68540acb87ebe4c03a45255d1e5161d392416..f61966b699e4c48947988fba58c01b194e8652f4 100644 (file)
@@ -2476,8 +2476,8 @@ msgstr "^BG%s^BG έπιασε την ^TC^TT^BG σημαία"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG έπιασε την ^TC^TT^BG σημαία σε ^F1%s^BG δευτερόλεπτα, ξεπερνώντας "
 "^BG%s^BG's προηγούμενο ρεκόρ των ^F2%s^BG δευτερολέπτων"
@@ -3681,8 +3681,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 96de9e8c17d842965fbda8a5175b3a2d8767b7f3..e4632b14af1399784a5a075bdbcfda3573f49842 100644 (file)
@@ -2455,8 +2455,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3658,8 +3658,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index cc2d5d5559d2083d70a497091a487db47816a1ce..d2cfcabd586c245091a9f3c44bde58383e4e4f36 100644 (file)
@@ -2467,11 +2467,11 @@ msgstr "^BG%s^BG captured the ^TC^TT^BG flag"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 
 #: qcsrc/common/notifications/all.inc:242
 #, c-format
@@ -3695,8 +3695,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 34165b919305eb122e1566cd9577d5633901cffa..b06646ec25040ddaa186bf744479a30283275167 100644 (file)
@@ -2455,8 +2455,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3658,8 +3658,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 656f5122c41c3239842a8b44bb3a269b17087c3b..0c1d6b40328b26ac7ec764842f55a29708f81990 100644 (file)
@@ -2457,8 +2457,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3660,8 +3660,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index e78e8392ee161470469dcc6681f636a2a1b11e1e..2d26d51c9bcd186695162410e6aa43c9ef9962f6 100644 (file)
@@ -2540,8 +2540,8 @@ msgstr "^BG%s^BG capturó la bandera ^TC^TT^BG"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG capturó la bandera ^TC^TT^BG en ^F1%s^BG segundos, batiendo el "
 "récord anterior de ^BG%s^BG de ^F2%s^BG segundos"
@@ -2847,8 +2847,8 @@ msgstr "^BG%s%s^K1 fue explotado a pedazos por el Robot Araña de ^BG%s^K1%s%s"
 #, 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 quedó atrapado en la explosión cuando el Racer de ^BG%s^K1 explotó"
-"%s%s"
+"^BG%s%s^K1 quedó atrapado en la explosión cuando el Racer de ^BG%s^K1 "
+"explotó%s%s"
 
 #: qcsrc/common/notifications/all.inc:303
 #, c-format
@@ -3117,8 +3117,8 @@ msgstr "^BG%s^K1fue reventado por una torreta Walker%s%s"
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
-"^BG%s^K1 fue alcanzado por la onda expansiva de una explosión de Bumblebee%s"
-"%s"
+"^BG%s^K1 fue alcanzado por la onda expansiva de una explosión de "
+"Bumblebee%s%s"
 
 #: qcsrc/common/notifications/all.inc:352
 #, c-format
@@ -3134,8 +3134,8 @@ msgstr "^BG%s^K1 fue alcanzado por una bomba de racimo de un Raptor%s%s"
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
-"^BG%s^K1 fue alcanzado por la explosión de la bomba de racimo de un Raptor%s"
-"%s"
+"^BG%s^K1 fue alcanzado por la explosión de la bomba de racimo de un "
+"Raptor%s%s"
 
 #: qcsrc/common/notifications/all.inc:355
 #, c-format
@@ -3647,8 +3647,8 @@ msgstr "^BG%s%s^K1 fue despedazado por el rayo del Electro de ^BG%s^K1%s%s"
 #, 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 sintió el aire electrificante del el combo de Electro de ^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 sintió el aire electrificante del el combo de Electro de "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:474
 #, c-format
@@ -3781,8 +3781,8 @@ msgstr "^BG%s^K1 se explotó a sí mismo con su propio Mortero%s%s"
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Overkill Heavy Machine Gun%s%s"
 msgstr ""
-"^BG%s%s^K1 fue arrebatado por la Ametralladora Pesada Overkill de ^BG%s^K1%s"
-"%s"
+"^BG%s%s^K1 fue arrebatado por la Ametralladora Pesada Overkill de "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:499
 #, c-format
@@ -3807,8 +3807,8 @@ msgstr "^BG%s%s^K1 ha sido vaporizado por el Nex Overkill de ^BG%s^K1%s%s"
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 "^BG%s%s^K1 fue aserrado por la mitad por la Motosierra Overkill Propulsada "
 "por Cohetes de ^BG%s^K1%s%s"
@@ -3818,8 +3818,8 @@ msgstr ""
 msgid ""
 "^BG%s%s^K1 almost dodged ^BG%s^K1's Overkill Rocket Propelled Chainsaw%s%s"
 msgstr ""
-"^BG%s%s^K1 casi esquivó la Motosierra Overkill Propulsada por Cohetes d^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 casi esquivó la Motosierra Overkill Propulsada por Cohetes "
+"d^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:504
 #, c-format
index 0af6a91ae901730ca10c3b82ea2b1398cda862e8..33bd6aa661c771ed3459e2201c1bf953c42ce6bc 100644 (file)
@@ -2456,8 +2456,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3659,8 +3659,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index bc90ec7bbf90e752bffe6f221e0fe1c57add2c42..69838d9b5e1a1e053b24370d275d30ec93e8eaaa 100644 (file)
@@ -2458,8 +2458,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3661,8 +3661,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 75ed39c13c205e115fedf60b37df5c8119fdfd61..c0b8c7b97c3d71274b85e6d6810521b43200f153 100644 (file)
@@ -2518,8 +2518,8 @@ msgstr "^BG%s^BG kaappasi ^TC^TT^BG lipun"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG kaappasi ^TC^TT^BG lipun ^F1%s^BG sekunnissa, rikkoen ^BG%s^BG's "
 "edellisen ennätyksen ^F2%s^BG sekuntia"
@@ -2690,8 +2690,8 @@ msgstr "^BG%s%s^K1 palautettiin maanpinnalle syyllisen ollen ^BG%s^K1%s%s"
 #, 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 tunsi mitä se on kun tekee poppaa ^BG%s^K1's tulen polttaessa^K1%s"
-"%s"
+"^BG%s%s^K1 tunsi mitä se on kun tekee poppaa ^BG%s^K1's tulen "
+"polttaessa^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:280
 #, c-format
@@ -2744,8 +2744,8 @@ msgstr "^BG%s%s^K1 ei tervehtynyt ^BG%s^K1's Terveysnaatista %s%s"
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
 msgstr ""
-"^BG%s%s^K1 ammuttiin planeettaa kiertävälle radalle syyllisen ollen ^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 ammuttiin planeettaa kiertävälle radalle syyllisen ollen "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:289
 #, c-format
@@ -3545,8 +3545,8 @@ msgstr ""
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
-"^BG%s%s^K1 kuoli syyn ollen ^BG%s^K1 on mahtava soittamaan @!#%%'n Haitaria%s"
-"%s"
+"^BG%s%s^K1 kuoli syyn ollen ^BG%s^K1 on mahtava soittamaan @!#%%'n "
+"Haitaria%s%s"
 
 #: qcsrc/common/notifications/all.inc:461
 #, c-format
@@ -3744,8 +3744,8 @@ msgstr "^BG%s^K1 räjäyttivät itsensä omalla Mörssärillään%s%s"
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Overkill Heavy Machine Gun%s%s"
 msgstr ""
-"^BG%s%s^K1 niputettiin ^BG%s^K1'n Ylimalkaallisen Raskaalla Konekiväärillä%s"
-"%s"
+"^BG%s%s^K1 niputettiin ^BG%s^K1'n Ylimalkaallisen Raskaalla "
+"Konekiväärillä%s%s"
 
 #: qcsrc/common/notifications/all.inc:499
 #, c-format
@@ -3760,8 +3760,8 @@ msgstr ""
 msgid ""
 "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Overkill Machine Gun%s%s"
 msgstr ""
-"^BG%s%s^K1 ropisi täyteen reikiä ^BG%s^K1'n Ylimalkaallisella konekiväärillä"
-"%s%s"
+"^BG%s%s^K1 ropisi täyteen reikiä ^BG%s^K1'n Ylimalkaallisella "
+"konekiväärillä%s%s"
 
 #: qcsrc/common/notifications/all.inc:501
 #, c-format
@@ -3771,8 +3771,8 @@ msgstr "^BG%s%s^K1 höyrytettiin ^BG%s^K1'n Ylimalkaallisella Nex:illä%s%s"
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 "^BG%s%s^K1 sahattiin kahtia ^BG%s^K1'n Ylimalkaallisella rakettikäyttöisellä "
 "moottorisahalla%s%s"
index 9b17ec24d44961bf7237119174484ee9a4866e32..fcb17b73e64e532f88987a0e5f9b9d56d3e30f79 100644 (file)
@@ -2533,8 +2533,8 @@ msgstr "^BG%s^BG a capturé le drapeau ^TC^TT^BG"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG a capturé le drapeau ^TC^TT^BG en ^F1%s^BG secondes, battant le "
 "précédent record de ^BG%s^BG en ^F2%s^BG secondes"
@@ -2692,8 +2692,8 @@ msgstr "^BG%s%s^K1 a été tué par ^BG%s^K1 et son bonus de ^BG%s^K1 ^K1%s%s"
 #, c-format
 msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
 msgstr ""
-"^BG%s%s^K1 a été pris pour cible par ^BG%s^K1 et son bonus de ^BG%s^K1 ^K1%s"
-"%s"
+"^BG%s%s^K1 a été pris pour cible par ^BG%s^K1 et son bonus de ^BG%s^K1 "
+"^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:277
 #, c-format
@@ -2803,8 +2803,8 @@ msgstr ""
 #, 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 en a vu de toutes les couleurs avec le canon du Bumblebee de ^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 en a vu de toutes les couleurs avec le canon du Bumblebee de "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:295
 #, c-format
@@ -2825,8 +2825,8 @@ msgstr "^BG%s%s^K1 n'a pas pu résister aux bulles violettes de ^BG%s^K1%s%s"
 #, 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 a été pris dans le souffle quand le Raptor de ^BG%s^K1 a explosé%s"
-"%s"
+"^BG%s%s^K1 a été pris dans le souffle quand le Raptor de ^BG%s^K1 a "
+"explosé%s%s"
 
 #: qcsrc/common/notifications/all.inc:299
 #, c-format
@@ -2850,8 +2850,8 @@ msgstr "^BG%s%s^K1 a été réduit en miettes par le Spiderbot de ^BG%s^K1%s%s"
 #, 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 a été pris dans le souffle quand le Racer de ^BG%s^K1 a explosé%s"
-"%s"
+"^BG%s%s^K1 a été pris dans le souffle quand le Racer de ^BG%s^K1 a "
+"explosé%s%s"
 
 #: qcsrc/common/notifications/all.inc:303
 #, c-format
@@ -3454,8 +3454,8 @@ msgstr "^BG%s^BG a abandonné la course"
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
-"^BG%s^BG n'a pas réussi à améliorer son record au classement de %s%s^BG de %s"
-"%s %s"
+"^BG%s^BG n'a pas réussi à améliorer son record au classement de %s%s^BG de "
+"%s%s %s"
 
 #: qcsrc/common/notifications/all.inc:434
 #, c-format
@@ -3786,16 +3786,16 @@ msgstr ""
 msgid ""
 "^BG%s%s^K1 was torn to bits by ^BG%s^K1's Overkill Heavy Machine Gun%s%s"
 msgstr ""
-"^BG%s%s^K1 a été réduit en miettes par la Mitraillette Overkill lourde de ^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 a été réduit en miettes par la Mitraillette Overkill lourde de "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:500
 #, c-format
 msgid ""
 "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Overkill Machine Gun%s%s"
 msgstr ""
-"^BG%s%s^K1 a été criblé de balles par la Mitraillette Overkill de ^BG%s^K1%s"
-"%s"
+"^BG%s%s^K1 a été criblé de balles par la Mitraillette Overkill de "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:501
 #, c-format
@@ -3805,27 +3805,27 @@ msgstr "^BG%s%s^K1 a été vaporisé par le Nex Overkill de ^BG%s^K1%s%s"
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
-"^BG%s%s^K1 a été scié en deux par la Tronçonneuse à roquettes Overkill de ^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 a été scié en deux par la Tronçonneuse à roquettes Overkill de "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:503
 #, c-format
 msgid ""
 "^BG%s%s^K1 almost dodged ^BG%s^K1's Overkill Rocket Propelled Chainsaw%s%s"
 msgstr ""
-"^BG%s%s^K1 a presque évité la Tronçonneuse à roquettes Overkill de ^BG%s^K1%s"
-"%s"
+"^BG%s%s^K1 a presque évité la Tronçonneuse à roquettes Overkill de "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:504
 #, c-format
 msgid ""
 "^BG%s^K1 was sawn in half by their own Overkill Rocket Propelled Chainsaw%s%s"
 msgstr ""
-"^BG%s^K1 a été scié en deux par sa propre Tronçonneuse à roquettes Overkill%s"
-"%s"
+"^BG%s^K1 a été scié en deux par sa propre Tronçonneuse à roquettes "
+"Overkill%s%s"
 
 #: qcsrc/common/notifications/all.inc:505
 #, c-format
@@ -3847,15 +3847,15 @@ msgstr "^BG%s%s^K1 a été abattu par le Fusil de précision de ^BG%s^K1%s%s"
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
-"^BG%s%s^K1 est mort dans la grêle de balles du Fusil de précision de ^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 est mort dans la grêle de balles du Fusil de précision de "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:510
 #, 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 n'a pas pu éviter la grêle de balles du Fusil de précision de ^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 n'a pas pu éviter la grêle de balles du Fusil de précision de "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:511
 #, c-format
@@ -4241,7 +4241,7 @@ msgstr "^K1Change de tactique, campeur !"
 
 #: qcsrc/common/notifications/all.inc:642
 msgid "^K1You unfairly eliminated yourself!"
-msgstr "^K1Vous vous êtes éliminé tout seul !"
+msgstr "^K1Vous vous êtes injustement éliminé vous-même !"
 
 #: qcsrc/common/notifications/all.inc:643
 #, c-format
@@ -4266,7 +4266,7 @@ msgstr "^K1Vous êtes devenu un peu trop croustillant !"
 
 #: qcsrc/common/notifications/all.inc:647
 msgid "^K1You fragged yourself!"
-msgstr "^K1Vous vous êtes tué tout seul !"
+msgstr "^K1Vous vous êtes tué vous-même !"
 
 #: qcsrc/common/notifications/all.inc:647
 msgid "^K1You need to be more careful!"
@@ -4475,7 +4475,7 @@ msgstr "^K3Vous avez dégelé ^BG%s"
 
 #: qcsrc/common/notifications/all.inc:688
 msgid "^K3You revived yourself"
-msgstr "^K3Vous vous êtes dégelé tout seul"
+msgstr "^K3Vous vous êtes dégelé vous-même"
 
 #: qcsrc/common/notifications/all.inc:689
 #, c-format
@@ -4497,7 +4497,7 @@ msgstr "^BGL'équipe ^TC^TT^BG perd la manche"
 
 #: qcsrc/common/notifications/all.inc:698
 msgid "^K1You froze yourself"
-msgstr "^K1Vous vous êtes gelé tout seul"
+msgstr "^K1Vous vous êtes gelé vous-même"
 
 #: qcsrc/common/notifications/all.inc:699
 msgid "^K1Round already started, you spawn as frozen"
@@ -4530,7 +4530,7 @@ msgid ""
 "^K1You may not join the game at this time.\n"
 "This match is limited to ^F2%s^BG players."
 msgstr ""
-"^K1Vous ne pouvez actuellement pas rejoindre la partie.\n"
+"^K1Vous ne pouvez pas rejoindre la partie actuellement.\n"
 "Cette partie est limitée à ^F2%s^BG joueurs."
 
 #: qcsrc/common/notifications/all.inc:716
index ff78066623fc5b530287548124e8c92cf27c6c63..26d8c3b22e031a4e1a89e5edd5e0c0d2f102ed1f 100644 (file)
@@ -2458,8 +2458,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3661,8 +3661,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 62f7870601cc0967727f271aa1cf8a1f1f8fa423..4937e354e5346b19b223945f1e3666d722c9136c 100644 (file)
@@ -2469,8 +2469,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3672,8 +3672,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index f51c90e796642629c43604e41d9a3b17d396698d..4f4535ace4367490d838169ab251834492864931 100644 (file)
@@ -2457,8 +2457,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3660,8 +3660,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 340740ca645763a16e5b30a9329fc3a98de6e15e..182c21bd26e5a97168d3f107e6e764f4e2a63191 100644 (file)
@@ -2464,8 +2464,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3667,8 +3667,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 6d7a18028e813b2fe1e8912c22a4b078effaf139..d3dcdbdf2649b5d8838c72c47ae8dcf96c156f12 100644 (file)
@@ -2477,8 +2477,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3680,8 +3680,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
@@ -10331,9 +10331,10 @@ msgid "Screen resolution"
 msgstr ""
 "A csúszkával a képernyő felbontását tudod megváltoztatni. TIPP: Ha több "
 "monitorod van, és a kép az összes monitorra szét van feszítve, akkor az "
-"Egyéb -> Haladó beállításokban keresd ki a listából a \"vid_netwmfullscreen"
-"\" változót, és állítsd át az értékét \"1\"-re! Ez megoldja problémát, de "
-"ebben az esetben csak a képernyőd natív felbontását tudod csak használni!"
+"Egyéb -> Haladó beállításokban keresd ki a listából a "
+"\"vid_netwmfullscreen\" változót, és állítsd át az értékét \"1\"-re! Ez "
+"megoldja problémát, de ebben az esetben csak a képernyőd natív felbontását "
+"tudod csak használni!"
 
 #: qcsrc/menu/xonotic/slider_sbfadetime.qc:13
 msgid "FADESPEED^Slow"
index cf2111a88ec843846a691415611f79be1a77f0a3..4f5bb6876ef8be0db36d967f8e4c5ea02fac087d 100644 (file)
@@ -2455,8 +2455,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3658,8 +3658,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index dd6aecf90b30489fe3a8245a31bcfa2a9c0af638..c224c0ebd5dee69635dccd68e568785613265e84 100644 (file)
@@ -8,6 +8,8 @@
 # Ariesandy Hidayat, 2023
 # Ariesandy Hidayat, 2023
 # red koala, 2023
+# Red Koala, 2023
+# Red Koala, 2023
 # red koala, 2023
 msgid ""
 msgstr ""
@@ -2476,8 +2478,8 @@ msgstr "^BG%s^BG menangkap bendera ^TC^TT^BG"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG menangkap bendera ^TC^TT^BG dalam ^F1%s^BG detik, memecahkan rekor "
 "^BG%s^BG sebelumnya dari ^F2%s^BG detik"
@@ -3689,8 +3691,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
@@ -4385,7 +4387,7 @@ msgstr "^BGAnda mendapatkan Jetpack^F1"
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
-msgstr ""
+msgstr "Tidak ada tempat spawn tersedia! Semoga tim-mu bisa memperbaikinya..."
 
 #: qcsrc/common/notifications/all.inc:715
 #, c-format
@@ -4398,7 +4400,7 @@ msgstr ""
 
 #: qcsrc/common/notifications/all.inc:716
 msgid "^K1You aren't allowed to play because you are banned in this server"
-msgstr ""
+msgstr "^K1Anda tidak diizinkan bermain karena anda di ban di server ini "
 
 #: qcsrc/common/notifications/all.inc:720
 msgid "^BGYou picked up the ball"
@@ -4463,7 +4465,7 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:735
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
-msgstr ""
+msgstr "^BGMenunggu pemain %s untuk bergabung..."
 
 #: qcsrc/common/notifications/all.inc:737
 msgid "^BGYour weapon has been downgraded until you find some ammo!"
@@ -4484,7 +4486,7 @@ msgstr "^BGDapatkan beberapa peluru! Tersisa ^F4^COUNT^BG!"
 #: qcsrc/common/notifications/all.inc:740
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
-msgstr ""
+msgstr "^F2Sisa nyawa ekstra: ^K1%s"
 
 #: qcsrc/common/notifications/all.inc:742
 #, c-format
@@ -4505,7 +4507,7 @@ msgstr ""
 
 #: qcsrc/common/notifications/all.inc:746
 msgid "^BGYou captured a control point"
-msgstr ""
+msgstr "^BGAnda menangkap poin kontrol"
 
 #: qcsrc/common/notifications/all.inc:747
 #, c-format
@@ -4528,13 +4530,15 @@ msgstr ""
 
 #: qcsrc/common/notifications/all.inc:751
 msgid "^BGThe ^TCenemy^BG generator is no longer shielded!"
-msgstr ""
+msgstr "^BGGenerator ^TCmusuh^BG tidak lagi terlindungi"
 
 #: qcsrc/common/notifications/all.inc:752
 msgid ""
 "^K1Your generator is NOT shielded!\n"
 "^BGRe-capture control points to shield it!"
 msgstr ""
+"^K1Generator anda TIDAK terlindungi!\n"
+"^BGAmbil poin kontrol untuk melindunginya!"
 
 #: qcsrc/common/notifications/all.inc:753
 #, c-format
@@ -4596,7 +4600,7 @@ msgstr ""
 
 #: qcsrc/common/notifications/all.inc:767
 msgid "^F2Shield surrounds you"
-msgstr ""
+msgstr "^F2Anda terlindungi"
 
 #: qcsrc/common/notifications/all.inc:768
 msgid "^F2Shield has worn off"
index bb9cac9dc23602dc888d7f3c3c0811acbbb22f9d..06aacc1a83d2536696130783eea6c5e7f11a3deb 100644 (file)
@@ -2515,8 +2515,8 @@ msgstr "^BG%s^BG ha catturato la bandiera ^TC^TT^BG"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG ha catturato la bandiera ^TC^TT^BG in ^F1%s^BG secondi, battendo il "
 "precedente record di ^BG%s^BG di ^F2%s^BG secondi"
@@ -2827,8 +2827,8 @@ msgstr "^BG%s%s^K1 è stato ridotto a brandelli dallo Spiderbot di ^BG%s^K1%s%s"
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
-"^BG%s%s^K1 è stato fatto scoppiare in pezzettini dallo Spiderbot di ^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 è stato fatto scoppiare in pezzettini dallo Spiderbot di "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:302
 #, c-format
@@ -3454,8 +3454,8 @@ msgstr "^BG%s^BG ha abbandonato la gara"
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
-"^BG%s^BG non è riuscito a battere il proprio record del %s%s^BG posto di %s"
-"%s %s"
+"^BG%s^BG non è riuscito a battere il proprio record del %s%s^BG posto di "
+"%s%s %s"
 
 #: qcsrc/common/notifications/all.inc:434
 #, c-format
@@ -3645,8 +3645,8 @@ msgstr ""
 #, 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 ha sentito l'aria elettrificata della combo dell'Electro di ^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 ha sentito l'aria elettrificata della combo dell'Electro di "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:474
 #, c-format
@@ -3717,8 +3717,8 @@ msgstr "^BG%s^K1 è diventato un pò sovraeccitato con il proprio HLAC%s%s"
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
-"^BG%s%s^K1 è stato catturato nella bomba di gravità del Rampino di ^BG%s^K1%s"
-"%s"
+"^BG%s%s^K1 è stato catturato nella bomba di gravità del Rampino di "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:487
 #, c-format
@@ -3808,8 +3808,8 @@ msgstr "^BG%s%s^K1 è stato vaporizzato dall'Overkill Vortex di ^BG%s^K1%s%s"
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 "^BG%s%s^K1 è stato tagliato in due dall'Overkill Rocket Propelled Chainsaw "
 "di ^BG%s^K1%s%s"
@@ -3819,16 +3819,16 @@ msgstr ""
 msgid ""
 "^BG%s%s^K1 almost dodged ^BG%s^K1's Overkill Rocket Propelled Chainsaw%s%s"
 msgstr ""
-"^BG%s%s^K1 ha quasi schivato l'Overkill Rocket Propelled Chainsaw di ^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 ha quasi schivato l'Overkill Rocket Propelled Chainsaw di "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:504
 #, c-format
 msgid ""
 "^BG%s^K1 was sawn in half by their own Overkill Rocket Propelled Chainsaw%s%s"
 msgstr ""
-"^BG%s^K1 è stato segato in due dal proprio Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s^K1 è stato segato in due dal proprio Overkill Rocket Propelled "
+"Chainsaw%s%s"
 
 #: qcsrc/common/notifications/all.inc:505
 #, c-format
index 8f1be6b3154969c86c73af48ad0a267fd5c253a8..e83368ceb43c85d519c92eac54baca08ca74c56c 100644 (file)
@@ -7,7 +7,7 @@
 # Antoni Das <Antonidas159@gmail.com>, 2017
 # Antonio <piuntn@gmail.com>, 2023
 # LegendGuard, 2020
-# LegendGuard, 2020-2023
+# LegendGuard, 2020-2024
 # Lento <securemailfor28-xonotic@yahoo.co.jp>, 2015
 # RYU N. <ryusho2523@yahoo.co.jp>, 2021
 # z 411 <winrar.hurr@gmail.com>, 2021-2022
@@ -17,7 +17,7 @@ msgstr ""
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2023-07-11 07:22+0200\n"
 "PO-Revision-Date: 2013-09-12 16:53+0000\n"
-"Last-Translator: RYU N. <ryusho2523@yahoo.co.jp>, 2021\n"
+"Last-Translator: LegendGuard, 2020-2024\n"
 "Language-Team: Japanese (Japan) (http://app.transifex.com/team-xonotic/"
 "xonotic/language/ja_JP/)\n"
 "Language: ja_JP\n"
@@ -351,7 +351,7 @@ msgstr "QMCMD^旗が見えました、アイコン"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:838
 msgid "QMCMD^defending (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr "QMCMD^守り中 (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr "QMCMD^防衛中 (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:838
 msgid "QMCMD^defending, icon"
@@ -2488,8 +2488,8 @@ msgstr "^BG%s^BG が ^TC^TT^BG 旗を取れた"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG が ^F1%s^BG 秒で ^TC^TT^BG 旗を取れたし、^BG%s^BG の以前の記録であ"
 "る ^F2%s^BG 秒を破った"
@@ -3717,8 +3717,8 @@ msgstr "^BG%s%s^K1 は ^BG%s^K1 のオーバーキルネクス%s%sによって
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 "^BG%s%s^K1 は ^BG%s^K1 のオーバーキルロケット推進チェーンソー%s%sによって半分"
 "に切断された"
index cb7c7738316e427fd6a4c40cef918a26acca15ce..cdd7250d9e14ecf7528c1344139222ec7afaaf05 100644 (file)
@@ -2455,8 +2455,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3658,8 +3658,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index d7cff15ded867c85b5cacf615a792d39e0428b03..b75dc553f49c74630c0c36c3a84166eb2969eca9 100644 (file)
@@ -2459,8 +2459,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3662,8 +3662,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index cf404814e01eebf24593499b25c7df5428d87f4b..e618f732ddd4c5f73ea3d84f692e6f9e05217dd7 100644 (file)
@@ -2486,8 +2486,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3694,8 +3694,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 15eb517d9e479056bc4733d3147711a6c45544de..b75801a4da8b815019cd5179a7990471f160040d 100644 (file)
@@ -2473,8 +2473,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3678,8 +3678,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 54051b81cb7b1d61e8dfc286616cb6498f381a5a..e7712f73c26a7c4b1a2c1ff8cfbcfc4836952b20 100644 (file)
@@ -4,14 +4,14 @@
 #
 # Translators:
 # oblector o, 2022
-# oblector o, 2022-2023
+# oblector o, 2022-2024
 msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2023-07-11 07:22+0200\n"
 "PO-Revision-Date: 2013-09-12 16:53+0000\n"
-"Last-Translator: oblector o, 2022\n"
+"Last-Translator: oblector o, 2022-2024\n"
 "Language-Team: Latin (http://app.transifex.com/team-xonotic/xonotic/language/"
 "la/)\n"
 "Language: la\n"
@@ -2489,8 +2489,8 @@ msgstr "^BG%s^BG vexillum ^TC^TT^BG cepit"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG vexillum ^TC^TT^BG ^F1%s^BG secundis cepit, fuit captus celerior "
 "anteriore celerrimo, quem ^BG%s^BG ^F2%s^BG secundis fecerat"
@@ -3404,8 +3404,8 @@ msgstr ""
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
-"^BG%s^BG celerior fuit quam suum ipsum gradum %s%s^BG, tempus novum fuit %s"
-"%s %s"
+"^BG%s^BG celerior fuit quam suum ipsum gradum %s%s^BG, tempus novum fuit "
+"%s%s %s"
 
 #: qcsrc/common/notifications/all.inc:438
 #, c-format
@@ -3647,7 +3647,7 @@ msgstr "^BG%s^K1 suis auribus M@!#%% Klein Lagena nocuit%s%s"
 #: qcsrc/common/notifications/all.inc:489
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1, Polybolo ^BG%s^K1, occisus est%s%s"
 
 #: qcsrc/common/notifications/all.inc:490
 #, c-format
@@ -3693,13 +3693,13 @@ msgstr "^BG%s^K1 suo Mortario se rupit%s%s"
 #: qcsrc/common/notifications/all.inc:498
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Overkill Heavy Machine Gun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1, Polybolo Immoderato ^BG%s^K1, occisus est%s%s"
 
 #: qcsrc/common/notifications/all.inc:499
 #, c-format
 msgid ""
 "^BG%s%s^K1 was torn to bits by ^BG%s^K1's Overkill Heavy Machine Gun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1, Polybolo Immoderato ^BG%s^K1, divisus est%s%s"
 
 #: qcsrc/common/notifications/all.inc:500
 #, c-format
@@ -3710,24 +3710,24 @@ msgstr "^BG%s%s^K1, Polybolo Immoderato ^BG%s^K1, perforatus est%s%s"
 #: qcsrc/common/notifications/all.inc:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Overkill Nex%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1, Nece Immoderata ^BG%s^K1, in vaporem mutatus est%s%s"
 
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
-"^BG%s%s^K1, Missilium Pellentium Serra Immoderata ^BG%s^K1, dimidiatus est%s"
-"%s"
+"^BG%s%s^K1, Missilium Pellentium Serra Immoderata ^BG%s^K1, dimidiatus "
+"est%s%s"
 
 #: qcsrc/common/notifications/all.inc:503
 #, c-format
 msgid ""
 "^BG%s%s^K1 almost dodged ^BG%s^K1's Overkill Rocket Propelled Chainsaw%s%s"
 msgstr ""
-"^BG%s%s^K1 Missilium Pellentium Serram Immoderatam, ^BG%s^K1, fere vitavit%s"
-"%s"
+"^BG%s%s^K1 Missilium Pellentium Serram Immoderatam, ^BG%s^K1, fere "
+"vitavit%s%s"
 
 #: qcsrc/common/notifications/all.inc:504
 #, c-format
@@ -3744,27 +3744,30 @@ msgstr "^BG%s^K1 Missilium Pellentium Serra Immoderata sua se rupit%s%s"
 #: qcsrc/common/notifications/all.inc:507
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Overkill Shotgun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1, Sclopeto Immoderato ^BG%s^K1, occisus est%s%s"
 
 #: qcsrc/common/notifications/all.inc:508
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1, Sclopeto Pungenti ^BG%s^K1, occisus est%s%s"
 
 #: qcsrc/common/notifications/all.inc:509
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
+"^BG%s%s^K1 sub ^BG%s^K1 Sclopeti Pungentis missilium pluvia mortus est%s%s"
 
 #: qcsrc/common/notifications/all.inc:510
 #, 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, ex ^BG%s^K1 Sclopeti Pungentis missilium pluvia, effugire non "
+"potuit%s%s"
 
 #: qcsrc/common/notifications/all.inc:511
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1, ex ^BG%s^K1 Sclopeto Pungenti, effugire non potuit%s%s"
 
 #: qcsrc/common/notifications/all.inc:512
 #, c-format
@@ -3794,12 +3797,12 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:517
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1, Sclopeto ^BG%s^K1, occisus est%s%s"
 
 #: qcsrc/common/notifications/all.inc:518
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 magno Sclopeto ^BG%s^K1 alapam dedit%s%s"
 
 #: qcsrc/common/notifications/all.inc:519
 #, c-format
@@ -3819,12 +3822,12 @@ msgstr "^BG%s^K1 suis auribus M@!#%% Tuba nocuit%s%s"
 #: qcsrc/common/notifications/all.inc:522
 #, c-format
 msgid "^BG%s%s^K1 has been sublimated by ^BG%s^K1's Vaporizer%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1, Vaporatro ^BG%s^K1, fervefactus est%s%s"
 
 #: qcsrc/common/notifications/all.inc:523
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Vortex%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1, Vortice ^BG%s^K1, in vaporem mutatus est%s%s"
 
 #: qcsrc/common/notifications/all.inc:542
 msgid "^F4You are now alone!"
@@ -5149,20 +5152,20 @@ msgstr ""
 
 #: qcsrc/common/turrets/turret/plasma.qh:13
 msgid "Plasma Cannon"
-msgstr ""
+msgstr "Plasmatis Tormentum"
 
 #: qcsrc/common/turrets/turret/plasma_dual.qh:8
 msgid "Dual plasma"
-msgstr ""
+msgstr "Plasma Duplum"
 
 #: qcsrc/common/turrets/turret/plasma_dual.qh:20
 msgid "Dual Plasma Cannon"
-msgstr ""
+msgstr "Plasmatis Dupli Tormentum"
 
 #: qcsrc/common/turrets/turret/tesla.qh:13
 #: qcsrc/common/turrets/turret/tesla_weapon.qh:7
 msgid "Tesla Coil"
-msgstr ""
+msgstr "Teslae Spira"
 
 #: qcsrc/common/turrets/turret/walker.qh:15
 msgid "Walker Turret"
@@ -5228,7 +5231,7 @@ msgstr "Pugna Modo Pugno"
 #: qcsrc/common/util.qc:260
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:192
 msgid "Piñata"
-msgstr ""
+msgstr "Referti Armis"
 
 #: qcsrc/common/util.qc:261
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:197
@@ -5675,7 +5678,7 @@ msgstr "Cursor"
 
 #: qcsrc/common/vehicles/vehicle/racer_weapon.qh:9
 msgid "Racer cannon"
-msgstr ""
+msgstr "Cursoris tormentum"
 
 #: qcsrc/common/vehicles/vehicle/raptor.qh:21
 msgid "Raptor"
@@ -5683,7 +5686,7 @@ msgstr "Raptor"
 
 #: qcsrc/common/vehicles/vehicle/raptor_weapons.qh:9
 msgid "Raptor cannon"
-msgstr ""
+msgstr "Raptoris tormentum"
 
 #: qcsrc/common/vehicles/vehicle/raptor_weapons.qh:17
 msgid "Raptor bomb"
@@ -6352,12 +6355,12 @@ msgstr "Missilia modo quibus tunc utitur videre"
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:24
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:46
 msgid "Noncurrent alpha:"
-msgstr ""
+msgstr "Traluciditas aliorum:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:28
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:50
 msgid "Noncurrent scale:"
-msgstr ""
+msgstr "Proportio aliorum:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:32
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
@@ -6505,15 +6508,15 @@ msgstr "Sanitatis/Armaturae Tabella"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.qc:16
 msgid "Info messages:"
-msgstr ""
+msgstr "Condicionum notae:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.qc:19
 msgid "Flip align"
-msgstr ""
+msgstr "Ad alterum latus"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.qh:6
 msgid "Info Messages Panel"
-msgstr ""
+msgstr "Condicionum Notarum Tabella"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:16
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:15
@@ -6565,31 +6568,31 @@ msgstr "Utilium Temporum Tabella"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qh:6
 msgid "Mod Icons Panel"
-msgstr ""
+msgstr "Mutationis Imaginum Tabella"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:17
 msgid "Notifications:"
-msgstr ""
+msgstr "Nuntia:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:20
 msgid "Also print notifications to the console"
-msgstr ""
+msgstr "Nuntia scribere in iussorum loco quoque"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:23
 msgid "Flip notify order"
-msgstr ""
+msgstr "Nuntiorum ordo inversa"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:26
 msgid "Entry lifetime:"
-msgstr ""
+msgstr "Scriptum manet tempus:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:30
 msgid "Entry fadetime:"
-msgstr ""
+msgstr "Scriptum evanescit tempus:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_notification.qh:6
 msgid "Notification Panel"
-msgstr ""
+msgstr "Nuntiorum Tabella"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:16
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:30
@@ -6642,15 +6645,15 @@ msgstr "Velocitas:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:38
 msgid "Include vertical speed"
-msgstr ""
+msgstr "Velocitatem erectam addere"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:49
 msgid "Show speed unit"
-msgstr ""
+msgstr "Velocitatis unitatem videre"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:52
 msgid "Top speed"
-msgstr ""
+msgstr "Velocitas summa"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:58
 msgid "Acceleration:"
@@ -6658,7 +6661,7 @@ msgstr "Acceleratio:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:59
 msgid "Include vertical acceleration"
-msgstr ""
+msgstr "Accelerationem erectam addere"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qh:6
 msgid "Physics Panel"
@@ -6693,7 +6696,7 @@ msgstr "Si spectas"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_pickup.qc:37
 msgid "Icon size scale:"
-msgstr ""
+msgstr "Imaginis proportio:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_pickup.qh:6
 msgid "Pickup Panel"
@@ -6710,7 +6713,7 @@ msgstr "Semper videre"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:23
 msgid "Forced aspect:"
-msgstr ""
+msgstr "Proportio postulata:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qh:6
 msgid "Pressed Keys Panel"
@@ -6743,15 +6746,15 @@ msgstr "Detectrum:"
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:124
 #: qcsrc/menu/xonotic/util.qc:784
 msgid "Alpha:"
-msgstr ""
+msgstr "Traluciditas"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:30
 msgid "Rotation:"
-msgstr ""
+msgstr "Rotatio:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:32
 msgid "Forward"
-msgstr ""
+msgstr "Directus"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:33
 msgid "West"
@@ -6771,7 +6774,7 @@ msgstr "Septentriones"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:40
 msgid "Scale:"
-msgstr ""
+msgstr "Proportio:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:44
 msgid "Zoom mode:"
@@ -6808,118 +6811,118 @@ msgstr "Gradus:"
 #: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:21
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:58
 msgid "Off"
-msgstr ""
+msgstr "Sine"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:22
 msgid "And me"
-msgstr ""
+msgstr "Mecum"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:23
 msgid "Pure"
-msgstr ""
+msgstr "Pura"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_score.qh:6
 msgid "Score Panel"
-msgstr ""
+msgstr "Rationum Tabella"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:38
 msgid "StrafeHUD mode:"
-msgstr ""
+msgstr "Motionis lateralis Notarum modus:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:41
 msgid "View angle centered"
-msgstr ""
+msgstr "Angulum videre centralem"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:42
 msgid "Velocity angle centered"
-msgstr ""
+msgstr "Velocitatis angulum videre centralem"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:45
 msgid "StrafeHUD style:"
-msgstr ""
+msgstr "Motionis lateralis Notarum facies:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:48
 msgid "no styling"
-msgstr ""
+msgstr "nulla facies"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:49
 msgid "progress bar"
-msgstr ""
+msgstr "linea progressus"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:50
 msgid "gradient"
-msgstr ""
+msgstr "gradiens"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:53
 msgid "Range:"
-msgstr ""
+msgstr "Intervallum:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:56
 msgid "Demo mode"
-msgstr ""
+msgstr "Demonstrationis modus"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:60
 msgid "Reset colors"
-msgstr ""
+msgstr "Colores reponere"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:64
 msgid "Strafe bar:"
-msgstr ""
+msgstr "Linea motionis lateralis:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:68
 msgid "Angle indicator:"
-msgstr ""
+msgstr "Angulum indicare:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:70
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:78
 msgid "Neutral:"
-msgstr ""
+msgstr "Non specialem"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:72
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:80
 msgid "Good:"
-msgstr ""
+msgstr "Bonum"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:74
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:82
 msgid "Overturn:"
-msgstr ""
+msgstr "Ad inversionem:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:109
 msgid "Switch indicator:"
-msgstr ""
+msgstr "Inversionem indicare:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qc:113
 msgid "Best angle indicator:"
-msgstr ""
+msgstr "Angulum optimum indicare:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_strafehud.qh:6
 msgid "StrafeHUD Panel"
-msgstr ""
+msgstr "Motionis lateralis Notarum Tabella"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_timer.qc:17
 msgid "Timer:"
-msgstr ""
+msgstr "Tempus numeratum:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_timer.qc:20
 msgid "Show elapsed time"
-msgstr ""
+msgstr "Tempus quod transivit videre"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_timer.qc:23
 msgid "Secondary timer:"
-msgstr ""
+msgstr "Tempus secundarium:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_timer.qc:27
 msgid "Swapped"
-msgstr ""
+msgstr "Commutata"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_timer.qh:6
 msgid "Timer Panel"
-msgstr ""
+msgstr "Temporum Tabella"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_vote.qc:17
 msgid "Alpha after voting:"
-msgstr ""
+msgstr "Traluciditas post suffragium:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_vote.qh:6
 msgid "Vote Panel"
@@ -6940,11 +6943,11 @@ msgstr "Quomodo evanescit:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:33
 msgid "EF^None"
-msgstr ""
+msgstr "Nullus"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:34
 msgid "Alpha"
-msgstr ""
+msgstr "Tralucidus"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:35
 msgid "Slide"
@@ -6952,7 +6955,7 @@ msgstr "Labitur"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:36
 msgid "EF^Both"
-msgstr ""
+msgstr "Ambo"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:40
 msgid "Weapon icons:"
@@ -6980,7 +6983,7 @@ msgstr "Clavis"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:60
 msgid "Weapon ID scale:"
-msgstr ""
+msgstr "Proportio Nominis:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:66
 msgid "Show Accuracy"
@@ -6992,7 +6995,7 @@ msgstr "Missilia Videre"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:70
 msgid "Ammo bar alpha:"
-msgstr ""
+msgstr "Missilium tabellae traluciditas:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:76
 msgid "Ammo bar color:"
@@ -7004,7 +7007,7 @@ msgstr "Armorum Tabella"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:19
 msgid "HUD skins"
-msgstr ""
+msgstr "Facies Notarum Superpositarum"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:22
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:179
@@ -7013,31 +7016,31 @@ msgstr ""
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:25
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:33
 msgid "Filter:"
-msgstr ""
+msgstr "Electe scribere:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:30
 #: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:59
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:49
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:43
 msgid "Refresh"
-msgstr ""
+msgstr "Iterum scribere:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:33
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:28
 msgid "Set skin"
-msgstr ""
+msgstr "Faciem eligere"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:37
 msgid "Save current skin"
-msgstr ""
+msgstr "Hanc faciem servare"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:46
 msgid "Panel background defaults:"
-msgstr ""
+msgstr "Tabellae imago supposita ordinaria:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:48 qcsrc/menu/xonotic/util.qc:759
 msgid "Background:"
-msgstr ""
+msgstr "Imago supposita:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:60 qcsrc/menu/xonotic/util.qc:775
 msgid "Border size:"
@@ -7050,11 +7053,11 @@ msgstr "Manus color:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:83 qcsrc/menu/xonotic/util.qc:801
 msgid "Test team color in configure mode"
-msgstr ""
+msgstr "Manus colorem exemplarem in optionibus inspicere"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:86 qcsrc/menu/xonotic/util.qc:804
 msgid "Padding:"
-msgstr ""
+msgstr "Margo:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:93
 msgid "HUD Dock:"
@@ -7111,11 +7114,11 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:148
 msgid "Exit setup"
-msgstr ""
+msgstr "Finire optiones"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qh:6
 msgid "Panel HUD Setup"
-msgstr ""
+msgstr "Mutare Notarum Superpositarum Tabellam"
 
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:13
 msgid "Monster:"
@@ -7641,43 +7644,43 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:159
 msgid "N/A (auth library missing, can't connect)"
-msgstr ""
+msgstr "N/A (sine bibliotheca auth, conectere non potest)"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:161
 msgid "N/A (auth library missing)"
-msgstr ""
+msgstr "N/A (sine bibliotheca auth)"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:167
 msgid "Not supported (can't connect)"
-msgstr ""
+msgstr "Non capax (conectere non potest)"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:169
 msgid "Not supported (won't encrypt)"
-msgstr ""
+msgstr "Non capax (non cryptographabit)"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:173
 msgid "Supported (will encrypt)"
-msgstr ""
+msgstr "Capax (cryptographabit)"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:175
 msgid "Supported (won't encrypt)"
-msgstr ""
+msgstr "Capax (non cryptographabit)"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:179
 msgid "Requested (will encrypt)"
-msgstr ""
+msgstr "Rogatur (cryptographabit)"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:181
 msgid "Requested (won't encrypt)"
-msgstr ""
+msgstr "Rogatur (non cryptographabit)"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:185
 msgid "Required (can't connect)"
-msgstr ""
+msgstr "Postulatur (conectere non potest)"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:187
 msgid "Required (will encrypt)"
-msgstr ""
+msgstr "Postulatur (cryptographabit)"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:191
 msgid "Use the `crypto_aeslevel` cvar to change your preferences"
@@ -7686,17 +7689,17 @@ msgstr ""
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:203
 #: qcsrc/menu/xonotic/serverlist.qc:1059
 msgid "custom stats server"
-msgstr ""
+msgstr "stat. moderatrum speciale"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:203
 #: qcsrc/menu/xonotic/serverlist.qc:1059
 msgid "stats disabled"
-msgstr ""
+msgstr "sine stat."
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:203
 #: qcsrc/menu/xonotic/serverlist.qc:1059
 msgid "stats enabled"
-msgstr ""
+msgstr "cum stat."
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:213
 msgid "Status"
@@ -7751,15 +7754,15 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfotab.qc:91
 msgid "Key:"
-msgstr ""
+msgstr "Clavis:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfotab.qc:96
 msgid "Stats:"
-msgstr ""
+msgstr "Stats:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfotab.qh:6
 msgid "Server Information"
-msgstr ""
+msgstr "Moderatri Notae"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media.qc:25
 msgid "Demos"
@@ -7789,16 +7792,16 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:62
 msgid "DEMO^Play"
-msgstr ""
+msgstr "Demonstrare"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:13
 msgid "Playing a demo will disconnect you from the current match."
-msgstr ""
+msgstr "Si demonstrationem videre vis, hunc ludum linques."
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:15
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qc:15
 msgid "Do you really wish to disconnect now?"
-msgstr ""
+msgstr "Certumne est tibi ludum linquere?"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qh:6
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qh:6
@@ -7807,59 +7810,59 @@ msgstr "Dinectere"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qc:13
 msgid "Timing a demo will disconnect you from the current match."
-msgstr ""
+msgstr "Si demonstrationis tempus computare vis, hunc ludum linques."
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:37
 msgid "MUSICPL^Add"
-msgstr ""
+msgstr "Addere"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:40
 msgid "MUSICPL^Add all"
-msgstr ""
+msgstr "Omnes addere"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:44
 msgid "Set as menu track"
-msgstr ""
+msgstr "Indicis cantum eligere"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:48
 msgid "Reset default menu track"
-msgstr ""
+msgstr "Indicis cantum ordinarium reponere"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:54
 msgid "Playlist:"
-msgstr ""
+msgstr "Series cantuum:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:55
 msgid "Random order"
-msgstr ""
+msgstr "Ordo mixta"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:60
 msgid "MUSICPL^Stop"
-msgstr ""
+msgstr "Finire"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:63
 msgid "MUSICPL^Play"
-msgstr ""
+msgstr "Canere"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:66
 msgid "MUSICPL^Pause"
-msgstr ""
+msgstr "Intermittere"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:69
 msgid "MUSICPL^Prev"
-msgstr ""
+msgstr "Anterior"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:72
 msgid "MUSICPL^Next"
-msgstr ""
+msgstr "Posterior"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:76
 msgid "MUSICPL^Remove"
-msgstr ""
+msgstr "Removere"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:79
 msgid "MUSICPL^Remove all"
-msgstr ""
+msgstr "Omnes removere"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:41
 msgid "Auto screenshot scoreboard"
@@ -7932,107 +7935,107 @@ msgstr "Linguam elige..."
 
 #: qcsrc/menu/xonotic/dialog_quit.qc:12
 msgid "Are you sure you want to quit?"
-msgstr ""
+msgstr "Certumne est tibi linquere?"
 
 #: qcsrc/menu/xonotic/dialog_quit.qh:7
 msgid "Quit the game"
-msgstr ""
+msgstr "Ludum linquere"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:15
 msgid "Model:"
-msgstr ""
+msgstr "Forma:"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:21
 msgid "Remove *"
-msgstr ""
+msgstr "* Removere"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:23
 msgid "Copy *"
-msgstr ""
+msgstr "* Transcribere"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:24
 msgid "Paste"
-msgstr ""
+msgstr "Hic Transcribere"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:26
 msgid "Bone:"
-msgstr ""
+msgstr "Ossa:"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:31
 msgid "Set * as child"
-msgstr ""
+msgstr "Quasi * filius"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:32
 msgid "Attach to *"
-msgstr ""
+msgstr "In * Adhaerere"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:34
 msgid "Detach from *"
-msgstr ""
+msgstr "Ab * Solvere"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:37
 msgid "Visual object properties for *:"
-msgstr ""
+msgstr "Proprietates Visibiles *:"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:41
 msgid "Set alpha:"
-msgstr ""
+msgstr "Traluciditas:"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:44
 msgid "Set color main:"
-msgstr ""
+msgstr "Color primarius:"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:46
 msgid "Set color glow:"
-msgstr ""
+msgstr "Color lucens:"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:50
 msgid "Set frame:"
-msgstr ""
+msgstr "Quadrum:"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:54
 msgid "Physical object properties for *:"
-msgstr ""
+msgstr "Proprietates physicae *:"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:56
 msgid "Set material:"
-msgstr ""
+msgstr "Materia:"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:62
 msgid "Set solidity:"
-msgstr ""
+msgstr "Soliditas:"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:63
 msgid "Non-solid"
-msgstr ""
+msgstr "Non solidum"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:64
 msgid "Solid"
-msgstr ""
+msgstr "Solidum"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:65
 msgid "Set physics:"
-msgstr ""
+msgstr "Physica:"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:66
 msgid "Static"
-msgstr ""
+msgstr "Stans"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:67
 msgid "Movable"
-msgstr ""
+msgstr "Mobile"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:68
 msgid "Physical"
-msgstr ""
+msgstr "Physica"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:70
 msgid "Set scale:"
-msgstr ""
+msgstr "Proportio:"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:72
 msgid "Set force:"
-msgstr ""
+msgstr "Vis:"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:76
 msgid "Claim *"
@@ -8052,43 +8055,43 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:81
 msgid "Show help"
-msgstr ""
+msgstr "Explanationes legere"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:82
 msgid "* is the object you are facing"
-msgstr ""
+msgstr "* est id quod ante te est"
 
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qh:6
 msgid "Sandbox Tools"
-msgstr ""
+msgstr "Probationis Utensilia"
 
 #: qcsrc/menu/xonotic/dialog_settings.qc:18
 msgid "Video"
-msgstr ""
+msgstr "Imagines"
 
 #: qcsrc/menu/xonotic/dialog_settings.qc:19
 msgid "Effects"
-msgstr ""
+msgstr "Subtilitas Graphica"
 
 #: qcsrc/menu/xonotic/dialog_settings.qc:20
 msgid "Audio"
-msgstr ""
+msgstr "Soni"
 
 #: qcsrc/menu/xonotic/dialog_settings.qc:22
 msgid "Game"
-msgstr ""
+msgstr "Ludus"
 
 #: qcsrc/menu/xonotic/dialog_settings.qc:24
 msgid "User"
-msgstr ""
+msgstr "Utens"
 
 #: qcsrc/menu/xonotic/dialog_settings.qc:25 qcsrc/menu/xonotic/keybinder.qc:121
 msgid "Misc"
-msgstr ""
+msgstr "Alia"
 
 #: qcsrc/menu/xonotic/dialog_settings.qh:8
 msgid "Change the game settings"
-msgstr ""
+msgstr "Ludi optiones optare"
 
 #: qcsrc/menu/xonotic/dialog_settings_audio.qc:30
 msgid "Master:"
@@ -8280,11 +8283,11 @@ msgstr "Quidam sonus fit cum indicem cliccas"
 
 #: qcsrc/menu/xonotic/dialog_settings_audio.qc:163
 msgid "Focus sounds"
-msgstr ""
+msgstr "Attentionis soni"
 
 #: qcsrc/menu/xonotic/dialog_settings_audio.qc:164
 msgid "Play sounds when hovering over menu items too"
-msgstr ""
+msgstr "Quidam sonus fit cum indicem transis"
 
 #: qcsrc/menu/xonotic/dialog_settings_audio.qc:168
 msgid "Time announcer:"
@@ -8454,7 +8457,7 @@ msgstr "Optima"
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:115
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:120
 msgid "Avoid lossy texture compression"
-msgstr ""
+msgstr "Cum texturae memoria computatralis breviatur, subtilitas servanda est"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:129
 msgid "Disable sky for performance and visibility"
@@ -8499,11 +8502,11 @@ msgstr "Illuminatio in singulos quadri laterculos"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:142
 msgid "Gloss"
-msgstr ""
+msgstr "Superficies illustres"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:143
 msgid "Enable the use of glossmaps on textures supporting it"
-msgstr ""
+msgstr "Illustrationum tabulis utitur in texturis quae eas contineant"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:146
 msgid "Offset mapping"
@@ -8519,12 +8522,13 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:149
 msgid "Relief mapping"
-msgstr ""
+msgstr "Anaglyptorum tabulae"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:150
 msgid ""
 "Higher quality offset mapping, which also has a huge impact on performance"
 msgstr ""
+"Subtiliorum tuberum tabulae, et si eis utitur, computatrum minus velox erit"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:153
 msgid "Reflections:"
@@ -8556,32 +8560,32 @@ msgstr "Clara"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:164
 msgid "Decals"
-msgstr ""
+msgstr "Sigilla"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:165
 msgid "Enable decals (bullet holes and blood)"
-msgstr ""
+msgstr "Sigilla pinguntur (picturae missilium perforantium sanguinumque)"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:166
 msgid "Decals on models"
-msgstr ""
+msgstr "Sigilla in formis"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:170
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:251
 msgid "Distance:"
-msgstr ""
+msgstr "Distantia:"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:173
 msgid "Decals further away than this will not be drawn"
-msgstr ""
+msgstr "Sigilla quae distant plus quam hanc mensuram non pinguntur"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:177
 msgid "Time:"
-msgstr ""
+msgstr "Tempus:"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:180
 msgid "Time in seconds before decals fade away"
-msgstr ""
+msgstr "Numerus secundorum, post quae evanescunt sigilla"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:184
 msgid "Damage effects:"
@@ -8664,27 +8668,31 @@ msgstr "Luces coronales evanescunt secundum res quae videntur"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:218
 msgid "Corona fading using occlusion queries"
-msgstr ""
+msgstr "Luces coronales evanescunt secundum inquisitionem occludentium"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:222
 msgid "Bloom"
-msgstr ""
+msgstr "Illuminatio finitima"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:223
 msgid ""
 "Enable bloom effect, which brightens the neighboring pixels of very bright "
 "pixels. Has a big impact on performance."
 msgstr ""
+"Illuminantur laterculi qui adiacent ad alios laterculos iam "
+"illuminatissimos. Itaque computatrum minus velox erit."
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:224
 msgid "Extra postprocessing effects"
-msgstr ""
+msgstr "Plura artificia"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:225
 msgid ""
 "Enables special postprocessing effects for when damaged or under water or "
 "using a powerup"
 msgstr ""
+"Plura artificia efficiuntur, e.g., picturae vulnerationis vel summersionis "
+"vel potestatis"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:230
 msgid "Motion blur strength - 0.4 recommended"
@@ -8696,19 +8704,20 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:237
 msgid "Particles"
-msgstr ""
+msgstr "Particulae"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:238
 msgid "Spawnpoint effects"
-msgstr ""
+msgstr "Picturae parvae in loco ubi nascitur"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:239
 msgid "Particles effects at all spawn points and whenever a player spawns"
 msgstr ""
+"Particulae pinguntur in loco ubi nascitur et in ludentibus qui nascuntur"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:244
 msgid "Quality:"
-msgstr ""
+msgstr "Subtilitas:"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:247
 #: qcsrc/menu/xonotic/slider_particles.qc:13
@@ -8716,47 +8725,51 @@ msgid ""
 "Multiplier for amount of particles. Less means less particles, which in turn "
 "gives for better performance"
 msgstr ""
+"Cum quo multiplicare numerum particularum. Si multiplicandus parvus est, "
+"erunt paucae particulae, atque computatrum velocius erit"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:254
 msgid "Particles further away than this will not be drawn"
-msgstr ""
+msgstr "Particulae quae distant plus quam hanc mensuram non pinguntur"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:31
 msgid "No crosshair"
-msgstr ""
+msgstr "Sine reticulo"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:33
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:62
 msgid "Per weapon"
-msgstr ""
+msgstr "Armorum singula"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:34
 msgid ""
 "Set a different crosshair for each weapon, good if you play without weapon "
 "models"
 msgstr ""
+"Arma singula reticula distincta habent, quod prudens est si arma tua non "
+"vides"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:48
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:81
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:97
 msgid "Size:"
-msgstr ""
+msgstr "Magnitudo:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:64
 msgid "By health"
-msgstr ""
+msgstr "Secundum sanitatem"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:76
 msgid "Use rings to indicate weapon status"
-msgstr ""
+msgstr "Anelli condiciones armorum indicant"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:93
 msgid "Enable center crosshair dot"
-msgstr ""
+msgstr "Reticuli punctum medium videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:111
 msgid "Use normal crosshair color"
-msgstr ""
+msgstr "Reticuli color ordinarius"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:122
 msgid "Smooth effects of crosshairs"
@@ -8764,78 +8777,81 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:125
 msgid "Perform hit tests for the crosshair"
-msgstr ""
+msgstr "Indicare in reticulo cum arma sunt examussim ad hostem"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:129
 msgid "Blur if obstructed by an obstacle"
-msgstr ""
+msgstr "Offuscare cum arma obstantur"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:133
 msgid "Blur if obstructed by a teammate"
-msgstr ""
+msgstr "Offuscare cum arma sunt ad collegam"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:137
 msgid "Shrink if obstructed by a teammate"
-msgstr ""
+msgstr "Minuere cum arma sunt ad collegam"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:140
 msgid "Animate crosshair when hitting an enemy"
-msgstr ""
+msgstr "Movere reticulum cum hostis vulneratur"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:143
 msgid "Animate crosshair when picking up an item"
-msgstr ""
+msgstr "Movere reticulum cum res colligitur"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qh:7
 msgid "Crosshair"
-msgstr ""
+msgstr "Reticulum"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:43
 msgid "Scoreboard"
-msgstr ""
+msgstr "Rationarium"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:48
 msgid "Fading speed:"
-msgstr ""
+msgstr "Quam celeriter evanescit:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:51
 msgid "Enable rows / columns highlighting"
-msgstr ""
+msgstr "Versus/columnas illuminatas videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:53
 msgid "Show accuracy underneath scoreboard"
-msgstr ""
+msgstr "Accuratiam sub rationario videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:55
 msgid "Show team sizes:"
-msgstr ""
+msgstr "Manuum magnitudines videre:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:56
 msgid ""
 "Team size position: Off=do not show; Left=on the left side of the scoreboard "
 "and move team scores to the right; Right=on the right of the scoreboard"
 msgstr ""
+"Ubi manuum magnitudines scribantur: Sine=non scribuntur; Sinistrum=in latere "
+"sinistro rationarii, et manuum rationes in dextro; Dextrum=in latere dextro "
+"rationarii"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:64
 msgid "Waypoints"
-msgstr ""
+msgstr "Loci indicati"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:66
 msgid "Display waypoint markers for objectives on the map"
-msgstr ""
+msgstr "Locos indicatos in metis harenae videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:67
 msgid "Show various gametype specific waypoints"
-msgstr ""
+msgstr "Locos indicatos proprios modi videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:73
 msgid "Control transparency of the waypoints"
-msgstr ""
+msgstr "Locorum indicatorum traluciditas"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:77
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:130
 msgid "Font size:"
-msgstr ""
+msgstr "Litterae magnitudo:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:83
 msgid "Edge offset:"
@@ -8843,15 +8859,15 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:91
 msgid "Fade when near the crosshair"
-msgstr ""
+msgstr "Evanescit si circum reticulum"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:95
 msgid "Display names instead of icons"
-msgstr ""
+msgstr "Nomina non imagines videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:100
 msgid "Damage"
-msgstr ""
+msgstr "Vulnus"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:102
 msgid "Overlay:"
@@ -8867,11 +8883,11 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:118
 msgid "Player Names"
-msgstr ""
+msgstr "Ludentium Nomina"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:120
 msgid "Show names above players"
-msgstr ""
+msgstr "Nomina super ludentes videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:136
 msgid "Max distance:"
@@ -8884,116 +8900,117 @@ msgstr ""
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:146
 #: qcsrc/menu/xonotic/keybinder.qc:115
 msgid "Teamplay"
-msgstr ""
+msgstr "Manus ludus"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:154
 msgid "Only when near crosshair"
-msgstr ""
+msgstr "Prope reticulum modo"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:158
 msgid "Display health and armor"
-msgstr ""
+msgstr "Sanitatem armaturamque videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:163
 msgid "Speed unit:"
-msgstr ""
+msgstr "Velocitatis unitas:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:172
 msgid "Damage overlay:"
-msgstr ""
+msgstr "Vulnera superposita:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:175
 msgid "Dynamic HUD"
-msgstr ""
+msgstr "Mobiles Notae Superpositae"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:176
 msgid "HUD moves around following player's movement"
-msgstr ""
+msgstr "Notae Superpositae moventur quasi cum ludente ambulet"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:178
 msgid "Shake the HUD when hurt"
-msgstr ""
+msgstr "Notae Superpositae vibrantur cum vulneraris"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:182
 #: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qh:6
 msgid "Enter HUD editor"
-msgstr ""
+msgstr "Notarum Superpositarum optiones videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qh:7
 msgid "HUD"
-msgstr ""
+msgstr "Notae Superpositae"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qc:21
 msgid "In order for the HUD editor to show, you must first be in game."
 msgstr ""
+"Si Notarum Superpositarum optiones videre vis, necesse est ludus incipi."
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qc:23
 msgid "Do you wish to start a local game to set up the HUD?"
-msgstr ""
+msgstr "Visne incipi ludum localem ut videas Notarum Superpositarum optiones?"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:24
 msgid "Frag Information"
-msgstr ""
+msgstr "Caedium Notae"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:26
 msgid "Display information about killing sprees"
-msgstr ""
+msgstr "De caedium seriebus notas videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:29
 msgid "Only display sprees if they are achievements"
-msgstr ""
+msgstr "Caedium series videre modo si insignes sunt"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:34
 msgid "Show spree information in centerprints"
-msgstr ""
+msgstr "Caedium series scriptae in media parte"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:38
 msgid "Show spree information in death messages"
-msgstr ""
+msgstr "Caedium series scriptae in mortuorum notis"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:43
 msgid "Sprees in info messages:"
-msgstr ""
+msgstr "Caedium series in condicionum notis:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:46
 msgid "SPREES^Disabled"
-msgstr ""
+msgstr "Sine"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:47
 msgid "Target"
-msgstr ""
+msgstr "Vulnerati"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:48
 msgid "Attacker"
-msgstr ""
+msgstr "Vulnerans"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:49
 msgid "SPREES^Both"
-msgstr ""
+msgstr "Ambo"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:55
 msgid "Print on a seperate line"
-msgstr ""
+msgstr "In alio versu scribere"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:58
 msgid "Add extra frag information to centerprint when available"
-msgstr ""
+msgstr "Plures notas de caedibus in scripto medio scribere si dicuntur"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:62
 msgid "Add frag location to death messages when available"
-msgstr ""
+msgstr "Locos caedium in mortuorum notis scribere si dicuntur"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:65
 msgid "Gamemode Settings"
-msgstr ""
+msgstr "Ludi Modi Optiones"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:67
 msgid "Display capture times in Capture The Flag"
-msgstr ""
+msgstr "In Vexilli Captu tempora captuum videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:71
 msgid "Display name of flag stealer in Capture The Flag"
-msgstr ""
+msgstr "In Vexilli Captu nomen eius qui vexillum rapuit videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:76
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:92
@@ -9003,218 +9020,221 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:78
 msgid "Display console messages in the top left corner"
-msgstr ""
+msgstr "Iussorum loci notas videre in angulo supero sinistro"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:80
 msgid "Display all info messages in the chatbox"
-msgstr ""
+msgstr "Omnes condicionum notas in locutorii loco videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:82
 msgid "Display player statuses in the chatbox"
-msgstr ""
+msgstr "Ludentium condiciones in locutorii loco videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:86
 msgid "Powerup notifications"
-msgstr ""
+msgstr "Potestatium nuntia"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:89
 msgid "Weapon centerprint notifications"
-msgstr ""
+msgstr "Armorum nuntia in scripto medio"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:92
 msgid "Weapon info message notifications"
-msgstr ""
+msgstr "Armorum nuntia in condicionum notis"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:96
 msgid "Announcers"
-msgstr ""
+msgstr "Nuntiatores"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:98
 msgid "Respawn countdown sounds"
-msgstr ""
+msgstr "Soni numerationis regrendientis cum renascitur"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:101
 msgid "Killstreak sounds"
-msgstr ""
+msgstr "Soni seriei caedium"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:104
 msgid "Achievement sounds"
-msgstr ""
+msgstr "Rerum insignium soni"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qh:7
 msgid "Messages"
-msgstr ""
+msgstr "Notae"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:30
 msgid "Items"
-msgstr ""
+msgstr "Utilia"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:32
 msgid "Use simple 2D images instead of item models"
-msgstr ""
+msgstr "Imagines planas non formas solidas videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:34
 msgid "Unavailable alpha:"
-msgstr ""
+msgstr "Traluciditas si absens:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:37
 msgid "Unavailable color:"
-msgstr ""
+msgstr "Color si absens:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:39
 msgid "GHOITEMS^Black"
-msgstr ""
+msgstr "Niger"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:40
 msgid "GHOITEMS^Dark"
-msgstr ""
+msgstr "Fuscus"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:41
 msgid "GHOITEMS^Tinted"
-msgstr ""
+msgstr "Tinctus"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:42
 msgid "GHOITEMS^Normal"
-msgstr ""
+msgstr "Ordinarius"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:43
 msgid "GHOITEMS^Blue"
-msgstr ""
+msgstr "Caeruleus"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:49
 #: qcsrc/menu/xonotic/serverlist.qc:758
 msgid "Players"
-msgstr ""
+msgstr "Lusores"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:51
 msgid "Force player models to mine"
-msgstr ""
+msgstr "Ludentium formae aequales meae"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:53
 msgid "Force player colors to mine"
-msgstr ""
+msgstr "Ludentium colores aequales meo"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:55
 msgid ""
 "Warning: if enabled in team games your team's color may be the same as the "
 "enemy team"
 msgstr ""
+"NB: si in manus ludis hoc optas, forte non distinguuntur coloribus manus tua "
+"et manus hostium"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:57
 msgid "Except in team games"
-msgstr ""
+msgstr "Sed non manus ludis"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:58
 msgid "Only in Duel"
-msgstr ""
+msgstr "Duello modo"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:59
 msgid "Only in team games"
-msgstr ""
+msgstr "Manus ludis modo"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:60
 msgid "In team games and Duel"
-msgstr ""
+msgstr "Manus ludis et duello"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:64
 msgid "Body fading:"
-msgstr ""
+msgstr "Evanescunt corpora:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:67
 msgid "Gibs:"
-msgstr ""
+msgstr "Intestina:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:69
 msgid "GIBS^None"
-msgstr ""
+msgstr "Nulla"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:70
 msgid "GIBS^Few"
-msgstr ""
+msgstr "Pauca"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:71
 msgid "GIBS^Many"
-msgstr ""
+msgstr "Multa"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:72
 msgid "GIBS^Lots"
-msgstr ""
+msgstr "Plures"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qh:7
 msgid "Models"
-msgstr ""
+msgstr "Formae"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qh:8
 msgid "Customize how players and items are displayed in game"
-msgstr ""
+msgstr "Eligere formas imaginesque quas ludentes et utilia habeant"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:26
 msgid "1st person perspective"
-msgstr ""
+msgstr "1ae personae visio"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:29
 msgid "Slide to third person upon death"
-msgstr ""
+msgstr "Ad 3ae personae visionem labitur cum moreris"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:33
 msgid "Smooth the view when landing from a jump"
-msgstr ""
+msgstr "Mollitur visio cum solum tangis"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:37
 msgid "Smooth the view while crouching"
-msgstr ""
+msgstr "Mollitur visio cum subsidis"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:41
 msgid "View waving while idle"
-msgstr ""
+msgstr "Oscillatur visio cum quiescis"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:45
 msgid "View bobbing while walking around"
-msgstr ""
+msgstr "Undat visio cum ambulas"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:50
 msgid "3rd person perspective"
-msgstr ""
+msgstr "3ae personae visio"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:53
 msgid "Back distance"
-msgstr ""
+msgstr "Distantia ad dorsum"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:59
 msgid "Up distance"
-msgstr ""
+msgstr "Distantia superior"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:65
 msgid "Allow passing through walls while spectating"
-msgstr ""
+msgstr "Parietes transis dum spectas"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:69
 msgid "Field of view:"
-msgstr ""
+msgstr "Visionis intervallum:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:71
 msgid "Field of vision in degrees"
-msgstr ""
+msgstr "Quantum intervallum angulare visibile"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:75
 msgid "ZOOM^Zoom factor:"
-msgstr ""
+msgstr "Amplificationis multiplicandus:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:77
 msgid "How big the zoom factor is when the zoom button is pressed"
-msgstr ""
+msgstr "Cum quo numero multiplicare amplificationem cum clavis premitur"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:80
 msgid "ZOOM^Zoom speed:"
-msgstr ""
+msgstr "Amplificationis celeritas:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:82
 msgid "How fast the view will be zoomed, disable to zoom instantly"
 msgstr ""
+"Quam celeriter fiat amplificatio, nullam elige ut amplificatio statim fiat"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:91
 msgid "ZOOM^Instant"
-msgstr ""
+msgstr "Statim"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:95
 msgid "ZOOM^Zoom sensitivity:"
@@ -9240,32 +9260,32 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:112
 msgid "Display reticle 2D overlay while zooming"
-msgstr ""
+msgstr "Reticulum superpositum videre cum amplificatur"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:115
 msgid "Release zoom when you die or respawn"
-msgstr ""
+msgstr "Amplificationem removere cum moreris vel renasceris"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:119
 msgid "Release zoom when you switch weapons"
-msgstr ""
+msgstr "Amplificationem removere cum arma permutas"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qh:7
 #: qcsrc/menu/xonotic/keybinder.qc:86
 msgid "View"
-msgstr ""
+msgstr "Visio"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:33
 msgid "Weapon Priority List (* = mutator weapon)"
-msgstr ""
+msgstr "Ordo armorum Praecedentia (* = mutationis arma)"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:39
 msgid "Up"
-msgstr ""
+msgstr "Sursum"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:43
 msgid "Down"
-msgstr ""
+msgstr "Deorsum"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:49
 msgid "Use priority list for weapon cycling"
@@ -9296,58 +9316,58 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:63
 msgid "Draw 1st person weapon model"
-msgstr ""
+msgstr "1ae persona armorum formam pingere"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:64
 msgid "Draw the weapon model"
-msgstr ""
+msgstr "Armorum formam pingere"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:68
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:71
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:74
 msgid "Position of the weapon model; requires reconnect"
-msgstr ""
+msgstr "Latus in quo armorum forma sit; conectere iterum necesse"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:77
 msgid "Weapon model opacity:"
-msgstr ""
+msgstr "Armorum formae traluciditas:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:91
 msgid "Gun model swaying"
-msgstr ""
+msgstr "Armorum forma pendula"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:96
 msgid "Gun model bobbing"
-msgstr ""
+msgstr "Armorum forma undans"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qh:7
 #: qcsrc/menu/xonotic/keybinder.qc:54
 msgid "Weapons"
-msgstr ""
+msgstr "Arma"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:34
 msgid "Key Bindings"
-msgstr ""
+msgstr "Claves electae"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:38
 msgid "Change key..."
-msgstr ""
+msgstr "Alia clavis..."
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:42
 msgid "Edit..."
-msgstr ""
+msgstr "Scribere..."
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:48
 msgid "Clear"
-msgstr ""
+msgstr "Oblivisci"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:53
 msgid "Reset all"
-msgstr ""
+msgstr "Omnes reponere"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:58
 msgid "Mouse"
-msgstr ""
+msgstr "Mus"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:60
 msgid "Sensitivity:"
@@ -9401,23 +9421,23 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:97
 msgid "Automatically repeat jumping if holding jump"
-msgstr ""
+msgstr "Saltus iterare cum clavis 'salire' pressa tenetur"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:100
 msgid "Jetpack on jump:"
-msgstr ""
+msgstr "Sarcina volatilis in 'salire'"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:102
 msgid "JPJUMP^Disabled"
-msgstr ""
+msgstr "Sine"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:103
 msgid "Air only"
-msgstr ""
+msgstr "In aere modo"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:104
 msgid "JPJUMP^All"
-msgstr ""
+msgstr "Semper"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:110
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:115
@@ -9427,11 +9447,11 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:31
 msgid "Command when pressed:"
-msgstr ""
+msgstr "Iussum cum premitur:"
 
 #: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:34
 msgid "Command when released:"
-msgstr ""
+msgstr "Iussum cum solvitur:"
 
 #: qcsrc/menu/xonotic/dialog_settings_input_userbind.qc:40
 msgid "Cancel"
@@ -9439,87 +9459,87 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_input_userbind.qh:7
 msgid "User defined key bind"
-msgstr ""
+msgstr "Clavis pro creato ab utente"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:12
 #, c-format
 msgid "%d fps"
-msgstr ""
+msgstr "%d qis"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:13
 #, c-format
 msgid "%d KiB/s"
-msgstr ""
+msgstr "%d KiB/s"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:14
 #, c-format
 msgid "%d MiB/s"
-msgstr ""
+msgstr "%d MiB/s"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:31
 msgid "Network"
-msgstr ""
+msgstr "Interrete"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:33
 msgid "Show netgraph"
-msgstr ""
+msgstr "Retis graphicum videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:34
 msgid "Show a graph of packet sizes and other information"
-msgstr ""
+msgstr "In graphico magnitudines litterarum interretialium scribere et alia"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:36
 msgid "Packet loss compensation"
-msgstr ""
+msgstr "Compensare perditas litteras interretiales"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:37
 msgid "Each packet includes a copy of the previous message"
-msgstr ""
+msgstr "Quaeque litterae transcribunt litteras anteriores quoque"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:39
 msgid "Movement prediction error compensation"
-msgstr ""
+msgstr "Compensare motiones vitiose praedictas"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:43
 msgid "Use encryption (AES) when available"
-msgstr ""
+msgstr "Cryptographia (AES) uti si accipitur"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:46
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:68
 msgid "Bandwidth limit:"
-msgstr ""
+msgstr "Nexionis interretialis velocitas maxima"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:48
 msgid "Specify your network speed"
-msgstr ""
+msgstr "Scribe velocitatem nexionis tuae"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:49
 msgid "Slow ADSL"
-msgstr ""
+msgstr "ADSL lenta"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:50
 msgid "Fast ADSL"
-msgstr ""
+msgstr "ADSL velox"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:51
 msgid "Broadband"
-msgstr ""
+msgstr "Taenia lata"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:57
 msgid "Local latency:"
-msgstr ""
+msgstr "Mora nexionis localis"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:62
 msgid "HTTP downloads"
-msgstr ""
+msgstr "Acceptiones interretiales per HTTP"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:64
 msgid "Simultaneous:"
-msgstr ""
+msgstr "Simul:"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:66
 msgid "Maximum number of concurrent HTTP downloads"
-msgstr ""
+msgstr "Numerus maximus acceptionum coniunctarum per HTTP"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:82
 msgid "Framerate"
@@ -9531,31 +9551,31 @@ msgstr "Numerum quadrorum in secundum videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:85
 msgid "Show your rendered frames per second"
-msgstr ""
+msgstr "Numerum tuum quadrorum pictorum in secundum videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:87
 msgid "Maximum:"
-msgstr ""
+msgstr "Maximus"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:96
 msgid "MAXFPS^Unlimited"
-msgstr ""
+msgstr "Infinitus"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:99
 msgid "Target:"
-msgstr ""
+msgstr "Quaesitus:"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:101
 msgid "TRGT^Disabled"
-msgstr ""
+msgstr "Sine"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:112
 msgid "Idle limit:"
-msgstr ""
+msgstr "Numerus si otiosus"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:118
 msgid "IDLFPS^Unlimited"
-msgstr ""
+msgstr "Infinitus"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:124
 msgid "Menu tooltips:"
@@ -9581,11 +9601,11 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:132
 msgid "Show current date and time"
-msgstr ""
+msgstr "Diem et horam videre"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:133
 msgid "Show current date and time of day, useful on screenshots"
-msgstr ""
+msgstr "Diem et horam videre, id quod est prudens in photographiis servatis"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:136
 msgid "Enable developer mode"
@@ -9593,7 +9613,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:141
 msgid "Advanced settings..."
-msgstr ""
+msgstr "Optiones involutae..."
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:142
 msgid "Advanced settings where you can tweak every single variable of the game"
@@ -9614,7 +9634,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:45
 msgid "Setting:"
-msgstr ""
+msgstr "Optio:"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:49
 msgid "Type:"
@@ -9626,11 +9646,11 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:70
 msgid "Description:"
-msgstr ""
+msgstr "Descriptio:"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qh:7
 msgid "Advanced settings"
-msgstr ""
+msgstr "Optiones involutae"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:11
 msgid "Are you sure you want to reset all settings?"
@@ -9642,39 +9662,39 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:23
 msgid "Menu Skins"
-msgstr ""
+msgstr "Facies Indicis"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:62
 msgid "Text Language"
-msgstr ""
+msgstr "Scripti Lingua"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:67
 msgid "Set language"
-msgstr ""
+msgstr "Linguam eligere"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:72
 msgid "Disable gore effects and harsh language"
-msgstr ""
+msgstr "Sanguinis imagines et verba indecentia omittere"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:73
 msgid "Replace blood and gibs with content that does not have any gore effects"
-msgstr ""
+msgstr "Nec sanguinem nec intestina pingere, sed alias imagines decoras"
 
 #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:10
 msgid "While connected language changes will be applied only to the menu,"
-msgstr ""
+msgstr "Dum conexio tenetur, in hanc linguam vertuntur indicum scripta solum,"
 
 #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:12
 msgid "full language changes will take effect starting from the next game"
-msgstr ""
+msgstr "et alia scripta vertentur cum ludus posterior incipietur"
 
 #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:16
 msgid "Disconnect now"
-msgstr ""
+msgstr "Dinectere nunc"
 
 #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:17
 msgid "Switch language"
-msgstr ""
+msgstr "Linguam commutare"
 
 #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qh:6
 msgid "Warning"
@@ -9686,73 +9706,78 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:37
 msgid "Font/UI size:"
-msgstr ""
+msgstr "Magnitudo Litterarum/Imaginum:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:39
 msgid "SZ^Unreadable"
-msgstr ""
+msgstr "Illegibilis"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:40
 msgid "SZ^Tiny"
-msgstr ""
+msgstr "Minima"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:41
 msgid "SZ^Little"
-msgstr ""
+msgstr "Parvula"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:42
 msgid "SZ^Small"
-msgstr ""
+msgstr "Parva"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:43
 msgid "SZ^Medium"
-msgstr ""
+msgstr "Media"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:44
 msgid "SZ^Large"
-msgstr ""
+msgstr "Magna"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:45
 msgid "SZ^Huge"
-msgstr ""
+msgstr "Immensa"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:46
 msgid "SZ^Gigantic"
-msgstr ""
+msgstr "Gigas"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:47
 msgid "SZ^Colossal"
-msgstr ""
+msgstr "Colossica"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:51
 msgid "Color depth:"
-msgstr ""
+msgstr "Colorum subtilitas:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:53
 msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
 msgstr ""
+"In quot digitis binariis (bit) colores singulorum laterculorum scribere, 32 "
+"suadetur"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:54
 msgid "16bit"
-msgstr ""
+msgstr "16bit"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:55
 msgid "32bit"
-msgstr ""
+msgstr "32bit"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:59
 msgid "Full screen"
-msgstr ""
+msgstr "Totum quadrum"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:61
 msgid "Vertical Synchronization"
-msgstr ""
+msgstr "Lineas iacentes pingere Synchrone"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:62
 msgid ""
 "Vsync prevents tearing, but increases latency and caps your fps at the "
 "screen refresh rate"
 msgstr ""
+"Si lineae iacentes pinguntur synchrone, imagines scissas non videbis, sed "
+"itaque imagines tardabuntur et numerus imaginum in secundum non maior erit "
+"quam numerum integrationum in quadro"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:64
 msgid "High-quality frame buffer"
@@ -9760,27 +9785,29 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:72
 msgid "Antialiasing:"
-msgstr ""
+msgstr "Imago polita:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:75
 msgid ""
 "Enable antialiasing, which smooths the edges of 3D geometry. Note that it "
 "might decrease performance by quite a lot"
 msgstr ""
+"Polire margines rerum tridimensionalium. NB: computatrum minus velox esse "
+"poterit"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:76
 msgid "AA^Disabled"
-msgstr ""
+msgstr "Non polire"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:77
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:94
 msgid "2x"
-msgstr ""
+msgstr "2x"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:78
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:95
 msgid "4x"
-msgstr ""
+msgstr "4x"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:85
 msgid "Resolution scaling:"
@@ -9928,47 +9955,48 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:149
 msgid "Instant action! (random map with bots)"
-msgstr ""
+msgstr "Actio fortuita! (fortuita harena cum automatis)"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:169
 msgid "Campaign Difficulty:"
-msgstr ""
+msgstr "Expeditio Difficultate:"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:170
 msgid "CSKL^Easy"
-msgstr ""
+msgstr "Facili"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:171
 msgid "CSKL^Medium"
-msgstr ""
+msgstr "Media"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:172
 msgid "CSKL^Hard"
-msgstr ""
+msgstr "Difficili"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:177
 msgid "Play campaign!"
-msgstr ""
+msgstr "Expeditionem ludere!"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qh:6
 msgid "Singleplayer"
-msgstr ""
+msgstr "Unus ludens"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qh:7
 msgid "Play the singleplayer campaign or instant action matches against bots"
 msgstr ""
+"Ludere expeditionem unius ludentis vel actionem fortuitam cum automatis"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.qh:7
 msgid "Winner"
-msgstr ""
+msgstr "Victor"
 
 #: qcsrc/menu/xonotic/dialog_teamselect.qc:32
 msgid "join 'best' team (auto-select)"
-msgstr ""
+msgstr "in manum 'optimam' (computatro eligitur)"
 
 #: qcsrc/menu/xonotic/dialog_teamselect.qc:33
 msgid "Autoselect team (recommended)"
-msgstr ""
+msgstr "Computatro manus eligi (quod suadetur)"
 
 #: qcsrc/menu/xonotic/dialog_teamselect.qc:37
 msgid "red"
@@ -10017,31 +10045,31 @@ msgstr "Si non sines, scribetur \"Lusor Anonymus\""
 
 #: qcsrc/menu/xonotic/gametypelist.qc:88
 msgid "teamplay"
-msgstr ""
+msgstr "manus ludus"
 
 #: qcsrc/menu/xonotic/gametypelist.qc:90
 msgid "free for all"
-msgstr ""
+msgstr "omnes contra omnes"
 
 #: qcsrc/menu/xonotic/keybinder.qc:38
 msgid "Moving"
-msgstr ""
+msgstr "Motio"
 
 #: qcsrc/menu/xonotic/keybinder.qc:39
 msgid "move forwards"
-msgstr ""
+msgstr "progredi"
 
 #: qcsrc/menu/xonotic/keybinder.qc:40
 msgid "move backwards"
-msgstr ""
+msgstr "regredi"
 
 #: qcsrc/menu/xonotic/keybinder.qc:41
 msgid "strafe left"
-msgstr ""
+msgstr "sinistrorsum gradi"
 
 #: qcsrc/menu/xonotic/keybinder.qc:42
 msgid "strafe right"
-msgstr ""
+msgstr "dextrorsum gradi"
 
 #: qcsrc/menu/xonotic/keybinder.qc:43
 msgid "jump / swim"
@@ -10077,39 +10105,39 @@ msgstr "optima"
 
 #: qcsrc/menu/xonotic/keybinder.qc:59
 msgid "reload"
-msgstr ""
+msgstr "replere"
 
 #: qcsrc/menu/xonotic/keybinder.qc:87
 msgid "hold zoom"
-msgstr ""
+msgstr "amplificare"
 
 #: qcsrc/menu/xonotic/keybinder.qc:88
 msgid "toggle zoom"
-msgstr ""
+msgstr "alternare amplificationes"
 
 #: qcsrc/menu/xonotic/keybinder.qc:89
 msgid "show scores"
-msgstr ""
+msgstr "rationarium videre"
 
 #: qcsrc/menu/xonotic/keybinder.qc:90
 msgid "screen shot"
-msgstr ""
+msgstr "imaginem servare"
 
 #: qcsrc/menu/xonotic/keybinder.qc:91
 msgid "maximize radar"
-msgstr ""
+msgstr "detectrum amplificare"
 
 #: qcsrc/menu/xonotic/keybinder.qc:92
 msgid "3rd person view"
-msgstr ""
+msgstr "3ae personae visio"
 
 #: qcsrc/menu/xonotic/keybinder.qc:93
 msgid "enter spectator mode"
-msgstr ""
+msgstr "spectatoris modus"
 
 #: qcsrc/menu/xonotic/keybinder.qc:96
 msgid "Communication"
-msgstr ""
+msgstr "Locutio"
 
 #: qcsrc/menu/xonotic/keybinder.qc:97
 msgid "public chat"
@@ -10121,19 +10149,19 @@ msgstr "manus locutorium"
 
 #: qcsrc/menu/xonotic/keybinder.qc:99
 msgid "show chat history"
-msgstr ""
+msgstr "prius locuta videre"
 
 #: qcsrc/menu/xonotic/keybinder.qc:100
 msgid "vote YES"
-msgstr ""
+msgstr "approbare suffragio"
 
 #: qcsrc/menu/xonotic/keybinder.qc:101
 msgid "vote NO"
-msgstr ""
+msgstr "reprobare suffragio"
 
 #: qcsrc/menu/xonotic/keybinder.qc:105
 msgid "Client"
-msgstr ""
+msgstr "Cliens"
 
 #: qcsrc/menu/xonotic/keybinder.qc:109 qcsrc/menu/xonotic/keybinder.qc:111
 msgid "enter console"
@@ -10145,7 +10173,7 @@ msgstr "linquere"
 
 #: qcsrc/menu/xonotic/keybinder.qc:116
 msgid "auto-join team"
-msgstr ""
+msgstr "computatro eligi manus"
 
 #: qcsrc/menu/xonotic/keybinder.qc:122
 msgid "drop key/flag, exit vehicle"
@@ -10165,7 +10193,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/keybinder.qc:129
 msgid "User defined"
-msgstr ""
+msgstr "Creata ab utente"
 
 #: qcsrc/menu/xonotic/keybinder.qc:136
 msgid "Development"
@@ -10173,15 +10201,15 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/keybinder.qc:137
 msgid "sandbox menu"
-msgstr ""
+msgstr "probationum index"
 
 #: qcsrc/menu/xonotic/keybinder.qc:138
 msgid "drag object (sandbox)"
-msgstr ""
+msgstr "rem trahere (probatione)"
 
 #: qcsrc/menu/xonotic/keybinder.qc:139
 msgid "waypoint editor menu"
-msgstr ""
+msgstr "locorum indicandorum index"
 
 #: qcsrc/menu/xonotic/leavematchbutton.qc:12
 msgid "Leave current match"
@@ -10189,7 +10217,7 @@ msgstr "Hunc ludum linquere"
 
 #: qcsrc/menu/xonotic/leavematchbutton.qc:14
 msgid "Stop demo"
-msgstr ""
+msgstr "Finire demonstrationem"
 
 #: qcsrc/menu/xonotic/leavematchbutton.qc:16
 msgid "Leave campaign"
index cea50d143179d6f3b32bcb78f79480e85cf02763..66e52f9fba92584a07daed20a24a9967bb4a77bf 100644 (file)
@@ -2455,8 +2455,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3658,8 +3658,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 420c98a7321a3bc172d8c4f2f62b1bdb55e2f7d9..9867d76f6921a1c5152a6c51b2a7cbccd2b924bb 100644 (file)
@@ -2468,8 +2468,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3671,8 +3671,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index c8803f8ae3537d2781770c2da280fff5609f71b9..bbf8d5d9c8015608985ea33edb1cb49ac9f31b08 100644 (file)
@@ -2478,8 +2478,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3681,8 +3681,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 2dcba0d0f45d669576c0a6720be61c4d83bad498..844c8eb7e10e635d291a9de0ee9dfdd3bbea32ea 100644 (file)
@@ -2459,8 +2459,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3662,8 +3662,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 882084775b3ac6f494322613bde5e08f1b8cbd0c..2c781eebed32e3e46dd2708a7511c1bda7ba9a1e 100644 (file)
@@ -2455,8 +2455,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3658,8 +3658,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index e5f54d1adde3407a6dd1c21ccdc1a775074fb183..4046b864268f1950daacfb1b0804589731857818 100644 (file)
@@ -47,9 +47,9 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n"
-"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
-"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && "
+"(n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && "
+"n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
 
 #: qcsrc/client/hud/hud_config.qc:80
 #, c-format
@@ -2505,8 +2505,8 @@ msgstr "^BG%s^BG zdobył ^TC^TTĄ^BG flagę"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG zdobył ^TC^TTĄ^BG flagę w ^F1%s^BG sekund, pobiwszy rekord ^BG%s^BG "
 "^F2%s^BG sekund"
@@ -3723,8 +3723,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 3b0e3d1cb96e381981ba73dfbaee241bbf02ddbe..9a632ec5ed652f3fd2e300a99c3d5f18769c93a6 100644 (file)
@@ -2485,8 +2485,8 @@ msgstr "^BG%s^BG capturou a bandeira ^TC^TT^BG"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG capturou a bandeira ^TC^TT^BG em ^F1%s^BG segundos, quebrando o "
 "recorde anterior de ^BG%s^BG de ^F2%s^BG segundos"
@@ -3592,8 +3592,8 @@ msgstr "^BG%s^K1 brincou com os Parafusos Elétricos%s%s"
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro orb%s%s"
 msgstr ""
-"^BG%s^K1 não conseguiu lembrar-se onde tinha colocado a sua esfera Elétrica%s"
-"%s"
+"^BG%s^K1 não conseguiu lembrar-se onde tinha colocado a sua esfera "
+"Elétrica%s%s"
 
 #: qcsrc/common/notifications/all.inc:477
 #, c-format
@@ -3733,8 +3733,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
@@ -9648,8 +9648,8 @@ msgstr ""
 #: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:13
 msgid "This will create a backup config in your data directory"
 msgstr ""
-"Isto irá criar uma cópia da tua configuração na seguinte pasta: C:\\Users"
-"\\[utilizador]\\Saved Games\\xonotic\\data"
+"Isto irá criar uma cópia da tua configuração na seguinte pasta: C:"
+"\\Users\\[utilizador]\\Saved Games\\xonotic\\data"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:23
 msgid "Menu Skins"
index 7e1c13b601d0b1643a1ff5f9338c353eec72d624..ccc3304be6491d2b5e31b9d746a0ffefa18af302 100644 (file)
@@ -2517,8 +2517,8 @@ msgstr "^BG%s^BG capturou a bandeira ^TC^TT^BG"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG capturou a bandeira ^TC^TT^BG em ^F1%s^BG segundos, quebrando o "
 "recorde anterior de ^BG%s^BG de ^F2%s^BG segundos"
@@ -3048,8 +3048,8 @@ msgstr "^BG%s^K1 não conseguiu se esconder da sentinela Hunter%s%s"
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
-"^BG%s^K1 ficou cheio de buracos por causa de uma sentinela de Metralhadora%s"
-"%s"
+"^BG%s^K1 ficou cheio de buracos por causa de uma sentinela de "
+"Metralhadora%s%s"
 
 #: qcsrc/common/notifications/all.inc:344
 #, c-format
@@ -3439,8 +3439,8 @@ msgstr "^BG%s^BG acabou a corrida"
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
-"^BG%s^BG quebrou o recorde %s%s^BG de %s^BG e substituiu seu recorde com %s"
-"%s %s"
+"^BG%s^BG quebrou o recorde %s%s^BG de %s^BG e substituiu seu recorde com "
+"%s%s %s"
 
 #: qcsrc/common/notifications/all.inc:437
 #, c-format
@@ -3629,8 +3629,8 @@ msgstr "^BG%s^K1 brincou com raios de Electro%s%s"
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro orb%s%s"
 msgstr ""
-"^BG%s^K1 não conseguiu se lembrar onde tinha colocado a sua esfera de Electro"
-"%s%s"
+"^BG%s^K1 não conseguiu se lembrar onde tinha colocado a sua esfera de "
+"Electro%s%s"
 
 #: qcsrc/common/notifications/all.inc:477
 #, c-format
@@ -3761,8 +3761,8 @@ msgstr ""
 msgid ""
 "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Overkill Machine Gun%s%s"
 msgstr ""
-"^BG%s%s^K1 ficou cheio de buracos por causa da Metralhadora Suprema de ^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 ficou cheio de buracos por causa da Metralhadora Suprema de "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:501
 #, c-format
@@ -3772,8 +3772,8 @@ msgstr "^BG%s%s^K1 foi vaporizado pela Vortex Suprema de ^BG%s^K1%s%s"
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 "^BG%s%s^K1 foi serrado ao meio pelo Lança-motosserras Supremo de ^BG%s^K1%s%s"
 
@@ -9758,8 +9758,8 @@ msgstr "Deseja mesmo redefinir todas as configurações para o padrão?"
 #: qcsrc/menu/xonotic/dialog_settings_misc_reset.qc:13
 msgid "This will create a backup config in your data directory"
 msgstr ""
-"Isso irá criar uma cópia da sua configuração na seguinte pasta: C:\\Users"
-"\\[usuário]\\Saved Games\\xonotic\\data"
+"Isso irá criar uma cópia da sua configuração na seguinte pasta: C:"
+"\\Users\\[usuário]\\Saved Games\\xonotic\\data"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:23
 msgid "Menu Skins"
index 4f3608a631b113527bab34b6bd491b8854e680a7..da63aef6a12f06aca704641815d79b39def1ec6c 100644 (file)
@@ -2480,8 +2480,8 @@ msgstr "^BG%s^BG a capturat steagul ^TC^TT^BG"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG a capturat steagul ^TC^TT^BG în ^F1%s^BG secunde, spărgând recordul "
 "lui ^BG%s^BG de ^F2%s^BG secunde"
@@ -2926,8 +2926,8 @@ msgstr "^BG%sK1 a devenit expert în arta auto-exploziei%s%s"
 msgid ""
 "^BG%s^K1 decided to take a look at the results of their napalm explosion%s%s"
 msgstr ""
-"^BG%s^K1 a decis să simtă pe pielea sa rezultatul propriei explozii cu napalm"
-"%s%s"
+"^BG%s^K1 a decis să simtă pe pielea sa rezultatul propriei explozii cu "
+"napalm%s%s"
 
 #: qcsrc/common/notifications/all.inc:326
 #, c-format
@@ -3512,8 +3512,8 @@ msgstr ""
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
-"^BG%s%s^K1 a murit din cauza virtuozității lui ^BG%s^K1's pe @!#%%'n acordeon"
-"%s%s"
+"^BG%s%s^K1 a murit din cauza virtuozității lui ^BG%s^K1's pe @!#%%'n "
+"acordeon%s%s"
 
 #: qcsrc/common/notifications/all.inc:461
 #, c-format
@@ -3623,8 +3623,8 @@ msgstr "^BG%s^K1 a uitat de propriai Mină de foc%s%s"
 #, 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 a fost zdrobit și sfârtecat de valul de rachete%s%s al lui ^BG"
-"%s^K1"
+"^BG%s%s^K1 a fost zdrobit și sfârtecat de valul de rachete%s%s al lui "
+"^BG%s^K1"
 
 #: qcsrc/common/notifications/all.inc:482
 #, c-format
@@ -3650,8 +3650,8 @@ msgstr "^BG%s^K1 a fost neglijent cu HLAC-ul său%s%s"
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
-"^BG%s%s^K1 a fost prins în Cârligul bombelor gravitaționale%s%s ale lui ^BG"
-"%s^K1"
+"^BG%s%s^K1 a fost prins în Cârligul bombelor gravitaționale%s%s ale lui "
+"^BG%s^K1"
 
 #: qcsrc/common/notifications/all.inc:487
 #, c-format
@@ -3738,8 +3738,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 4b805ce0da1849ee55591fb37903e8adeb8ebd8c..e61c5bb05aadf7b532b6fcd243209b5261bb896a 100644 (file)
@@ -33,9 +33,9 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
-"%100>=11 && n%100<=14)? 2 : 3);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
+"(n%100>=11 && n%100<=14)? 2 : 3);\n"
 
 #: qcsrc/client/hud/hud_config.qc:80
 #, c-format
@@ -437,7 +437,7 @@ msgstr "Вид от третьего лица"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:853
 msgid "QMCMD^Player models like mine"
-msgstr "Ð\9cодели Ð¸Ð³Ñ\80оков Ñ\82акие Ð¶Ðµ ÐºÐ°Ðº Ñ\83 Ð¼ÐµÐ½Ñ\8f"
+msgstr "Ð\97амениÑ\82Ñ\8c Ð¼Ð¾Ð´ÐµÐ»Ð¸ Ð¸Ð³Ñ\80оков Ð¼Ð¾ÐµÐ¹"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:854
 msgid "QMCMD^Names above players"
@@ -1842,7 +1842,7 @@ msgstr "Игра окончена!"
 
 #: qcsrc/common/minigames/minigame/bd.qc:1110
 msgid "Well done! Click 'Next Level' to continue"
-msgstr "Ð\9fÑ\80екÑ\80аÑ\81но! Ð©Ñ\91лкниÑ\82е Ð¿Ð¾ «Следующий уровень» для продолжения"
+msgstr "Ð\9fÑ\80екÑ\80аÑ\81но! Ð©Ñ\91лкниÑ\82е Ð½Ð° «Следующий уровень» для продолжения"
 
 #: qcsrc/common/minigames/minigame/bd.qc:1181
 #: qcsrc/common/minigames/minigame/c4.qc:381
@@ -2514,8 +2514,8 @@ msgstr "^BG%s^BG захватил ^TC^TT^BG флаг"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG захватил ^TC^TT^BG флаг за ^F1%s^BG секунд, побив предыдущий рекорд "
 "^BG%s^BG — ^F2%s^BG секунды"
@@ -2802,8 +2802,8 @@ msgstr ""
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
-"^BG%s%s^K1 зацепило взрывной волной от взорвавшегося на Пауке-боте ^BG%s^K1%s"
-"%s"
+"^BG%s%s^K1 зацепило взрывной волной от взорвавшегося на Пауке-боте "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:300
 #, c-format
@@ -3712,8 +3712,8 @@ msgstr "^BG%s^K1 забыл о своей мине%s%s"
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
-"^BG%s%s^K1 оказался в зоне поражения гранаты, выпущенной из Мортиры ^BG"
-"%s^K1%s%s"
+"^BG%s%s^K1 оказался в зоне поражения гранаты, выпущенной из Мортиры "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:495
 #, c-format
@@ -3756,8 +3756,8 @@ msgstr "^BG%s%s^K1 был испарён Оверкилл Нексом ^BG%s^K1%
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 "^BG%s%s^K1 был распилен пополам Оверкилл Реактивной Бензопилой ^BG%s^K1%s%s"
 
@@ -3811,8 +3811,8 @@ msgstr "^BG%s%s^K1 не смог спрятаться от Винтовки ^BG%
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
-"^BG%s%s^K1 попал под обстрел ракетами из Самонаводчика со стороны ^BG%s^K1%s"
-"%s"
+"^BG%s%s^K1 попал под обстрел ракетами из Самонаводчика со стороны "
+"^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:513
 #, c-format
@@ -4781,11 +4781,11 @@ msgstr "^K1Вы совершите самоубийство через ^COUNT"
 
 #: qcsrc/common/notifications/all.inc:798
 msgid "^F4Timeout begins in ^COUNT"
-msgstr "^F4Тайм-аут начнётся через ^COUNT"
+msgstr "^F4Тайм-аут начнётся через ^COUNT с"
 
 #: qcsrc/common/notifications/all.inc:799
 msgid "^F4Timeout ends in ^COUNT"
-msgstr "^F4Тайм-аут закончится через ^COUNT"
+msgstr "^F4Тайм-аут закончится через ^COUNT с"
 
 #: qcsrc/common/notifications/all.inc:801
 msgid "^K1Cannot join given minigame session!"
@@ -9538,7 +9538,7 @@ msgstr "Показывать график размеров пакетов и д
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:36
 msgid "Packet loss compensation"
-msgstr "СмÑ\8fгÑ\87ение потери пакетов (п/п)"
+msgstr "СмÑ\8fгÑ\87аÑ\82Ñ\8c потери пакетов (п/п)"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:37
 msgid "Each packet includes a copy of the previous message"
@@ -9546,7 +9546,7 @@ msgstr "Каждый пакет включает в себя копию пред
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:39
 msgid "Movement prediction error compensation"
-msgstr "СмÑ\8fгÑ\87ение Ð¾Ñ\88ибок предрасчёта движения"
+msgstr "СмÑ\8fгÑ\87аÑ\82Ñ\8c Ð¾Ñ\88ибки предрасчёта движения"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:43
 msgid "Use encryption (AES) when available"
index bbd1bd2f015d363f5c3e3c642df3f3c1bf8a985f..e368423c6148374c4541581dfa3a1fdcf382ee2f 100644 (file)
@@ -2455,8 +2455,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3658,8 +3658,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index e501f4564e4ede9da39f61f4a083bb55014853ee..d5b5a4f150e82d01003163e2ba79624fd8a4099d 100644 (file)
@@ -22,8 +22,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
 #: qcsrc/client/hud/hud_config.qc:80
 #, c-format
@@ -2471,8 +2471,8 @@ msgstr "Играч ^BG%s^BG је заробио заставу боје ^TC^TT^B
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3674,8 +3674,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 836f388477d2a8e526ae31042148b85f2fcd797e..fee46324fd29cd8643db8b83e4a2e43de995569a 100644 (file)
@@ -2499,11 +2499,11 @@ msgstr "^BG%s^BG fångade den ^TC^TT^BG flaggan"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
-"^BG%s^BG fångade den ^TC^TT^BG flaggan på ^F1%s^BG sekunder, vilket slår ^BG"
-"%s^BGs föregående rekord på ^F2%s^BG sekunder"
+"^BG%s^BG fångade den ^TC^TT^BG flaggan på ^F1%s^BG sekunder, vilket slår "
+"^BG%s^BGs föregående rekord på ^F2%s^BG sekunder"
 
 #: qcsrc/common/notifications/all.inc:242
 #, c-format
@@ -2755,8 +2755,8 @@ msgstr "^BG%s%s^K1 dog i en olycka med ^BG%s^K1%s%s"
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
-"^BG%s%s^K1 var inblandad i sprängningen när ^BG%s^K1s Bumblebee exploderade%s"
-"%s"
+"^BG%s%s^K1 var inblandad i sprängningen när ^BG%s^K1s Bumblebee "
+"exploderade%s%s"
 
 #: qcsrc/common/notifications/all.inc:294
 #, c-format
@@ -2789,8 +2789,8 @@ msgstr ""
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
-"^BG%s%s^K1 var inblandad i sprängningen när ^BG%s^K1s Spiderbot exploderade%s"
-"%s"
+"^BG%s%s^K1 var inblandad i sprängningen när ^BG%s^K1s Spiderbot "
+"exploderade%s%s"
 
 #: qcsrc/common/notifications/all.inc:300
 #, c-format
@@ -2939,8 +2939,8 @@ msgstr "^BG%s^K1 bemästrade konsten av själv-nading%s%s"
 msgid ""
 "^BG%s^K1 decided to take a look at the results of their napalm explosion%s%s"
 msgstr ""
-"^BG%s^K1 bestämde sig för att ta en titt på resultatet av sin napalmexplosion"
-"%s%s"
+"^BG%s^K1 bestämde sig för att ta en titt på resultatet av sin "
+"napalmexplosion%s%s"
 
 #: qcsrc/common/notifications/all.inc:326
 #, c-format
@@ -3741,11 +3741,11 @@ msgstr "^BG%s%s^K1 blev förångad av ^BG%s^K1s Overkill Nex%s%s"
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
-"^BG%s%s^K1 var sågad på mitten av ^BG%s^K1s Overkill Raketframdriven Motorsåg"
-"%s%s"
+"^BG%s%s^K1 var sågad på mitten av ^BG%s^K1s Overkill Raketframdriven "
+"Motorsåg%s%s"
 
 #: qcsrc/common/notifications/all.inc:503
 #, c-format
@@ -3759,8 +3759,8 @@ msgstr ""
 msgid ""
 "^BG%s^K1 was sawn in half by their own Overkill Rocket Propelled Chainsaw%s%s"
 msgstr ""
-"^BG%s^K1 var sågad på mitten av sin egen Overkill Raketframdriven Motorsåg%s"
-"%s"
+"^BG%s^K1 var sågad på mitten av sin egen Overkill Raketframdriven "
+"Motorsåg%s%s"
 
 #: qcsrc/common/notifications/all.inc:505
 #, c-format
index b56b167aaf751f61c1f02e1b9b1b24339c47a862..a644e7d6f13592082431552b6c2a2a3564dc8476 100644 (file)
@@ -15,6 +15,8 @@
 # ibra kap <ibrakap@gmail.com>, 2019
 # Lucifer Morningstar, 2022
 # Lucifer Morningstar, 2022
+# Mehmet Ali Kaplan, 2023
+# Mehmet Ali Kaplan, 2023
 # Tan Siret Akıncı <tanakinci2002@gmail.com>, 2021
 msgid ""
 msgstr ""
@@ -49,7 +51,7 @@ msgstr ""
 #: qcsrc/client/hud/panel/centerprint.qc:202
 #, c-format
 msgid "^3Countdown message at time %s, seconds left: ^COUNT"
-msgstr ""
+msgstr "^3Geri sayım mesajı zamanı %s, kalan saniyeler; ^COUNT"
 
 #: qcsrc/client/hud/panel/centerprint.qc:204
 #, c-format
@@ -246,7 +248,7 @@ msgstr "Oyuncu %d"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:202
 msgid "Standard quick menu"
-msgstr ""
+msgstr "Standart hızlı menü"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:634
 #: qcsrc/client/hud/panel/quickmenu.qc:636
@@ -303,7 +305,7 @@ msgstr "Takım sohbet"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:830
 msgid "QMCMD^strength soon"
-msgstr ""
+msgstr "QMCMD^güç yakında"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:831
 msgid "QMCMD^free item %x^7 (l:%y^7)"
@@ -355,44 +357,44 @@ msgstr "bayrak görüldü, simge"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:838
 msgid "QMCMD^defending (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr ""
+msgstr "QMCMD^savunanlar (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:838
 msgid "QMCMD^defending, icon"
-msgstr ""
+msgstr "QMCMD^savunanlar, ikon"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:839
 msgid "QMCMD^roaming (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr ""
+msgstr "QMCMD^roaming (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:839
 msgid "QMCMD^roaming, icon"
-msgstr ""
+msgstr "QMCMD^roaming, ikon"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:840
 msgid "QMCMD^attacking (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr ""
+msgstr "QMCMD^saldıranlar (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:840
 msgid "QMCMD^attacking, icon"
-msgstr ""
+msgstr "QMCMD^saldıranlar, ikon"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:841
 msgid "QMCMD^killed flagcarrier (l:%y^7)"
-msgstr ""
+msgstr "QMCMD^sancak-taşıyıcısı öldü (l:%y^7)"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:841
 msgid "QMCMD^killed flagcarrier, icon"
-msgstr ""
+msgstr "QMCMD^sancak-taşıyıcısı öldü, ikon"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:842
 #, c-format
 msgid "QMCMD^dropped flag (l:%d^7)"
-msgstr ""
+msgstr "QMCMD^sancağı düşürdü (l:%d^7)"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:842
 msgid "QMCMD^dropped flag, icon"
-msgstr ""
+msgstr "QMCMD^sancağı düşürdü, ikon"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:843
 msgid "QMCMD^drop weapon, icon"
@@ -404,11 +406,11 @@ msgstr "silah bırakıldı %w^7 (l:%l^7)"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:844
 msgid "QMCMD^drop flag/key, icon"
-msgstr ""
+msgstr "QMCMD^sancak/anahtar düştü, ikon"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:844
 msgid "QMCMD^dropped flag/key %w^7 (l:%l^7)"
-msgstr ""
+msgstr "QMCMD^sancak/anahtar düşürüldü %w^7 (l:%l^7)"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:848
 msgid "QMCMD^Send private message to"
@@ -430,7 +432,7 @@ msgstr "Üçüncü şahıs görünümü"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:853
 msgid "QMCMD^Player models like mine"
-msgstr ""
+msgstr "QMCMD^benimki gibi Oyuncu modelleri"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:854
 msgid "QMCMD^Names above players"
@@ -513,19 +515,19 @@ msgstr "Takımları karıştır"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:896
 msgid "Server quick menu"
-msgstr ""
+msgstr "Hızlı sunucu menüsü"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:898
 msgid "Waypoint editor menu"
-msgstr ""
+msgstr "Hedefnokta editör menüsü"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:901
 msgid "Waypoint editor menu as default"
-msgstr ""
+msgstr "Varsayılan olarak Hedefnokta editör menüsü "
 
 #: qcsrc/client/hud/panel/quickmenu.qc:903
 msgid "Server quick menu as default"
-msgstr ""
+msgstr "Varsayılan olarak hızlı Sunucu menüsü"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:909
 msgid "QMCMD^Spectate a player"
@@ -594,6 +596,7 @@ msgstr "Keepaway'de topu tutma süresi"
 #: qcsrc/client/hud/panel/scoreboard.qc:136
 msgid "How often a flag (CTF) or a key (KeyHunt) was captured"
 msgstr ""
+"Ne kadar sıklıkla bir sancak (BK) ya da anahtar (AnahtarAvı) ele geçirildi"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:136
 msgid "SCO^caps"
@@ -889,11 +892,11 @@ msgstr ""
 
 #: qcsrc/client/hud/panel/scoreboard.qc:174
 msgid "Number of survivals"
-msgstr ""
+msgstr "Hayatta kalanların sayısı"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:174
 msgid "SCO^survivals"
-msgstr ""
+msgstr "SCO^Hayatta Kalanlar"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:175
 msgid "Number of domination points taken (Domination)"
@@ -909,15 +912,15 @@ msgstr "Takım arkadaşlarını öldürme sayısı"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:176
 msgid "SCO^teamkills"
-msgstr ""
+msgstr "SCO^TakımdanÖldürülenler"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:177
 msgid "Number of ticks (Domination)"
-msgstr ""
+msgstr "Tiklerin sayısı (Kontrol)"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:177
 msgid "SCO^ticks"
-msgstr ""
+msgstr "SCO^Tikler"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:178
 msgid "SCO^time"
@@ -925,7 +928,7 @@ msgstr "Süre"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:178
 msgid "Total time raced (Race/CTS)"
-msgstr ""
+msgstr "Yarışılan toplam zaman (Race/CTS)"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:707
 msgid ""
@@ -1015,7 +1018,7 @@ msgstr "İsabet istatistikleri (ortalama %d%%)"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:1856
 msgid "Item stats"
-msgstr ""
+msgstr "Eşya istatistikleri"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:1967
 msgid "Map stats:"
@@ -1056,17 +1059,17 @@ msgstr "Takım Seçimi"
 #: qcsrc/client/hud/panel/scoreboard.qc:2340
 #, c-format
 msgid "^7Press ^3%s^7 to join the selected team"
-msgstr ""
+msgstr "^7Tıklayın ^3%s^7 ya seçili takıma katılmak için"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:2342
 #, c-format
 msgid "^7Press ^3%s^7 to auto-select a team and join"
-msgstr ""
+msgstr "^7Tıklayın ^3%s^7 ya otomatik takım seçip katılmak için"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:2346
 #, c-format
 msgid "^7Press ^3%s ^7to select a specific team"
-msgstr ""
+msgstr "^7Tıklayın ^3%s ^7ya spesifik bir takım seçmek için"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:2357
 #, c-format
@@ -1076,7 +1079,7 @@ msgstr "^3%1.0f dakika"
 #: qcsrc/client/hud/panel/scoreboard.qc:2384
 #, c-format
 msgid "^5%d^7/^5%d ^7players"
-msgstr ""
+msgstr "^5%d^7/^5%d ^7oyuncular"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:2385 qcsrc/client/main.qc:1436
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfotab.qc:43
@@ -1130,19 +1133,19 @@ msgstr ""
 
 #: qcsrc/client/hud/panel/timer.qc:126
 msgid "Warmup"
-msgstr ""
+msgstr "Isınma"
 
 #: qcsrc/client/hud/panel/timer.qc:131
 msgid "Warmup: too few players"
-msgstr ""
+msgstr "Isınma: çok az oyuncu"
 
 #: qcsrc/client/hud/panel/timer.qc:133
 msgid "Warmup: no time limit"
-msgstr ""
+msgstr "Isınma: zaman limiti yok"
 
 #: qcsrc/client/hud/panel/timer.qc:137
 msgid "Timeout"
-msgstr ""
+msgstr "Süre bitti"
 
 #: qcsrc/client/hud/panel/timer.qc:139
 msgid "Sudden Death"
@@ -1150,16 +1153,16 @@ msgstr "Ani ölüm"
 
 #: qcsrc/client/hud/panel/timer.qc:141
 msgid "Overtime"
-msgstr ""
+msgstr "Uzatma"
 
 #: qcsrc/client/hud/panel/timer.qc:143
 #, c-format
 msgid "Overtime #%d"
-msgstr ""
+msgstr "Uzatma #%d"
 
 #: qcsrc/client/hud/panel/vote.qc:30
 msgid "^1You must answer before entering hud configure mode"
-msgstr ""
+msgstr "^1Hud ayarlama moduna girmeden önce yanıtlamak zorundasınız"
 
 #: qcsrc/client/hud/panel/vote.qc:33
 msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
@@ -1243,17 +1246,17 @@ msgstr ""
 #: qcsrc/client/main.qc:1360
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:27
 msgid "All Available Weapons Arena"
-msgstr ""
+msgstr "Arenadaki tüm hazır silahlar"
 
 #: qcsrc/client/main.qc:1361
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:28
 msgid "Most Weapons Arena"
-msgstr ""
+msgstr "Arenadaki çoğu silahlar"
 
 #: qcsrc/client/main.qc:1362
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:29
 msgid "Most Available Weapons Arena"
-msgstr ""
+msgstr "Arenadaki çoğu hazır silahlar"
 
 #: qcsrc/client/main.qc:1365 qcsrc/client/main.qc:1379
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:50
@@ -1269,42 +1272,42 @@ msgstr "%s Arena"
 #: qcsrc/client/main.qc:1388 qcsrc/client/main.qc:1393
 #, c-format
 msgid "This is %s"
-msgstr ""
+msgstr "Bu %s"
 
 #: qcsrc/client/main.qc:1389
 msgid "Your client version is outdated."
-msgstr ""
+msgstr "Sizin istemci versiyonunuz eski sürüm"
 
 #: qcsrc/client/main.qc:1390
 msgid "### YOU WON'T BE ABLE TO PLAY ON THIS SERVER ###"
-msgstr ""
+msgstr "### SİZ BU SUNUCUDA OYNAYAMAZSINIZ ###"
 
 #: qcsrc/client/main.qc:1391
 msgid "Please update!"
-msgstr ""
+msgstr "Lütfen güncelleyin!"
 
 #: qcsrc/client/main.qc:1394
 msgid "This server is using an outdated Xonotic version."
-msgstr ""
+msgstr "Bu sunucu eski bir Xonotic versiyonu kullanıyor."
 
 #: qcsrc/client/main.qc:1395
 msgid "### THIS SERVER IS INCOMPATIBLE AND THUS YOU CANNOT JOIN ###"
-msgstr ""
+msgstr "### BU SUNUCU UYUMSUZ VE BU YÜZDEN SİZ KATILAMAZSINIZ ###"
 
 #: qcsrc/client/main.qc:1397
 #, c-format
 msgid "Welcome to %s"
-msgstr ""
+msgstr "%s ya Hoşgeldiniz"
 
 #: qcsrc/client/main.qc:1411 qcsrc/menu/xonotic/campaign.qc:244
 #, c-format
 msgid "Level %d:"
-msgstr ""
+msgstr "Seviye %d:"
 
 #: qcsrc/client/main.qc:1413
 #, c-format
 msgid "^BGPress ^F2%s^BG to enter the game"
-msgstr ""
+msgstr "^BGBasın ^F2%s^BG oyuna girmek için"
 
 #: qcsrc/client/main.qc:1434
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfotab.qc:38
@@ -1328,24 +1331,24 @@ msgstr ""
 #: qcsrc/client/main.qc:1454
 #, c-format
 msgid "%d players maximum"
-msgstr ""
+msgstr "Maksimum oyuncular %d "
 
 #: qcsrc/client/main.qc:1456
 #, c-format
 msgid "%d players minimum"
-msgstr ""
+msgstr "Minimum oyuncular %d"
 
 #: qcsrc/client/main.qc:1461
 msgid "Active modifications:"
-msgstr ""
+msgstr "Aktif modifikasyonlar:"
 
 #: qcsrc/client/main.qc:1464
 msgid "Special gameplay tips:"
-msgstr ""
+msgstr "Özel oynanış ipuçları:"
 
 #: qcsrc/client/main.qc:1471
 msgid "Server's message"
-msgstr ""
+msgstr "Sunucunun mesajı"
 
 #: qcsrc/client/main.qc:1565
 #, c-format
@@ -1381,6 +1384,8 @@ msgstr "%d saniye kaldı"
 #: qcsrc/client/mapvoting.qc:559
 msgid "mv_mapdownload: ^3You're not supposed to use this command on your own!"
 msgstr ""
+"mv_mapdownload: ^3Siz bu emiri kendi başınıza kullanma hakkına sahip "
+"değilsiniz"
 
 #: qcsrc/client/mapvoting.qc:569
 msgid "^1Error:^7 Couldn't find pak index."
@@ -1439,12 +1444,12 @@ msgstr "Turu kazanmak için tüm düşman takım unsurlarını öldür"
 #: qcsrc/common/gamemodes/gamemode/clanarena/clanarena.qh:40
 #: qcsrc/common/gamemodes/gamemode/freezetag/freezetag.qh:43
 msgid "Round limit:"
-msgstr ""
+msgstr "Tur limiti:"
 
 #: qcsrc/common/gamemodes/gamemode/clanarena/clanarena.qh:40
 #: qcsrc/common/gamemodes/gamemode/freezetag/freezetag.qh:43
 msgid "The amount of rounds won needed before the match will end"
-msgstr ""
+msgstr "Maçı bitmeden raundu kazanmak için kazanılması gereken puanlar"
 
 #: qcsrc/common/gamemodes/gamemode/ctf/cl_ctf.qc:202
 msgid "Capture time rankings"
@@ -1464,11 +1469,11 @@ msgstr ""
 
 #: qcsrc/common/gamemodes/gamemode/ctf/ctf.qh:30
 msgid "Capture limit:"
-msgstr ""
+msgstr "Ele geçirme limiti:"
 
 #: qcsrc/common/gamemodes/gamemode/ctf/ctf.qh:30
 msgid "The amount of captures needed before the match will end"
-msgstr ""
+msgstr "Maç bitmeden elde edilmesi gereken ele geçirmeler"
 
 #: qcsrc/common/gamemodes/gamemode/cts/cl_cts.qc:41
 #: qcsrc/common/gamemodes/gamemode/race/cl_race.qc:178
@@ -1477,7 +1482,7 @@ msgstr "Sıralamalar"
 
 #: qcsrc/common/gamemodes/gamemode/cts/cts.qh:11
 msgid "Race CTS"
-msgstr ""
+msgstr "Yarış CTS"
 
 #: qcsrc/common/gamemodes/gamemode/cts/cts.qh:11
 msgid "Race for fastest time."
@@ -1503,7 +1508,7 @@ msgstr "Hakimiyet"
 #: qcsrc/common/gamemodes/gamemode/keyhunt/keyhunt.qh:39
 #: qcsrc/common/gamemodes/gamemode/tdm/tdm.qh:47
 msgid "The amount of points needed before the match will end"
-msgstr ""
+msgstr "Maç bitmeden elde edilmesi gereken puanlar"
 
 #: qcsrc/common/gamemodes/gamemode/duel/duel.qh:9
 msgid "Duel"
@@ -1563,7 +1568,7 @@ msgstr "Hayatta kalanlar yok olana kadar hayatta kal ve öldür"
 
 #: qcsrc/common/gamemodes/gamemode/lms/lms.qh:20
 msgid "Lives:"
-msgstr ""
+msgstr "Canlar:"
 
 #: qcsrc/common/gamemodes/gamemode/mayhem/mayhem.qh:10
 msgid "Compete for the most damage dealt and frags in this chaotic mayhem!"
@@ -1588,7 +1593,7 @@ msgstr "Düşman kalesine gol at, kendi kaleni koru"
 
 #: qcsrc/common/gamemodes/gamemode/nexball/nexball.qh:25
 msgid "Goal limit:"
-msgstr ""
+msgstr "Hedef Limiti:"
 
 #: qcsrc/common/gamemodes/gamemode/nexball/nexball.qh:25
 msgid "The amount of goals needed before the match will end"
@@ -1628,19 +1633,19 @@ msgstr "Turlar:"
 
 #: qcsrc/common/gamemodes/gamemode/survival/cl_survival.qc:63
 msgid "Hunter"
-msgstr ""
+msgstr "Avcı"
 
 #: qcsrc/common/gamemodes/gamemode/survival/cl_survival.qc:69
 msgid "Survivor"
-msgstr ""
+msgstr "Hayatta Kalan"
 
 #: qcsrc/common/gamemodes/gamemode/survival/survival.qh:12
 msgid "Identify and eliminate all the hunters before all your allies are gone"
-msgstr ""
+msgstr "Müttefiklerin ölmeden tüm avcıları bul ve ortadan kaldır"
 
 #: qcsrc/common/gamemodes/gamemode/survival/survival.qh:12
 msgid "Survival"
-msgstr ""
+msgstr "Hayatta Kalma"
 
 #: qcsrc/common/gamemodes/gamemode/tdm/tdm.qh:9
 msgid "Help your team score the most frags against the enemy team"
@@ -1653,7 +1658,7 @@ msgstr "Takım Kapışması"
 
 #: qcsrc/common/gamemodes/gamemode/tka/tka.qh:13
 msgid "Keep the ball in your team's possession to get points for kills"
-msgstr ""
+msgstr "Topu tutarak aldığın öldürmelerden takımın için puan kazan"
 
 #: qcsrc/common/gamemodes/gamemode/tka/tka.qh:13
 msgid "Team Keepaway"
@@ -1671,24 +1676,24 @@ msgstr ""
 
 #: qcsrc/common/items/item/ammo.qh:56
 msgid "Shells"
-msgstr ""
+msgstr "Tüfek Kovanları"
 
 #: qcsrc/common/items/item/ammo.qh:92
 msgid "Bullets"
-msgstr ""
+msgstr "Mermiler"
 
 #: qcsrc/common/items/item/ammo.qh:124
 msgid "Rockets"
-msgstr ""
+msgstr "ROketler"
 
 #: qcsrc/common/items/item/ammo.qh:156
 msgid "Cells"
-msgstr ""
+msgstr "Enerji Hücreleri"
 
 #: qcsrc/common/items/item/ammo.qh:188
 #: qcsrc/common/turrets/turret/plasma_weapon.qh:7
 msgid "Plasma"
-msgstr ""
+msgstr "Plazma"
 
 #: qcsrc/common/items/item/armor.qh:42
 msgid "Small armor"
@@ -1730,11 +1735,11 @@ msgstr "Jetpack"
 
 #: qcsrc/common/items/item/jetpack.qh:71
 msgid "Fuel"
-msgstr ""
+msgstr "Yakıt"
 
 #: qcsrc/common/items/item/jetpack.qh:96
 msgid "Fuel regenerator"
-msgstr ""
+msgstr "Yakıt yenileyici"
 
 #: qcsrc/common/items/item/jetpack.qh:99
 msgid "Fuel regen"
@@ -1752,7 +1757,7 @@ msgstr "Öldürme sınırı"
 
 #: qcsrc/common/mapinfo.qh:89
 msgid "The amount of frags needed before the match will end"
-msgstr ""
+msgstr "Maç bitmeden elde edilmesi gereken infazların sayısı"
 
 #: qcsrc/common/minigames/cl_minigames.qc:379
 msgid "It's your turn"
@@ -1791,11 +1796,11 @@ msgstr "Küçükoyunlar"
 
 #: qcsrc/common/minigames/cl_minigames_hud.qc:582
 msgid "Minigame message"
-msgstr ""
+msgstr "Minioyun mesajı"
 
 #: qcsrc/common/minigames/minigame/bd.qc:2
 msgid "Bulldozer"
-msgstr ""
+msgstr "Dozer"
 
 #: qcsrc/common/minigames/minigame/bd.qc:1107
 #: qcsrc/common/minigames/minigame/ps.qc:425
@@ -1856,7 +1861,7 @@ msgstr "Kaydet"
 
 #: qcsrc/common/minigames/minigame/c4.qc:2
 msgid "Connect Four"
-msgstr ""
+msgstr "Dörtlü Bağla"
 
 #: qcsrc/common/minigames/minigame/c4.qc:316
 #: qcsrc/common/minigames/minigame/c4.qc:322
@@ -1904,7 +1909,7 @@ msgstr "Parçanızı yerleştirmek için oyun tahtasına tıklayın"
 
 #: qcsrc/common/minigames/minigame/nmm.qc:3
 msgid "Nine Men's Morris"
-msgstr ""
+msgstr "9 Adam'ın Morrisi"
 
 #: qcsrc/common/minigames/minigame/nmm.qc:619
 msgid ""
@@ -1924,7 +1929,7 @@ msgstr "Rakibin parçalarından birini alabilirsin"
 
 #: qcsrc/common/minigames/minigame/pong.qc:2
 msgid "Pong"
-msgstr ""
+msgstr "Pong"
 
 #: qcsrc/common/minigames/minigame/pong.qc:607
 #: qcsrc/common/minigames/minigame/ttt.qc:309
@@ -1950,7 +1955,7 @@ msgstr "YZ Oyuncusunu Sil"
 
 #: qcsrc/common/minigames/minigame/pp.qc:2
 msgid "Push-Pull"
-msgstr ""
+msgstr "İttir-Çek"
 
 #: qcsrc/common/minigames/minigame/pp.qc:456
 #: qcsrc/common/minigames/minigame/ttt.qc:339
@@ -1967,7 +1972,7 @@ msgstr ""
 #: qcsrc/common/minigames/minigame/pp.qc:464
 #: qcsrc/common/minigames/minigame/ttt.qc:347
 msgid "Wait for your opponent to confirm the rematch"
-msgstr ""
+msgstr "Rakibinizin rövanş için onaylamasını bekleyiniz"
 
 #: qcsrc/common/minigames/minigame/pp.qc:613
 #: qcsrc/common/minigames/minigame/ttt.qc:698
@@ -1980,11 +1985,11 @@ msgstr ""
 
 #: qcsrc/common/minigames/minigame/ps.qc:418
 msgid "All pieces cleared!"
-msgstr ""
+msgstr "Tüm parçalar temizlendi!"
 
 #: qcsrc/common/minigames/minigame/ps.qc:420
 msgid "Remaining pieces:"
-msgstr ""
+msgstr "Kalan parçalar:"
 
 #: qcsrc/common/minigames/minigame/ps.qc:488
 #, c-format
@@ -2014,7 +2019,7 @@ msgstr "Tek Oyuncu"
 #: qcsrc/common/monsters/monster/golem.qh:17
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:17
 msgid "Golem"
-msgstr ""
+msgstr "Golem:"
 
 #: qcsrc/common/monsters/monster/mage.qh:17
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:18
@@ -2023,7 +2028,7 @@ msgstr "Sihirbaz"
 
 #: qcsrc/common/monsters/monster/mage.qh:29
 msgid "Mage spike"
-msgstr ""
+msgstr "Büyücü dikeni"
 
 #: qcsrc/common/monsters/monster/spider.qh:17
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:16
@@ -2036,7 +2041,7 @@ msgstr "Örümcek saldırısı"
 
 #: qcsrc/common/monsters/monster/spider.qh:39
 msgid "Webbed"
-msgstr ""
+msgstr "Ağlandı"
 
 #: qcsrc/common/monsters/monster/wyvern.qh:17
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:19
@@ -2142,7 +2147,7 @@ msgstr "Dost ateşi için hasar numarası çizin"
 #: qcsrc/common/mutators/mutator/offhand_blaster/cl_offhand_blaster.qc:9
 #: qcsrc/menu/xonotic/keybinder.qc:45
 msgid "off-hand hook"
-msgstr ""
+msgstr "boş-el kancası"
 
 #: qcsrc/common/mutators/mutator/hook/cl_hook.qc:12
 #, c-format
@@ -2151,7 +2156,7 @@ msgstr ""
 
 #: qcsrc/common/mutators/mutator/instagib/items.qh:33
 msgid "Vaporizer ammo"
-msgstr ""
+msgstr "Buharlaştırıcı mermisi"
 
 #: qcsrc/common/mutators/mutator/instagib/items.qh:59
 #: qcsrc/common/mutators/mutator/instagib/items.qh:62
@@ -2188,20 +2193,20 @@ msgstr "Tuzak bombası"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:88
 msgid "Veil grenade"
-msgstr ""
+msgstr "Örtü bombası"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:99
 msgid "Ammo grenade"
-msgstr ""
+msgstr "Cephane bombası"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:109
 msgid "Darkness grenade"
-msgstr ""
+msgstr "Karanlık bombası"
 
 #: qcsrc/common/mutators/mutator/nades/nades.qc:139
 #: qcsrc/menu/xonotic/keybinder.qc:60
 msgid "drop weapon / throw nade"
-msgstr ""
+msgstr "silah bırakma / bomba atma"
 
 #: qcsrc/common/mutators/mutator/nades/nades.qc:141
 #, c-format
@@ -2219,15 +2224,15 @@ msgstr ""
 
 #: qcsrc/common/mutators/mutator/overkill/okhmg.qh:22
 msgid "Overkill Heavy Machine Gun"
-msgstr ""
+msgstr "Aşırıhasar ağır makineli tüfek"
 
 #: qcsrc/common/mutators/mutator/overkill/okmachinegun.qh:20
 msgid "Overkill MachineGun"
-msgstr ""
+msgstr "Aşırıhasar makineli tüfek"
 
 #: qcsrc/common/mutators/mutator/overkill/oknex.qh:19
 msgid "Overkill Nex"
-msgstr ""
+msgstr "Aşırıshasar Nex"
 
 #: qcsrc/common/mutators/mutator/overkill/okrpc.qh:22
 msgid "Overkill Rocket Propelled Chainsaw"
@@ -2235,7 +2240,7 @@ msgstr ""
 
 #: qcsrc/common/mutators/mutator/overkill/okshotgun.qh:18
 msgid "Overkill Shotgun"
-msgstr ""
+msgstr "Aşırıhasar Pompalı Tüfek"
 
 #: qcsrc/common/mutators/mutator/powerups/powerup/invisibility.qh:47
 #: qcsrc/common/mutators/mutator/powerups/powerup/invisibility.qh:50
@@ -2263,19 +2268,19 @@ msgstr "Kuvvet"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/burning.qh:16
 msgid "Burning"
-msgstr ""
+msgstr "Yanıyor"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/spawnshield.qh:10
 msgid "Spawn Shield"
-msgstr ""
+msgstr "Diriliş Kalkanı"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/stunned.qh:16
 msgid "Stunned"
-msgstr ""
+msgstr "Sersemlemiş"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/superweapons.qh:7
 msgid "Superweapons"
-msgstr ""
+msgstr "Süpersilahlar"
 
 #: qcsrc/common/mutators/mutator/waypoints/all.inc:3
 msgid "Waypoint"
@@ -2299,7 +2304,7 @@ msgstr "Soğuk!"
 
 #: qcsrc/common/mutators/mutator/waypoints/all.inc:11
 msgid "Reviving"
-msgstr ""
+msgstr "Yeniden canlanıyor"
 
 #: qcsrc/common/mutators/mutator/waypoints/all.inc:13
 msgid "Item"
@@ -2410,11 +2415,11 @@ msgstr "Küre taşıyıcı"
 
 #: qcsrc/common/mutators/mutator/waypoints/all.inc:55
 msgid "Leader"
-msgstr ""
+msgstr "Lider"
 
 #: qcsrc/common/mutators/mutator/waypoints/all.inc:58
 msgid "Goal"
-msgstr ""
+msgstr "Hedef"
 
 #: qcsrc/common/mutators/mutator/waypoints/all.inc:63
 #: qcsrc/common/mutators/mutator/waypoints/all.inc:64
@@ -2478,8 +2483,8 @@ msgstr "^BG%s^BG ^TC^TT^BG bayrağı ele geçirildi"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -2604,12 +2609,12 @@ msgstr "^F2Bir sonraki raundu izleyeceksin"
 
 #: qcsrc/common/notifications/all.inc:273
 msgid "^F2Match is restarting..."
-msgstr ""
+msgstr "^F2Maç yeniden başlatılıyor..."
 
 #: qcsrc/common/notifications/all.inc:274
 #: qcsrc/common/notifications/all.inc:548
 msgid "^F4Countdown stopped!"
-msgstr ""
+msgstr "^F4Gerisayım durduruldu!"
 
 #: qcsrc/common/notifications/all.inc:276
 #, c-format
@@ -3263,7 +3268,7 @@ msgstr ""
 
 #: qcsrc/common/notifications/all.inc:408
 msgid "^BGMonsters are currently disabled"
-msgstr ""
+msgstr "^BGCanavarlar şuan kapatıldı"
 
 #: qcsrc/common/notifications/all.inc:410
 msgid "^BGThe ^TC^TT^BG team held the ball for too long"
@@ -3291,7 +3296,7 @@ msgstr ""
 
 #: qcsrc/common/notifications/all.inc:416
 msgid "^TC^TT^BG generator has been destroyed"
-msgstr ""
+msgstr "^TC^TT^BG bir jeneratör yok edildi"
 
 #: qcsrc/common/notifications/all.inc:417
 msgid "^TC^TT^BG generator spontaneously combusted due to overtime!"
@@ -3681,8 +3686,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
@@ -3794,11 +3799,11 @@ msgstr "^F4Artık yalnızsın!"
 
 #: qcsrc/common/notifications/all.inc:544
 msgid "^BGYou are attacking!"
-msgstr ""
+msgstr "^BGSaldırıdasın!"
 
 #: qcsrc/common/notifications/all.inc:545
 msgid "^BGYou are defending!"
-msgstr ""
+msgstr "^BGSavunmadasın!"
 
 #: qcsrc/common/notifications/all.inc:546
 #, c-format
@@ -3812,24 +3817,24 @@ msgstr ""
 
 #: qcsrc/common/notifications/all.inc:549
 msgid "^BGBegin!"
-msgstr ""
+msgstr "^BGBaşla!"
 
 #: qcsrc/common/notifications/all.inc:550
 msgid "^BGGame starts in"
-msgstr ""
+msgstr "^BGOyun başlıyor"
 
 #: qcsrc/common/notifications/all.inc:551
 #, c-format
 msgid "^BGRound %s starts in"
-msgstr ""
+msgstr "^BGRaunt %s içinde başlıyor"
 
 #: qcsrc/common/notifications/all.inc:552
 msgid "^F4Round cannot start"
-msgstr ""
+msgstr "^F4Raunt başlayamaz"
 
 #: qcsrc/common/notifications/all.inc:557
 msgid "^F2Don't camp!"
-msgstr ""
+msgstr "^F2Pusma!"
 
 #: qcsrc/common/notifications/all.inc:561
 msgid ""
@@ -3840,7 +3845,7 @@ msgstr ""
 
 #: qcsrc/common/notifications/all.inc:562
 msgid "^BGThis flag is currently inactive"
-msgstr ""
+msgstr "^BGBu bayrak şu an aktif değil"
 
 #: qcsrc/common/notifications/all.inc:563
 msgid ""
@@ -3989,7 +3994,7 @@ msgstr "^BGArtık düşmanlar seni radarda görebilir!"
 
 #: qcsrc/common/notifications/all.inc:594
 msgid "^BGYou returned the ^TC^TT^BG flag!"
-msgstr ""
+msgstr "^BGSen geri getirdin ^TC^TT^BG sancağı!"
 
 #: qcsrc/common/notifications/all.inc:595
 msgid "^BGStalemate! Enemies can now see you on radar!"
@@ -4070,7 +4075,7 @@ msgstr ""
 
 #: qcsrc/common/notifications/all.inc:637
 msgid "^F2You got a ^K1BONUS GRENADE^F2!"
-msgstr ""
+msgstr "^F2Sen bir ^K1BONUS BOMBA^F2! kazandın"
 
 #: qcsrc/common/notifications/all.inc:639
 #, c-format
@@ -4083,7 +4088,7 @@ msgstr ""
 
 #: qcsrc/common/notifications/all.inc:640
 msgid "^K1You were punished for attacking your team mates!"
-msgstr ""
+msgstr "^K1Takım arkadaşlarına saldırdığın için cezalandırıldın!"
 
 #: qcsrc/common/notifications/all.inc:641
 msgid "^K1Die camper!"
@@ -4132,7 +4137,7 @@ msgstr "^K1Sıcaklığa dayanamadın!"
 
 #: qcsrc/common/notifications/all.inc:649
 msgid "^K1You need to watch out for monsters!"
-msgstr ""
+msgstr "^K1Canavarlara dikkat et!"
 
 #: qcsrc/common/notifications/all.inc:649
 msgid "^K1You were killed by a monster!"
@@ -4140,23 +4145,23 @@ msgstr "^K1Bir canavar tarafından öldürüldün"
 
 #: qcsrc/common/notifications/all.inc:650
 msgid "^K1Tastes like chicken!"
-msgstr ""
+msgstr "^K1Tadı tavuk gibi!"
 
 #: qcsrc/common/notifications/all.inc:650
 msgid "^K1You forgot to put the pin back in!"
-msgstr ""
+msgstr "^K1Pini geri takmayı unuttun!"
 
 #: qcsrc/common/notifications/all.inc:651
 msgid "^K1Hanging around a napalm explosion is bad!"
-msgstr ""
+msgstr "^K1Napalm patlamasının çevresinde takılmak kötüdür!"
 
 #: qcsrc/common/notifications/all.inc:652
 msgid "^K1You felt a little chilly!"
-msgstr ""
+msgstr "^K1Biraz serinlik hissettin!"
 
 #: qcsrc/common/notifications/all.inc:652
 msgid "^K1You got a little bit too cold!"
-msgstr ""
+msgstr "^K1Biraz fazla soğuğa yakalandın!"
 
 #: qcsrc/common/notifications/all.inc:653
 msgid "^K1Your Healing Nade is a bit defective"
index 192dc7f6c03325b769e6ef97c3aecb08091bf795..70dce422cde9af906f648ae169adf3eabf07caec 100644 (file)
@@ -2480,8 +2480,8 @@ msgstr "^BG%s^BG захопив ^TC^TT^BG прапор"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG захопив ^TC^TT^BG прапор за ^F1%s^BG секунди, побивши попередній "
 "рекорд ^BG%s^BG який становив ^F2%s^BG секунди"
@@ -3699,8 +3699,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index aa55080bd3e7fa76ede652242970461a618065ab..5c1a296a2045a2abd8d56c62a23e80ff21ff29e4 100644 (file)
@@ -2455,8 +2455,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:242
@@ -3658,8 +3658,8 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr ""
 
 #: qcsrc/common/notifications/all.inc:503
index 3b0e18f06596963da2bee423597b2f67fdc4929e..645ccf9c5ace196ea1bbd30c87edef95293b3887 100644 (file)
@@ -984,8 +984,8 @@ msgid ""
 "or in all but these game types. You can also specify 'all' as a\n"
 "field to show all fields available for the current game mode."
 msgstr ""
-"在域前你可以放一个 +(或 -)号,后跟一个以逗号分割的游戏类型列表,\n"
-"之后一个斜杠,以使此域仅显示在这些(或除了这些)游戏类型中。你也可以使"
+"在域前你可以放一个 +(或 -)号,后跟一个以逗号分割的游戏模式列表,\n"
+"之后一个斜杠,以使此域仅显示在这些(或除了这些)游戏模式中。你也可以使"
 "用‘all’以显示当前游戏模式的所有域。"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:727
@@ -1324,7 +1324,7 @@ msgstr "^BG按 ^F2%s^BG 以进入游戏"
 #: qcsrc/client/main.qc:1434
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfotab.qc:38
 msgid "Gametype:"
-msgstr "游戏类型:"
+msgstr "游戏模式:"
 
 #: qcsrc/client/main.qc:1448
 msgid "This match supports"
@@ -1382,7 +1382,7 @@ msgstr "不在意"
 
 #: qcsrc/client/mapvoting.qc:395
 msgid "Decide the gametype"
-msgstr "选择游戏种类"
+msgstr "选择游戏模式"
 
 #: qcsrc/client/mapvoting.qc:395
 msgid "Vote for a map"
@@ -2190,11 +2190,11 @@ msgstr "怪物榴弹"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:78
 msgid "Entrap grenade"
-msgstr "速榴弹"
+msgstr "速榴弹"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:88
 msgid "Veil grenade"
-msgstr "隐身榴弹"
+msgstr "藏匿榴弹"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:99
 msgid "Ammo grenade"
@@ -2202,7 +2202,7 @@ msgstr "弹药榴弹"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:109
 msgid "Darkness grenade"
-msgstr "暗榴弹"
+msgstr "暗榴弹"
 
 #: qcsrc/common/mutators/mutator/nades/nades.qc:139
 #: qcsrc/menu/xonotic/keybinder.qc:60
@@ -2484,8 +2484,8 @@ msgstr "^BG%s^BG 夺取了^TC^TT队^BG旗帜"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG 夺取^TC^TT队^BG旗帜用了 ^F1%s^BG 秒,打破了原来 ^BG%s^BG ^F2%s^BG 秒"
 "的记录"
@@ -3574,7 +3574,7 @@ msgstr "^BG%s%s^K1 被 ^BG%s^K1 放的小火球烧着了%s%s"
 #: qcsrc/common/notifications/all.inc:479
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
-msgstr "^BG%s^K1 驾驭不了这么大的抢%s%s"
+msgstr "^BG%s^K1 没能驾驭这么大的枪%s%s"
 
 #: qcsrc/common/notifications/all.inc:480
 #, c-format
@@ -3693,8 +3693,8 @@ msgstr "^BG%s%s^K1 被 ^BG%s^K1 用绝灭星璇枪刺到人间蒸发%s%s"
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr "^BG%s%s^K1 被 ^BG%s^K1 用绝灭火箭炮链锯锯成两份%s%s"
 
 #: qcsrc/common/notifications/all.inc:503
@@ -10274,7 +10274,7 @@ msgstr "InstaGib(瞬杀)"
 
 #: qcsrc/menu/xonotic/serverlist.qh:160
 msgid "SLCAT^Defrag Mode"
-msgstr "Defrag(无杀戮模式)"
+msgstr "Defrag(休闲)"
 
 #: qcsrc/menu/xonotic/skinlist.qc:70
 msgid "<TITLE>"
index cc82e53b2563412f97800db3aecb2914da349493..af080cc6bf301f2c78096f3499951887d05bf697 100644 (file)
@@ -978,8 +978,8 @@ msgid ""
 "or in all but these game types. You can also specify 'all' as a\n"
 "field to show all fields available for the current game mode."
 msgstr ""
-"在域前你可以放一個 +(或 -)號,後跟一個以逗號分割的遊戲類型列表,\n"
-"之後一個斜槓,以使此域僅顯示在這些(或除了這些)遊戲類型中。你也可以使"
+"在域前你可以放一個 +(或 -)號,後跟一個以逗號分割的遊戲模式列表,\n"
+"之後一個斜槓,以使此域僅顯示在這些(或除了這些)遊戲模式中。你也可以使"
 "用‘all’以顯示當前遊戲模式的所有域。"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:727
@@ -1318,7 +1318,7 @@ msgstr "^BG按 ^F2%s^BG 以進入遊戲"
 #: qcsrc/client/main.qc:1434
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfotab.qc:38
 msgid "Gametype:"
-msgstr "遊戲類型:"
+msgstr "遊戲模式:"
 
 #: qcsrc/client/main.qc:1448
 msgid "This match supports"
@@ -1376,7 +1376,7 @@ msgstr "不在意"
 
 #: qcsrc/client/mapvoting.qc:395
 msgid "Decide the gametype"
-msgstr "選擇遊戲種類"
+msgstr "選擇遊戲模式"
 
 #: qcsrc/client/mapvoting.qc:395
 msgid "Vote for a map"
@@ -2184,11 +2184,11 @@ msgstr "怪物榴彈"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:78
 msgid "Entrap grenade"
-msgstr "æ¸\9b速榴彈"
+msgstr "滯速榴彈"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:88
 msgid "Veil grenade"
-msgstr "隱身榴彈"
+msgstr "藏匿榴彈"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:99
 msgid "Ammo grenade"
@@ -2196,7 +2196,7 @@ msgstr "彈藥榴彈"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:109
 msgid "Darkness grenade"
-msgstr "暗榴彈"
+msgstr "暗榴彈"
 
 #: qcsrc/common/mutators/mutator/nades/nades.qc:139
 #: qcsrc/menu/xonotic/keybinder.qc:60
@@ -2478,8 +2478,8 @@ msgstr "^BG%s^BG 奪取了^TC^TT隊^BG旗幟"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG 奪取^TC^TT隊^BG旗幟用了 ^F1%s^BG 秒,打破了原來 ^BG%s^BG ^F2%s^BG 秒"
 "的記錄"
@@ -3568,7 +3568,7 @@ msgstr "^BG%s%s^K1 被 ^BG%s^K1 放的小火球燒着了%s%s"
 #: qcsrc/common/notifications/all.inc:479
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
-msgstr "^BG%s^K1 駕馭不了這麼大的搶%s%s"
+msgstr "^BG%s^K1 沒能駕馭這麼大的槍%s%s"
 
 #: qcsrc/common/notifications/all.inc:480
 #, c-format
@@ -3687,8 +3687,8 @@ msgstr "^BG%s%s^K1 被 ^BG%s^K1 用絕滅星璇槍刺到人間蒸發%s%s"
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr "^BG%s%s^K1 被 ^BG%s^K1 用絕滅火箭炮鏈鋸鋸成兩份%s%s"
 
 #: qcsrc/common/notifications/all.inc:503
@@ -10268,7 +10268,7 @@ msgstr "InstaGib(瞬殺)"
 
 #: qcsrc/menu/xonotic/serverlist.qh:160
 msgid "SLCAT^Defrag Mode"
-msgstr "Defrag(無殺戮模式)"
+msgstr "Defrag(休閒)"
 
 #: qcsrc/menu/xonotic/skinlist.qc:70
 msgid "<TITLE>"
index 64e844412b62b1fde70751470026b27ffff1ca72..7fbefbc6ad487105f54f156bba214b579c0634a5 100644 (file)
@@ -241,7 +241,7 @@ msgstr "^3雙擊^7一個板面以配置特定板面選項。"
 
 #: qcsrc/client/hud/panel/infomessages.qc:231
 msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
-msgstr "^3CTRL ^7以用碰撞檢測, ^3SHIFT ^7以及"
+msgstr "^3CTRL ^7以用碰撞檢測, ^3SHIFT ^7以及"
 
 #: qcsrc/client/hud/panel/infomessages.qc:232
 msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
@@ -986,8 +986,8 @@ msgid ""
 "or in all but these game types. You can also specify 'all' as a\n"
 "field to show all fields available for the current game mode."
 msgstr ""
-"在域前你可以放一個 +(或 -)號,後跟一個以逗號分割的遊戲型別列表,\n"
-"之後一個斜槓,以使此域僅顯示在這些(或除了這些)遊戲型別中。你也可以使"
+"在域前你可以放一個 +(或 -)號,後跟一個以逗號分割的遊戲類型列表,\n"
+"之後一個斜槓,以使此域僅顯示在這些(或除了這些)遊戲類型中。你也可以使"
 "用‘all’以顯示當前遊戲類型的所有域。"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:727
@@ -1327,7 +1327,7 @@ msgstr "^BG按 ^F2%s^BG 以進入遊戲"
 #: qcsrc/client/main.qc:1434
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfotab.qc:38
 msgid "Gametype:"
-msgstr "遊戲型別:"
+msgstr "遊戲類型:"
 
 #: qcsrc/client/main.qc:1448
 msgid "This match supports"
@@ -1385,7 +1385,7 @@ msgstr "不在意"
 
 #: qcsrc/client/mapvoting.qc:395
 msgid "Decide the gametype"
-msgstr "選擇遊戲種類"
+msgstr "選擇遊戲類型"
 
 #: qcsrc/client/mapvoting.qc:395
 msgid "Vote for a map"
@@ -2193,11 +2193,11 @@ msgstr "怪物榴彈"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:78
 msgid "Entrap grenade"
-msgstr "æ¸\9b速榴彈"
+msgstr "滯速榴彈"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:88
 msgid "Veil grenade"
-msgstr "隱身榴彈"
+msgstr "藏匿榴彈"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:99
 msgid "Ammo grenade"
@@ -2205,7 +2205,7 @@ msgstr "彈藥榴彈"
 
 #: qcsrc/common/mutators/mutator/nades/nades.inc:109
 msgid "Darkness grenade"
-msgstr "暗榴彈"
+msgstr "暗榴彈"
 
 #: qcsrc/common/mutators/mutator/nades/nades.qc:139
 #: qcsrc/menu/xonotic/keybinder.qc:60
@@ -2461,7 +2461,7 @@ msgstr "^1伺服器提示:"
 
 #: qcsrc/common/notifications/all.inc:234
 msgid "^F4NOTE: ^BGChat is currently disabled on this server"
-msgstr "^F4注意:^BG此伺服器當前用了聊天"
+msgstr "^F4注意:^BG此伺服器當前用了聊天"
 
 #: qcsrc/common/notifications/all.inc:235
 msgid "^F4NOTE: ^BGSpectator chat is not sent to players during the match"
@@ -2469,15 +2469,15 @@ msgstr "^F4注意:^BG競賽過程中旁觀者的聊天不會傳送給玩家"
 
 #: qcsrc/common/notifications/all.inc:236
 msgid "^F4NOTE: ^BGPrivate chat is currently disabled on this server"
-msgstr "^F4注意:^BG此伺服器當前用了私密聊天"
+msgstr "^F4注意:^BG此伺服器當前用了私密聊天"
 
 #: qcsrc/common/notifications/all.inc:237
 msgid "^F4NOTE: ^BGSpectator chat is currently disabled on this server"
-msgstr "^F4注意:^BG此伺服器當前用了觀察者聊天"
+msgstr "^F4注意:^BG此伺服器當前用了觀察者聊天"
 
 #: qcsrc/common/notifications/all.inc:238
 msgid "^F4NOTE: ^BGTeam chat is currently disabled on this server"
-msgstr "^F4注意:^BG此伺服器當前用了團隊聊天"
+msgstr "^F4注意:^BG此伺服器當前用了團隊聊天"
 
 #: qcsrc/common/notifications/all.inc:240
 #, c-format
@@ -2487,8 +2487,8 @@ msgstr "^BG%s^BG 奪取了^TC^TT隊^BG旗子"
 #: qcsrc/common/notifications/all.inc:241
 #, c-format
 msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
-"%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
+"^BG%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 "^BG%s^BG 奪取^TC^TT隊^BG旗子用了 ^F1%s^BG 秒,打破了原來 ^BG%s^BG ^F2%s^BG 秒"
 "的記錄"
@@ -3276,7 +3276,7 @@ msgstr "^BG%s^F3 耗盡了生命"
 
 #: qcsrc/common/notifications/all.inc:408
 msgid "^BGMonsters are currently disabled"
-msgstr "^BG怪物當前被用"
+msgstr "^BG怪物當前被用"
 
 #: qcsrc/common/notifications/all.inc:410
 msgid "^BGThe ^TC^TT^BG team held the ball for too long"
@@ -3577,7 +3577,7 @@ msgstr "^BG%s%s^K1 被 ^BG%s^K1 放的小火球燒著了%s%s"
 #: qcsrc/common/notifications/all.inc:479
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
-msgstr "^BG%s^K1 駕馭不了這麼大的搶%s%s"
+msgstr "^BG%s^K1 沒能駕馭這麼大的槍%s%s"
 
 #: qcsrc/common/notifications/all.inc:480
 #, c-format
@@ -3696,8 +3696,8 @@ msgstr "^BG%s%s^K1 被 ^BG%s^K1 用絕滅星璇槍刺到人間蒸發%s%s"
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled Chainsaw"
-"%s%s"
+"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Overkill Rocket Propelled "
+"Chainsaw%s%s"
 msgstr "^BG%s%s^K1 被 ^BG%s^K1 用絕滅火箭炮鏈鋸鋸成兩份%s%s"
 
 #: qcsrc/common/notifications/all.inc:503
@@ -4746,7 +4746,7 @@ msgstr ""
 
 #: qcsrc/common/notifications/all.inc:807
 msgid "^F2Intruder detected, disabling shields!"
-msgstr "^F2檢測到入侵者,正在用護盾!"
+msgstr "^F2檢測到入侵者,正在用護盾!"
 
 #: qcsrc/common/notifications/all.inc:809
 msgid ""
@@ -6503,7 +6503,7 @@ msgstr "提示訊息面板"
 #: qcsrc/menu/xonotic/util.qc:762 qcsrc/menu/xonotic/util.qc:778
 #: qcsrc/menu/xonotic/util.qc:795
 msgid "Disable"
-msgstr "用"
+msgstr "用"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:17
 #: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:15
@@ -7037,7 +7037,7 @@ msgstr "HUD 容器效果:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:95
 msgid "DOCK^Disabled"
-msgstr "用"
+msgstr "用"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:96
 msgid "DOCK^Small"
@@ -7644,7 +7644,7 @@ msgstr "自定義的統計伺服器"
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:203
 #: qcsrc/menu/xonotic/serverlist.qc:1059
 msgid "stats disabled"
-msgstr "用了統計"
+msgstr "用了統計"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:203
 #: qcsrc/menu/xonotic/serverlist.qc:1059
@@ -8241,7 +8241,7 @@ msgstr "時間提醒:"
 
 #: qcsrc/menu/xonotic/dialog_settings_audio.qc:170
 msgid "WRN^Disabled"
-msgstr "已用"
+msgstr "已用"
 
 #: qcsrc/menu/xonotic/dialog_settings_audio.qc:172
 msgid "5 minutes"
@@ -8407,7 +8407,7 @@ msgstr "避免有損的紋理壓縮"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:129
 msgid "Disable sky for performance and visibility"
-msgstr "用天空以提高效能和可見度"
+msgstr "用天空以提高效能和可見度"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:129
 msgid "Show sky"
@@ -8421,7 +8421,7 @@ msgstr "顯示曲面"
 msgid ""
 "Disable textures completely for very slow hardware. This gives a huge "
 "performance boost, but looks very ugly."
-msgstr "在非常慢的硬體上用材質。這會極大提高效能,但看起來很醜"
+msgstr "在非常慢的硬體上用材質。這會極大提高效能,但看起來很醜"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:136
 msgid "Use lightmaps"
@@ -8529,7 +8529,7 @@ msgstr "傷害效果:"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:186
 msgid "DMGFX^Disabled"
-msgstr "用"
+msgstr "用"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:187
 msgid "Skeletal"
@@ -8894,7 +8894,7 @@ msgstr "在提示訊息中顯示連殺:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:46
 msgid "SPREES^Disabled"
-msgstr "用"
+msgstr "用"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:47
 msgid "Target"
@@ -9147,7 +9147,7 @@ msgstr "放縮速度:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:82
 msgid "How fast the view will be zoomed, disable to zoom instantly"
-msgstr "視角放縮速度,用以瞬間放縮"
+msgstr "視角放縮速度,用以瞬間放縮"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:91
 msgid "ZOOM^Instant"
@@ -9322,7 +9322,7 @@ msgstr "啟用內建滑鼠加速"
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:83
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:86
 msgid "Disable system mouse acceleration"
-msgstr "用內建滑鼠加速"
+msgstr "用內建滑鼠加速"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:80
 msgid "Make use of DGA mouse input"
@@ -9346,7 +9346,7 @@ msgstr "起跳時使用噴氣揹包:"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:102
 msgid "JPJUMP^Disabled"
-msgstr "用"
+msgstr "用"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:103
 msgid "Air only"
@@ -9484,7 +9484,7 @@ msgstr "目標值:"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:101
 msgid "TRGT^Disabled"
-msgstr "已用"
+msgstr "已用"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:112
 msgid "Idle limit:"
@@ -9503,11 +9503,11 @@ msgid ""
 "Menu tooltips: disabled, standard or advanced (also shows cvar or console "
 "command bound to the menu item)"
 msgstr ""
-"選單工具提示:已用、標準或高階(也在控制檯顯示繫結到選單項命令的 cvar)"
+"選單工具提示:已用、標準或高階(也在控制檯顯示繫結到選單項命令的 cvar)"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:127
 msgid "TLTIP^Disabled"
-msgstr "已用"
+msgstr "已用"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:128
 msgid "TLTIP^Standard"
@@ -9592,7 +9592,7 @@ msgstr "設定語言"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:72
 msgid "Disable gore effects and harsh language"
-msgstr "用血腥效果和惡劣的語言"
+msgstr "用血腥效果和惡劣的語言"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:73
 msgid "Replace blood and gibs with content that does not have any gore effects"
@@ -9708,7 +9708,7 @@ msgstr "啟用抗鋸齒,可以平滑 3D 幾何的邊緣。注意這可能極
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:76
 msgid "AA^Disabled"
-msgstr "已用"
+msgstr "已用"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:77
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:94
@@ -9740,7 +9740,7 @@ msgstr "各向異性過濾質量"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:93
 msgid "ANISO^Disabled"
-msgstr "已用"
+msgstr "已用"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:96
 msgid "8x"
@@ -9762,7 +9762,7 @@ msgstr "透過在正常渲染開始前繪製一份場景的僅深度版本來防
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:105
 msgid "DF^Disabled"
-msgstr "已用"
+msgstr "已用"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:106
 msgid "DF^World"
@@ -10277,7 +10277,7 @@ msgstr "InstaGib(瞬殺)"
 
 #: qcsrc/menu/xonotic/serverlist.qh:160
 msgid "SLCAT^Defrag Mode"
-msgstr "Defrag(無殺戮模式)"
+msgstr "Defrag(休閒)"
 
 #: qcsrc/menu/xonotic/skinlist.qc:70
 msgid "<TITLE>"
index d99bb2b3397c1c2c2e13f052bf50ce7b2a258db2..b1924e24c191ce5e7900b133b303570a98eb9a92 100644 (file)
@@ -1,5 +1,5 @@
 ast   "Asturian" "Asturianu" 73%
-id_ID "Indonesian" "Bahasa Indonesia" 39%
+id_ID "Indonesian" "Bahasa Indonesia" 40%
 de    "German" "Deutsch" 100%
 de_CH "German (Switzerland)" "Deutsch (Schweiz)" 100%
 en    "English" "English" 100%
@@ -8,7 +8,7 @@ es    "Spanish" "Español" 100%
 fr    "French" "Français" 100%
 ga    "Irish" "Irish" 29%
 it    "Italian" "Italiano" 99%
-la    "Latin" "Lingua Latina" 75%
+la    "Latin" "Lingua Latina" 92%
 hu    "Hungarian" "Magyar" 44%
 nl    "Dutch" "Nederlands" 61%
 pl    "Polish" "Polski" 79%
@@ -17,7 +17,7 @@ pt_BR "Portuguese (Brazil)" "Português (Brasil)" 100%
 ro    "Romanian" "Romana" 67%
 fi    "Finnish" "Suomi" 98%
 sv    "Swedish" "Svenska" 99%
-tr    "Turkish" "Türkçe" 50%
+tr    "Turkish" "Türkçe" 55%
 cs    "Czech" "Čeština" 30%
 el    "Greek" "Ελληνική" 44%
 be    "Belarusian" "Беларуская" 49%
index 229a6024084df01cbabefa97a02de385a558a86a..6084b319effe65738b2e9a45909b7c26c04d4acb 100644 (file)
@@ -122,8 +122,6 @@ float TrueAimCheck(entity wepent)
 
        vector traceorigin = entcs_receiver(player_localentnum - 1).origin + (eZ * STAT(VIEWHEIGHT));
 
-       vecs = decompressShotOrigin(STAT(SHOTORG));
-
        traceline(traceorigin, traceorigin + view_forward * max_shot_distance, mv, ta);
        trueaimpoint = trace_endpos;
        // move trueaimpoint a little bit forward to make the final tracebox reliable
@@ -133,6 +131,8 @@ float TrueAimCheck(entity wepent)
        if(vdist((trueaimpoint - traceorigin), <, g_trueaim_minrange))
                trueaimpoint = traceorigin + view_forward * g_trueaim_minrange;
 
+       vecs = decompressShotOrigin(STAT(SHOTORG));
+
        if(vecs.x > 0)
                vecs.y = -vecs.y;
        else
index 58d497aab77b176a9ef60b951762e60d7eecac95..9e214551097dd0dc60e5d3431cbfd4df32b43ecc 100644 (file)
@@ -1060,13 +1060,25 @@ bool CSQC_Parse_TempEntity()
        return false;
 }
 
+bool autocvar_r_drawfog;
+bool autocvar_r_fog_exp2;
 string forcefog;
 void Fog_Force()
 {
        if (autocvar_cl_orthoview && autocvar_cl_orthoview_nofog)
-               localcmd("\nr_drawfog 0\n");
+       {
+               if (autocvar_r_drawfog)
+                       cvar_set("r_drawfog", "0");
+       }
        else if (forcefog != "")
-               localcmd(sprintf("\nfog %s\nr_fog_exp2 0\nr_drawfog 1\n", forcefog));
+       {
+               // using cvar_set as it's faster and safer than a command
+               if (!autocvar_r_drawfog)
+                       cvar_set("r_drawfog", "1");
+               if (autocvar_r_fog_exp2)
+                       cvar_set("r_fog_exp2", "0");
+               localcmd(sprintf("\nfog %s\n", forcefog));
+       }
 }
 
 bool net_handle_ServerWelcome();
index 288a303ccad4008ab87f4902131381736ee5cb52..7929a450e078d0a9bc339b3f583858e7aae3ab6d 100644 (file)
@@ -78,12 +78,14 @@ entity teamslots[17];    // 17 teams (including "spectator team")
 
 IntrusiveList g_drawables;
 IntrusiveList g_drawables_2d;
+IntrusiveList g_damagetext;
 IntrusiveList g_radarlinks;
 IntrusiveList g_radaricons;
 STATIC_INIT(main)
 {
        g_drawables = IL_NEW();
        g_drawables_2d = IL_NEW();
+       g_damagetext = IL_NEW();
        g_radarlinks = IL_NEW();
        g_radaricons = IL_NEW();
 }
index c9de0d15626ceb79ebf58aadbcf32b523ef5953f..689f4b4cecbdd80ad0c119f2c42fce5be85977bc 100644 (file)
@@ -481,7 +481,7 @@ vector GetCurrentFov(float fov)
                }
        }
 
-       if(almost_equals(current_viewzoom, 1))
+       if(zoomfactor == 1 || current_viewzoom > 0.999) // zoomfactor check prevents a division by 0
                current_zoomfraction = 0;
        else if(almost_equals(current_viewzoom, 1/zoomfactor))
                current_zoomfraction = 1;
@@ -1200,6 +1200,7 @@ void View_PostProcessing()
 {
        float e1 = (autocvar_hud_postprocessing_maxbluralpha != 0);
        float e2 = (autocvar_hud_powerup != 0);
+       bool want_postprocessing = false;
        if(autocvar_hud_postprocessing && (e1 || e2)) // TODO: Remove this code and re-do the postprocess handling in the engine, where it properly belongs.
        {
                // enable or disable rendering types if they are used or not
@@ -1217,6 +1218,7 @@ void View_PostProcessing()
                                old_blurradius = blurradius;
                                old_bluralpha = bluralpha;
                        }
+                       want_postprocessing = true;
                }
                else if(cvar_string("r_glsl_postprocess_uservec1") != "0 0 0 0") // reduce cvar_set spam as much as possible
                {
@@ -1243,18 +1245,24 @@ void View_PostProcessing()
                                cvar_set("r_glsl_postprocess_uservec2", strcat(ftos((sharpen_intensity / 5) * autocvar_hud_powerup), " ", ftos(-sharpen_intensity * autocvar_hud_powerup), " 0 0"));
                                old_sharpen_intensity = sharpen_intensity;
                        }
+                       want_postprocessing = true;
                }
                else if(cvar_string("r_glsl_postprocess_uservec2") != "0 0 0 0") // reduce cvar_set spam as much as possible
                {
                        cvar_set("r_glsl_postprocess_uservec2", "0 0 0 0");
                        old_sharpen_intensity = 0;
                }
-
+       }
+       if (want_postprocessing)
+       {
                if(cvar("r_glsl_postprocess") == 0)
                        cvar_set("r_glsl_postprocess", "2");
        }
-       else if(cvar("r_glsl_postprocess") == 2)
-               cvar_set("r_glsl_postprocess", "0");
+       else
+       {
+               if(cvar("r_glsl_postprocess") == 2)
+                       cvar_set("r_glsl_postprocess", "0");
+       }
 }
 
 void View_Lock()
@@ -1703,6 +1711,7 @@ void CSQC_UpdateView(entity this, float w, float h)
 
        // draw 2D entities
        IL_EACH(g_drawables_2d, it.draw2d, it.draw2d(it));
+       IL_EACH(g_damagetext, it.draw2d, it.draw2d(it));
        Draw_ShowNames_All();
 #if ENABLE_DEBUGDRAW
        Debug_Draw();
index 77fbfc231633cda534ad78aeca6e3484cb2cfdbf..3f7fff9ebe3ad5bfc01b4f1ae582c26b4b273ddb 100644 (file)
@@ -167,8 +167,11 @@ void freezetag_Add_Score(entity targ, entity attacker)
        {
                // got frozen by an enemy
                // counted as "kill" and "death" already
+               if(SAME_TEAM(attacker, targ))
+                       GameRules_scoring_add(attacker, SCORE, -1);
+               else
+                       GameRules_scoring_add(attacker, SCORE, +1);
                GameRules_scoring_add(targ, SCORE, -1);
-               GameRules_scoring_add(attacker, SCORE, +1);
        }
        // else nothing - got frozen by the game type rules themselves
 }
@@ -365,6 +368,11 @@ MUTATOR_HOOKFUNCTION(ft, PlayerDies)
 
        if(ITEM_DAMAGE_NEEDKILL(frag_deathtype))
        {
+               // can't use freezetag_Add_Score here since it doesn't assign any points
+               // if the attacker is not a player (e.g. triggerhurt) by design
+               if ((STAT(FROZEN, frag_target) != FROZEN_NORMAL) && !IS_PLAYER(frag_attacker))
+                       GameRules_scoring_add(frag_target, SCORE, -1);
+
                // by restoring some health right after player death (soft-kill)
                // weapons and ammo won't be reset
                SetResourceExplicit(frag_target, RES_HEALTH, 1);
index 82f7088e57c54245fb2c0b9f0cda1ef39cf01b96..94422b3bb397d58e42b079204bf17ef14429657b 100644 (file)
@@ -242,6 +242,25 @@ vector trigger_push_velocity_calculatevelocity(entity this, vector org, entity t
        return vs + '0 0 1' * vz;
 }
 
+#ifdef SVQC
+void trigger_push_velocity_think(entity this)
+{
+       bool found = false;
+       IL_EACH(g_moveables, it.last_pushed == this,
+       {
+               if(!WarpZoneLib_ExactTrigger_Touch(this, it, false))
+                       it.last_pushed = NULL;
+               else
+                       found = true;
+       });
+
+       if(found)
+               this.nextthink = time;
+       else
+               setthink(this, func_null);
+}
+#endif
+
 bool jumppad_push(entity this, entity targ, bool is_velocity_pad)
 {
        if (!isPushable(targ))
@@ -262,6 +281,11 @@ bool jumppad_push(entity this, entity targ, bool is_velocity_pad)
                else
                {
                        targ.last_pushed = this; // may be briefly out of sync between client and server if client prediction is toggled
+
+                       #ifdef SVQC
+                       setthink(this, trigger_push_velocity_think);
+                       this.nextthink = time;
+                       #endif
                }
        }
 
index e2208fb34e3837c8a4a5b05011135ce9e3fca359..8383626fc718733f0cfc76f0e5daa69b1166df76 100644 (file)
 #include "cl_damagetext.qh"
 
-// no translatable cvar description please
-AUTOCVAR_SAVE(cl_damagetext,                        bool,   true,       "Draw damage dealt where you hit the enemy");
-AUTOCVAR_SAVE(cl_damagetext_format,                 string, "-{total}", "How to format the damage text. {health}, {armor}, {total}, {potential}: full damage not capped to target's health, {potential_health}: health damage not capped to target's health");
-AUTOCVAR_SAVE(cl_damagetext_format_verbose,         bool,   false,      "{health} shows {potential_health} too when they differ; {total} shows {potential} too when they differ");
-AUTOCVAR_SAVE(cl_damagetext_format_hide_redundant,  bool,   false,      "hide {armor} if 0; hide {potential} and {potential_health} when same as actual");
-STATIC_INIT(DamageText_LegacyFormat) {
-    // damagetext used to be off by default and the cvar got saved in people's configs along with the old format
-    // enable damagetext while updating the format for a one time effect
-    if (strstrofs(autocvar_cl_damagetext_format, "{", 0) < 0) {
-        localcmd("\nseta cl_damagetext 1\n");
-        localcmd("\nseta cl_damagetext_format -{total}\n");
-    };
-}
-AUTOCVAR_SAVE(cl_damagetext_color,                  vector, '1 1 0',    "Damage text color");
-AUTOCVAR_SAVE(cl_damagetext_color_per_weapon,       bool,   false,      "Damage text uses weapon color");
-AUTOCVAR_SAVE(cl_damagetext_size_min,               float,  10,          "Damage text font size for small damage");
-AUTOCVAR_SAVE(cl_damagetext_size_min_damage,        float,  25,          "How much damage is considered small");
-AUTOCVAR_SAVE(cl_damagetext_size_max,               float,  16,         "Damage text font size for large damage");
-AUTOCVAR_SAVE(cl_damagetext_size_max_damage,        float,  140,        "How much damage is considered large");
-AUTOCVAR_SAVE(cl_damagetext_alpha_start,            float,  1,          "Damage text initial alpha");
-AUTOCVAR_SAVE(cl_damagetext_alpha_lifetime,         float,  3,          "Damage text lifetime in seconds");
-AUTOCVAR_SAVE(cl_damagetext_velocity_screen,        vector, '0 0 0',    "Damage text move direction (screen coordinates)");
-AUTOCVAR_SAVE(cl_damagetext_velocity_world,         vector, '0 0 20',   "Damage text move direction (world coordinates relative to player's view)");
-AUTOCVAR_SAVE(cl_damagetext_offset_screen,          vector, '0 -45 0',  "Damage text offset (screen coordinates)");
-AUTOCVAR_SAVE(cl_damagetext_offset_world,           vector, '0 0 0',    "Damage text offset (world coordinates relative to player's view)");
-AUTOCVAR_SAVE(cl_damagetext_accumulate_range,       float,  30,         "Damage text spawned within this range is accumulated");
-AUTOCVAR_SAVE(cl_damagetext_accumulate_alpha_rel,   float,  0.65,       "Only update existing damage text when it's above this much percentage (0 to 1) of the starting alpha");
-AUTOCVAR_SAVE(cl_damagetext_friendlyfire,           int,    1,          "0: never show for friendly fire, 1: when more than 0 damage, 2: always");
-AUTOCVAR_SAVE(cl_damagetext_friendlyfire_color,     vector, '1 0 0',    "Damage text color for friendlyfire");
-
-AUTOCVAR_SAVE(cl_damagetext_2d,                     bool,   true,       "Show damagetext in 2D coordinates if the enemy's location is not known");
-AUTOCVAR_SAVE(cl_damagetext_2d_pos,                 vector, '0.47 0.53 0',     "2D damage text initial position (X and Y between 0 and 1)");
-AUTOCVAR_SAVE(cl_damagetext_2d_alpha_start,         float,  1,          "2D damage text initial alpha");
-AUTOCVAR_SAVE(cl_damagetext_2d_alpha_lifetime,      float,  1.3,        "2D damage text lifetime (alpha fading) in seconds");
-AUTOCVAR_SAVE(cl_damagetext_2d_size_lifetime,       float,  3,          "2D damage text lifetime (size shrinking) in seconds");
-AUTOCVAR_SAVE(cl_damagetext_2d_velocity,            vector, '-25 0 0',  "2D damage text move direction (screen coordinates)");
-AUTOCVAR_SAVE(cl_damagetext_2d_overlap_offset,      vector, '0 -15 0',  "Offset 2D damage text by this much to prevent overlapping (screen coordinates)");
-AUTOCVAR_SAVE(cl_damagetext_2d_close_range,         float,  125,        "Always use 2D damagetext for hits closer that this");
-AUTOCVAR_SAVE(cl_damagetext_2d_out_of_view,         bool,   true,       "Always use 2D damagetext for hits that occurred off-screen");
-
 CLASS(DamageText, Object)
-    ATTRIB(DamageText, m_color, vector, autocvar_cl_damagetext_color);
-    ATTRIB(DamageText, m_color_friendlyfire, vector, autocvar_cl_damagetext_friendlyfire_color);
-    ATTRIB(DamageText, m_size, float, autocvar_cl_damagetext_size_min);
-    ATTRIB(DamageText, alpha, float, autocvar_cl_damagetext_alpha_start);
-    ATTRIB(DamageText, fade_rate, float, 0);
-    ATTRIB(DamageText, m_shrink_rate, float, 0);
-    ATTRIB(DamageText, m_group, int, 0);
-    ATTRIB(DamageText, m_friendlyfire, bool, false);
-    ATTRIB(DamageText, m_healthdamage, int, 0);
-    ATTRIB(DamageText, m_armordamage, int, 0);
-    ATTRIB(DamageText, m_potential_damage, int, 0);
-    ATTRIB(DamageText, m_deathtype, int, 0);
-    ATTRIB(DamageText, hit_time, float, 0);
-    ATTRIB(DamageText, text, string, string_null);
-    ATTRIB(DamageText, m_screen_coords, bool, false);
-
-    STATIC_ATTRIB(DamageText, screen_first, DamageText, NULL);
-    STATIC_ATTRIB(DamageText, screen_count, int, 0);
-
-    void DamageText_draw2d(DamageText this) {
-        float since_hit = time - this.hit_time;
-        // can't use `dt = hit_time - prev_update_time` because shrinking wouldn't be linear
-        float size = this.m_size - since_hit * this.m_shrink_rate * this.m_size;
-        float alpha_ = this.alpha - since_hit * this.fade_rate;
-        if (alpha_ <= 0 || size <= 0) {
-            delete(this);
-            return;
-        }
-
-        vector screen_pos;
-        if (this.m_screen_coords) {
-            screen_pos = this.origin + since_hit * autocvar_cl_damagetext_2d_velocity;
-        } else {
-            vector forward, right, up;
-            MAKE_VECTORS(view_angles, forward, right, up);
-            vector world_offset = since_hit * autocvar_cl_damagetext_velocity_world + autocvar_cl_damagetext_offset_world;
-            vector world_pos = this.origin + world_offset.x * forward + world_offset.y * right + world_offset.z * up;
-            screen_pos = project_3d_to_2d(world_pos) + since_hit * autocvar_cl_damagetext_velocity_screen + autocvar_cl_damagetext_offset_screen;
-        }
-        screen_pos.y += size / 2;
-
-        if (screen_pos.z >= 0) {
-            screen_pos.z = 0;
-            vector rgb;
-            if (this.m_friendlyfire) {
-                rgb = this.m_color_friendlyfire;
-            } else {
-                rgb = this.m_color;
-            }
-            if (autocvar_cl_damagetext_color_per_weapon) {
-                Weapon w = DEATH_WEAPONOF(this.m_deathtype);
-                if (w != WEP_Null) rgb = w.wpcolor;
-            }
-
-            vector drawfontscale_save = drawfontscale;
-            drawfontscale = (size / autocvar_cl_damagetext_size_max) * '1 1 0';
-            screen_pos.y -= drawfontscale.x * size / 2;
-            drawcolorcodedstring2_builtin(screen_pos, this.text, autocvar_cl_damagetext_size_max * '1 1 0', rgb, alpha_, DRAWFLAG_NORMAL);
-            drawfontscale = drawfontscale_save;
-        }
-    }
-    ATTRIB(DamageText, draw2d, void(DamageText), DamageText_draw2d);
-
-    void DamageText_update(DamageText this, vector _origin, int _health, int _armor, int _potential_damage, int _deathtype) {
-        this.m_healthdamage = _health;
-        this.m_armordamage = _armor;
-        this.m_potential_damage = _potential_damage;
-        this.m_deathtype = _deathtype;
-        setorigin(this, _origin);
-        if (this.m_screen_coords) {
-            this.alpha = autocvar_cl_damagetext_2d_alpha_start;
-        } else {
-            this.alpha = autocvar_cl_damagetext_alpha_start;
-        }
-        this.hit_time = time;
-
-        int health = rint(this.m_healthdamage / DAMAGETEXT_PRECISION_MULTIPLIER);
-        int armor = rint(this.m_armordamage / DAMAGETEXT_PRECISION_MULTIPLIER);
-        int total = rint((this.m_healthdamage + this.m_armordamage) / DAMAGETEXT_PRECISION_MULTIPLIER);
-        int potential = rint(this.m_potential_damage / DAMAGETEXT_PRECISION_MULTIPLIER);
-        int potential_health = rint((this.m_potential_damage - this.m_armordamage) / DAMAGETEXT_PRECISION_MULTIPLIER);
-
-        bool redundant = almost_equals_eps(this.m_healthdamage + this.m_armordamage, this.m_potential_damage, 5);
-
-        string s = autocvar_cl_damagetext_format;
-        s = strreplace("{armor}", (
-            (this.m_armordamage == 0 && autocvar_cl_damagetext_format_hide_redundant)
-                ? ""
-                : sprintf("%d", armor)
-            ), s);
-        s = strreplace("{potential}", (
-            (redundant && autocvar_cl_damagetext_format_hide_redundant)
-                ? ""
-                : sprintf("%d", potential)
-            ), s);
-        s = strreplace("{potential_health}", (
-            (redundant && autocvar_cl_damagetext_format_hide_redundant)
-                ? ""
-                : sprintf("%d", potential_health)
-            ), s);
-
-        s = strreplace("{health}", (
-            (health == potential_health || !autocvar_cl_damagetext_format_verbose)
-                ? sprintf("%d",      health)
-                : sprintf("%d (%d)", health, potential_health)
-            ), s);
-        s = strreplace("{total}", (
-            (total == potential || !autocvar_cl_damagetext_format_verbose)
-                ? sprintf("%d",      total)
-                : sprintf("%d (%d)", total, potential)
-            ), s);
-
-        // futureproofing: remove any remaining (unknown) format strings in case we add new ones in the future
-        // so players can use them on new servers and still have working damagetext on old ones
-        while (true) {
-            int opening_pos = strstrofs(s, "{", 0);
-            if (opening_pos == -1) break;
-            int closing_pos = strstrofs(s, "}", opening_pos);
-            if (closing_pos == -1 || closing_pos <= opening_pos) break;
-            s = strcat(
-                substring(s, 0, opening_pos),
-                substring_range(s, closing_pos + 1, strlen(s))
-            );
-        }
-
-        strcpy(this.text, s);
-
-        this.m_size = map_bound_ranges(potential,
-            autocvar_cl_damagetext_size_min_damage, autocvar_cl_damagetext_size_max_damage,
-            autocvar_cl_damagetext_size_min, autocvar_cl_damagetext_size_max);
-    }
-
-    CONSTRUCTOR(DamageText, int _group, vector _origin, bool _screen_coords, int _health, int _armor, int _potential_damage, int _deathtype, bool _friendlyfire) {
-        CONSTRUCT(DamageText);
-        this.m_group = _group;
-        this.m_friendlyfire = _friendlyfire;
-        this.m_screen_coords = _screen_coords;
-        if (_screen_coords) {
-            this.fade_rate = 1 / autocvar_cl_damagetext_2d_alpha_lifetime;
-            this.m_shrink_rate = 1 / autocvar_cl_damagetext_2d_size_lifetime;
-        } else {
-            this.fade_rate = 1 / autocvar_cl_damagetext_alpha_lifetime;
-            this.m_shrink_rate = 0;
-        }
-        DamageText_update(this, _origin, _health, _armor, _potential_damage, _deathtype);
-        IL_PUSH(g_drawables_2d, this);
-    }
-
-    DESTRUCTOR(DamageText) {
-        strfree(this.text);
-        if (this == DamageText_screen_first) {
-            // start from 0 offset again, hopefully, others (if any) will have faded away by now
-            DamageText_screen_first = NULL;
-            DamageText_screen_count = 0;
-        }
-    }
+       ATTRIB(DamageText, m_color, vector, autocvar_cl_damagetext_color);
+       ATTRIB(DamageText, m_color_friendlyfire, vector, autocvar_cl_damagetext_friendlyfire_color);
+       ATTRIB(DamageText, m_size, float, autocvar_cl_damagetext_size_min);
+       ATTRIB(DamageText, alpha, float, autocvar_cl_damagetext_alpha_start);
+       ATTRIB(DamageText, fade_rate, float, 0);
+       ATTRIB(DamageText, m_shrink_rate, float, 0);
+       ATTRIB(DamageText, m_group, int, 0);
+       ATTRIB(DamageText, m_friendlyfire, bool, false);
+       ATTRIB(DamageText, m_healthdamage, int, 0);
+       ATTRIB(DamageText, m_armordamage, int, 0);
+       ATTRIB(DamageText, m_potential_damage, int, 0);
+       ATTRIB(DamageText, m_deathtype, int, 0);
+       ATTRIB(DamageText, hit_time, float, 0);
+       ATTRIB(DamageText, text, string, string_null);
+       ATTRIB(DamageText, m_screen_coords, bool, false);
+
+       STATIC_ATTRIB(DamageText, screen_count, int, 0);
+
+       void DamageText_draw2d(DamageText this)
+       {
+               float since_hit = time - this.hit_time;
+               // can't use `dt = hit_time - prev_update_time` because shrinking wouldn't be linear
+               float size = this.m_size - since_hit * this.m_shrink_rate * this.m_size;
+               float alpha_ = this.alpha - since_hit * this.fade_rate;
+               bool haslifetime = (autocvar_cl_damagetext_lifetime < 0 // negative ignores lifetime
+                               || (since_hit < autocvar_cl_damagetext_lifetime));
+               if (alpha_ <= 0 || size <= 0 || !haslifetime)
+               {
+                       IL_REMOVE(g_damagetext, this);
+                       delete(this);
+                       return;
+               }
+
+               vector screen_pos;
+               if (this.m_screen_coords)
+                       screen_pos = this.origin + since_hit * autocvar_cl_damagetext_2d_velocity;
+               else
+               {
+                       vector forward, right, up;
+                       MAKE_VECTORS(view_angles, forward, right, up);
+
+                       vector world_offset = since_hit * autocvar_cl_damagetext_velocity_world
+                                       + autocvar_cl_damagetext_offset_world;
+                       vector world_pos = this.origin
+                                        + world_offset.x * forward
+                                        + world_offset.y * right
+                                        + world_offset.z * up;
+
+                       screen_pos = project_3d_to_2d(world_pos)
+                               + (since_hit * autocvar_cl_damagetext_velocity_screen)
+                               + autocvar_cl_damagetext_offset_screen;
+               }
+               screen_pos.y += size / 2;
+
+               // strip trailing spaces
+               string dtext = this.text;
+               int j = strlen(dtext) - 1;
+               while (substring(dtext, j, 1) == " " && j >= 0)
+                       --j;
+               if (j < strlen(dtext) - 1)
+                       dtext = substring(dtext, 0, j + 1);
+
+               // strip leading spaces
+               j = 0;
+               while (substring(dtext, j, 1) == " " && j < strlen(dtext))
+                       ++j;
+               if (j > 0)
+                       dtext = substring(dtext, j, strlen(dtext) - j);
+
+               // Center damage text
+               screen_pos.x -= stringwidth(dtext, true, hud_fontsize * 2) * 0.5;
+
+               if (screen_pos.z >= 0)
+               {
+                       screen_pos.z = 0;
+                       vector rgb;
+                       if (this.m_friendlyfire)
+                               rgb = this.m_color_friendlyfire;
+                       else
+                               rgb = this.m_color;
+
+                       if (autocvar_cl_damagetext_color_per_weapon)
+                       {
+                               Weapon w = DEATH_WEAPONOF(this.m_deathtype);
+                               if (w != WEP_Null) rgb = w.wpcolor;
+                       }
+
+                       vector drawfontscale_save = drawfontscale;
+                       drawfontscale = (size / autocvar_cl_damagetext_size_max) * '1 1 0';
+                       screen_pos.y -= drawfontscale.x * size / 2;
+                       drawcolorcodedstring2_builtin(screen_pos, this.text,
+                                       autocvar_cl_damagetext_size_max * '1 1 0',
+                                       rgb, alpha_, DRAWFLAG_NORMAL);
+                       drawfontscale = drawfontscale_save;
+               }
+       }
+       ATTRIB(DamageText, draw2d, void(DamageText), DamageText_draw2d);
+
+       void DamageText_update(DamageText this, vector _origin, bool screen_coords,
+                       int _health, int _armor, int _potential_damage, int _deathtype)
+       {
+               this.m_healthdamage = _health;
+               this.m_armordamage = _armor;
+               this.m_potential_damage = _potential_damage;
+               this.m_deathtype = _deathtype;
+               this.hit_time = time;
+               setorigin(this, _origin);
+               this.m_screen_coords = screen_coords;
+               if (this.m_screen_coords)
+                       this.alpha = autocvar_cl_damagetext_2d_alpha_start;
+               else
+                       this.alpha = autocvar_cl_damagetext_alpha_start;
+
+               int health           = rint(this.m_healthdamage
+                                    / DAMAGETEXT_PRECISION_MULTIPLIER);
+               int armor            = rint(this.m_armordamage
+                                    / DAMAGETEXT_PRECISION_MULTIPLIER);
+               int total            = rint((this.m_healthdamage + this.m_armordamage)
+                                    / DAMAGETEXT_PRECISION_MULTIPLIER);
+               int potential        = rint(this.m_potential_damage
+                                    / DAMAGETEXT_PRECISION_MULTIPLIER);
+               int potential_health = rint((this.m_potential_damage - this.m_armordamage)
+                                    / DAMAGETEXT_PRECISION_MULTIPLIER);
+
+               bool redundant = almost_equals_eps(this.m_healthdamage + this.m_armordamage,
+                               this.m_potential_damage, 5);
+
+               string s = autocvar_cl_damagetext_format;
+               s = strreplace("{armor}", (
+                       (this.m_armordamage == 0 && autocvar_cl_damagetext_format_hide_redundant)
+                               ? ""
+                               : sprintf("%d", armor)
+                       ), s);
+               s = strreplace("{potential}", (
+                       (redundant && autocvar_cl_damagetext_format_hide_redundant)
+                               ? ""
+                               : sprintf("%d", potential)
+                       ), s);
+               s = strreplace("{potential_health}", (
+                       (redundant && autocvar_cl_damagetext_format_hide_redundant)
+                               ? ""
+                               : sprintf("%d", potential_health)
+                       ), s);
+
+               s = strreplace("{health}", (
+                       (health == potential_health || !autocvar_cl_damagetext_format_verbose)
+                               ? sprintf("%d",      health)
+                               : sprintf("%d (%d)", health, potential_health)
+                       ), s);
+               s = strreplace("{total}", (
+                       (total == potential || !autocvar_cl_damagetext_format_verbose)
+                               ? sprintf("%d",      total)
+                               : sprintf("%d (%d)", total, potential)
+                       ), s);
+
+               // futureproofing: remove any remaining (unknown) format strings
+               // in case we add new ones in the future so players can use them
+               // on new servers and still have working damagetext on old ones
+               while (true)
+               {
+                       int opening_pos = strstrofs(s, "{", 0);
+                       if (opening_pos == -1) break;
+                       int closing_pos = strstrofs(s, "}", opening_pos);
+                       if (closing_pos == -1 || closing_pos <= opening_pos) break;
+                       s = strcat(
+                               substring(s, 0, opening_pos),
+                               substring_range(s, closing_pos + 1, strlen(s))
+                       );
+               }
+
+               strcpy(this.text, s);
+
+               this.m_size = map_bound_ranges(potential,
+                       autocvar_cl_damagetext_size_min_damage, autocvar_cl_damagetext_size_max_damage,
+                       autocvar_cl_damagetext_size_min,        autocvar_cl_damagetext_size_max);
+       }
+
+       CONSTRUCTOR(DamageText, int _group, vector _origin, bool _screen_coords,
+               int _health, int _armor, int _potential_damage, int _deathtype, bool _friendlyfire)
+       {
+               CONSTRUCT(DamageText);
+               this.m_group = _group;
+               this.m_friendlyfire = _friendlyfire;
+               this.m_screen_coords = _screen_coords;
+               if (_screen_coords)
+               {
+                       if (autocvar_cl_damagetext_2d_alpha_lifetime)
+                               this.fade_rate = 1 / autocvar_cl_damagetext_2d_alpha_lifetime;
+                       if (autocvar_cl_damagetext_2d_size_lifetime)
+                               this.m_shrink_rate = 1 / autocvar_cl_damagetext_2d_size_lifetime;
+               }
+               else
+               {
+                       if (autocvar_cl_damagetext_alpha_lifetime)
+                               this.fade_rate = 1 / autocvar_cl_damagetext_alpha_lifetime;
+                       this.m_shrink_rate = 0;
+               }
+               DamageText_update(this, _origin, _screen_coords,
+                       _health, _armor, _potential_damage, _deathtype);
+               IL_PUSH(g_damagetext, this);
+       }
+
+       DESTRUCTOR(DamageText)
+       {
+               strfree(this.text);
+               --DamageText_screen_count;
+       }
 ENDCLASS(DamageText)
 
-float current_alpha(entity damage_text) {
-    // alpha doesn't change - actual alpha is always calculated from the initial value
-    return damage_text.alpha - (time - damage_text.hit_time) * damage_text.fade_rate;
+float current_alpha(entity damage_text)
+{
+       // alpha doesn't change - actual alpha is always calculated from the initial value
+       return damage_text.alpha - (time - damage_text.hit_time) * damage_text.fade_rate;
 }
 
 NET_HANDLE(damagetext, bool isNew)
 {
-    make_pure(this);
-    int server_entity_index = ReadByte();
-    int deathtype = ReadInt24_t();
-    int flags = ReadByte();
-    bool friendlyfire = flags & DTFLAG_SAMETEAM;
-
-    int health, armor, potential_damage;
-    if (flags & DTFLAG_BIG_HEALTH) health = ReadInt24_t();
-    else health = ReadShort();
-    if (flags & DTFLAG_NO_ARMOR) armor = 0;
-    else if (flags & DTFLAG_BIG_ARMOR) armor = ReadInt24_t();
-    else armor = ReadShort();
-    if (flags & DTFLAG_NO_POTENTIAL) potential_damage = health + armor;
-    else if (flags & DTFLAG_BIG_POTENTIAL) potential_damage = ReadInt24_t();
-    else potential_damage = ReadShort();
-
-    return = true;
-    if (!isNew) return;
-    if (autocvar_cl_damagetext == 0) return;
-    if (friendlyfire) {
-        if (autocvar_cl_damagetext_friendlyfire == 0) return;
-        if (autocvar_cl_damagetext_friendlyfire == 1 && health == 0 && armor == 0) return;
-    }
-
-    int client_entity_index = server_entity_index - 1;
-    entity entcs = entcs_receiver(client_entity_index);
-
-    bool can_use_3d = entcs && entcs.has_origin;
-    bool too_close = vdist(entcs.origin - view_origin, <, autocvar_cl_damagetext_2d_close_range);
-    bool prefer_in_view = autocvar_cl_damagetext_2d_out_of_view && !projected_on_screen(project_3d_to_2d(entcs.origin));
-    bool prefer_2d = spectatee_status != -1 && autocvar_cl_damagetext_2d && (too_close || prefer_in_view);
-
-    if (can_use_3d && !prefer_2d) {
-        // world coords
-        // 1 as min because shotgun sends damagetext per pellet (see https://gitlab.com/xonotic/xonotic-data.pk3dir/issues/1994).
-        for (entity e = findradius(entcs.origin, max(autocvar_cl_damagetext_accumulate_range, 1)); e; e = e.chain) {
-            if (e.instanceOfDamageText
-                && !e.m_screen_coords // we're using origin for both world coords and screen coords so avoid mismatches
-                && e.m_group == server_entity_index
-                && current_alpha(e) > autocvar_cl_damagetext_accumulate_alpha_rel * autocvar_cl_damagetext_alpha_start) {
-                DamageText_update(e, entcs.origin, e.m_healthdamage + health, e.m_armordamage + armor, e.m_potential_damage + potential_damage, deathtype);
-                return;
-            }
-        }
-        make_impure(NEW(DamageText, server_entity_index, entcs.origin, false, health, armor, potential_damage, deathtype, friendlyfire));
-    } else if (autocvar_cl_damagetext_2d && spectatee_status != -1) {
-        // screen coords only
-        vector screen_pos = vec2(vid_conwidth * autocvar_cl_damagetext_2d_pos.x, vid_conheight * autocvar_cl_damagetext_2d_pos.y);
-        IL_EACH(g_drawables_2d, it.instanceOfDamageText && it.m_screen_coords && it.m_group == server_entity_index, {
-            DamageText_update(it, screen_pos, it.m_healthdamage + health, it.m_armordamage + armor, it.m_potential_damage + potential_damage, deathtype);
-            return;
-        });
-
-        // when hitting multiple enemies, dmgtext would overlap
-        if (DamageText_screen_first == NULL) {
-            DamageText dt = NEW(DamageText, server_entity_index, screen_pos, true, health, armor, potential_damage, deathtype, friendlyfire);
-            make_impure(dt);
-            DamageText_screen_first = dt;
-            DamageText_screen_count = 1;
-        } else {
-            screen_pos += autocvar_cl_damagetext_2d_overlap_offset * DamageText_screen_count;
-            DamageText_screen_count++;
-            make_impure(NEW(DamageText, server_entity_index, screen_pos, true, health, armor, potential_damage, deathtype, friendlyfire));
-        }
-    }
+       make_pure(this);
+       int server_entity_index = ReadByte();
+       int deathtype = ReadInt24_t();
+       int flags = ReadByte();
+       bool friendlyfire = flags & DTFLAG_SAMETEAM;
+
+       int health, armor, potential_damage;
+       if (flags & DTFLAG_BIG_HEALTH) health = ReadInt24_t();
+       else health = ReadShort();
+       if (flags & DTFLAG_NO_ARMOR) armor = 0;
+       else if (flags & DTFLAG_BIG_ARMOR) armor = ReadInt24_t();
+       else armor = ReadShort();
+       if (flags & DTFLAG_NO_POTENTIAL) potential_damage = health + armor;
+       else if (flags & DTFLAG_BIG_POTENTIAL) potential_damage = ReadInt24_t();
+       else potential_damage = ReadShort();
+
+       return = true;
+       if (!isNew) return;
+       if (autocvar_cl_damagetext == 0) return;
+       if (friendlyfire)
+       {
+               if (autocvar_cl_damagetext_friendlyfire == 0)
+                       return;
+
+               if (autocvar_cl_damagetext_friendlyfire == 1
+               && health == 0 && armor == 0)
+                       return;
+       }
+
+       int client_entity_index = server_entity_index - 1;
+       entity entcs = entcs_receiver(client_entity_index);
+
+       bool can_use_3d = entcs && entcs.has_origin;
+       bool too_close = vdist(entcs.origin - view_origin, <, autocvar_cl_damagetext_2d_close_range);
+       bool prefer_in_view = autocvar_cl_damagetext_2d_out_of_view && !projected_on_screen(project_3d_to_2d(entcs.origin));
+       bool prefer_2d = spectatee_status != -1 && autocvar_cl_damagetext_2d && (too_close || prefer_in_view);
+
+       vector position;
+       bool is2d;
+       entity entDT = NULL; // which DT to update
+
+       float alphathreshold = autocvar_cl_damagetext_accumulate_alpha_rel
+                       * autocvar_cl_damagetext_alpha_start;
+
+       // check if this entity already has a DamageText for it
+       IL_EACH(g_damagetext, it.m_group == server_entity_index, {
+               // if the time window where damage accumulates closes,
+               // disown the parent entity from this DamageText
+               // and (likely) give the entity a new DT afterwards
+               // this should only cancel damage accumulation for this DT
+               if ((autocvar_cl_damagetext_accumulate_lifetime >= 0) // negative never disowns
+               && (time - it.hit_time > autocvar_cl_damagetext_accumulate_lifetime)
+               && (current_alpha(it) > alphathreshold))
+               {
+                       it.m_group = 0;
+               }
+               else
+               {
+                       health += it.m_healthdamage;
+                       armor += it.m_armordamage;
+                       potential_damage += it.m_potential_damage;
+
+                       entDT = it;
+               }
+               break;
+       });
+
+       if (can_use_3d && !prefer_2d)
+       {
+               // world coords
+               is2d = false;
+               position = entcs.origin;
+
+               if (entDT)
+                       goto updateDT;
+
+               // 3D DamageTexts can later be changed into 2D,
+               // increment this here just in case
+               ++DamageText_screen_count;
+               goto spawnnewDT;
+       }
+       else if (autocvar_cl_damagetext_2d && spectatee_status != -1)
+       {
+               // screen coords only
+               is2d = true;
+               position = vec2(vid_conwidth  * autocvar_cl_damagetext_2d_pos.x,
+                               vid_conheight * autocvar_cl_damagetext_2d_pos.y);
+
+               if (entDT)
+                       goto updateDT;
+
+               // offset when hitting multiple enemies, dmgtext would overlap
+               position += autocvar_cl_damagetext_2d_overlap_offset * DamageText_screen_count++;
+               goto spawnnewDT;
+       }
+       return;
+
+LABEL(updateDT)
+       DamageText_update(entDT, position, is2d, health, armor, potential_damage, deathtype);
+       return;
+
+LABEL(spawnnewDT)
+       NEW(DamageText, server_entity_index, position, is2d,
+               health, armor, potential_damage, deathtype, friendlyfire);
+       return;
 }
index 6f70f09beec2219624baeca92e2cd7deaa104fb4..f845a97cd225fd3d2fd3a9f1f62fd650db117617 100644 (file)
@@ -1 +1,42 @@
 #pragma once
+
+bool autocvar_cl_damagetext;
+string autocvar_cl_damagetext_format;
+bool autocvar_cl_damagetext_format_verbose;
+bool autocvar_cl_damagetext_format_hide_redundant;
+vector autocvar_cl_damagetext_color;
+bool autocvar_cl_damagetext_color_per_weapon;
+float autocvar_cl_damagetext_size_min;
+float autocvar_cl_damagetext_size_min_damage;
+float autocvar_cl_damagetext_size_max;
+float autocvar_cl_damagetext_size_max_damage;
+float autocvar_cl_damagetext_alpha_start;
+float autocvar_cl_damagetext_alpha_lifetime;
+vector autocvar_cl_damagetext_velocity_world;
+vector autocvar_cl_damagetext_offset_world;
+float autocvar_cl_damagetext_accumulate_alpha_rel;
+int autocvar_cl_damagetext_friendlyfire;
+vector autocvar_cl_damagetext_friendlyfire_color;
+
+bool autocvar_cl_damagetext_2d;
+vector autocvar_cl_damagetext_2d_pos;
+float autocvar_cl_damagetext_2d_alpha_start;
+float autocvar_cl_damagetext_2d_alpha_lifetime;
+float autocvar_cl_damagetext_2d_size_lifetime;
+vector autocvar_cl_damagetext_2d_velocity;
+vector autocvar_cl_damagetext_2d_overlap_offset;
+float autocvar_cl_damagetext_2d_close_range;
+bool autocvar_cl_damagetext_2d_out_of_view;
+vector autocvar_cl_damagetext_velocity_screen;
+vector autocvar_cl_damagetext_offset_screen;
+
+// TODO: remove the value init and sort them above properly after next (0.9) release
+// or the release after it to support the old-stable release
+// this can't be done now as players would lack these from their configs then
+#if 0
+float autocvar_cl_damagetext_lifetime = -1;
+float autocvar_cl_damagetext_accumulate_lifetime = -1;
+#else
+AUTOCVAR_SAVE(cl_damagetext_lifetime,             float,  -1,  "Damage text lifetime, edit this if you wish for damage text to disappear before it fades out");
+AUTOCVAR_SAVE(cl_damagetext_accumulate_lifetime,  float,  -1,  "Only update existing damage text when it is younger than this many seconds, negative always updates");
+#endif
index c9ded88f00adc6dc05c627199baef0f3f4b80ab7..c244d170d259709ea485cc874e0a707e0c1294dc 100644 (file)
@@ -17,73 +17,72 @@ REGISTER_MUTATOR(damagetext, true);
 
 bool write_damagetext(entity this, entity client, int sf)
 {
-    entity attacker = this.realowner;
-    entity hit = this.enemy;
-    int flags = this.dent_net_flags;
-    int deathtype = this.dent_net_deathtype;
-    float health = this.dent_net_health;
-    float armor = this.dent_net_armor;
-    float potential_damage = this.dent_net_potential;
-    if (!(
-        (SV_DAMAGETEXT_ALL()) ||
-        (SV_DAMAGETEXT_PLAYERS() && client == attacker) ||
-        (SV_DAMAGETEXT_SPECTATORS_ONLY() && IS_SPEC(client) && client.enemy == attacker) ||
-        (SV_DAMAGETEXT_SPECTATORS_ONLY() && IS_OBSERVER(client))
-    )) return false;
+       entity attacker = this.realowner;
+       entity hit = this.enemy;
+       int flags = this.dent_net_flags;
+       int deathtype = this.dent_net_deathtype;
+       float health = this.dent_net_health;
+       float armor = this.dent_net_armor;
+       float potential_damage = this.dent_net_potential;
+       if (!(
+               (SV_DAMAGETEXT_ALL()) ||
+               (SV_DAMAGETEXT_PLAYERS() && client == attacker) ||
+               (SV_DAMAGETEXT_SPECTATORS_ONLY() && IS_SPEC(client) && client.enemy == attacker) ||
+               (SV_DAMAGETEXT_SPECTATORS_ONLY() && IS_OBSERVER(client))
+       )) return false;
 
-    WriteHeader(MSG_ENTITY, damagetext);
-    WriteByte(MSG_ENTITY, etof(hit));
-    WriteInt24_t(MSG_ENTITY, deathtype);
-    WriteByte(MSG_ENTITY, flags);
+       WriteHeader(MSG_ENTITY, damagetext);
+       WriteByte(MSG_ENTITY, etof(hit));
+       WriteInt24_t(MSG_ENTITY, deathtype);
+       WriteByte(MSG_ENTITY, flags);
 
-    // we need to send a few decimal places to minimize errors when accumulating damage
-    // sending them multiplied saves bandwidth compared to using WriteCoord,
-    // however if the multiplied damage would be too much for (signed) short, we send an int24
-    if (flags & DTFLAG_BIG_HEALTH) WriteInt24_t(MSG_ENTITY, health * DAMAGETEXT_PRECISION_MULTIPLIER);
-    else WriteShort(MSG_ENTITY, health * DAMAGETEXT_PRECISION_MULTIPLIER);
-    if (!(flags & DTFLAG_NO_ARMOR))
-    {
-        if (flags & DTFLAG_BIG_ARMOR) WriteInt24_t(MSG_ENTITY, armor * DAMAGETEXT_PRECISION_MULTIPLIER);
-        else WriteShort(MSG_ENTITY, armor * DAMAGETEXT_PRECISION_MULTIPLIER);
-    }
-    if (!(flags & DTFLAG_NO_POTENTIAL))
-    {
-        if (flags & DTFLAG_BIG_POTENTIAL) WriteInt24_t(MSG_ENTITY, potential_damage * DAMAGETEXT_PRECISION_MULTIPLIER);
-        else WriteShort(MSG_ENTITY, potential_damage * DAMAGETEXT_PRECISION_MULTIPLIER);
-    }
-    return true;
+       // we need to send a few decimal places to minimize errors when accumulating damage
+       // sending them multiplied saves bandwidth compared to using WriteCoord,
+       // however if the multiplied damage would be too much for (signed) short, we send an int24
+       if (flags & DTFLAG_BIG_HEALTH) WriteInt24_t(MSG_ENTITY, health * DAMAGETEXT_PRECISION_MULTIPLIER);
+       else WriteShort(MSG_ENTITY, health * DAMAGETEXT_PRECISION_MULTIPLIER);
+       if (!(flags & DTFLAG_NO_ARMOR))
+       {
+               if (flags & DTFLAG_BIG_ARMOR) WriteInt24_t(MSG_ENTITY, armor * DAMAGETEXT_PRECISION_MULTIPLIER);
+               else WriteShort(MSG_ENTITY, armor * DAMAGETEXT_PRECISION_MULTIPLIER);
+       }
+       if (!(flags & DTFLAG_NO_POTENTIAL))
+       {
+               if (flags & DTFLAG_BIG_POTENTIAL) WriteInt24_t(MSG_ENTITY, potential_damage * DAMAGETEXT_PRECISION_MULTIPLIER);
+               else WriteShort(MSG_ENTITY, potential_damage * DAMAGETEXT_PRECISION_MULTIPLIER);
+       }
+       return true;
 }
 
 MUTATOR_HOOKFUNCTION(damagetext, PlayerDamaged) {
-    if (SV_DAMAGETEXT_DISABLED()) return;
-    entity attacker = M_ARGV(0, entity);
-    entity hit = M_ARGV(1, entity); if (hit == attacker) return;
-    float health = M_ARGV(2, float);
-    float armor = M_ARGV(3, float);
-    int deathtype = M_ARGV(5, int);
-    float potential_damage = M_ARGV(6, float);
-    if(DEATH_WEAPONOF(deathtype) == WEP_VAPORIZER) return;
-    if(deathtype == DEATH_FIRE.m_id || deathtype == DEATH_BUFF.m_id) return; // TODO: exclude damage over time and thorn effects
+       if (SV_DAMAGETEXT_DISABLED()) return;
+       entity attacker = M_ARGV(0, entity);
+       entity hit = M_ARGV(1, entity); if (hit == attacker) return;
+       float health = M_ARGV(2, float);
+       float armor = M_ARGV(3, float);
+       int deathtype = M_ARGV(5, int);
+       float potential_damage = M_ARGV(6, float);
+       if(DEATH_WEAPONOF(deathtype) == WEP_VAPORIZER) return;
 
-    int flags = 0;
-    if (SAME_TEAM(hit, attacker)) flags |= DTFLAG_SAMETEAM;
-    if (health >= DAMAGETEXT_SHORT_LIMIT) flags |= DTFLAG_BIG_HEALTH;
-    if (armor >= DAMAGETEXT_SHORT_LIMIT) flags |= DTFLAG_BIG_ARMOR;
-    if (potential_damage >= DAMAGETEXT_SHORT_LIMIT) flags |= DTFLAG_BIG_POTENTIAL;
-    if (!armor) flags |= DTFLAG_NO_ARMOR;
-    if (almost_equals_eps(armor + health, potential_damage, 5)) flags |= DTFLAG_NO_POTENTIAL;
+       int flags = 0;
+       if (SAME_TEAM(hit, attacker)) flags |= DTFLAG_SAMETEAM;
+       if (health >= DAMAGETEXT_SHORT_LIMIT) flags |= DTFLAG_BIG_HEALTH;
+       if (armor >= DAMAGETEXT_SHORT_LIMIT) flags |= DTFLAG_BIG_ARMOR;
+       if (potential_damage >= DAMAGETEXT_SHORT_LIMIT) flags |= DTFLAG_BIG_POTENTIAL;
+       if (!armor) flags |= DTFLAG_NO_ARMOR;
+       if (almost_equals_eps(armor + health, potential_damage, 5)) flags |= DTFLAG_NO_POTENTIAL;
 
-    entity net_text = new_pure(net_damagetext);
-    net_text.realowner = attacker;
-    net_text.enemy = hit;
-    net_text.dent_net_flags = flags;
-    net_text.dent_net_deathtype = deathtype;
-    net_text.dent_net_health = health;
-    net_text.dent_net_armor = armor;
-    net_text.dent_net_potential = potential_damage;
+       entity net_text = new_pure(net_damagetext);
+       net_text.realowner = attacker;
+       net_text.enemy = hit;
+       net_text.dent_net_flags = flags;
+       net_text.dent_net_deathtype = deathtype;
+       net_text.dent_net_health = health;
+       net_text.dent_net_armor = armor;
+       net_text.dent_net_potential = potential_damage;
 
-    setthink(net_text, SUB_Remove);
-    net_text.nextthink = (time > 10) ? (time + 0.5) : 10; // allow a buffer from start time for clients to load in
+       setthink(net_text, SUB_Remove);
+       net_text.nextthink = (time > 10) ? (time + 0.5) : 10; // allow a buffer from start time for clients to load in
 
-    Net_LinkEntity(net_text, false, 0, write_damagetext);
+       Net_LinkEntity(net_text, false, 0, write_damagetext);
 }
index cf83e41c03fe17fa4a5f6ec8db40b3de2aa93a70..391d9acbbab15defbdef1828f81c7685b6dee780 100644 (file)
@@ -80,10 +80,10 @@ METHOD(OverkillHeavyMachineGun, wr_think, void(entity thiswep, entity actor, .en
                        animdecide_setaction(actor, ANIMACTION_SHOOT, true);
                }
        }
-    if (WEP_CVAR(okhmg, reload_ammo) && actor.(weaponentity).clip_load < WEP_CVAR_PRI(okhmg, ammo))
+       if (WEP_CVAR(okhmg, reload_ammo) && actor.(weaponentity).clip_load < WEP_CVAR_PRI(okhmg, ammo))
        {
                // Forced reload.
-        thiswep.wr_reload(thiswep, actor, weaponentity);
+               thiswep.wr_reload(thiswep, actor, weaponentity);
                return;
        }
        if (fire & 1) // Primary attack
@@ -130,20 +130,20 @@ METHOD(OverkillHeavyMachineGun, wr_checkammo2, bool(entity thiswep, entity actor
 
 METHOD(OverkillHeavyMachineGun, wr_reload, void(entity thiswep, entity actor, .entity weaponentity))
 {
-    W_Reload(actor, weaponentity, WEP_CVAR_PRI(okhmg, ammo), SND_RELOAD);
+       W_Reload(actor, weaponentity, WEP_CVAR_PRI(okhmg, ammo), SND_RELOAD);
 }
 
 METHOD(OverkillHeavyMachineGun, wr_suicidemessage, Notification(entity thiswep))
 {
-    return WEAPON_THINKING_WITH_PORTALS;
+       return WEAPON_THINKING_WITH_PORTALS;
 }
 
 METHOD(OverkillHeavyMachineGun, wr_killmessage, Notification(entity thiswep))
 {
-    if(w_deathtype & HITTYPE_SECONDARY)
-        return WEAPON_OVERKILL_HMG_MURDER_SNIPE;
-    else
-        return WEAPON_OVERKILL_HMG_MURDER_SPRAY;
+       if(w_deathtype & HITTYPE_SECONDARY)
+               return WEAPON_OVERKILL_HMG_MURDER_SNIPE;
+       else
+               return WEAPON_OVERKILL_HMG_MURDER_SPRAY;
 }
 
 #endif
@@ -151,10 +151,10 @@ METHOD(OverkillHeavyMachineGun, wr_killmessage, Notification(entity thiswep))
 
 METHOD(OverkillHeavyMachineGun, wr_impacteffect, void(entity thiswep, entity actor))
 {
-    vector org2 = w_org + w_backoff * 2;
-    pointparticles(EFFECT_MACHINEGUN_IMPACT, org2, w_backoff * 1000, 1);
-    if(!w_issilent)
-        sound(actor, CH_SHOTS, SND_RIC_RANDOM(), VOL_BASE, ATTEN_NORM);
+       vector org2 = w_org + w_backoff * 2;
+       pointparticles(EFFECT_MACHINEGUN_IMPACT, org2, w_backoff * 1000, 1);
+       if(!w_issilent)
+               sound(actor, CH_SHOTS, SND_RIC_RANDOM(), VOL_BASE, ATTEN_NORM);
 }
 
 #endif
index 55fea8ca754e4570ab99293d8d86476296e07fb6..c4e140234c482fc31e09012069b69d8608206570 100644 (file)
@@ -54,8 +54,8 @@ CLASS(OverkillHeavyMachineGun, Weapon)
                P(class, prefix, weaponstartoverride, float, NONE) \
                P(class, prefix, weaponstart, float, NONE) \
                P(class, prefix, weaponthrowable, float, NONE) \
-    END()
-    W_PROPS(X, OverkillHeavyMachineGun, okhmg)
+       END()
+       W_PROPS(X, OverkillHeavyMachineGun, okhmg)
 #undef X
 
 ENDCLASS(OverkillHeavyMachineGun)
index 7cf072b33a5c5bf41e92baa3f3b41c2e982580b5..5ec40b7f73b14f79803dc61dc8258813a2655b6d 100644 (file)
@@ -4,18 +4,18 @@ CLASS(OverkillMachineGun, Weapon)
 /* spawnfunc */ ATTRIB(OverkillMachineGun, m_canonical_spawnfunc, string, "weapon_okmachinegun");
 /* ammotype  */ ATTRIB(OverkillMachineGun, ammo_type, Resource, RES_BULLETS);
 /* impulse   */ ATTRIB(OverkillMachineGun, impulse, int, 3);
-/* flags        */ ATTRIB(OverkillMachineGun, spawnflags, int, WEP_FLAG_HIDDEN | WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN | WEP_FLAG_PENETRATEWALLS | WEP_FLAG_MUTATORBLOCKED);
-/* rating      */ ATTRIB(OverkillMachineGun, bot_pickupbasevalue, float, 7000);
-/* color        */ ATTRIB(OverkillMachineGun, wpcolor, vector, '1 1 0');
+/* flags     */ ATTRIB(OverkillMachineGun, spawnflags, int, WEP_FLAG_HIDDEN | WEP_FLAG_RELOADABLE | WEP_TYPE_HITSCAN | WEP_FLAG_PENETRATEWALLS | WEP_FLAG_MUTATORBLOCKED);
+/* rating    */ ATTRIB(OverkillMachineGun, bot_pickupbasevalue, float, 7000);
+/* color     */ ATTRIB(OverkillMachineGun, wpcolor, vector, '1 1 0');
 /* modelname */ ATTRIB(OverkillMachineGun, mdl, string, "ok_mg");
 #ifdef GAMEQC
-/* model        */ ATTRIB(OverkillMachineGun, m_model, Model, MDL_OK_MG_ITEM);
+/* model     */ ATTRIB(OverkillMachineGun, m_model, Model, MDL_OK_MG_ITEM);
 /* flash mdl */ ATTRIB(OverkillMachineGun, m_muzzlemodel, Model, MDL_MACHINEGUN_MUZZLEFLASH);
 /* flash eff */ ATTRIB(OverkillMachineGun, m_muzzleeffect, entity, EFFECT_MACHINEGUN_MUZZLEFLASH);
 #endif
 /* crosshair */ ATTRIB(OverkillMachineGun, w_crosshair, string, "gfx/crosshairuzi");
 /* crosshair */ ATTRIB(OverkillMachineGun, w_crosshair_size, float, 0.6);
-/* wepimg      */ ATTRIB(OverkillMachineGun, model2, string, "ok_weapon_smg");
+/* wepimg    */ ATTRIB(OverkillMachineGun, model2, string, "ok_weapon_smg");
 /* refname   */ ATTRIB(OverkillMachineGun, netname, string, "okmachinegun");
 /* wepname   */ ATTRIB(OverkillMachineGun, m_name, string, _("Overkill MachineGun"));
 
index d84a6766a3bbafe5fe27fab2ecafbbdf4e433818..a1f9d5db63b38d68a0b239a13612f8738042f9aa 100644 (file)
@@ -130,7 +130,7 @@ void W_OverkillRocketPropelledChainsaw_Attack(Weapon thiswep, entity actor, .ent
 
 METHOD(OverkillRocketPropelledChainsaw, wr_aim, void(entity thiswep, entity actor, .entity weaponentity))
 {
-    PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(actor, weaponentity, WEP_CVAR_PRI(okrpc, speed), 0, WEP_CVAR_PRI(okrpc, lifetime), false, true);
+       PHYS_INPUT_BUTTON_ATCK(actor) = bot_aim(actor, weaponentity, WEP_CVAR_PRI(okrpc, speed), 0, WEP_CVAR_PRI(okrpc, lifetime), false, true);
 }
 
 METHOD(OverkillRocketPropelledChainsaw, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire))
@@ -199,25 +199,25 @@ METHOD(OverkillRocketPropelledChainsaw, wr_checkammo2, bool(entity thiswep, enti
 
 METHOD(OverkillRocketPropelledChainsaw, wr_reload, void(entity thiswep, entity actor, .entity weaponentity))
 {
-    W_Reload(actor, weaponentity, WEP_CVAR_PRI(okrpc, ammo), SND_RELOAD);
+       W_Reload(actor, weaponentity, WEP_CVAR_PRI(okrpc, ammo), SND_RELOAD);
 }
 
 METHOD(OverkillRocketPropelledChainsaw, wr_suicidemessage, Notification(entity thiswep))
 {
-    if((w_deathtype & HITTYPE_BOUNCE) || (w_deathtype & HITTYPE_SPLASH))
-        return WEAPON_OVERKILL_RPC_SUICIDE_SPLASH;
-    else
-        return WEAPON_OVERKILL_RPC_SUICIDE_DIRECT;
+       if((w_deathtype & HITTYPE_BOUNCE) || (w_deathtype & HITTYPE_SPLASH))
+               return WEAPON_OVERKILL_RPC_SUICIDE_SPLASH;
+       else
+               return WEAPON_OVERKILL_RPC_SUICIDE_DIRECT;
 }
 
 METHOD(OverkillRocketPropelledChainsaw, wr_killmessage, Notification(entity thiswep))
 {
-    if(w_deathtype & HITTYPE_SECONDARY)
-        return WEAPON_BLASTER_MURDER;
-    else if((w_deathtype & HITTYPE_BOUNCE) || (w_deathtype & HITTYPE_SPLASH))
-        return WEAPON_OVERKILL_RPC_MURDER_SPLASH;
-    else
-        return WEAPON_OVERKILL_RPC_MURDER_DIRECT;
+       if(w_deathtype & HITTYPE_SECONDARY)
+               return WEAPON_BLASTER_MURDER;
+       else if((w_deathtype & HITTYPE_BOUNCE) || (w_deathtype & HITTYPE_SPLASH))
+               return WEAPON_OVERKILL_RPC_MURDER_SPLASH;
+       else
+               return WEAPON_OVERKILL_RPC_MURDER_DIRECT;
 }
 
 #endif
@@ -226,10 +226,10 @@ METHOD(OverkillRocketPropelledChainsaw, wr_killmessage, Notification(entity this
 
 METHOD(OverkillRocketPropelledChainsaw, wr_impacteffect, void(entity thiswep, entity actor))
 {
-    vector org2 = w_org + w_backoff * 2;
-    pointparticles(EFFECT_ROCKET_EXPLODE, org2, '0 0 0', 1);
-    if(!w_issilent)
-        sound(actor, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
+       vector org2 = w_org + w_backoff * 2;
+       pointparticles(EFFECT_ROCKET_EXPLODE, org2, '0 0 0', 1);
+       if(!w_issilent)
+               sound(actor, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
 }
 
 #endif
index 23421d2f542dfd4f467994ec04d34ab605c2b89e..28b76348840e84512f75083eb341a5e328ad3b0c 100644 (file)
@@ -52,15 +52,15 @@ CLASS(OverkillRocketPropelledChainsaw, Weapon)
                P(class, prefix, speed, float, SEC) \
                P(class, prefix, spread, float, SEC) \
                P(class, prefix, reload_ammo, float, NONE) \
-        P(class, prefix, reload_time, float, NONE) \
-        P(class, prefix, switchdelay_drop, float, NONE) \
-        P(class, prefix, switchdelay_raise, float, NONE) \
-        P(class, prefix, weaponreplace, string, NONE) \
-        P(class, prefix, weaponstartoverride, float, NONE) \
-        P(class, prefix, weaponstart, float, NONE) \
-        P(class, prefix, weaponthrowable, float, NONE) \
-    END()
-    W_PROPS(X, OverkillRocketPropelledChainsaw, okrpc)
+               P(class, prefix, reload_time, float, NONE) \
+               P(class, prefix, switchdelay_drop, float, NONE) \
+               P(class, prefix, switchdelay_raise, float, NONE) \
+               P(class, prefix, weaponreplace, string, NONE) \
+               P(class, prefix, weaponstartoverride, float, NONE) \
+               P(class, prefix, weaponstart, float, NONE) \
+               P(class, prefix, weaponthrowable, float, NONE) \
+       END()
+       W_PROPS(X, OverkillRocketPropelledChainsaw, okrpc)
 #undef X
 
 ENDCLASS(OverkillRocketPropelledChainsaw)
index bf8d8fb10a903820e9ad9e546c444c05b9274c19..690abb5ca2fe207b7fb41bd7c6ac7af82bcc7786 100644 (file)
@@ -51,6 +51,7 @@ REGISTER_ITEM(Invisibility, Powerup) {
 }
 
 SPAWNFUNC_ITEM(item_invisibility, ITEM_Invisibility)
+SPAWNFUNC_ITEM(item_buff_invisibility, ITEM_Invisibility)
 
 CLASS(Invisibility, Powerups)
     ATTRIB(Invisibility, netname, string, "invisibility");
index c816fec53a7ffc8f3fc6d48c2dad5bbe853c1f11..38010e480b1c723b5d0449ef0616ad0629cd3c4b 100644 (file)
@@ -52,6 +52,7 @@ REGISTER_ITEM(Speed, Powerup) {
 }
 
 SPAWNFUNC_ITEM(item_speed, ITEM_Speed)
+SPAWNFUNC_ITEM(item_buff_speed, ITEM_Speed)
 
 CLASS(Speed, Powerups)
     ATTRIB(Speed, netname, string, "speed");
index e7f88b27becb157837cd186c047ec6d2fb1b3fbd..1c280253d52cbf036ae4c375a1b2a9efe96847d4 100644 (file)
@@ -839,6 +839,9 @@ void CSQC_ClientMovement_PlayerMove_Frame(entity this)
        // needs to be called before physics are run!
        if(IS_REAL_CLIENT(this))
                PM_UpdateButtons(this, CS(this));
+#elif defined(CSQC)
+       if(this.last_pushed && !WarpZoneLib_ExactTrigger_Touch(this.last_pushed, this, false))
+               this.last_pushed = NULL;
 #endif
 
        sys_phys_update(this, PHYS_INPUT_TIMELENGTH);
index 17c76461fd3516a72b5355a39f906846cfe9f205..548246f5fc45a75b82af918a1f9bd9aa70f2b145 100644 (file)
@@ -258,22 +258,21 @@ void PlayerStats_GameReport(bool finished)
                PlayerStats_GameReport_FinalizePlayer(it);
        });
 
-       if(autocvar_g_playerstats_gamereport_uri != "")
-       {
-               PlayerStats_GameReport_DelayMapVote = true;
-               url_multi_fopen(
-                       autocvar_g_playerstats_gamereport_uri,
-                       FILE_APPEND,
-                       PlayerStats_GameReport_Handler,
-                       NULL
-               );
-       }
-       else
+       if(autocvar_g_playerstats_gamereport_uri == "" || warmup_stage)
        {
                PlayerStats_GameReport_DelayMapVote = false;
                db_close(PS_GR_OUT_DB);
                PS_GR_OUT_DB = -1;
+               return;
        }
+
+       PlayerStats_GameReport_DelayMapVote = true;
+       url_multi_fopen(
+               autocvar_g_playerstats_gamereport_uri,
+               FILE_APPEND,
+               PlayerStats_GameReport_Handler,
+               NULL
+       );
 }
 
 void PlayerStats_GameReport_Init() // initiated before InitGameplayMode so that scores are added properly
@@ -369,6 +368,7 @@ void PlayerStats_GameReport_Handler(entity fh, entity pass, float status)
                 * C: number of "unpure" cvar changes
                 * U: UDP port number of the server
                 * D: duration of the match
+                * RP: number of rounds played
                 * L: "ladder" in which the server is participating in
                 * P: player ID of an existing player; this also sets the owner for all following "n", "e" and "t" lines (lower case!)
                 * Q: team number of an existing team (format: team#NN); this also sets the owner for all following "e" lines (lower case!)
@@ -409,7 +409,10 @@ void PlayerStats_GameReport_Handler(entity fh, entity pass, float status)
                        url_fputs(fh, sprintf("C %d\n", cvar_purechanges_count));
                        url_fputs(fh, sprintf("U %d\n", cvar("port")));
                        url_fputs(fh, sprintf("D %f\n", max(0, time - game_starttime)));
-                       url_fputs(fh, sprintf("L %s\n", autocvar_g_playerstats_gamereport_ladder));
+                       if (rounds_played > 0)
+                               url_fputs(fh, sprintf("RP %d\n", rounds_played));
+                       if (autocvar_g_playerstats_gamereport_ladder != "")
+                               url_fputs(fh, sprintf("L %s\n", autocvar_g_playerstats_gamereport_ladder));
 
                        // TEAMS
                        if(teamplay)
index e834d3e3068c43f598e556adfc58212be8560306..b7be1425c02c535c3354e91a9edc9af2613c8177 100644 (file)
@@ -204,7 +204,7 @@ int autocvar_sv_gameplayfix_easierwaterjump = 1;
 int autocvar_sv_gameplayfix_stepdown = 2;
 float autocvar_sv_gameplayfix_stepdown_maxspeed = 0;
 int autocvar_sv_gameplayfix_stepmultipletimes = 1;
-int autocvar_sv_gameplayfix_unstickplayers = 0;
+int autocvar_sv_gameplayfix_unstickplayers;
 int autocvar_sv_gameplayfix_fixedcheckwatertransition = 1;
 int autocvar_sv_gameplayfix_slidemoveprojectiles = 1;
 int autocvar_sv_gameplayfix_grenadebouncedownslopes = 1;
index 08bd71298b6e70e2fa2f638d8ad8270fe1c6f5f4..1bb77a1f5af176cb800e0894dace887c0b6ba49c 100644 (file)
@@ -1184,35 +1184,56 @@ vector get_shotvelocity(vector myvel, vector mydir, float spd, float newton_styl
        return myvel + spd * mydir;
 }
 
+/*
+ * Compresses the shot origin offset vector to an int with the following format:
+ * xxxxxxxx|Syyyyyyy|Syzzzzzz
+ * 32109876|54321098|76543210
+ * 1st byte: x component
+ * 2nd byte: y component in the last 7 bits and the sign of the x component in the 1st bit
+ * 3rd byte: z component in the last 7 bits and the sign of the z component in the 1st bit
+ * All values are multiplied on compression and divided on decompression
+ * so the precision of the values is 0.5 if multiplied by 2 and 0.25 if multiplied by 4
+ * Values are bound to the following ranges:
+ * x: -127.5  +127.5
+ * y:      0  +31.75 negative values not allowed because the gun can't be aligned to the left by default
+ * z: -31.75  +31.75
+ */
 float compressShotOrigin(vector v)
 {
-       float rx = rint(v.x * 2);
-       float ry = rint(v.y * 4) + 128;
-       float rz = rint(v.z * 4) + 128;
-       if(rx > 255 || rx < 0)
+       int rx_neg = (v.x < 0) ? 1 : 0;
+       int rz_neg = (v.z < 0) ? 1 : 0;
+       int rx = rint(fabs(v.x) * 2);
+       int ry = rint(v.y * 4);
+       int rz = rint(fabs(v.z) * 4);
+       if(rx > 255) // 128 * 2 - 1
        {
                LOG_DEBUG("shot origin ", vtos(v), " x out of bounds\n");
                rx = bound(0, rx, 255);
        }
-       if(ry > 255 || ry < 0)
+       if(ry > 127 || ry < 0) // 32 * 4 - 1
        {
                LOG_DEBUG("shot origin ", vtos(v), " y out of bounds\n");
-               ry = bound(0, ry, 255);
+               ry = bound(0, ry, 127);
        }
-       if(rz > 255 || rz < 0)
+       if(rz > 127) // 32 * 4 - 1
        {
                LOG_DEBUG("shot origin ", vtos(v), " z out of bounds\n");
-               rz = bound(0, rz, 255);
+               rz = bound(0, rz, 127);
        }
+       ry |= rx_neg * BIT(7);
+       rz |= rz_neg * BIT(7);
        return rx * 0x10000 + ry * 0x100 + rz;
 }
 vector decompressShotOrigin(int f)
 {
        vector v;
-       v.x = ((f & 0xFF0000) / 0x10000) / 2;
-       v.y = ((f & 0xFF00) / 0x100 - 128) / 4;
-       v.z = ((f & 0xFF) - 128) / 4;
-       return v;
+       v.x = f >> 16;
+       v.y = (f & 0xFF00) >> 8;
+       v.z = f & 0xFF;
+       // remove sign bits and apply sign
+       if (v.y & BIT(7)) { v.y &= ~BIT(7); v.x *= -1; }
+       if (v.z & BIT(7)) { v.z &= ~BIT(7); v.z *= -1; }
+       return vec3(v.x / 2, v.y / 4, v.z / 4);
 }
 
 #ifdef GAMEQC
@@ -1677,21 +1698,6 @@ void Skeleton_SetBones(entity e)
 string to_execute_next_frame;
 void execute_next_frame()
 {
-#ifdef SVQC
-       IL_EACH(g_moveables, it.last_pushed,
-       {
-               if(!WarpZoneLib_ExactTrigger_Touch(it.last_pushed, it, false))
-               {
-                       it.last_pushed = NULL;
-               }
-       });
-#elif defined(CSQC)
-       if(csqcplayer.last_pushed && !WarpZoneLib_ExactTrigger_Touch(csqcplayer.last_pushed, csqcplayer, false))
-       {
-               csqcplayer.last_pushed = NULL;
-       }
-#endif
-
        if(to_execute_next_frame)
        {
                localcmd("\n", to_execute_next_frame, "\n");
index effa087e65c57ce2efabc3d2a5d9ad54622d7c74..0d0c56858f259ab8291254634c8c512e15422167 100644 (file)
@@ -524,13 +524,34 @@ void CL_WeaponEntity_SetModel(entity this, string name, bool _anim)
                this.movedir_aligned = shotorg_adjust(v, false, true, algn);
                this.view_ofs = this.movedir_aligned - v;
        }
-       int compressed_shotorg = compressShotOrigin(this.movedir);
-       // make them match perfectly
-#ifdef SVQC
-       // null during init
-       if (this.owner) STAT(SHOTORG, this.owner) = compressed_shotorg;
-#endif
-       this.movedir = decompressShotOrigin(compressed_shotorg);
+
+       // shotorg_adjust can give negative .x from shootfromfixedorigin
+       // recheck .x here due to it
+       if (this.movedir.x >= 0)
+       {
+               int compressed_shotorg = compressShotOrigin(this.movedir);
+               // make them match perfectly
+       #ifdef SVQC
+               // null during init
+               if (this.owner) STAT(SHOTORG, this.owner) = compressed_shotorg;
+       #endif
+               this.movedir = decompressShotOrigin(compressed_shotorg);
+       }
+       else
+       {
+               // don't support negative x shotorgs
+               this.movedir = '0 0 0';
+
+               // reset _aligned here too even though as a side effect
+               // g_shootfromfixedorigin can make it reset
+               // it'd be only slightly better if it was checked individually
+               this.movedir_aligned = '0 0 0';
+
+       #ifdef SVQC
+               // null during init
+               if (this.owner) STAT(SHOTORG, this.owner) = 0;
+       #endif
+       }
 
 #ifdef SVQC
        this.spawnorigin += this.view_ofs;  // offset the casings origin by the same amount
@@ -786,8 +807,7 @@ NET_HANDLE(w_muzzleflash, bool isNew)
                rlplayer = csqcplayer; // fall back to the global
 
        vector md = wepent.movedir_aligned;
-       vector vecs = ((md.x > 0) ? md : '0 0 0');
-       vector dv = forward * vecs.x + right * -vecs.y + up * vecs.z;
+       vector dv = forward * md.x + right * -md.y + up * md.z;
        vector org = rlplayer.origin + rlplayer.view_ofs + dv;
 
        pointparticles(thiswep.m_muzzleeffect, org, forward * 1000, 1);
index 43d7a03a400dae69ba74e6e6858435ad9ad113fe..5bacdc35e6e705e43963627cea2b5365ed226ff4 100644 (file)
@@ -564,8 +564,7 @@ void Arc_Smoke(Weapon thiswep, entity actor, .entity weaponentity, int fire)
        makevectors(actor.v_angle);
        w_shotdir = v_forward;
        vector md = actor.(weaponentity).movedir;
-       vector vecs = ((md.x > 0) ? md : '0 0 0');
-       vector dv = v_forward * vecs.x + v_right * -vecs.y + v_up * vecs.z;
+       vector dv = v_forward * md.x + v_right * -md.y + v_up * md.z;
        w_shotorg = actor.origin + actor.view_ofs + dv;
        //W_SetupShot_Range(actor,weaponentity,false,0,SND_Null,0,0,0,thiswep.m_id);
 
index 6f428dc6c413430cb52440659da1c3a5eac6e6b5..ef08d30b8e93a2ae424418e56bc477f88efa36dc 100644 (file)
@@ -237,9 +237,7 @@ void W_Devastator_Think(entity this)
                                f = 1;
 
                        vector md = this.realowner.(weaponentity).movedir;
-                       vector vecs = ((md.x > 0) ? md : '0 0 0');
-
-                       vector dv = v_right * -vecs.y + v_up * vecs.z;
+                       vector dv = v_right * -md.y + v_up * md.z;
 
                        if(!W_DualWielding(this.realowner))
                                dv = '0 0 0'; // don't override!
index 2c03871ce54580335fe95adff435d86d4a555818..280267a9ad3de6368294cb332cc34a829c261720 100644 (file)
@@ -305,6 +305,7 @@ void W_Electro_Orb_Stick(entity this, entity to)
 
        newproj.owner = this.owner;
        newproj.realowner = this.realowner;
+       PROJECTILE_MAKETRIGGER(newproj);
        setorigin(newproj, this.origin);
        setmodel(newproj, MDL_PROJECTILE_ELECTRO);
        setsize(newproj, this.mins, this.maxs);
index c73db2bc28f1d9e634d87b36fc4a21b5146b6e39..63c7b9e44395cb62e21a3930e21ffb18704e765f 100644 (file)
@@ -18,6 +18,7 @@ void W_MineLayer_Stick(entity this, entity to)
 
        newmine.owner = this.owner;
        newmine.realowner = this.realowner;
+       PROJECTILE_MAKETRIGGER(newmine);
        setorigin(newmine, this.origin);
        setmodel(newmine, MDL_MINELAYER_MINE);
        setsize(newmine, '-4 -4 -4', '4 4 4');
index 6c2fd8c933f95a551c11b6a6953498e5fab6d499..bd4e5975a21cb89cf725316b75db15f5a2208608 100644 (file)
@@ -360,7 +360,21 @@ void W_Shockwave_Attack(Weapon thiswep, entity actor, .entity weaponentity)
                                                *
                                                WEP_CVAR(shockwave, blast_jump_force_velocitybias)
                                        );
-                               final_force = normalize((CENTER_OR_VIEWOFS(head) - attack_hitpos) + vel);
+
+                               if (autocvar_g_player_damageplayercenter)
+                               {
+                                       vector shot_origin = CENTER_OR_VIEWOFS(actor);
+                                       shot_origin.z += actor.(weaponentity).movedir.z;
+                                       //if (head == actor) // was checked for already, is true
+                                               final_force = normalize((shot_origin - attack_hitpos) + vel);
+                                       //else // use target's bbox centerpoint
+                                               //final_force = normalize(((head.origin + ((head.mins + head.maxs) * 0.5)) - attack_hitpos) + vel);
+                               }
+                               else
+                               {
+                                       // if it's a player, use the view origin as reference
+                                       final_force = normalize((CENTER_OR_VIEWOFS(head) - attack_hitpos) + vel);
+                               }
 
                                // now multiply the direction by force units
                                final_force *= (WEP_CVAR(shockwave, blast_jump_force) * multiplier);
@@ -431,7 +445,18 @@ void W_Shockwave_Attack(Weapon thiswep, entity actor, .entity weaponentity)
 
                                // figure out the direction of force
                                final_force = (w_shotdir * WEP_CVAR(shockwave, blast_splash_force_forwardbias));
-                               final_force = normalize(CENTER_OR_VIEWOFS(head) - (attack_hitpos - final_force));
+                               if (autocvar_g_player_damageplayercenter)
+                               {
+                                       //if (head == actor) // was checked for already, is false
+                                               //final_force = normalize(CENTER_OR_VIEWOFS(actor) + '0 0 actor.(weaponentity).movedir.z' - (attack_hitpos - final_force));
+                                       //else // use target's bbox centerpoint
+                                               final_force = normalize((head.origin + ((head.mins + head.maxs) * 0.5)) - (attack_hitpos - final_force));
+                               }
+                               else
+                               {
+                                       // if it's a player, use the view origin as reference
+                                       final_force = normalize(CENTER_OR_VIEWOFS(head) - (attack_hitpos - final_force));
+                               }
                                //te_lightning2(NULL, attack_hitpos, (attack_hitpos + (final_force * 200)));
 
                                // now multiply the direction by force units
@@ -467,8 +492,18 @@ void W_Shockwave_Attack(Weapon thiswep, entity actor, .entity weaponentity)
                        //  BLAST CONE CALCULATION
                        // ========================
 
-                       // if it's a player, use the view origin as reference (stolen from RadiusDamage functions in damage.qc)
-                       center = CENTER_OR_VIEWOFS(head);
+                       if (autocvar_g_player_damageplayercenter)
+                       {
+                               //if (head == actor) // was checked for already, is false
+                                       //center = CENTER_OR_VIEWOFS(actor) + '0 0 actor.(weaponentity).movedir.z';
+                               //else // use target's bbox centerpoint
+                                       center = head.origin + ((head.mins + head.maxs) * 0.5);
+                       }
+                       else
+                       {
+                               // if it's a player, use the view origin as reference (stolen from RadiusDamage functions in damage.qc)
+                               center = CENTER_OR_VIEWOFS(head);
+                       }
 
                        // find the closest point on the enemy to the center of the attack
                        float h; // hypotenuse, which is the distance between attacker to head
index 300be79d87f282359f9d42f7bce7d6409639b4a3..7796cbccaa1de271031755ca8f1d7a6316aaa647 100644 (file)
@@ -126,7 +126,8 @@ void UpdateConWidthHeight(float w, float h, float p)
 {
        if (w != vidwidth_s || h != vidheight_s || p != vidpixelheight_s)
        {
-               if (updateConwidths(w, h, p)) localcmd(sprintf("\nexec %s\n", cvar_string("menu_font_cfg")));
+               if (updateConwidths(w, h, p) && menuNotTheFirstFrame)
+                       localcmd(sprintf("\nexec %s\n", cvar_string("menu_font_cfg")));
                vidwidth_s = w;
                vidheight_s = h;
                vidpixelheight_s = p;
index 1edc5b8400c8cc6347f5916125ebc34c850e5e0d..65373f1b10e277b5ba8b5307886c064117cf37be 100644 (file)
@@ -18,34 +18,31 @@ entity makeXonoticPlayerList()
 
 void XonoticPlayerList_setPlayerList(entity me, string plist)
 {
-       int buf,i,n;
-       string s;
+       int i;
+       int buf = buf_create();
 
-       buf = buf_create();
        me.nItems = tokenizebyseparator(plist, "\n");
        for(i = 0; i < me.nItems; ++i)
        {
-               bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME, argv(i)); // -666 100 "^4Nex ^2Player"
+               bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME, argv(i)); // -666 100 "^4Xon ^2Player"
        }
 
        for(i = 0; i < me.nItems; ++i)
        {
-               s = bufstr_get(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME);
-               n = tokenize_console(s);
+               string name = bufstr_get(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME);
+               int n = tokenize_console(name);
 
+               bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_SCORE, argv(0)); // -666
+               bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_PING,  argv(1)); // 100
                if(n == PLAYERPARM_COUNT)
                {
-                       bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_SCORE, argv(0)); // -666
-                       bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_PING,  argv(1)); // 100
                        bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_TEAM,  argv(2)); // 0 for spec, else 1, 2, 3, 4
-                       bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME,  argv(3)); // ^4Nex ^2Player
+                       bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME,  argv(3)); // ^4Xon ^2Player
                }
                else
                {
-                       bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_SCORE, argv(0)); // -666
-                       bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_PING,  argv(1)); // 100
                        bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_TEAM,  "-1");
-                       bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME,  argv(2)); // ^4Nex ^2Player
+                       bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME,  argv(2)); // ^4Xon ^2Player
                }
        }
        me.playerList = buf;
@@ -77,12 +74,9 @@ void XonoticPlayerList_resizeNotify(entity me, vector relOrigin, vector relSize,
 
 void XonoticPlayerList_drawListBoxItem(entity me, int i, vector absSize, bool isSelected, bool isFocused)
 {
-       string s;
-       string score;
-       float t;
-       vector rgb;
+       float t = stof(me.getPlayerList(me, i, PLAYERPARM_TEAM));
 
-       t = stof(me.getPlayerList(me, i, PLAYERPARM_TEAM));
+       vector rgb = SKINCOLOR_TEXT;
        if(t == 1)
                rgb = colormapPaletteColor(4, 0);
        else if(t == 2)
@@ -91,11 +85,9 @@ void XonoticPlayerList_drawListBoxItem(entity me, int i, vector absSize, bool is
                rgb = colormapPaletteColor(12, 0);
        else if(t == 4)
                rgb = colormapPaletteColor(9, 0);
-       else
-               rgb = SKINCOLOR_TEXT;
 
-       s = me.getPlayerList(me, i, PLAYERPARM_NAME);
-       score = me.getPlayerList(me, i, PLAYERPARM_SCORE);
+       string name = me.getPlayerList(me, i, PLAYERPARM_NAME);
+       string score = me.getPlayerList(me, i, PLAYERPARM_SCORE);
 
        if(substring(score, strlen(score) - 10, 10) == ":spectator")
        {
@@ -112,9 +104,10 @@ void XonoticPlayerList_drawListBoxItem(entity me, int i, vector absSize, bool is
                        score = _("spectator");
        }
 
-       s = draw_TextShortenToWidth(s, me.columnNameSize, 1, me.realFontSize);
-       draw_Text(me.realUpperMargin2 * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 1, me.realFontSize))) * eX, s, me.realFontSize, '1 1 1', 1, 1);
+       name = draw_TextShortenToWidth(name, me.columnNameSize, 1, me.realFontSize);
+       draw_Text(me.realUpperMargin2 * eY + me.columnNameOrigin * eX, name, me.realFontSize, '1 1 1', 1, 1);
 
        score = draw_TextShortenToWidth(score, me.columnScoreSize, 0, me.realFontSize);
-       draw_Text(me.realUpperMargin2 * eY + (me.columnScoreOrigin + 1.00 * (me.columnScoreSize - draw_TextWidth(score, 1, me.realFontSize))) * eX, score, me.realFontSize, rgb, 1, 0);
+       float score_ofs = me.columnScoreSize - draw_TextWidth(score, 1, me.realFontSize);
+       draw_Text(me.realUpperMargin2 * eY + (me.columnScoreOrigin + score_ofs) * eX, score, me.realFontSize, rgb, 1, 0);
 }
index 9333ebfed50973872e0c0111aba93b4886cde5eb..68a475e790a88a27bf4e50ccd3dd3ab5ad954e20 100644 (file)
@@ -272,6 +272,65 @@ spawnfunc(target_fragsFilter)
        this.use = fragsfilter_use;
 }
 
+#define PRINT_REDTEAM BIT(0) // Q3 only, not used in Q3DF
+#define PRINT_BLUETEAM BIT(1) // Q3 only, not used in Q3DF
+#define PRINT_PRIVATE BIT(2) // Q3 only, not used in Q3DF
+#define PRINT_BROADCAST BIT(3) // Q3DF only, default behavior in Q3
+
+void target_print_message(entity this, entity actor)
+{
+       centerprint(actor, this.message);
+       play2(actor, SND(TALK));
+}
+
+void target_print_use(entity this, entity actor, entity trigger)
+{
+       if(!IS_PLAYER(actor))
+               return;
+
+       if(this.message == "")
+               return;
+
+       bool priv, red, blue;
+       if(!(q3compat & Q3COMPAT_DEFI)) // Q3 spawnflags
+       {
+               priv = boolean(this.spawnflags & PRINT_PRIVATE);
+               red = boolean(this.spawnflags & PRINT_REDTEAM);
+               blue = boolean(this.spawnflags & PRINT_BLUETEAM);
+       }
+       else // Q3DF spawnflags
+       {
+               priv = !boolean(this.spawnflags & PRINT_BROADCAST);
+               red = blue = false;
+       }
+
+       if(priv)
+       {
+               target_print_message(this, actor);
+       }
+       else
+       {
+               FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it) && ((!red && !blue) || (red && it.team == NUM_TEAM_1) || (blue && it.team == NUM_TEAM_2)), target_print_message(this, it));
+       }
+}
+
+/*
+ * ENTITY PARAMETERS:
+ *
+ *   message: text string to print on screen.
+ *   targetname: the activating trigger points to this.
+ */
+spawnfunc(target_print)
+{
+       this.use = target_print_use;
+}
+
+// target_smallprint, Q3DF only
+spawnfunc(target_smallprint)
+{
+       spawnfunc_target_print(this);
+}
+
 .bool notteam;
 .bool notsingle;
 .bool notfree;
index 99c99153aaa54e3e74a591d998b6640fd6bfb3d1..d5a9a20c760d352a7d6631ed2530eba9cf2faad4 100644 (file)
@@ -945,10 +945,57 @@ float RadiusDamageForSource (entity inflictor, vector inflictororigin, vector in
                                        float a;
                                        float c;
                                        vector hitloc;
-                                       vector center;
 
                                        // if it's a player, use the view origin as reference
-                                       center = CENTER_OR_VIEWOFS(targ);
+                                       vector center = CENTER_OR_VIEWOFS(targ);
+
+                                       if (autocvar_g_player_damageplayercenter)
+                                       {
+                                               if (targ != attacker)
+                                               {
+                                                       // always use target's bbox centerpoint
+                                                       center = targ.origin + ((targ.mins + targ.maxs) * 0.5);
+                                               }
+                                               else // targ == attacker
+                                               {
+                                               #if 0
+                                                       // code stolen from W_SetupShot_Dir_ProjectileSize_Range()
+                                                       vector md = targ.(weaponentity).movedir;
+                                                       vector dv = v_right * -md.y + v_up * md.z;
+                                                       vector mi = '0 0 0', ma = '0 0 0';
+
+                                                       if(IS_CLIENT(targ)) // no antilag for non-clients!
+                                                       {
+                                                               if(CS(targ).antilag_debug)
+                                                                       tracebox_antilag(targ, center, mi, ma, center + dv, MOVE_NORMAL, targ, CS(targ).antilag_debug);
+                                                               else
+                                                                       tracebox_antilag(targ, center, mi, ma, center + dv, MOVE_NORMAL, targ, ANTILAG_LATENCY(targ));
+                                                       }
+                                                       else
+                                                               tracebox(center, mi, ma, center + dv, MOVE_NORMAL, targ);
+
+                                                       center.z = trace_endpos.z;
+                                               #else
+                                                       // very cheap way but it skips move into solid checks which is fine most of the time for now AFAIK
+                                                       // this should only really be an issue with some rare edge cases where
+                                                       // shot origin was prevented from going into a ceiling but it still explodes at the ceiling
+                                                       // shot origin wasn't raised as high as possible and the shooter gets upwards knockback
+                                                       // TL;DR: no bugs if vertical shot origin is always within player bbox
+                                                       center.z = center.z + targ.(weaponentity).movedir.z;
+                                               #endif
+                                               }
+                                       }
+
+                                       /* debug prints
+                                       print(sprintf("origin  vec %v\n", targ.origin));
+                                       print(sprintf("movedir vec %v\n", targ.(weaponentity).movedir));
+                                       print(sprintf("old def vec %v\n", CENTER_OR_VIEWOFS(targ)));
+                                       print(sprintf("origin+vofs %v\n", targ.origin + targ.view_ofs));
+                                       print(sprintf("bbox center %v\n", (targ.origin + ((targ.mins + targ.maxs) * 0.5))));
+                                       print(sprintf("center  vec %v\n", center));
+                                       print(sprintf("shotorg vec %v\n", w_shotorg));
+                                       print("\n");
+                                       */
 
                                        force = normalize(center - inflictororigin_wz);
                                        force = force * (finaldmg / max(coredamage, edgedamage)) * forceintensity;
index a1dadc1a28f052017abbcbddd6252a3c7ec3cc65..09b80eea1de36cbed4100ab0952a3ff389324606 100644 (file)
@@ -125,6 +125,8 @@ void Unfreeze(entity targ, bool reset_health);
 // WEAPONTODO
 #define DMG_NOWEP (weaponentities[0])
 
+int autocvar_g_player_damageplayercenter;
+
 // NOTE: the .weaponentity parameter can be set to DMG_NOWEP if the attack wasn't caused by a weapon or player
 void Damage (entity targ, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force);
 
index be66fe968c2b6a2eadc8ac35b8390805ad519289..b9f9d7766f200a270d8471f6731db4170af9f4c2 100644 (file)
@@ -340,8 +340,7 @@ IMPULSE(weapon_drop)
        {
                .entity weaponentity = weaponentities[slot];
                vector md = this.(weaponentity).movedir;
-               vector vecs = ((md.x > 0) ? md : '0 0 0');
-               vector dv = v_right * -vecs.y;
+               vector dv = v_right * -md.y;
                if(!is_dualwielding)
                        dv = '0 0 0'; // don't override!
                W_ThrowWeapon(this, weaponentity, W_CalculateProjectileVelocity(this, this.velocity, v_forward * 750, false), dv, true);
index bee15d6cc867c685687ef5edf487914d4e4bc026..b5832d8939ae91b28b44f671007e9a619d5ec44f 100644 (file)
@@ -5,6 +5,7 @@
 #include <common/deathtypes/all.qh>
 #include <common/debug.qh>
 #include <common/mapinfo.qh>
+#include <common/mapobjects/_mod.qh>
 #include <common/monsters/sv_monsters.qh>
 #include <common/util.qh>
 #include <common/vehicles/all.qh>
@@ -187,12 +188,14 @@ void CreatureFrame_All()
        });
 }
 
+// called shortly after map change in dedicated
 void Pause_TryPause_Dedicated(entity this)
 {
-       if (player_count == 0)
+       if (player_count == 0 && !intermission_running && !autocvar__endmatch)
                setpause(1);
 }
 
+// called every normal frame in singleplayer/listen
 void Pause_TryPause()
 {
        int n = 0, p = 0;
@@ -207,9 +210,12 @@ void Pause_TryPause()
                setpause(0);
 }
 
+// called every paused frame by DP
 void SV_PausedTic(float elapsedtime)
 {
-       if (!server_is_dedicated)
+       if (autocvar__endmatch) // `endmatch` while paused
+               setpause(0); // proceed to intermission
+       else if (!server_is_dedicated)
        {
                if (autocvar_sv_autopause)
                        Pause_TryPause();
@@ -293,7 +299,6 @@ void StartFrame()
        IL_EACH(g_players, IS_FAKE_CLIENT(it), PlayerPreThink(it));
 
        execute_next_frame();
-       if (autocvar_sv_autopause && !server_is_dedicated) Pause_TryPause();
 
        delete_fn = remove_unsafely; // not during spawning!
        serverprevtime = servertime;
@@ -346,6 +351,10 @@ void StartFrame()
        CreatureFrame_All();
        CheckRules_World();
 
+       // after CheckRules_World() as it may set intermission_running, and after RedirectionThink() in case listen server is closing
+       if (autocvar_sv_autopause && !server_is_dedicated && !intermission_running)
+               Pause_TryPause();
+
        if (warmup_stage && !game_stopped && warmup_limit > 0 && time - game_starttime >= warmup_limit) {
                ReadyRestart(true);
                return;
index dbd3d5b27e6573b4d4125ff653daf3c3ff51f6e3..a8385b686aa87f3b456c9b25bc81bcea467bd7a6 100644 (file)
@@ -69,11 +69,15 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, .entity weaponentity, vect
        if(IS_PLAYER(ent))
                W_HitPlotAnalysis(ent, wep, forward, right, up);
 
+       // read shot origin offset, like g_shootfromcenter
+       // set in CL_WeaponEntity_SetModel (not a CSQC exclusive function...)
        vector md = ent.(weaponentity).movedir;
-       vector vecs = ((md.x > 0) ? md : '0 0 0');
+       //print(sprintf("offset of %s: %v\n", ent.(weaponentity).m_weapon.netname, md));
+       vector dv = right * -md.y + up * md.z;
 
-       vector dv = right * -vecs.y + up * vecs.z;
        w_shotorg = ent.origin + ent.view_ofs;
+
+       // move the shotorg sideways and vertically as much as requested if possible
        if(antilag)
        {
                if(CS(ent).antilag_debug)
@@ -89,13 +93,16 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, .entity weaponentity, vect
        if(antilag)
        {
                if(CS(ent).antilag_debug)
-                       tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + forward * (vecs.x + nudge), MOVE_NORMAL, ent, CS(ent).antilag_debug);
+                       tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + forward * (md.x + nudge), MOVE_NORMAL, ent, CS(ent).antilag_debug);
                else
-                       tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + forward * (vecs.x + nudge), MOVE_NORMAL, ent, ANTILAG_LATENCY(ent));
+                       tracebox_antilag(ent, w_shotorg, mi, ma, w_shotorg + forward * (md.x + nudge), MOVE_NORMAL, ent, ANTILAG_LATENCY(ent));
        }
        else
-               tracebox(w_shotorg, mi, ma, w_shotorg + forward * (vecs.x + nudge), MOVE_NORMAL, ent);
+               tracebox(w_shotorg, mi, ma, w_shotorg + forward * (md.x + nudge), MOVE_NORMAL, ent);
        w_shotorg = trace_endpos - forward * nudge;
+
+       //print(sprintf("w_shotorg %v\n\n", w_shotorg - (ent.origin + ent.view_ofs)));
+
        // calculate the shotdir from the chosen shotorg
        if(W_DualWielding(ent))
                w_shotdir = s_forward;
index 3487b68073ac571998f6879d957f5093e2a0ff30..6e79c73ef1c014d1de388729a8de6f15fdbffd1f 100644 (file)
@@ -663,14 +663,18 @@ void GameplayMode_DelayedInit(entity this)
        if (!g_duel)
                MapReadSizes(mapname);
 
-       if (autocvar_g_maxplayers < 0 && teamplay)
+       if (autocvar_g_maxplayers < 0)
        {
-               // automatic maxplayers should be a multiple of team count
-               if (map_maxplayers == 0 || map_maxplayers > maxclients)
+               if (map_maxplayers <= 0)
                        map_maxplayers = maxclients; // unlimited, but may need rounding
-               int d = map_maxplayers % AVAILABLE_TEAMS;
-               int u = AVAILABLE_TEAMS - d;
-               map_maxplayers += (u <= d && u + map_maxplayers <= maxclients) ? u : -d;
+               map_maxplayers = bound(max(2, AVAILABLE_TEAMS * 2), map_maxplayers, maxclients);
+               if (teamplay)
+               {
+                       // automatic maxplayers should be a multiple of team count
+                       int down = map_maxplayers % AVAILABLE_TEAMS;
+                       int up = AVAILABLE_TEAMS - down;
+                       map_maxplayers += (up < down && up + map_maxplayers <= maxclients) ? up : -down;
+               }
        }
 
        if (warmup_stage < 0)
@@ -681,9 +685,9 @@ void GameplayMode_DelayedInit(entity this)
                if (teamplay)
                {
                        // automatic minplayers should be a multiple of team count
-                       int d = map_minplayers % AVAILABLE_TEAMS;
-                       int u = AVAILABLE_TEAMS - d;
-                       map_minplayers += (u < d && u + map_minplayers <= m) ? u : -d;
+                       int down = map_minplayers % AVAILABLE_TEAMS;
+                       int up = AVAILABLE_TEAMS - down;
+                       map_minplayers += (up < down && up + map_minplayers <= m) ? up : -down;
                }
        }
        else
@@ -1059,7 +1063,7 @@ spawnfunc(worldspawn)
        WinningConditionHelper(this); // set worldstatus
 
        if (autocvar_sv_autopause && server_is_dedicated && !wantrestart)
-               // INITPRIO_LAST is to soon: bots either didn't join yet or didn't leave yet, see: bot_fixcount()
+               // INITPRIO_LAST is too soon: bots either didn't join yet or didn't leave yet, see: bot_fixcount()
                defer(this, 5, Pause_TryPause_Dedicated);
 
        world_initialized = 1;
diff --git a/qcsrc/tools/sv_game-hashtest.sh b/qcsrc/tools/sv_game-hashtest.sh
new file mode 100755 (executable)
index 0000000..f3f0eb2
--- /dev/null
@@ -0,0 +1,235 @@
+#!/bin/bash
+
+# abort on error(non-0 return code) and abort on unset variable
+set -eu
+
+# refuse to run on Windows' MINGW due to symlinking issues
+# `ln -s "$PWD" data/xonotic-data.pk3dir` seems to not work in any form
+# even with fully relative paths or `ln -s ../ xonotic-data.pk3dir`
+# FIXME?
+case "$(uname)" in
+       MINGW*) printf "%s\n%s\n" "This file is not suitable for Windows' MINGW" \
+               "without modifications due to the lack of proper symlink support"; exit 1 ;;
+esac
+
+printf "Testing for dependencies\n"
+# command -q / --quiet one day? :(
+command -V awk       > /dev/null
+command -V chmod     > /dev/null
+command -V git       > /dev/null
+command -V grep      > /dev/null
+command -V make      > /dev/null
+command -V md5sum    > /dev/null
+command -V mkdir     > /dev/null
+command -V mktemp    > /dev/null
+command -V rm        > /dev/null
+command -V rmdir     > /dev/null
+command -V sed       > /dev/null
+command -V tee       > /dev/null
+command -V test      > /dev/null
+command -V true      > /dev/null
+command -V printf    > /dev/null
+command -V wget      > /dev/null
+printf "All dependencies found\n"
+
+createdtoday() {
+       # check if a file's creation date is today
+       if [ "$(stat -c '%y' "$1" | cut -d ' ' -f 1)" = "$(date -I)" ]
+       then
+               #echo "$1 was created today"
+               return 0
+       else
+               #echo "$1 was not created today"
+               return 1
+       fi
+}
+
+hashtestcleanup() {
+       # allow for error return codes in this function as this may be ran on interrupt
+       # right after starting where all files to clean up don't exist yet
+       set +e
+
+       # unset trap
+       trap - EXIT INT QUIT TERM
+
+       # Few files' removal has been disabled for file reuse
+       # It's possible to get rate limited with enough testing
+
+       rm lock
+       rm data/darkplaces_history.txt
+       rm data/xonotic-data.pk3dir
+       #rm data/stormkeep.pk3
+       rm data/data/defaultSVQC.cfg
+       rm data/data/hits---1.plot
+       rm data/data/hits---2.plot
+       rm data/data/hits---3.plot
+       rm data/data/notifications_dump.cfg
+       rm data/data/server.db
+       rmdir data/data/
+       #rm data/maps/_init.bsp
+       #rm data/maps/stormkeep.mapinfo
+       #rm data/maps/stormkeep.waypoints
+       #rm data/maps/stormkeep.waypoints.cache
+       #rmdir data/maps/
+
+       set -e
+}
+trap "hashtestcleanup" EXIT INT QUIT TERM
+
+# cd xonotic-data.pk3dir
+cd "$(dirname "$0")/../../"
+
+WORKINGDIR="$PWD"
+
+TMPDIR="$PWD/.tmp"
+
+# if xonotic-data.pk3dir/data/xonotic-data.pk3dir isn't a symlink then link it
+if [ -e data/xonotic-data.pk3dir ]
+then # file exists
+       if ! [ -L data/xonotic-data.pk3dir ]
+       then # file exists but it's not a symlink, replace it
+               if [ -d data/xonotic-data.pk3dir ]
+               then # it's a dir
+                       rmdir data/xonotic-data.pk3dir
+                       ln -s "$PWD" data/xonotic-data.pk3dir
+               else # it's not a dir
+                       rm data/xonotic-data.pk3dir
+                       ln -s "$PWD" data/xonotic-data.pk3dir
+               fi
+       else # it is a symlink, verify where it points
+               if [ "$(realpath data/xonotic-data.pk3dir)" != "$PWD" ]
+               then # wrong place, recreate it
+                       rm data/xonotic-data.pk3dir
+                       ln -s "$PWD" data/xonotic-data.pk3dir
+               fi
+       fi
+else # no file exists there
+       ln -s "$PWD" data/xonotic-data.pk3dir
+fi
+
+MAKEFLAGS=-j$(nproc)
+export MAKEFLAGS
+printf "%s\n" "MAKEFLAGS=$MAKEFLAGS"
+export CC="gcc -pipe"
+
+# precompiled binary is executable and its creation date is today
+if [ -x "$TMPDIR/gmqcc-bin" ] && createdtoday "$TMPDIR/gmqcc-bin"
+then
+       export QCC="$TMPDIR/gmqcc-bin"
+else # previously compiled is executable and its creation date is today
+       if [ -x "$TMPDIR/gmqcc/gmqcc" ] && createdtoday "$TMPDIR/gmqcc/gmqcc"
+       then
+               export QCC="$TMPDIR/gmqcc/gmqcc"
+       else # nothing reusable exists
+               # prefer a precompiled binary
+               if wget -nv https://beta.xonotic.org/pipeline-bin/gmqcc -O "$TMPDIR/gmqcc-bin"
+               then
+                       export QCC="$TMPDIR/gmqcc-bin"
+                       chmod +x "$QCC"
+               else
+                       if [ -d "$TMPDIR/gmqcc" ]
+                       then
+                               cd "$TMPDIR/gmqcc"
+                               git checkout main
+                               git pull
+                               cd "$WORKINGDIR"
+                       else
+                               git clone --depth=1 --branch=main https://gitlab.com/xonotic/gmqcc.git "$TMPDIR/gmqcc"
+                       fi
+                       make -C "$TMPDIR/gmqcc" || exit 1
+                       export QCC="$TMPDIR/gmqcc/gmqcc"
+               fi
+       fi
+fi
+
+# Makefile: don't complain about lack of tags (fetching them is slow)
+export QCCFLAGS_WATERMARK=gitlab_pipeline
+# Makefile: don't compress anything or complain about lack of zip program
+export ZIP=true
+
+
+if [ "$(uname):$(uname -m)" = "Linux:x86_64" ] && [ -x "$TMPDIR/xonotic-linux64-dedicated" ] && createdtoday "$TMPDIR/xonotic-linux64-dedicated"
+then # precompiled binary is executable and its creation date is today
+       export ENGINE="$TMPDIR/xonotic-linux64-dedicated"
+else
+       if [ -x "$TMPDIR/darkplaces/darkplaces-dedicated" ] && createdtoday "$TMPDIR/darkplaces/darkplaces-dedicated"
+       then # previously compiled is executable and its creation date is today
+               export ENGINE="$TMPDIR/darkplaces/darkplaces-dedicated -xonotic"
+       else # nothing reusable exists
+               # prefer a precompiled binary
+               if [ "$(uname):$(uname -m)" = "Linux:x86_64" ] && wget -nv https://beta.xonotic.org/pipeline-bin/xonotic-linux64-dedicated -O "$TMPDIR/xonotic-linux64-dedicated"
+               then
+                       export ENGINE="$TMPDIR/xonotic-linux64-dedicated"
+                       chmod +x "$ENGINE"
+               else
+                       if [ -d "$TMPDIR/darkplaces" ]
+                       then
+                               cd "$TMPDIR/darkplaces"
+                               #git checkout master
+                               git pull --autostash
+                               cd "$WORKINGDIR"
+                       else
+                               git clone --depth=1 https://gitlab.com/xonotic/darkplaces.git "$TMPDIR/darkplaces"
+                       fi
+                       make -C "$TMPDIR/darkplaces" sv-release || exit 1
+                       export ENGINE="$TMPDIR/darkplaces/darkplaces-dedicated -xonotic"
+               fi
+       fi
+fi
+export ENGINE="$ENGINE -noconfig -nohome"
+
+make qc || exit 1
+
+mkdir -p data/maps
+
+createdtoday "data/maps/_init.bsp" \
+       || wget -nv -O data/maps/_init.bsp https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/_init/_init.bsp
+
+while read -r LINE
+do
+       printf "%s\n" "$LINE"
+       [ "$LINE" = "All tests OK" ] && PASS=1
+done < <(${ENGINE} +developer 1 +map _init +sv_cmd runtest +wait +quit)
+test "$PASS" = "1" || { printf 'sv_cmd runtest failed!'; exit 1; }
+
+${ENGINE} +map _init +sv_cmd dumpnotifs +wait +quit
+diff notifications.cfg data/data/notifications_dump.cfg ||
+       { printf "Please update notifications.cfg using \`dumpnotifs\`!"; exit 1; }
+
+createdtoday "data/stormkeep.pk3" \
+       || wget -nv -O data/stormkeep.pk3 https://beta.xonotic.org/pipeline-bin/stormkeep.pk3
+createdtoday "data/maps/stormkeep.mapinfo" \
+       || wget -nv -O data/maps/stormkeep.mapinfo https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.mapinfo
+createdtoday "data/maps/stormkeep.waypoints" \
+       || wget -nv -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints
+createdtoday "data/maps/stormkeep.waypoints.cache" \
+       || wget -nv -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache
+
+set +u
+if [ -z "$EXPECT" ]
+then
+       # find the line with expected hash from .gitlab-ci.yml, extract the hash and remove carriage return
+       EXPECT="$(grep 'EXPECT=' './.gitlab-ci.yml' | cut -d '=' -f 2 | tr -d $'\r')"
+fi
+set -u
+HASH=$(${ENGINE} +exec serverbench.cfg \
+      | tee /dev/stderr \
+      | grep '^:' \
+      | grep -v '^:gamestart:' \
+      | grep -v '^:anticheat:' \
+      | md5sum | awk '{ print $1 }')
+
+hashtestcleanup
+
+if [ "$HASH" = "$EXPECT" ]
+then # green ok print
+       printf "\033[32m%s\033[0m\n" "expected: $EXPECT"
+       printf "\033[32m%s\033[0m\n" "  actual: $HASH"
+       printf "\033[32m%s\033[0m\n" "hashes match"
+       exit 0
+else # red error print
+       printf "\033[32m%s\033[0m\n" "expected: $EXPECT"
+       printf "\033[32m%s\033[0m\n" "  actual: $HASH"
+       printf "\033[31m%s\033[0m\n" "!!! ERROR: HASHES DO NOT MATCH !!!"
+       exit 1
+fi
index af952d0ce184ea3bcd403ec45343c7632dfa954a..d1b449f475d8ac5608a069854660ec72626e739e 100644 (file)
@@ -456,12 +456,13 @@ seta cl_damagetext_size_max 16 "Damage text font size for large damage"
 seta cl_damagetext_size_max_damage 140 "How much damage is considered large"
 seta cl_damagetext_alpha_start "1" "Damage text initial alpha"
 seta cl_damagetext_alpha_lifetime "3" "Damage text lifetime in seconds"
+seta cl_damagetext_lifetime "-1" "Damage text lifetime, edit this if you wish for damage text to disappear before it fades out"
 seta cl_damagetext_velocity_screen "0 0 0" "Damage text move direction (screen coordinates)"
 seta cl_damagetext_velocity_world "0 0 20" "Damage text move direction (world coordinates relative to player's view)"
 seta cl_damagetext_offset_screen "0 -45 0" "Damage text offset (screen coordinates)"
-seta cl_damagetext_offset_world "0 0 0" "Damage text offset (world coordinates relative to player's view)"
-seta cl_damagetext_accumulate_range "30" "Damage text spawned within this range is accumulated"
+seta cl_damagetext_offset_world "0 25 0" "Damage text offset (world coordinates relative to player's view)"
 seta cl_damagetext_accumulate_alpha_rel "0.65" "Only update existing damage text when it's above this much percentage (0 to 1) of the starting alpha"
+seta cl_damagetext_accumulate_lifetime "-1" "Only update existing damage text when it is younger than this many seconds, negative always updates"
 seta cl_damagetext_friendlyfire "1" "0: never show for friendly fire, 1: when more than 0 damage, 2: always"
 seta cl_damagetext_friendlyfire_color "1 0 0" "Damage text color for friendlyfire"
 
index 707e2ba8e00260010f25d9b33eea4c6111474759..a72143db3849a387a10fad28f8440f6816600081 100644 (file)
@@ -240,8 +240,11 @@ set g_grab_range 200 "distance at which dragable objects can be grabbed"
 
 set g_player_alpha 1 "default opacity of players"
 set g_player_brightness 0 "set to 2 for brighter players"
+
 set g_player_damageforcescale 2 "push multiplier of attacks against players"
 
+set g_player_damageplayercenter 0 "0: always calculate knockback force direction from player's eyes instead of bbox center. 1: use bbox center point for others, shot origin for attacker's self-damage"
+
 set g_playerclip_collisions 1 "0 = disable collision testing against playerclips, might be useful on some defrag maps"
 set g_botclip_collisions 1 "0 = disable collision testing against botclips, might be useful on some defrag maps"
 
@@ -545,6 +548,9 @@ alias pm_gw "prvm_globalwatchpoint menu ${* ?}"
 // otherwise, antilag breaks
 sv_gameplayfix_consistentplayerprethink 1
 
+// Xonotic's QC physics still depend on this cvar (feature deprecated in DP master)
+sv_gameplayfix_unstickplayers 1
+
 // improve some minor details
 sv_gameplayfix_gravityunaffectedbyticrate 1
 sv_gameplayfix_nogravityonground 1