Merge branch 'terencehill/noclip_death_fix' into 'master'
authorMario <mario.mario@y7mail.com>
Sat, 18 Jul 2020 17:18:17 +0000 (17:18 +0000)
committerMario <mario.mario@y7mail.com>
Sat, 18 Jul 2020 17:18:17 +0000 (17:18 +0000)
Noclip death fix

See merge request xonotic/xonotic-data.pk3dir!837

214 files changed:
.gitlab-ci.yml
.tx/merge-base
common.el.po
common.es.po
common.fi.po
common.ja_JP.po
languages.txt
qcsrc/client/csqcmodel_hooks.qc
qcsrc/client/hud/panel/infomessages.qc
qcsrc/client/hud/panel/modicons.qc
qcsrc/client/hud/panel/physics.qc
qcsrc/client/hud/panel/racetimer.qc
qcsrc/client/hud/panel/radar.qc
qcsrc/client/hud/panel/score.qc
qcsrc/client/hud/panel/scoreboard.qc
qcsrc/client/hud/panel/vote.qc
qcsrc/client/mapvoting.qc
qcsrc/client/mutators/events.qh
qcsrc/client/shownames.qc
qcsrc/client/view.qc
qcsrc/common/csqcmodel_settings.qh
qcsrc/common/effects/all.inc
qcsrc/common/effects/all.qc
qcsrc/common/effects/all.qh
qcsrc/common/effects/effectinfo.inc
qcsrc/common/gamemodes/gamemode/assault/_mod.inc
qcsrc/common/gamemodes/gamemode/assault/_mod.qh
qcsrc/common/gamemodes/gamemode/assault/assault.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/assault/assault.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/clanarena/_mod.inc
qcsrc/common/gamemodes/gamemode/clanarena/_mod.qh
qcsrc/common/gamemodes/gamemode/clanarena/cl_clanarena.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/clanarena/cl_clanarena.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/clanarena/clanarena.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/clanarena/clanarena.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/ctf/cl_ctf.qc
qcsrc/common/gamemodes/gamemode/ctf/ctf.qh
qcsrc/common/gamemodes/gamemode/ctf/sv_ctf.qc
qcsrc/common/gamemodes/gamemode/ctf/sv_ctf.qh
qcsrc/common/gamemodes/gamemode/cts/_mod.inc
qcsrc/common/gamemodes/gamemode/cts/_mod.qh
qcsrc/common/gamemodes/gamemode/cts/cl_cts.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/cts/cl_cts.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/cts/cts.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/cts/cts.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/cts/sv_cts.qc
qcsrc/common/gamemodes/gamemode/deathmatch/_mod.inc
qcsrc/common/gamemodes/gamemode/deathmatch/_mod.qh
qcsrc/common/gamemodes/gamemode/deathmatch/deathmatch.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/deathmatch/deathmatch.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/domination/cl_domination.qc
qcsrc/common/gamemodes/gamemode/domination/cl_domination.qh
qcsrc/common/gamemodes/gamemode/domination/domination.qh
qcsrc/common/gamemodes/gamemode/domination/sv_domination.qc
qcsrc/common/gamemodes/gamemode/duel/_mod.inc
qcsrc/common/gamemodes/gamemode/duel/_mod.qh
qcsrc/common/gamemodes/gamemode/duel/duel.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/duel/duel.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/freezetag/_mod.inc
qcsrc/common/gamemodes/gamemode/freezetag/_mod.qh
qcsrc/common/gamemodes/gamemode/freezetag/cl_freezetag.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/freezetag/cl_freezetag.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/freezetag/freezetag.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/freezetag/freezetag.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/invasion/_mod.inc
qcsrc/common/gamemodes/gamemode/invasion/_mod.qh
qcsrc/common/gamemodes/gamemode/invasion/invasion.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/invasion/invasion.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/keepaway/keepaway.qh
qcsrc/common/gamemodes/gamemode/keepaway/sv_keepaway.qc
qcsrc/common/gamemodes/gamemode/keyhunt/keyhunt.qh
qcsrc/common/gamemodes/gamemode/keyhunt/sv_keyhunt.qc
qcsrc/common/gamemodes/gamemode/lms/_mod.inc
qcsrc/common/gamemodes/gamemode/lms/_mod.qh
qcsrc/common/gamemodes/gamemode/lms/cl_lms.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/lms/cl_lms.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/lms/lms.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/lms/lms.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/nexball/cl_nexball.qc
qcsrc/common/gamemodes/gamemode/nexball/nexball.qh
qcsrc/common/gamemodes/gamemode/nexball/sv_nexball.qc
qcsrc/common/gamemodes/gamemode/nexball/weapon.qh
qcsrc/common/gamemodes/gamemode/onslaught/onslaught.qh
qcsrc/common/gamemodes/gamemode/race/_mod.inc
qcsrc/common/gamemodes/gamemode/race/_mod.qh
qcsrc/common/gamemodes/gamemode/race/cl_race.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/race/cl_race.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/race/race.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/race/race.qh [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/race/sv_race.qc
qcsrc/common/gamemodes/gamemode/tdm/_mod.inc
qcsrc/common/gamemodes/gamemode/tdm/_mod.qh
qcsrc/common/gamemodes/gamemode/tdm/tdm.qc [new file with mode: 0644]
qcsrc/common/gamemodes/gamemode/tdm/tdm.qh [new file with mode: 0644]
qcsrc/common/mapinfo.qc
qcsrc/common/mapinfo.qh
qcsrc/common/mapobjects/func/ladder.qc
qcsrc/common/mapobjects/func/ladder.qh
qcsrc/common/mapobjects/models.qc
qcsrc/common/mapobjects/target/changelevel.qc
qcsrc/common/mapobjects/target/speaker.qc
qcsrc/common/mapobjects/teleporters.qc
qcsrc/common/mapobjects/trigger/jumppads.qc
qcsrc/common/minigames/sv_minigames.qc
qcsrc/common/mutators/mutator/instagib/sv_instagib.qh
qcsrc/common/mutators/mutator/overkill/okhmg.qc
qcsrc/common/mutators/mutator/overkill/okhmg.qh
qcsrc/common/mutators/mutator/overkill/okmachinegun.qc
qcsrc/common/mutators/mutator/overkill/okmachinegun.qh
qcsrc/common/mutators/mutator/overkill/okrpc.qc
qcsrc/common/mutators/mutator/overkill/okrpc.qh
qcsrc/common/physics/movetypes/_mod.inc
qcsrc/common/physics/movetypes/_mod.qh
qcsrc/common/physics/movetypes/all.inc
qcsrc/common/physics/movetypes/movetypes.qc
qcsrc/common/physics/movetypes/movetypes.qh
qcsrc/common/physics/movetypes/push.qc [new file with mode: 0644]
qcsrc/common/physics/movetypes/push.qh [new file with mode: 0644]
qcsrc/common/physics/movetypes/walk.qc
qcsrc/common/physics/player.qc
qcsrc/common/stats.qh
qcsrc/common/turrets/turret/machinegun_weapon.qc
qcsrc/common/util.qc
qcsrc/common/vehicles/vehicle/racer.qc
qcsrc/common/vehicles/vehicle/racer_weapon.qc
qcsrc/common/vehicles/vehicle/racer_weapon.qh
qcsrc/common/viewloc.qc
qcsrc/common/weapons/all.qc
qcsrc/common/weapons/all.qh
qcsrc/common/weapons/weapon.qh
qcsrc/common/weapons/weapon/arc.qc
qcsrc/common/weapons/weapon/arc.qh
qcsrc/common/weapons/weapon/blaster.qc
qcsrc/common/weapons/weapon/blaster.qh
qcsrc/common/weapons/weapon/crylink.qc
qcsrc/common/weapons/weapon/crylink.qh
qcsrc/common/weapons/weapon/devastator.qc
qcsrc/common/weapons/weapon/devastator.qh
qcsrc/common/weapons/weapon/electro.qc
qcsrc/common/weapons/weapon/electro.qh
qcsrc/common/weapons/weapon/fireball.qc
qcsrc/common/weapons/weapon/fireball.qh
qcsrc/common/weapons/weapon/hagar.qc
qcsrc/common/weapons/weapon/hagar.qh
qcsrc/common/weapons/weapon/hlac.qc
qcsrc/common/weapons/weapon/hlac.qh
qcsrc/common/weapons/weapon/hook.qh
qcsrc/common/weapons/weapon/machinegun.qc
qcsrc/common/weapons/weapon/machinegun.qh
qcsrc/common/weapons/weapon/minelayer.qc
qcsrc/common/weapons/weapon/minelayer.qh
qcsrc/common/weapons/weapon/mortar.qc
qcsrc/common/weapons/weapon/mortar.qh
qcsrc/common/weapons/weapon/rifle.qc
qcsrc/common/weapons/weapon/rifle.qh
qcsrc/common/weapons/weapon/seeker.qc
qcsrc/common/weapons/weapon/seeker.qh
qcsrc/common/weapons/weapon/shotgun.qc
qcsrc/common/weapons/weapon/shotgun.qh
qcsrc/common/weapons/weapon/vaporizer.qc
qcsrc/common/weapons/weapon/vaporizer.qh
qcsrc/common/weapons/weapon/vortex.qc
qcsrc/common/weapons/weapon/vortex.qh
qcsrc/dpdefs/csprogsdefs.qh
qcsrc/dpdefs/upstream/csprogsdefs.qc
qcsrc/dpdefs/upstream/dpextensions.qc
qcsrc/dpdefs/upstream/keycodes.qc
qcsrc/dpdefs/upstream/menudefs.qc
qcsrc/dpdefs/upstream/progsdefs.qc
qcsrc/ecs/systems/cl_physics.qc
qcsrc/ecs/systems/physics.qc
qcsrc/ecs/systems/sv_physics.qc
qcsrc/lib/self.qh
qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc
qcsrc/menu/xonotic/dialog_settings_misc.qc
qcsrc/menu/xonotic/dialog_settings_video.qc
qcsrc/menu/xonotic/dialog_singleplayer.qc
qcsrc/menu/xonotic/gametypelist.qc
qcsrc/menu/xonotic/util.qc
qcsrc/server-testcase/framework.qc [deleted file]
qcsrc/server-testcase/progs.src [deleted file]
qcsrc/server-testcase/run.sh [deleted file]
qcsrc/server/_mod.inc
qcsrc/server/_mod.qh
qcsrc/server/anticheat.qc
qcsrc/server/bot/default/havocbot/havocbot.qc
qcsrc/server/bot/default/navigation.qc
qcsrc/server/bot/default/waypoints.qc
qcsrc/server/campaign.qc
qcsrc/server/client.qc
qcsrc/server/command/getreplies.qc
qcsrc/server/command/sv_cmd.qc
qcsrc/server/command/vote.qc
qcsrc/server/compat/quake3.qc
qcsrc/server/defs.qh
qcsrc/server/g_damage.qc
qcsrc/server/g_hook.qc
qcsrc/server/g_world.qc
qcsrc/server/gamelog.qc [new file with mode: 0644]
qcsrc/server/gamelog.qh [new file with mode: 0644]
qcsrc/server/impulse.qc
qcsrc/server/items.qc
qcsrc/server/mapvoting.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/miscfunctions.qh
qcsrc/server/mutators/events.qh
qcsrc/server/race.qc
qcsrc/server/spawnpoints.qc
qcsrc/server/sv_main.qc
qcsrc/server/teamplay.qc
scripts/cellammo.Shader [deleted file]
scripts/cellammo.shader [new file with mode: 0644]
xonotic-client.cfg
xonotic-server.cfg

index 7294f17..2f2fd4f 100644 (file)
@@ -29,7 +29,7 @@ test_sv_game:
     - wget -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints
     - wget -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache
     - make
-    - EXPECT=ea6a54e129f245d2472f33475962c8e7
+    - EXPECT=040aeef53953a85c5891c0c39cf9860f
     - HASH=$(${ENGINE} -noconfig -nohome +exec serverbench.cfg
       | tee /dev/stderr
       | grep '^:'
index 3665188..037aa1c 100644 (file)
@@ -1 +1 @@
-Wed Jul  8 07:23:47 CEST 2020
+Sat Jul 18 07:23:53 CEST 2020
index 397f0f8..9eeec99 100644 (file)
@@ -4,6 +4,7 @@
 #
 # Translators:
 # 77960155d0a4db79ed901e7c2ee242e7_4b8c532, 2016
+# aaa627661149cfc7c57d1c75ef650b07_039425b, 2018
 # Hector Champipis <hector-hab@hotmail.com>, 2019
 # 77960155d0a4db79ed901e7c2ee242e7_4b8c532, 2016
 # Vindex <kon14.inside@gmail.com>, 2014
index 25092c5..b648b99 100644 (file)
@@ -30,7 +30,7 @@ msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-06-07 07:23+0200\n"
-"PO-Revision-Date: 2020-07-07 20:19+0000\n"
+"PO-Revision-Date: 2020-07-17 23:02+0000\n"
 "Last-Translator: LegendGuard\n"
 "Language-Team: Spanish (http://www.transifex.com/team-xonotic/xonotic/"
 "language/es/)\n"
@@ -3031,7 +3031,7 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:417
 #, c-format
 msgid "^BG%s^F3 was kicked for excessive teamkilling"
-msgstr "^BG%s^F3 ha sido expulsado por matar a sus propios compañeros"
+msgstr "^BG%s^F3 ha sido expulsado por matar a tus propios compañeros"
 
 #: qcsrc/common/notifications/all.inc:418
 #, c-format
@@ -3102,7 +3102,7 @@ msgstr ""
 
 #: qcsrc/common/notifications/all.inc:432
 msgid "^TC^TT ^BGteam scores!"
-msgstr "¡El equipo ^TC^TT^BG ha anotado!"
+msgstr "¡El equipo ^TC^TT^BG ha acertado!"
 
 #: qcsrc/common/notifications/all.inc:434
 #, c-format
@@ -3213,7 +3213,7 @@ msgstr "^BG%s%s^K1 se acercó demasiado al cohete de ^BG%s^K1%s%s"
 #: qcsrc/common/notifications/all.inc:457
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Devastator%s%s"
-msgstr "^BG%s^K1 se explotó a si mismo con su Devastador%s%s"
+msgstr "^BG%s^K1 se explotó a sí mismo con su Devastador%s%s"
 
 #: qcsrc/common/notifications/all.inc:458
 #, c-format
@@ -3276,7 +3276,7 @@ msgstr "^Bg%s%s^K1 fue golpeado por los misiles de Hagar de ^BG%s^K1%s%s"
 #: qcsrc/common/notifications/all.inc:469
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
-msgstr "^BG%s^K1 jugó con pequeños misiles de Hagar%s%s"
+msgstr "^BG%s^K1 jugó con los pequeños misiles de Hagar%s%s"
 
 #: qcsrc/common/notifications/all.inc:470
 #, c-format
@@ -3286,7 +3286,7 @@ msgstr "^BG%s%s^K1 fue cortado por el HLAC de ^BG%s^K1%s%s"
 #: qcsrc/common/notifications/all.inc:471
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
-msgstr "^BG%s^K1 se puso un poco acelerado con su HLAC%s%s"
+msgstr "^BG%s^K1 se puso un poco nervioso con su HLAC%s%s"
 
 #: qcsrc/common/notifications/all.inc:472
 #, c-format
@@ -3310,7 +3310,7 @@ msgstr "^BG%s^K1 lastimó sus propios oídos con la @!#%%'n Botella de Klein%s%s
 #: qcsrc/common/notifications/all.inc:475
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
-msgstr "^Bg%s%s^K1 fue baleado por la Ametralladora de ^BG%s^K1%s%s"
+msgstr "^Bg%s%s^K1 fue arrebatado por la Ametralladora de ^BG%s^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:476
 #, c-format
@@ -3358,7 +3358,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 baleado 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:485
 #, c-format
@@ -3421,7 +3422,7 @@ msgstr "^BG%s%s^K1 fue baleado por la Escopeta Overkill de ^BG%s^K1%s%s"
 #: qcsrc/common/notifications/all.inc:494
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
-msgstr "^BG%s%s^K1 fue baleado por ^BG%s^K1 con un Rifle%s%s"
+msgstr "^BG%s%s^K1 fue arrebatado por ^BG%s^K1 con un Rifle%s%s"
 
 #: qcsrc/common/notifications/all.inc:495
 #, c-format
@@ -3528,11 +3529,11 @@ msgstr "^F4El juego inicia en ^COUNT"
 
 #: qcsrc/common/notifications/all.inc:536
 msgid "^F4Round starts in ^COUNT"
-msgstr "^F4Ronda empieza en ^COUNT"
+msgstr "^F4La ronda empieza en ^COUNT"
 
 #: qcsrc/common/notifications/all.inc:537
 msgid "^F4Round cannot start"
-msgstr "^F4Ronda no puede empezar"
+msgstr "^F4La ronda no puede empezar"
 
 #: qcsrc/common/notifications/all.inc:542
 msgid "^F2Don't camp!"
@@ -3883,7 +3884,7 @@ msgstr "^K1Te volviste muy viejo sin tomar tu medicamento"
 
 #: qcsrc/common/notifications/all.inc:636
 msgid "^K1You need to preserve your health"
-msgstr "^K1Necesitas conservar tu vida"
+msgstr "^K1Necesitas conservar tu salud"
 
 #: qcsrc/common/notifications/all.inc:637
 msgid "^K1You became a shooting star!"
@@ -3977,7 +3978,7 @@ msgstr "^K1¡Cuidado por dónde pisas!"
 #: qcsrc/common/notifications/all.inc:656
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
-msgstr "^K1¡Imbécil! ¡Has eliminado a ^BG%s^K1, un compañero!"
+msgstr "^K1¡Imbécil! ¡Has eliminado a ^BG%s^K1, un compañero tuyo!"
 
 #: qcsrc/common/notifications/all.inc:656
 #, c-format
@@ -4453,7 +4454,7 @@ msgstr "¡%s^K1 ha hecho una ELIMINACIÓN TRIPLE! %s^BG"
 #: qcsrc/common/notifications/all.qh:455
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
-msgstr "¡%s^K1 ha hecho una ELIMINACIÓN TRIPLE! %s^BG"
+msgstr "¡%s^K1 ha hecho TRIPLE ACIERTO! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:455
 msgid "TRIPLE FRAG! "
@@ -4476,7 +4477,7 @@ msgstr "¡FURIA!"
 #: qcsrc/common/notifications/all.qh:457
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
-msgstr "¡%s^K1 eliminó a DIEZ JUGADORES SEGUIDOS! %s^BG"
+msgstr "¡%s^K1 eliminó a DIEZ ACIERTOS SEGUIDOS! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:457
 #, c-format
@@ -4495,7 +4496,7 @@ msgstr "¡%s^K1 ha ejecutado un CAOS! %s^BG"
 #: qcsrc/common/notifications/all.qh:458
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
-msgstr "¡%s^K1 ha hecho QUINCE ELIMINACIONES SEGUIDAS! %s^BG"
+msgstr "¡%s^K1 ha hecho QUINCE ACIERTOS SEGUIDOS! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:458
 msgid "MAYHEM! "
@@ -4509,7 +4510,7 @@ msgstr "¡%s^K1 es un BERSERKER! %s^BG"
 #: qcsrc/common/notifications/all.qh:459
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
-msgstr "¡%s^K1 ha hecho VEINTE ELIMINACIONES SEGUIDAS! %s^BG"
+msgstr "¡%s^K1 ha hecho VEINTE ACIERTOS SEGUIDOS! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:459
 msgid "BERSERKER! "
@@ -4523,7 +4524,7 @@ msgstr "¡%s^K1 ha hecho una CARNICERÍA! %s^BG"
 #: qcsrc/common/notifications/all.qh:460
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
-msgstr "¡%s^K1 ha hecho VENTICINCO ELIMINACIONES SEGUIDAS! %s^BG"
+msgstr "¡%s^K1 ha hecho VENTICINCO ACIERTOS SEGUIDOS! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:460
 msgid "CARNAGE! "
@@ -4532,12 +4533,12 @@ msgstr "¡CARNICERÍA!"
 #: qcsrc/common/notifications/all.qh:461
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
-msgstr "¡%s^K1 ha hecho TREINTA ELIMINACIONES SEGUIDAS! %s^BG"
+msgstr "¡%s^K1 ha hecho TREINTA ACIERTOS SEGUIDOS! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:461
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
-msgstr "¡%s^K1 destata el ARMAGEDÓN! %s^BG"
+msgstr "¡%s^K1 desata el ARMAGEDÓN! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:461
 msgid "ARMAGEDDON! "
@@ -4560,7 +4561,7 @@ msgid ""
 "(Health ^1%d^BG / Armor ^2%d^BG)%s"
 msgstr ""
 "\n"
-"(Vida ^1%d^BG / Armadura ^2%d^BG)%s"
+"(Salud ^1%d^BG / Armadura ^2%d^BG)%s"
 
 #: qcsrc/common/notifications/all.qh:479
 #, c-format
@@ -4574,7 +4575,7 @@ msgstr ""
 #: qcsrc/common/notifications/all.qh:500 qcsrc/common/notifications/all.qh:513
 #, c-format
 msgid "%d score spree! "
-msgstr "¡%d puntuaciones seguidas! "
+msgstr "¡%d aciertos seguidos! "
 
 #: qcsrc/common/notifications/all.qh:512
 #, c-format
@@ -4583,15 +4584,15 @@ msgstr "¡%d eliminaciones seguidas! "
 
 #: qcsrc/common/notifications/all.qh:525
 msgid "First blood! "
-msgstr "¡Primera eliminación! "
+msgstr "¡Primer asesinato! "
 
 #: qcsrc/common/notifications/all.qh:525
 msgid "First score! "
-msgstr "¡Primera puntuación! "
+msgstr "¡Primer acierto! "
 
 #: qcsrc/common/notifications/all.qh:529
 msgid "First casualty! "
-msgstr "¡Primera baja! "
+msgstr "¡Primera derrota! "
 
 #: qcsrc/common/notifications/all.qh:529
 msgid "First victim! "
@@ -4605,7 +4606,7 @@ msgstr "¡%s^K1 tiene %d eliminaciones seguidas! %s^BG"
 #: qcsrc/common/notifications/all.qh:571
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
-msgstr "¡%s^K1 tiene %d eliminaciones seguidas! %s^BG"
+msgstr "¡%s^K1 tiene %d aciertos seguidos! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:589
 #, c-format
@@ -4615,27 +4616,27 @@ msgstr "¡%s^K1 ha sido el primero en eliminar a alguien! %s^BG"
 #: qcsrc/common/notifications/all.qh:590
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
-msgstr "¡%s^K1 fue el primero en eliminar a alguien! %s^BG"
+msgstr "¡%s^K1 fue el primero en acertar! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:606
 #, c-format
 msgid ", ending their %d frag spree"
-msgstr ", finalizando su cadena de %d eliminaciones"
+msgstr ", finalizando sus %d eliminaciones seguidas"
 
 #: qcsrc/common/notifications/all.qh:607
 #, c-format
 msgid ", ending their %d score spree"
-msgstr ", finalizando su cadena de %d eliminaciones"
+msgstr ", finalizando sus %d aciertos seguidos"
 
 #: qcsrc/common/notifications/all.qh:621
 #, c-format
 msgid ", losing their %d frag spree"
-msgstr ", perdiendo su cadena de %d eliminaciones"
+msgstr ", perdiendo sus %d eliminaciones seguidas"
 
 #: qcsrc/common/notifications/all.qh:622
 #, c-format
 msgid ", losing their %d score spree"
-msgstr ", perdiendo su cadena de %d eliminaciones"
+msgstr ", perdiendo sus %d aciertos seguidos"
 
 #: qcsrc/common/notifications/all.qh:647
 #, c-format
@@ -4716,7 +4717,7 @@ msgstr "Rosa"
 
 #: qcsrc/common/turrets/all.qh:95
 msgid "Turrets dump command only works with sv_cmd."
-msgstr "El comando de volcado de tirar torretas sólo funciona con sv_cmd."
+msgstr "El comando de volcado de torretas sólo funciona con sv_cmd."
 
 #: qcsrc/common/turrets/cl_turrets.qc:125
 #, c-format
@@ -4832,7 +4833,7 @@ msgstr "Femenino"
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:174
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:187
 msgid "Undisclosed"
-msgstr "No revelado"
+msgstr "Desconocido"
 
 #: qcsrc/common/util.qc:1439
 msgid "<KEY NOT FOUND>"
@@ -5857,7 +5858,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_firstrun.qc:84
 msgid "Undecided"
-msgstr "Sin determinar"
+msgstr "Indeciso"
 
 #: qcsrc/menu/xonotic/dialog_firstrun.qc:88
 msgid "Save settings"
@@ -5959,7 +5960,7 @@ msgstr "Tamaño del texto:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:24
 msgid "Chat lifetime:"
-msgstr "Mostrar durante:"
+msgstr "Mostrar chat durante:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:28
 msgid "Chat beep sound"
@@ -5983,7 +5984,7 @@ msgstr "Panel de Información del Motor"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:17
 msgid "Combine health and armor"
-msgstr "Combinar vida y armadura"
+msgstr "Combinar salud y armadura"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:19
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:28
@@ -6017,11 +6018,11 @@ msgstr "Alineación de los iconos:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:42
 msgid "Flip health and armor positions"
-msgstr "Invertir la posición de vida y armadura"
+msgstr "Invertir la posición de salud y armadura"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qh:6
 msgid "Health/Armor Panel"
-msgstr "Panel de Vida/Armadura"
+msgstr "Panel de Salud/Armadura"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.qc:16
 msgid "Info messages:"
@@ -6071,7 +6072,7 @@ msgstr "No mostrar objetos reaparecidos"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:37
 msgid "Hide big armor and health"
-msgstr "No mostrar gran armadura y vida"
+msgstr "No mostrar gran armadura y salud"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
 msgid "Dynamic size"
@@ -6974,7 +6975,7 @@ msgstr "Sólo es posible infligir daño a tus enemigos mientras estén en el air
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
 msgid "Damage done to your enemy gets added to your own health"
-msgstr "Daño realizado a tu enemigo será añadido a tu propia vida"
+msgstr "Daño realizado a tu enemigo será añadido a tu propia salud"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:190
 msgid ""
@@ -7258,7 +7259,7 @@ msgstr "Bots:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:229
 msgid "Free slots:"
-msgstr "Plazas libres:"
+msgstr "Espacios libres:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:235
 msgid "Encryption:"
@@ -8458,7 +8459,7 @@ msgstr "Sólo cuando cerca de apuntador"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:158
 msgid "Display health and armor"
-msgstr "Desplegar vida y armadura"
+msgstr "Desplegar salud y armadura"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:163
 msgid "Damage overlay:"
@@ -9534,7 +9535,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:158
 msgid "Use OpenGL 2.0 shaders (GLSL)"
-msgstr "Usar shaders OpenGL2.0 (GLSL)"
+msgstr "Usar shaders OpenGL 2.0 (GLSL)"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:163
 msgid "Psycho coloring (easter egg)"
index 1f94bf2..9e2346c 100644 (file)
@@ -11,8 +11,8 @@ msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-06-07 07:23+0200\n"
-"PO-Revision-Date: 2020-06-07 05:23+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"PO-Revision-Date: 2020-07-09 17:30+0000\n"
+"Last-Translator: Oi Suomi On! <oisuomion@protonmail.com>\n"
 "Language-Team: Finnish (http://www.transifex.com/team-xonotic/xonotic/"
 "language/fi/)\n"
 "Language: fi\n"
@@ -296,7 +296,7 @@ msgstr "QMCMD^joukkuekeskustelu"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:799
 msgid "QMCMD^strength soon"
-msgstr ""
+msgstr "QMCMD^voimistus pian"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:800
 msgid "QMCMD^free item %x^7 (l:%y^7)"
@@ -456,7 +456,7 @@ msgstr "QMCMD^Chat-keskustelun ääni"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:836
 msgid "QMCMD^Change spectator camera"
-msgstr ""
+msgstr "QMCMD^Muuta katselijakameraa"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:841
 #: qcsrc/client/hud/panel/quickmenu.qc:845
@@ -473,7 +473,7 @@ msgstr "QMCMD^Vähennä nopeutta"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:844
 msgid "QMCMD^Wall collision"
-msgstr ""
+msgstr "QMCMD^Seinätörmäys"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:848
 msgid "QMCMD^Fullscreen"
@@ -506,7 +506,7 @@ msgstr "QMCMD^Sekoita joukkueet"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:865
 msgid "QMCMD^Spectate a player"
-msgstr ""
+msgstr "QMCMD^Katsele pelaajaa"
 
 #: qcsrc/client/hud/panel/racetimer.qc:59
 #, c-format
@@ -1842,7 +1842,7 @@ msgstr "Lento"
 
 #: qcsrc/common/mutators/mutator/buffs/buffs.qh:11
 msgid "Buff"
-msgstr "Puhvi"
+msgstr "Tsemppi"
 
 #: qcsrc/common/mutators/mutator/damagetext/ui_damagetext.qc:8
 msgid "Damage text"
@@ -2253,12 +2253,13 @@ msgstr "^F2Seuraava kierros menee sinun osaltasi katsellessa"
 #: qcsrc/common/notifications/all.inc:265
 #, c-format
 msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
-msgstr "^BG%s%s^K1 tapettiin ^BG%s^K1's ^BG%s^K1 puhvilla ^K1%s%s"
+msgstr "^BG%s%s^K1 tapettiin ^BG%s^K1's ^BG%s^K1 tsempillä ^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:265
 #, c-format
 msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
-msgstr "^BG%s%s^K1 otettiin pisteitä pois ^BG%s^K1's ^BG%s^K1 puhvilla ^K1%s%s"
+msgstr ""
+"^BG%s%s^K1 otettiin pisteitä pois ^BG%s^K1's ^BG%s^K1 tsempillä ^K1%s%s"
 
 #: qcsrc/common/notifications/all.inc:266
 #, c-format
@@ -2754,7 +2755,7 @@ msgstr "^BG%s^K3 elvytettiin heidän Naattiräjähdyksellään"
 #: qcsrc/common/notifications/all.inc:358
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s seconds"
-msgstr ""
+msgstr "^BG%s^K3 elvytettiin automaattisesti %s sekunnin kuluttua"
 
 #: qcsrc/common/notifications/all.inc:359
 #, c-format
@@ -2790,24 +2791,24 @@ msgstr "^BGJumaltila pelasti sinut %s yksikköä vahinkoa, huiputtaja!"
 #: qcsrc/common/notifications/all.inc:368
 #, c-format
 msgid "^BG%s^BG got the %s^BG buff!"
-msgstr "^BG%s^BG sai %s^BG puhvin!"
+msgstr "^BG%s^BG sai %s^BG tsempin!"
 
 #: qcsrc/common/notifications/all.inc:369
 #, c-format
 msgid "^BG%s^BG lost the %s^BG buff!"
-msgstr "^BG%s^BG menetti %s^BG puhvin!"
+msgstr "^BG%s^BG menetti %s^BG tsempin!"
 
 #: qcsrc/common/notifications/all.inc:370
 #: qcsrc/common/notifications/all.inc:683
 #, c-format
 msgid "^BGYou dropped the %s^BG buff!"
-msgstr "^BGSinä pudotit %s^BG puhvin!"
+msgstr "^BGSinä pudotit %s^BG tsempin!"
 
 #: qcsrc/common/notifications/all.inc:371
 #: qcsrc/common/notifications/all.inc:684
 #, c-format
 msgid "^BGYou got the %s^BG buff!"
-msgstr "^BGSinulla on %s^BG puhvi!"
+msgstr "^BGSinulla on %s^BG tsemppi!"
 
 #: qcsrc/common/notifications/all.inc:373
 #: qcsrc/common/notifications/all.inc:687
@@ -2934,7 +2935,7 @@ msgstr "^BG%s^BG kaappasi %s^BG hallintapisteen"
 #: qcsrc/common/notifications/all.inc:403
 #, c-format
 msgid "^BG%s^BG captured a control point"
-msgstr ""
+msgstr "^BG%s^BG kaappasi hallintapisteen"
 
 #: qcsrc/common/notifications/all.inc:404
 #, c-format
@@ -2944,7 +2945,7 @@ msgstr "^TC^TT^BG joukkueen %s^BG hallintapiste on tuhottu täten %s"
 #: qcsrc/common/notifications/all.inc:405
 #, c-format
 msgid "^TC^TT^BG team control point has been destroyed by %s"
-msgstr ""
+msgstr "^TC^TT^BG joukkueen hallintapiste on tuhottu täten %s"
 
 #: qcsrc/common/notifications/all.inc:406
 msgid "^TC^TT^BG generator has been destroyed"
@@ -3983,7 +3984,7 @@ msgstr "^BGOvi avattu!"
 #: qcsrc/common/notifications/all.inc:665
 #, c-format
 msgid "^F2Extra lives taken: ^K1%s"
-msgstr ""
+msgstr "^F2Lisäelämiä napattu: ^K1%s"
 
 #: qcsrc/common/notifications/all.inc:667
 #, c-format
@@ -4002,7 +4003,7 @@ msgstr "^K3Sinut elvytettiin ^BG%s :n toimesta"
 #: qcsrc/common/notifications/all.inc:670
 #, c-format
 msgid "^K3You were automatically revived after %s seconds"
-msgstr ""
+msgstr "^K3Sinut elvytettiin automaattisesti %s sekunnissa"
 
 #: qcsrc/common/notifications/all.inc:672
 msgid "^BGThe generator is under attack!"
@@ -4137,12 +4138,12 @@ msgstr "^F2Lisäelämiä jäljellä: ^K1%s"
 #: qcsrc/common/notifications/all.inc:719 qcsrc/menu/xonotic/campaign.qc:244
 #, c-format
 msgid "Level %s: "
-msgstr ""
+msgstr "Taso %s: "
 
 #: qcsrc/common/notifications/all.inc:719
 #, c-format
 msgid "^BGPress ^F2%s^BG to enter the game"
-msgstr ""
+msgstr "^BGPaina ^F2%s^BG liittyäksesi peliin"
 
 #: qcsrc/common/notifications/all.inc:722
 #, c-format
@@ -4165,7 +4166,7 @@ msgstr "^BGKaappasit haltuusi %s^BG hallintapisteen"
 
 #: qcsrc/common/notifications/all.inc:726
 msgid "^BGYou captured a control point"
-msgstr ""
+msgstr "^BGSinä kaappasit hallintapisteen"
 
 #: qcsrc/common/notifications/all.inc:727
 #, c-format
@@ -4174,7 +4175,7 @@ msgstr "^TC^TT^BG joukkue kaappasi %s^BG hallintapisteen"
 
 #: qcsrc/common/notifications/all.inc:728
 msgid "^TC^TT^BG team captured a control point"
-msgstr ""
+msgstr "^TC^TT^BG joukkue kaappasi hallintapisteen"
 
 #: qcsrc/common/notifications/all.inc:729
 msgid "^BGThis control point currently cannot be captured"
@@ -5774,15 +5775,15 @@ msgstr "Xonotic:in tunnustusmaininnat"
 
 #: qcsrc/menu/xonotic/dialog_disconnect.qc:16
 msgid "Are you sure to disconnect from server?"
-msgstr ""
+msgstr "Haluatko varmasti katkaista yhteyden palvelimelle?"
 
 #: qcsrc/menu/xonotic/dialog_disconnect.qc:19
 msgid "I would disconnect from server..."
-msgstr ""
+msgstr "Katkaisisin palvelinyhteyden..."
 
 #: qcsrc/menu/xonotic/dialog_disconnect.qc:22
 msgid "I would play more!"
-msgstr ""
+msgstr "Pelaisin lisää!"
 
 #: qcsrc/menu/xonotic/dialog_disconnect.qh:6
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qh:6
@@ -5792,7 +5793,7 @@ msgstr "Katkaise yhteys"
 
 #: qcsrc/menu/xonotic/dialog_disconnect.qh:7
 msgid "Disconnect from the server you are connected to"
-msgstr ""
+msgstr "Katkaise yhteys palvelimeen johon olet yhdistettynä"
 
 #: qcsrc/menu/xonotic/dialog_firstrun.qc:39
 msgid ""
@@ -6879,7 +6880,7 @@ msgstr "Verenvuodatus"
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:93
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:175
 msgid "Buffs"
-msgstr "Puhvit"
+msgstr "Tsempit"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:95
 msgid "Overkill"
@@ -6915,10 +6916,12 @@ msgid ""
 "Enable dodging (quick acceleration in a given direction). Double-tap a "
 "directional key to dodge"
 msgstr ""
+"Kytke päälle väistöt (pikakiihdytys annettuun suuntaan). \n"
+"Kaksoistäppää nuolinäppäintä väistääksesi"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:168
 msgid "An explosion occurs when two players collide"
-msgstr ""
+msgstr "Tapahtuu räjähdys kahden pelaajan törmätessä"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:172
 msgid "All players are almost invisible"
@@ -6929,6 +6932,8 @@ msgid ""
 "Enable buff pickups (random bonuses like Medic, Invisible, etc.) on the maps "
 "that support it"
 msgstr ""
+"Kytke tsemppipoimittavat päälle (satunnaisia lisäetuja kuten ensiapu, "
+"näkymättömyys, jne.) niitä tukevissa kartoissa"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:181
 msgid "Only possible to inflict damage on your enemy while they're airborne"
@@ -6945,10 +6950,14 @@ msgid ""
 "Amount of health below which players start bleeding out (health rots and "
 "they can't jump)"
 msgstr ""
+"Terveyden määrä jonka alittuessa pelaajat alkavat vuotamaan kuiviin (vointi "
+"repsahtaa eivätkä kykene hyppäämään)"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:199
 msgid "Make things fall to the ground slower (percentage of normal gravity)"
 msgstr ""
+"Aseta esineet putoamaan maahan hitaammin (prosenttimäärä perinteiseen "
+"painovoimaan nähden)"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:208
 msgid "Weapon & item mutators:"
@@ -6961,24 +6970,32 @@ msgstr "Köysi"
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:212
 msgid "Players spawn with the grappling hook. Press the 'hook' key to use it"
 msgstr ""
+"Pelaajat syntyvät heittokoukun kera. Paina 'koukku' näppäintä sitä "
+"käyttääksesi "
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:216
 msgid ""
 "Players spawn with the jetpack. Double-tap 'jump' or press the 'jetpack' key "
 "to use it"
 msgstr ""
+"Pelaajat syntyvät lentopakkauksen kera. Kaksoistäppää 'hyppy' tai paina "
+"'lentopakkaus' näppäintä sitä käyttääksesi"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:220
 msgid ""
 "Projectiles can't be destroyed. However, you can still explode Electro orbs "
 "with the Electro primary fire"
 msgstr ""
+"Ammuksia ei voi tuhota. Voit, siltikin, räjäyttää sähköpalloja "
+"ensisijaisella sähkötulituksella  "
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:225
 msgid ""
 "Some weapon spawns will be randomly replaced with new weapons: Heavy Laser "
 "Assault Cannon, Mine Layer, Rifle, T.A.G. Seeker"
 msgstr ""
+"Jotkut asesyntymät tullaan vaihtamaan satunnaisesti uusilla aseilla: Raskas-"
+"laser rynnäkkökanuuna, Miinanlevittäjä, Kivääri, T.A.G. Hakeutuja "
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:230
 msgid ""
@@ -6986,6 +7003,10 @@ msgid ""
 "delay). This allows players to fire and detonate a Devastator rocket while "
 "in the air for a strong mid-air boost even while moving fast"
 msgstr ""
+"Hävittäjäraketit voidaan räjäyttää välittömästi (muutoin, ilmenee pieni "
+"viive). Tämä antaa pelaajalle mahdollisuuden ampua ja räjäyttää "
+"Hävittäjäraketin ilmassa ollessaan, tuottaakseen voimakkaan lisäpotkun "
+"keskikorkeudessa jopa liikkuessaan nopeasti"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:235
 msgid "Players will drop all weapons they possessed when they are killed"
@@ -7383,7 +7404,7 @@ msgstr "Salli pelaajatilastojen käyttävän pelinimeäsi"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:136
 msgid "Allow player statistics to rank you in leaderboards"
-msgstr ""
+msgstr "Anna lupa sijoittaa sinut pelaajatilastoissa "
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:152
 msgid "Country"
@@ -7932,11 +7953,11 @@ msgstr "Vältä häviöllistä tekstuurien pakkaamista"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:129
 msgid "Disable sky for performance and visibility"
-msgstr ""
+msgstr "Kytke taivas pois päältä suorituskyvyn ja näkyvyyden lisäämiseksi"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:129
 msgid "Show sky"
-msgstr ""
+msgstr "Näytä taivas"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:132
 msgid "Show surfaces"
@@ -8811,7 +8832,7 @@ msgstr "Asemallin sijainti; vaatii yhteyden uudelleenmuodostamisen"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:77
 msgid "Weapon model opacity:"
-msgstr ""
+msgstr "Asemallin läpikuultavuus:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:91
 msgid "Gun model swaying"
@@ -9680,7 +9701,7 @@ msgstr "käynnistä katsojatila"
 
 #: qcsrc/menu/xonotic/keybinder.qc:93
 msgid "Communication"
-msgstr ""
+msgstr "Keskustelu"
 
 #: qcsrc/menu/xonotic/keybinder.qc:94
 msgid "public chat"
@@ -9724,11 +9745,11 @@ msgstr "liity joukkueeseen automaattisesti"
 
 #: qcsrc/menu/xonotic/keybinder.qc:120
 msgid "drop key/flag, exit vehicle"
-msgstr ""
+msgstr "pudota avain/lippu, poistu ajoneuvosta"
 
 #: qcsrc/menu/xonotic/keybinder.qc:121
 msgid "suicide / respawn"
-msgstr ""
+msgstr "itsari / uudelleensynty"
 
 #: qcsrc/menu/xonotic/keybinder.qc:122
 msgid "quick menu"
@@ -9740,7 +9761,7 @@ msgstr "Käyttäjän määrittämä"
 
 #: qcsrc/menu/xonotic/keybinder.qc:132
 msgid "Development"
-msgstr ""
+msgstr "Kehitys"
 
 #: qcsrc/menu/xonotic/keybinder.qc:133
 msgid "sandbox menu"
@@ -9748,11 +9769,11 @@ msgstr "rajattu hiekkalaatikkovalikko"
 
 #: qcsrc/menu/xonotic/keybinder.qc:134
 msgid "drag object (sandbox)"
-msgstr ""
+msgstr "raahaa kohde (hiekkalaatikko)"
 
 #: qcsrc/menu/xonotic/keybinder.qc:135
 msgid "waypoint editor menu"
-msgstr ""
+msgstr "välietapin muokkausvalikko"
 
 #: qcsrc/menu/xonotic/mainwindow.qc:96 qcsrc/menu/xonotic/mainwindow.qc:99
 msgid "Do not press this button again!"
@@ -9788,15 +9809,15 @@ msgstr "<mallia ei löytynyt>"
 
 #: qcsrc/menu/xonotic/serverlist.qc:256
 msgid "SERVER^Remove favorite"
-msgstr ""
+msgstr "PALVELIN^Poista lemppari"
 
 #: qcsrc/menu/xonotic/serverlist.qc:257
 msgid "Remove the currently highlighted server from bookmarks"
-msgstr ""
+msgstr "Poista tämänhetkinen korostettu palvelin kirjanmerkeistä"
 
 #: qcsrc/menu/xonotic/serverlist.qc:261
 msgid "SERVER^Favorite"
-msgstr ""
+msgstr "PALVELIN^Lemppari"
 
 #: qcsrc/menu/xonotic/serverlist.qc:262
 msgid ""
@@ -10019,7 +10040,7 @@ msgstr "Joulukuu"
 #: qcsrc/menu/xonotic/statslist.qc:46
 #, no-c-format
 msgid "DATE^%m %d, %Y"
-msgstr ""
+msgstr "PÄIVÄYS^%k %d, %V"
 
 #: qcsrc/menu/xonotic/statslist.qc:97
 msgid "Joined:"
index 40f156d..fc81aba 100644 (file)
@@ -12,7 +12,7 @@ msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-06-07 07:23+0200\n"
-"PO-Revision-Date: 2020-07-07 21:09+0000\n"
+"PO-Revision-Date: 2020-07-17 23:32+0000\n"
 "Last-Translator: LegendGuard\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/team-xonotic/"
 "xonotic/language/ja_JP/)\n"
@@ -71,12 +71,12 @@ msgstr "^1観察中"
 #: qcsrc/client/hud/panel/infomessages.qc:97
 #, c-format
 msgid "^1Spectating: ^7%s"
-msgstr "^7%s ^1を観戦中"
+msgstr "^1観戦中: ^7%s"
 
 #: qcsrc/client/hud/panel/infomessages.qc:108
 #, c-format
 msgid "^1Press ^3%s^1 to spectate"
-msgstr "^3%s ^1を押して観戦する"
+msgstr "観戦するために ^3%s ^1を押して"
 
 #: qcsrc/client/hud/panel/infomessages.qc:108
 #: qcsrc/menu/xonotic/keybinder.qc:47
@@ -86,7 +86,7 @@ msgstr "一次撃つ"
 #: qcsrc/client/hud/panel/infomessages.qc:110
 #, c-format
 msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
-msgstr "^3%s ^1または ^3%s ^1を押すと、次または前の選手を表示される"
+msgstr "^1次または前の選手を表示されるために ^3%s ^1または ^3%s ^1を押して"
 
 #: qcsrc/client/hud/panel/infomessages.qc:110
 #: qcsrc/client/hud/panel/infomessages.qc:114
@@ -106,7 +106,9 @@ msgstr "^3%s ^1または ^3%s ^1を使用して速度を変更する"
 #: qcsrc/client/hud/panel/infomessages.qc:116
 #, c-format
 msgid "^1Press ^3%s^1 to observe, ^3%s^1 to change camera mode"
-msgstr "^3%s ^1を押して観戦する、^3%s ^1を押してカメラモードを変更する"
+msgstr ""
+"^1観戦するために ^3%s ^1を押して、カメラモードを変更するために ^3%s ^1を押し"
+"て"
 
 #: qcsrc/client/hud/panel/infomessages.qc:116
 #: qcsrc/common/vehicles/cl_vehicles.qc:190
@@ -121,7 +123,7 @@ msgstr "二次撃つ"
 #: qcsrc/client/hud/panel/infomessages.qc:119
 #, c-format
 msgid "^1Press ^3%s^1 for gamemode info"
-msgstr "^3%s ^1を押すとゲームモード情報が表示される"
+msgstr "^1ゲームモード情報が表示されるために ^3%s ^1を押して"
 
 #: qcsrc/client/hud/panel/infomessages.qc:119
 #: qcsrc/menu/xonotic/keybinder.qc:103
@@ -130,7 +132,7 @@ msgstr "サーバー情報"
 
 #: qcsrc/client/hud/panel/infomessages.qc:132
 msgid "^1Match has already begun"
-msgstr "^1試合はすでに始まっています"
+msgstr "^1試合はすでに開始しています"
 
 #: qcsrc/client/hud/panel/infomessages.qc:134
 msgid "^1You have no more lives left"
@@ -140,7 +142,7 @@ msgstr "^1あなたは命を使い果たです"
 #: qcsrc/client/hud/panel/infomessages.qc:139
 #, c-format
 msgid "^1Press ^3%s^1 to join"
-msgstr "^3%s ^1を押してゲームに参加する"
+msgstr "^1参加するために ^3%s ^1を押して"
 
 #: qcsrc/client/hud/panel/infomessages.qc:136
 #: qcsrc/client/hud/panel/infomessages.qc:139
@@ -160,7 +162,7 @@ msgstr "^2現在、^1準備運動 ^2の段階に入っています!"
 #: qcsrc/client/hud/panel/infomessages.qc:168
 #, c-format
 msgid "%sPress ^3%s%s to end warmup"
-msgstr "%s^3%s%s を押して準備運動を終了する"
+msgstr "%s準備運動を終了するために ^3%s%s を押して"
 
 #: qcsrc/client/hud/panel/infomessages.qc:168
 #: qcsrc/client/hud/panel/infomessages.qc:170
@@ -172,7 +174,7 @@ msgstr "準備"
 #: qcsrc/client/hud/panel/infomessages.qc:170
 #, c-format
 msgid "%sPress ^3%s%s once you are ready"
-msgstr "%sæº\96å\82\99ã\81\8cã\81§ã\81\8dã\81\9fã\82\89 ^3%s%s ã\82\92æ\8a¼ã\81\99ã\82\8b"
+msgstr "%sæº\96å\82\99ã\81\8cã\81§ã\81\8dã\81\9fã\82\89 ^3%s%s ã\82\92æ\8a¼ã\81\97ã\81¦"
 
 #: qcsrc/client/hud/panel/infomessages.qc:175
 msgid "^2Waiting for others to ready up to end warmup..."
@@ -185,7 +187,7 @@ msgstr "^2全員の準備ができるまで待ち中..."
 #: qcsrc/client/hud/panel/infomessages.qc:183
 #, c-format
 msgid "^2Press ^3%s^2 to end warmup"
-msgstr "^2^3%s ^2を押して準備運動を終了する"
+msgstr "^2準備運動を終了するために ^2^3%s ^2を押して"
 
 #: qcsrc/client/hud/panel/infomessages.qc:204
 msgid "Teamnumbers are unbalanced!"
@@ -194,7 +196,7 @@ msgstr "チーム番号はアンバランスです!"
 #: qcsrc/client/hud/panel/infomessages.qc:207
 #, c-format
 msgid " Press ^3%s%s to adjust"
-msgstr " ^3%s%s を押して調整する"
+msgstr " 調整するために ^3%s%s を押して"
 
 #: qcsrc/client/hud/panel/infomessages.qc:207
 #: qcsrc/menu/xonotic/keybinder.qc:115
@@ -211,7 +213,7 @@ msgstr "^1あなたを観戦中:"
 
 #: qcsrc/client/hud/panel/infomessages.qc:233
 msgid "^7Press ^3ESC ^7to show HUD options."
-msgstr "^3ESC ^7を押してHUDオプションを表示する。"
+msgstr "^7HUDオプションを表示するために ^3ESC ^7を押して。"
 
 #: qcsrc/client/hud/panel/infomessages.qc:234
 msgid "^3Doubleclick ^7a panel for panel-specific options."
@@ -934,7 +936,7 @@ msgstr ""
 "ト、\n"
 "次にスラッシュを配置して、フィールドをこれらにのみ表示することができます。ま"
 "たは、\n"
-"ã\81\93ã\82\8cã\82\89ã\81®ã\82²ã\83¼ã\83 ã\82¿ã\82¤ã\83\97以å¤\96ã\81®å\85¨ã\81¦ã\80\82ã\81¾ã\81\9fã\80\81ã\83\95ã\82£ã\83¼ã\83«ã\83\89ã\81¨ã\81\97ã\81¦ã\80\8cå\85¨ã\81¦ã\80\8dã\82\92æ\8c\87å®\9aã\81\97ã\81¦ã\80\81\n"
+"これらのゲームタイプ以外の全て。また、フィールドとして「全」を指定して、\n"
 "現在のゲームモードで使用可能な全てのフィールドを表示することもできます。"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:350
@@ -1161,7 +1163,7 @@ msgstr "構わない"
 
 #: qcsrc/client/mapvoting.qc:382
 msgid "Decide the gametype"
-msgstr "ã\82²ã\83¼ã\83 ã\82¿ã\82¤ã\83\97を決める"
+msgstr "ã\82²ã\83¼ã\83 ã\83¢ã\83¼ã\83\89を決める"
 
 #: qcsrc/client/mapvoting.qc:382
 msgid "Vote for a map"
@@ -1312,7 +1314,7 @@ msgstr "デスマッチ (DM)"
 
 #: qcsrc/common/mapinfo.qh:115
 msgid "Score as many frags as you can"
-msgstr "ã\81§ã\81\8dã\82\8bã\81 ã\81\91å¤\9aã\81\8fã\81®å\89\8aé\99¤ã\82\92å¾\97ç\82¹ã\81\99ã\82\8b"
+msgstr "ã\81§ã\81\8dã\82\8bã\81 ã\81\91å¤\9aã\81\8fã\81®å\89\8aé\99¤ã\82\92å¾\97ç\82¹ã\81\97ã\81¦"
 
 #: qcsrc/common/mapinfo.qh:128
 msgid "Last Man Standing"
@@ -1453,8 +1455,8 @@ msgid ""
 "Kill enemies to freeze them, stand next to frozen teammates to revive them; "
 "freeze all enemies to win"
 msgstr ""
-"æ\95µã\82\92å\87\8dã\82\89ã\81\9bã\81¦ã\81\9fã\82\81ã\81«æ®ºã\81\97ã\81¦ã\80\81ã\83\81ã\83¼ã\83 ã\83¡ã\82¤ã\83\88ã\82\92復活ã\81\95ã\81\9bã\82\8bã\81\9fã\82\81ã\81«å\87\8dã\81£ã\81\9fã\83\81ã\83¼ã\83 ã\83¡ã\82¤ã\83\88ã\81®"
-"隣に立って;勝つために全ての敵を凍結して"
+"æ\95µã\82\92å\86·å\87\8dã\81\97ã\81¦ã\81\9fã\82\81ã\81«æ®ºã\81\97ã\81¦ã\80\81ã\83\81ã\83¼ã\83 ã\83¡ã\82¤ã\83\88ã\82\92復活ã\81\95ã\81\9bã\82\8bã\81\9fã\82\81ã\81«å\86·å\87\8dã\81\97ã\81\9fã\83\81ã\83¼ã\83 ã\83¡ã\82¤ã\83\88"
+"の隣に立って;勝つために全ての敵を冷凍して"
 
 #: qcsrc/common/mapinfo.qh:545
 msgid "Hold the ball to get points for kills"
@@ -2297,12 +2299,12 @@ msgstr "^BG%s%s^K1 は ^BG%s^K1 の氷手榴弾%s%sによって爆破された"
 #: qcsrc/common/notifications/all.inc:275
 #, c-format
 msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
-msgstr "^BG%s%s^K1 は ^BG%s^K1 の氷手榴弾%s%sにより凍死された"
+msgstr "^BG%s%s^K1 ã\81¯ ^BG%s^K1 ã\81®æ°·æ\89\8b榴弾%s%sã\81«ã\82\88ã\82\8aå\86·å\87\8dæ­»ã\81\95ã\82\8cã\81\9f"
 
 #: qcsrc/common/notifications/all.inc:276
 #, c-format
 msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
-msgstr "^BG%s%s^K1 は ^BG%s^K1 の癒し手榴弾%s%sによって癒されなかった"
+msgstr "^BG%s%s^K1 は ^BG%s^K1 の治癒手榴弾%s%sによって癒されなかった"
 
 #: qcsrc/common/notifications/all.inc:277
 #, c-format
@@ -2537,12 +2539,12 @@ msgstr "^BG%s^K1 は少し肌寒く%s%s感じた"
 #: qcsrc/common/notifications/all.inc:317
 #, c-format
 msgid "^BG%s^K1 was frozen to death by their own Ice Nade%s%s"
-msgstr "^BG%s^K1 は自分の氷手榴弾%s%sによって凍死された"
+msgstr "^BG%s^K1 ã\81¯è\87ªå\88\86ã\81®æ°·æ\89\8b榴弾%s%sã\81«ã\82\88ã\81£ã\81¦å\86·å\87\8dæ­»ã\81\95ã\82\8cã\81\9f"
 
 #: qcsrc/common/notifications/all.inc:318
 #, c-format
 msgid "^BG%s^K1's Healing Nade didn't quite heal them%s%s"
-msgstr "^BG%s^K1 の癒し手榴弾はそれら%s%sを完全には癒しなかった"
+msgstr "^BG%s^K1 の治癒手榴弾はそれら%s%sを完全には癒しなかった"
 
 #: qcsrc/common/notifications/all.inc:319
 #, c-format
@@ -2552,7 +2554,7 @@ msgstr "^BG%s^K1 が死んだ。弾薬なしで生きる意味は何だの?"
 #: qcsrc/common/notifications/all.inc:319
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
-msgstr "^BG%s^K1 ã\81®å¼¾è\96¬%s%sã\81\8cå\88\87ã\82\8cた"
+msgstr "^BG%s^K1 ã\81®å¼¾è\96¬%s%sã\81\8cå\88\87ã\81£た"
 
 #: qcsrc/common/notifications/all.inc:320
 #, c-format
@@ -2667,7 +2669,7 @@ msgstr "^BG%s^K1 は乗り物%s%sによって粉砕された"
 #: qcsrc/common/notifications/all.inc:342
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
-msgstr "^BG%s^K1 ã\81¯ã\83©ã\83\97ã\82¿ã\83¼ã\81®ã\82¯ã\83©ã\82¹ã\82¿ã\83¼ç\88\86å¼¾%s%sã\81«æ\8d\95ã\81¾ã\81\95れた"
+msgstr "^BG%s^K1 ã\81¯ã\83©ã\83\97ã\82¿ã\83¼ã\81®ã\82¯ã\83©ã\82¹ã\82¿ã\83¼ç\88\86å¼¾%s%sã\81«æ\8d\95ã\81¾ã\82\89れた"
 
 #: qcsrc/common/notifications/all.inc:343
 #, c-format
@@ -2738,13 +2740,13 @@ msgstr "^ BG%s^K1 が凍結した"
 #: qcsrc/common/notifications/all.inc:361
 #: qcsrc/common/notifications/all.inc:675
 msgid "^TC^TT^BG team wins the round"
-msgstr "^TC^TT^BG ã\83\81ã\83¼ã\83 ã\81\8cã\83©ã\82¦ã\83³ã\83\89ã\81«å\8b\9då\88©ã\81\97ã\81¾ã\81\99"
+msgstr "^TC^TT^BG ã\83\81ã\83¼ã\83 ã\81\8cã\83©ã\82¦ã\83³ã\83\89ã\81«å\8b\9då\88©ã\81\97ã\81\9f"
 
 #: qcsrc/common/notifications/all.inc:362
 #: qcsrc/common/notifications/all.inc:676
 #, c-format
 msgid "^BG%s^BG wins the round"
-msgstr "^BG%s^BG ã\81\8cã\83©ã\82¦ã\83³ã\83\89ã\81«å\8b\9då\88©ã\81\97ã\81¾ã\81\99"
+msgstr "^BG%s^BG ã\81\8cã\83©ã\82¦ã\83³ã\83\89ã\81«å\8b\9då\88©ã\81\97ã\81\9f"
 
 #: qcsrc/common/notifications/all.inc:363
 #: qcsrc/common/notifications/all.inc:539
@@ -2832,7 +2834,7 @@ msgstr "^BG%s^F3 が接続されました"
 #: qcsrc/common/notifications/all.inc:382
 #, c-format
 msgid "^BG%s^F3 is now playing"
-msgstr "^BG%s^F3 ã\81\8c遊び中です"
+msgstr "^BG%s^F3 ã\81¯遊び中です"
 
 #: qcsrc/common/notifications/all.inc:383
 #, c-format
@@ -2955,53 +2957,55 @@ msgstr "^BG%s^F3 切断された"
 #: qcsrc/common/notifications/all.inc:415
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
-msgstr ""
+msgstr "^BG%s^F3 は非活動な状態で追い出された"
 
 #: qcsrc/common/notifications/all.inc:416
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
+"^F2あなたは観客であり、観客は現在許可されていないため、サーバーから追い出され"
+"た。"
 
 #: qcsrc/common/notifications/all.inc:417
 #, c-format
 msgid "^BG%s^F3 was kicked for excessive teamkilling"
-msgstr ""
+msgstr "^BG%s^F3 はチームメイトを殺したために追い出された"
 
 #: qcsrc/common/notifications/all.inc:418
 #, c-format
 msgid "^BG%s^F3 is now spectating"
-msgstr ""
+msgstr "^BG%s^F3 は観戦中です"
 
 #: qcsrc/common/notifications/all.inc:420
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
-msgstr ""
+msgstr "^BG%^BG はレースを放棄した"
 
 #: qcsrc/common/notifications/all.inc:421
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
-msgstr ""
+msgstr "^BG%s^BG は %s%s %s の %s%s^BG 場所の記録を破ることができなかった"
 
 #: qcsrc/common/notifications/all.inc:422
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
-msgstr ""
+msgstr "^BG%s^BG は %s%s %s の %s%s^BG 場所の記録を破ることができなかった"
 
 #: qcsrc/common/notifications/all.inc:423
 #, c-format
 msgid "^BG%s^BG has finished the race"
-msgstr ""
+msgstr "^BG%^BG はレースを終了した"
 
 #: qcsrc/common/notifications/all.inc:424
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
-msgstr ""
+msgstr "^BG%s^BG は %s%s %s で %s^BG の %s%s^BG 場所の記録を破った"
 
 #: qcsrc/common/notifications/all.inc:425
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
-msgstr ""
+msgstr "^BG%s^BG は %s%s %s で %s%s^BG の場所の記録を改善した"
 
 #: qcsrc/common/notifications/all.inc:426
 #, c-format
@@ -3009,29 +3013,31 @@ msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
+"^BG%s^BG は ^F2%s^BG で新しい記録を獲得したが、残念ながらUIDがなく、失われ"
+"る。"
 
 #: qcsrc/common/notifications/all.inc:427
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but is anonymous and will be "
 "lost."
-msgstr ""
+msgstr "^BG%s^BG は ^F2%s^BG で新しい記録を獲得したが、匿名で、失われる。"
 
 #: qcsrc/common/notifications/all.inc:428
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
-msgstr ""
+msgstr "^BG%s^BG は %s%s で %s%s^BG 場所の記録を設定した"
 
 #: qcsrc/common/notifications/all.inc:430
 #, c-format
 msgid ""
 "^F4You have been invited by ^BG%s^F4 to join their game of ^F2%s^F4 "
 "(^F1%s^F4)"
-msgstr ""
+msgstr "^F4あなたは ^BG%s^F4 から、^F2%s^F4 (^F1%s^F4) のゲームに招待された"
 
 #: qcsrc/common/notifications/all.inc:432
 msgid "^TC^TT ^BGteam scores!"
-msgstr ""
+msgstr "^TC^TT ^BGチームが得点した!"
 
 #: qcsrc/common/notifications/all.inc:434
 #, c-format
@@ -3039,19 +3045,21 @@ msgid ""
 "^F2You have to become a player within the next %s, otherwise you will be "
 "kicked, because spectating isn't allowed at this time!"
 msgstr ""
+"^F2次の %s 内で選手になる必要がある。そうしないと、現時点では観戦が許可されて"
+"いないため、追い出される!"
 
 #: qcsrc/common/notifications/all.inc:436
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
-msgstr ""
+msgstr "^BG%s^K1 はスーパー武器を拾いた"
 
 #: qcsrc/common/notifications/all.inc:438
 msgid "^BGYou cannot change to a larger team"
-msgstr ""
+msgstr "^BGあなたはより大きなチームに変更することはできません"
 
 #: qcsrc/common/notifications/all.inc:439
 msgid "^BGYou are not allowed to change teams"
-msgstr ""
+msgstr "^BGあなたはチームの変更は許可されていません"
 
 #: qcsrc/common/notifications/all.inc:441
 #, c-format
@@ -3059,12 +3067,16 @@ msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
+"^F4注: ^BGサーバーは ^F1XONOTIC %s (beta)^BG を実行しています。あなたは "
+"^F2XONOTIC %s があります。"
 
 #: qcsrc/common/notifications/all.inc:442
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
+"^F4注: ^BGサーバーは ^F1XONOTIC %s^BG を実行しています。あなたは ^F2XONOTIC "
+"%s があります。"
 
 #: qcsrc/common/notifications/all.inc:443
 #, c-format
@@ -3072,221 +3084,227 @@ msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
+"^F4注: ^F1XONOTIC %s^BG は利用できますが、あなたは ^F2XONOTIC %s^BG がまだあ"
+"ります。 ^F3http://www.xonotic.org/ ^BGから更新を入手してください!"
 
 #: qcsrc/common/notifications/all.inc:445
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
-msgstr ""
+msgstr "^F3SVQC Build information: ^F4%s"
 
 #: qcsrc/common/notifications/all.inc:447
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
+"^BG%s%s^K1 は@!#%%'nアコーデオン%s%sでの ^BG%s^K1 の素晴らしい演奏で死んだ"
 
 #: qcsrc/common/notifications/all.inc:448
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
-msgstr ""
+msgstr "BG%s^K1 は@!#%%'nアコーデオン%s%sで耳を痛んだ"
 
 #: qcsrc/common/notifications/all.inc:449
 #, c-format
 msgid "^BG%s%s^K1 was electrocuted by ^BG%s^K1's Arc%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のアーク%s%s によって感電された"
 
 #: qcsrc/common/notifications/all.inc:450
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Arc bolts%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のアークボルト%s%s によって爆破された"
 
 #: qcsrc/common/notifications/all.inc:451
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Blaster%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のブラスター%s%sによって射殺された"
 
 #: qcsrc/common/notifications/all.inc:452
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Blaster%s%s"
-msgstr ""
+msgstr "^BG%s^K1 がブラスター%s%sで地獄に撃てた"
 
 #: qcsrc/common/notifications/all.inc:453
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のクリリンク%s%sの強い引きを感じた"
 
 #: qcsrc/common/notifications/all.inc:454
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
-msgstr ""
+msgstr "^BG%s^K1 はクリリンク%s%sの強い引きを感じた"
 
 #: qcsrc/common/notifications/all.inc:455
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 が ^BG%s^K1 のロケット%s%sを食べた"
 
 #: qcsrc/common/notifications/all.inc:456
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's rocket%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 が ^BG%s^K1 のロケット%s%sに近すぎた"
 
 #: qcsrc/common/notifications/all.inc:457
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Devastator%s%s"
-msgstr ""
+msgstr "^BG%s^K1 はデーバーステーター%s%sで自分自身を爆破した"
 
 #: qcsrc/common/notifications/all.inc:458
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^ K1 のエレクトロボルト%s%sによって爆破された"
 
 #: qcsrc/common/notifications/all.inc:459
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 の電気コンボ%s%sの電撃的にした空気を感じた"
 
 #: qcsrc/common/notifications/all.inc:460
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro orb%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 が ^BG%s^K1 のエレクトロオーブ%s%sに近すぎた"
 
 #: qcsrc/common/notifications/all.inc:461
 #, c-format
 msgid "^BG%s^K1 played with Electro bolts%s%s"
-msgstr ""
+msgstr "^BG%s^K1 はエレクトロボルト%s%sで遊びた"
 
 #: qcsrc/common/notifications/all.inc:462
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro orb%s%s"
-msgstr ""
+msgstr "^BG%s^K1 はエレクトロオーブ%s%sをどこに置いたか思い出せなかった"
 
 #: qcsrc/common/notifications/all.inc:463
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 が ^BG%s^K1 の火の玉%s%sに近すぎた"
 
 #: qcsrc/common/notifications/all.inc:464
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 の火鉱山%s%sによって燃やされた"
 
 #: qcsrc/common/notifications/all.inc:465
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
-msgstr ""
+msgstr "^BG%s^K1 はもっと小さな銃%s%sを使うべきだった"
 
 #: qcsrc/common/notifications/all.inc:466
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
-msgstr ""
+msgstr "^BG%s^K1 は自分の火鉱山%s%sを忘れた"
 
 #: qcsrc/common/notifications/all.inc:467
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
+"^BG%s%s^K1 は ^BG%s^K1 のハガルロケット%s%sのバーストによって打ち負かされた"
 
 #: qcsrc/common/notifications/all.inc:468
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のハガルロケット%s%sに衝撃された"
 
 #: qcsrc/common/notifications/all.inc:469
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
-msgstr ""
+msgstr "^BG%s^K1 が小さなハガルロケット%s%sで遊びた"
 
 #: qcsrc/common/notifications/all.inc:470
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のHLAC%s%sで切られた"
 
 #: qcsrc/common/notifications/all.inc:471
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
-msgstr ""
+msgstr "^BG%s^K1 はHLAC%s%sで少しびくびくしている"
 
 #: qcsrc/common/notifications/all.inc:472
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 が ^BG%s^K1 のフック重力爆弾%s%sに捕まられた"
 
 #: qcsrc/common/notifications/all.inc:473
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
+"^BG%s%s^K1 は@!#%%'nクラインボトル%s%sでの ^BG%s^K1 の素晴らしい演奏で死んだ"
 
 #: qcsrc/common/notifications/all.inc:474
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
-msgstr ""
+msgstr "BG%s^K1 は@!#%%'nクラインボトル%s%sで耳を痛んだ"
 
 #: qcsrc/common/notifications/all.inc:475
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
-msgstr ""
+msgstr "BG%s%s^K1 は ^BG%s^K1 の機関銃%s%sにひったくられた"
 
 #: qcsrc/common/notifications/all.inc:476
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 の機関銃%s%sによって穴だらけになられた"
 
 #: qcsrc/common/notifications/all.inc:477
 #: qcsrc/common/notifications/all.inc:782
 #, c-format
 msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
-msgstr ""
+msgstr "^BGあなたは一度に ^F2%s^BG 以上の鉱山を置けません"
 
 #: qcsrc/common/notifications/all.inc:478
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 が ^BG%s^K1 の鉱山%s%sに近づきすぎた"
 
 #: qcsrc/common/notifications/all.inc:479
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
-msgstr ""
+msgstr "^BG%s^K1 は自分の鉱山%s%sを忘れた"
 
 #: qcsrc/common/notifications/all.inc:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 が ^BG%s^K1 迫撃砲手榴弾%s%sに近づきすぎた"
 
 #: qcsrc/common/notifications/all.inc:481
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 が ^BG%s^K1 の迫撃砲手榴弾%s%sを食べた"
 
 #: qcsrc/common/notifications/all.inc:482
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
-msgstr ""
+msgstr "^BG%s^K1 は自分自身の迫撃砲手榴弾%s%sを見なかった"
 
 #: qcsrc/common/notifications/all.inc:483
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
-msgstr ""
+msgstr "^BG%s^K1 が自分自身の迫撃砲%s%sで爆破した"
 
 #: qcsrc/common/notifications/all.inc:484
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Overkill Heavy Machine Gun%s%s"
-msgstr ""
+msgstr "BG%s%s^K1 は ^BG%s^K1 のオーバーキル重機関銃%s%sにひったくられた"
 
 #: qcsrc/common/notifications/all.inc:485
 #, c-format
 msgid ""
 "^BG%s%s^K1 was torn to bits by ^BG%s^K1's Overkill Heavy Machine Gun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のオーバーキル重機関銃%s%sによって破られた"
 
 #: qcsrc/common/notifications/all.inc:486
 #, c-format
 msgid ""
 "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Overkill Machine Gun%s%s"
 msgstr ""
+"^BG%s%s^K1 は ^BG%s^K1 のオーバーキル機関銃%s%sによって穴だらけになられた"
 
 #: qcsrc/common/notifications/all.inc:487
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Overkill Nex%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のオーバーキルネクス%s%sによって気化された"
 
 #: qcsrc/common/notifications/all.inc:488
 #, c-format
@@ -3294,146 +3312,153 @@ msgid ""
 "^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:489
 #, c-format
 msgid ""
 "^BG%s%s^K1 almost dodged ^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:490
 #, c-format
 msgid ""
 "^BG%s^K1 was sawn in half by their own Overkill Rocket Propelled Chainsaw%s%s"
 msgstr ""
+"^BG%s%s^K1 が自分自身のオーバーキルロケット推進チェーンソー%s%sによって半分に"
+"切断された"
 
 #: qcsrc/common/notifications/all.inc:491
 #, c-format
 msgid ""
 "^BG%s^K1 blew themself up with their Overkill Rocket Propelled Chainsaw%s%s"
 msgstr ""
+"^BG%s^K1 が自分自身のオーバーキルロケット推進チェーンソー%s%sで爆破した"
 
 #: qcsrc/common/notifications/all.inc:493
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Overkill Shotgun%s%s"
 msgstr ""
+"^BG%s%s^K1 は ^BG%s^K1 のオーバーキルショットガン%s%sによって射殺された"
 
 #: qcsrc/common/notifications/all.inc:494
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "BG%s%s^K1 は ^BG%s^K1 のライフル%s%sでひったくられた"
 
 #: qcsrc/common/notifications/all.inc:495
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 が ^BG%s^K1 からのライフル弾雨%s%sで死亡した"
 
 #: qcsrc/common/notifications/all.inc:496
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のライフル弾雨%s%sから隠すことができなかった"
 
 #: qcsrc/common/notifications/all.inc:497
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のライフル%s%sから隠すことができなかった"
 
 #: qcsrc/common/notifications/all.inc:498
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のシーカーロケット%s%sに衝撃された"
 
 #: qcsrc/common/notifications/all.inc:499
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のシーカー%s%sタグ付たれた"
 
 #: qcsrc/common/notifications/all.inc:500
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
-msgstr ""
+msgstr "^BG%s^K1 が小さなシーカーロケット%s%sで遊びた"
 
 #: qcsrc/common/notifications/all.inc:501
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shockwave%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 の衝撃波%s%sによって射殺された"
 
 #: qcsrc/common/notifications/all.inc:502
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shockwave%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 が ^BG%s^K1 は大きな衝撃波%s%sで少し叩かれた"
 
 #: qcsrc/common/notifications/all.inc:503
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のショットガン%s%sによって射殺された"
 
 #: qcsrc/common/notifications/all.inc:504
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 が ^BG%s^K1 は大きなショットガン%s%sで少し叩かれた"
 
 #: qcsrc/common/notifications/all.inc:505
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
-msgstr ""
+msgstr "^BG%s^K1 はポータル%s%sで考えている"
 
 #: qcsrc/common/notifications/all.inc:506
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は@!#%%'nチューバ%s%sでの ^BG%s^K1 の素晴らしい演奏で死んだ"
 
 #: qcsrc/common/notifications/all.inc:507
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
-msgstr ""
+msgstr "BG%s^K1 は@!#%%'nチューバ%s%sで耳を痛んだ"
 
 #: qcsrc/common/notifications/all.inc:508
 #, c-format
 msgid "^BG%s%s^K1 has been sublimated by ^BG%s^K1's Vaporizer%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 の気化器%s%sによって昇華された"
 
 #: qcsrc/common/notifications/all.inc:509
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Vortex%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 は ^BG%s^K1 のボーテックス%s%sによって気化された"
 
 #: qcsrc/common/notifications/all.inc:528
 msgid "^F4You are now alone!"
-msgstr ""
+msgstr "^F4あなたは一人になった!"
 
 #: qcsrc/common/notifications/all.inc:530
 msgid "^BGYou are attacking!"
-msgstr ""
+msgstr "^BGあなたは攻撃している!"
 
 #: qcsrc/common/notifications/all.inc:531
 msgid "^BGYou are defending!"
-msgstr ""
+msgstr "^BGあなたは守っている!"
 
 #: qcsrc/common/notifications/all.inc:532
 #, c-format
 msgid "^BGObjective destroyed in ^F4%s^BG!"
-msgstr ""
+msgstr "^F4%s^BG で^BG目的を破壊された"
 
 #: qcsrc/common/notifications/all.inc:534
 msgid "^F4Begin!"
-msgstr "^F4スタート!"
+msgstr "^F4開始!"
 
 #: qcsrc/common/notifications/all.inc:535
 msgid "^F4Game starts in ^COUNT"
-msgstr ""
+msgstr "^F4ゲームは ^COUNT で開始します"
 
 #: qcsrc/common/notifications/all.inc:536
 msgid "^F4Round starts in ^COUNT"
-msgstr ""
+msgstr "^F4ラウンドは ^COUNT で開始します"
 
 #: qcsrc/common/notifications/all.inc:537
 msgid "^F4Round cannot start"
-msgstr ""
+msgstr "^F4ラウンドを開始できません"
 
 #: qcsrc/common/notifications/all.inc:542
 msgid "^F2Don't camp!"
-msgstr ""
+msgstr "^F2キャンプしないで!"
 
 #: qcsrc/common/notifications/all.inc:546
 msgid ""
@@ -3441,10 +3466,13 @@ msgid ""
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
 "^BGif you think you will succeed."
 msgstr ""
+"^BG今、あなたは自由です。\n"
+"^BG成功すると思われる場合\n"
+"^BG旗を^F2もう一度取ってみてください^BG。"
 
 #: qcsrc/common/notifications/all.inc:547
 msgid "^BGThis flag is currently inactive"
-msgstr ""
+msgstr "^BGこの旗は現在非活動だ"
 
 #: qcsrc/common/notifications/all.inc:548
 msgid ""
@@ -3452,59 +3480,61 @@ msgid ""
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
 "^BGMake some defensive scores before trying again."
 msgstr ""
+"^BGあなたは取るしようとして^F2失敗した回数が多すぎる^BGため、\n"
+"旗から^F1守っていた^BG。再試行する前にいくつかの防御得点を作成してください。"
 
 #: qcsrc/common/notifications/all.inc:549
 msgid "^BGYou captured the ^TC^TT^BG flag!"
-msgstr ""
+msgstr "^BGあなたが ^TC^TT^BG 旗を取れた!"
 
 #: qcsrc/common/notifications/all.inc:550
 msgid "^BGYou captured the flag!"
-msgstr ""
+msgstr "^BGあなたが旗を取れた!"
 
 #: qcsrc/common/notifications/all.inc:551
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
-msgstr ""
+msgstr "^BG旗投げが多すぎる! %s に投げが無効になっている。"
 
 #: qcsrc/common/notifications/all.inc:552
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
-msgstr ""
+msgstr "^BG%s^BG は ^TC^TT^BG 旗を %s に渡した"
 
 #: qcsrc/common/notifications/all.inc:553
 #, c-format
 msgid "^BG%s^BG passed the flag to %s"
-msgstr ""
+msgstr "^BG%s^BG は旗を %s に渡した"
 
 #: qcsrc/common/notifications/all.inc:554
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
-msgstr ""
+msgstr "^BGあなたは %s から ^TC^TT^BG 旗を受け取った"
 
 #: qcsrc/common/notifications/all.inc:555
 #, c-format
 msgid "^BGYou received the flag from %s"
-msgstr ""
+msgstr "^BGあなたは %s から旗を受け取った"
 
 #: qcsrc/common/notifications/all.inc:556
 #, c-format
 msgid "^BGPress ^F2%s^BG to receive the flag from %s^BG"
-msgstr ""
+msgstr "^BG %s^BG から旗を受け取るために ^F2%s^BG を押して"
 
 #: qcsrc/common/notifications/all.inc:557
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
-msgstr ""
+msgstr "^BG旗を渡すよう %s^BG に要求している"
 
 #: qcsrc/common/notifications/all.inc:558
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
-msgstr ""
+msgstr "^BGあなたは ^TC^TT^BG 旗を %s に渡した"
 
 #: qcsrc/common/notifications/all.inc:559
 #, c-format
 msgid "^BGYou passed the flag to %s"
-msgstr ""
+msgstr "^BGあなたは旗を %s に渡した"
 
 #: qcsrc/common/notifications/all.inc:560
 msgid "^BGYou got the ^TC^TT^BG flag!"
@@ -3577,88 +3607,88 @@ msgstr "^BGあなたの%sチームメイト (^B%s%sG)^BG は旗を手に入れ
 
 #: qcsrc/common/notifications/all.inc:574
 msgid "^BGEnemies can now see you on radar!"
-msgstr ""
+msgstr "^BG敵はレーダーであなたを見ることができる!"
 
 #: qcsrc/common/notifications/all.inc:575
 msgid "^BGYou returned the ^TC^TT^BG flag!"
-msgstr ""
+msgstr "^BGあなたは ^TC^TT^BG 旗を返した!"
 
 #: qcsrc/common/notifications/all.inc:576
 msgid "^BGStalemate! Enemies can now see you on radar!"
-msgstr ""
+msgstr "^BG停滞! 敵はレーダーであなたを見ることができる!"
 
 #: qcsrc/common/notifications/all.inc:577
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
-msgstr ""
+msgstr "^BG停滞! 旗持ちはレーダーで敵に見られる!"
 
 #: qcsrc/common/notifications/all.inc:581
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
-msgstr ""
+msgstr "^K3%sあなたは ^BG%s を削除した"
 
 #: qcsrc/common/notifications/all.inc:582
 #: qcsrc/common/notifications/all.inc:591
 #: qcsrc/common/notifications/all.inc:600
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
-msgstr ""
+msgstr "^K3%sあなたは ^BG%s に対して得点した"
 
 #: qcsrc/common/notifications/all.inc:583
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
-msgstr ""
+msgstr "^K1%sあなたは ^BG%s によって削除された!"
 
 #: qcsrc/common/notifications/all.inc:584
 #: qcsrc/common/notifications/all.inc:593
 #: qcsrc/common/notifications/all.inc:602
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
-msgstr ""
+msgstr "^K1%sあなたは ^BG%s によって対して得点された"
 
 #: qcsrc/common/notifications/all.inc:590
 #, c-format
 msgid "^K3%sYou burned ^BG%s"
-msgstr ""
+msgstr "^K3%sあなたは ^BG%s を燃やした"
 
 #: qcsrc/common/notifications/all.inc:592
 #, c-format
 msgid "^K1%sYou were burned by ^BG%s"
-msgstr ""
+msgstr "^K1%sあなたは ^BG%s によって燃やされた"
 
 #: qcsrc/common/notifications/all.inc:599
 #, c-format
 msgid "^K3%sYou froze ^BG%s"
-msgstr ""
+msgstr "^K3%sあなたは ^BG%s を凍結した"
 
 #: qcsrc/common/notifications/all.inc:601
 #, c-format
 msgid "^K1%sYou were frozen by ^BG%s"
-msgstr ""
+msgstr "^K1%sあなたは ^BG%s によって凍結された"
 
 #: qcsrc/common/notifications/all.inc:608
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
-msgstr ""
+msgstr "^K1%sあなたは彼がタイプしている間に ^BG%s を削除した"
 
 #: qcsrc/common/notifications/all.inc:609
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
-msgstr ""
+msgstr "^K1%s彼らがタイプしていた間、あなたは ^BG%s^K1 に対して得点した"
 
 #: qcsrc/common/notifications/all.inc:610
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
-msgstr ""
+msgstr "^K1%sあなたはタイプしている間に ^BG%s によって削除された"
 
 #: qcsrc/common/notifications/all.inc:611
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing"
-msgstr ""
+msgstr "^K1%sあなたはタイプしている間、 ^BG%s^K1 によって対して得点した"
 
 #: qcsrc/common/notifications/all.inc:617
 #, c-format
 msgid "^BGPress ^F2%s^BG again to toss the nade!"
-msgstr ""
+msgstr "^BG手榴弾を投げるために ^F2%s^BG をもう一度押して!"
 
 #: qcsrc/common/notifications/all.inc:618
 msgid "^F2You got a ^K1BONUS GRENADE^F2!"
@@ -3670,91 +3700,93 @@ msgid ""
 "^BGYou have been moved into a different team\n"
 "You are now on: %s"
 msgstr ""
+"^BGあなたは別のチームに移動された\n"
+"現在: %s"
 
 #: qcsrc/common/notifications/all.inc:621
 msgid "^K1Don't go against your team mates!"
-msgstr ""
+msgstr "^K1チームメイトに反対しないで!"
 
 #: qcsrc/common/notifications/all.inc:621
 msgid "^K1Don't shoot your team mates!"
-msgstr ""
+msgstr "^K1チームメイトを撃たないで!"
 
 #: qcsrc/common/notifications/all.inc:622
 msgid "^K1Die camper!"
-msgstr ""
+msgstr "^K1死ね、キャンパー!"
 
 #: qcsrc/common/notifications/all.inc:622
 msgid "^K1Reconsider your tactics, camper!"
-msgstr ""
+msgstr "^K1戦術を再考しろ、キャンパー!"
 
 #: qcsrc/common/notifications/all.inc:623
 msgid "^K1You unfairly eliminated yourself!"
-msgstr ""
+msgstr "^K1あなたは不当に自分を削除した!"
 
 #: qcsrc/common/notifications/all.inc:624
 #, c-format
 msgid "^K1You were %s"
-msgstr ""
+msgstr "^K1あなたは %s だった"
 
 #: qcsrc/common/notifications/all.inc:625
 msgid "^K1You couldn't catch your breath!"
-msgstr ""
+msgstr "^K1あなたは息ができなかった!"
 
 #: qcsrc/common/notifications/all.inc:626
 msgid "^K1You hit the ground with a crunch!"
-msgstr ""
+msgstr "^K1あなたはクランチで地面を打ちた!"
 
 #: qcsrc/common/notifications/all.inc:627
 msgid "^K1You felt a little too hot!"
-msgstr ""
+msgstr "^K1あなたは少し暑く感じすぎた!"
 
 #: qcsrc/common/notifications/all.inc:627
 msgid "^K1You got a little bit too crispy!"
-msgstr ""
+msgstr "^K1あなたは少しカリカリになりすぎた!"
 
 #: qcsrc/common/notifications/all.inc:628
 msgid "^K1You killed your own dumb self!"
-msgstr ""
+msgstr "^K1あなたは自分の愚かな自己を殺した!"
 
 #: qcsrc/common/notifications/all.inc:628
 msgid "^K1You need to be more careful!"
-msgstr ""
+msgstr "^K1あなたはもっと注意する必要がある!"
 
 #: qcsrc/common/notifications/all.inc:629
 msgid "^K1You couldn't stand the heat!"
-msgstr ""
+msgstr "^K1あなたは暑さに耐えられなかった!"
 
 #: qcsrc/common/notifications/all.inc:630
 msgid "^K1You need to watch out for monsters!"
-msgstr ""
+msgstr "あなたはモンスターに気をつける必要がある!"
 
 #: qcsrc/common/notifications/all.inc:630
 msgid "^K1You were killed by a monster!"
-msgstr ""
+msgstr "^K1あなたはモンスターに殺された!"
 
 #: qcsrc/common/notifications/all.inc:631
 msgid "^K1Tastes like chicken!"
-msgstr ""
+msgstr "^K1チキンの味!"
 
 #: qcsrc/common/notifications/all.inc:631
 msgid "^K1You forgot to put the pin back in!"
-msgstr ""
+msgstr "^K1あなたはピンを戻すのを忘れた!"
 
 #: qcsrc/common/notifications/all.inc:632
 msgid "^K1Hanging around a napalm explosion is bad!"
-msgstr ""
+msgstr "^K1ナパーム弾の周りをぶら下がることは悪い!"
 
 #: qcsrc/common/notifications/all.inc:633
 msgid "^K1You felt a little chilly!"
-msgstr ""
+msgstr "^K1あなたは少し肌寒くなった!"
 
 #: qcsrc/common/notifications/all.inc:633
 msgid "^K1You got a little bit too cold!"
-msgstr ""
+msgstr "^K1あなたは少し寒くなった!"
 
 #: qcsrc/common/notifications/all.inc:634
 msgid "^K1Your Healing Nade is a bit defective"
-msgstr ""
+msgstr "^K1あなたの治癒手榴弾は少し欠陥だ"
 
 #: qcsrc/common/notifications/all.inc:635
 msgid "^K1You are respawning for running out of ammo..."
@@ -3766,120 +3798,121 @@ msgstr "^K1あなたは弾薬が切れたために殺された..."
 
 #: qcsrc/common/notifications/all.inc:636
 msgid "^K1You grew too old without taking your medicine"
-msgstr ""
+msgstr "^K1あなたは薬を飲まずに年を取りすぎた"
 
 #: qcsrc/common/notifications/all.inc:636
 msgid "^K1You need to preserve your health"
-msgstr ""
+msgstr "^K1あなたは健康を維持する必要がある"
 
 #: qcsrc/common/notifications/all.inc:637
 msgid "^K1You became a shooting star!"
-msgstr ""
+msgstr "^K1あなたは流れ星になった!"
 
 #: qcsrc/common/notifications/all.inc:638
 msgid "^K1You melted away in slime!"
-msgstr ""
+msgstr "^K1あなたはスライムで溶かした!"
 
 #: qcsrc/common/notifications/all.inc:639
 msgid "^K1You committed suicide!"
-msgstr ""
+msgstr "^K1あなたは自殺した!"
 
 #: qcsrc/common/notifications/all.inc:639
 msgid "^K1You ended it all!"
-msgstr ""
+msgstr "^K1あなたは全て終了した!"
 
 #: qcsrc/common/notifications/all.inc:640
 msgid "^K1You got stuck in a swamp!"
-msgstr ""
+msgstr "^K1あなたは沼で立ち往生した!"
 
 #: qcsrc/common/notifications/all.inc:641
 #, c-format
 msgid "^BGYou are now on: %s"
-msgstr ""
+msgstr "^BG現在: %s"
 
 #: qcsrc/common/notifications/all.inc:642
 msgid "^K1You died in an accident!"
-msgstr ""
+msgstr "^K1あなたは事故で死んだ!"
 
 #: qcsrc/common/notifications/all.inc:643
 msgid "^K1You had an unfortunate run in with a turret!"
-msgstr ""
+msgstr "^K1あなたは砲塔との不運な出会いがあった!"
 
 #: qcsrc/common/notifications/all.inc:643
 msgid "^K1You were fragged by a turret!"
-msgstr ""
+msgstr "^K1あなたは砲塔によって削除された!"
 
 #: qcsrc/common/notifications/all.inc:644
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
-msgstr ""
+msgstr "^K1あなたはeWheel砲塔との不運な出会いがあった!"
 
 #: qcsrc/common/notifications/all.inc:644
 msgid "^K1You were fragged by an eWheel turret!"
-msgstr ""
+msgstr "^K1あなたはeWheel砲塔によって削除された!"
 
 #: qcsrc/common/notifications/all.inc:645
 msgid "^K1You had an unfortunate run in with a Walker turret!"
-msgstr ""
+msgstr "^K1あなたはウォーカー砲塔との不運な出会いがあった!"
 
 #: qcsrc/common/notifications/all.inc:645
 msgid "^K1You were fragged by a Walker turret!"
-msgstr ""
+msgstr "^K1あなたはウォーカー砲塔によって削除された!"
 
 #: qcsrc/common/notifications/all.inc:646
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
-msgstr ""
+msgstr "^K1あなたはバンブルビーの爆風に巻き込まれた!"
 
 #: qcsrc/common/notifications/all.inc:647
 msgid "^K1You were crushed by a vehicle!"
-msgstr ""
+msgstr "^K1あなたは乗り物に押し潰された!"
 
 #: qcsrc/common/notifications/all.inc:648
 msgid "^K1You were caught in a Raptor cluster bomb!"
-msgstr ""
+msgstr "^K1あなたはラプタークラスター爆弾に巻き込まれた!"
 
 #: qcsrc/common/notifications/all.inc:649
 msgid "^K1You got caught in the blast of a Raptor explosion!"
-msgstr ""
+msgstr "^K1あなたはラプターの爆風に巻き込まれた!"
 
 #: qcsrc/common/notifications/all.inc:650
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
-msgstr ""
+msgstr "^K1あなたはスパイダーボットの爆風に巻き込まれた!"
 
 #: qcsrc/common/notifications/all.inc:651
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
-msgstr ""
+msgstr "^K1あなたはスパイダーボットのロケットで爆破された!"
 
 #: qcsrc/common/notifications/all.inc:652
 msgid "^K1You got caught in the blast of a Racer explosion!"
-msgstr ""
+msgstr "^K1あなたはレーサーの爆風に巻き込まれた!"
 
 #: qcsrc/common/notifications/all.inc:653
 msgid "^K1You couldn't find shelter from a Racer rocket!"
-msgstr ""
+msgstr "^K1あなたはレーサーロケットからの避難所を見つけることができなかった!"
 
 #: qcsrc/common/notifications/all.inc:654
 msgid "^K1Watch your step!"
-msgstr ""
+msgstr "^K1あなたの足元に気を付けて!"
 
 #: qcsrc/common/notifications/all.inc:656
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
-msgstr ""
+msgstr "^K1馬鹿! あなたは ^BG%s^K1 を削除した、彼があんたのチームメイトだ!"
 
 #: qcsrc/common/notifications/all.inc:656
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
-msgstr ""
+msgstr "^K1馬鹿! あなたは ^BG%s^K1 に反対した、彼があんたのチームメイトだ!"
 
 #: qcsrc/common/notifications/all.inc:657
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
-msgstr ""
+msgstr "^K1あなたは ^BG%s^K1 によって削除された、彼があんたのチームメイトだ"
 
 #: qcsrc/common/notifications/all.inc:657
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr ""
+"^K1あなたは ^BG%s^K1 によって対して得点された、彼があんたのチームメイトだ"
 
 #: qcsrc/common/notifications/all.inc:659
 msgid ""
@@ -3892,12 +3925,12 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:661
 #, c-format
 msgid "^BGYou need %s^BG!"
-msgstr ""
+msgstr "^BGあなたは %s^BG が必要だ!"
 
 #: qcsrc/common/notifications/all.inc:662
 #, c-format
 msgid "^BGYou also need %s^BG!"
-msgstr ""
+msgstr "^BGあなたは %s^BG も必要だ!"
 
 #: qcsrc/common/notifications/all.inc:663
 msgid "^BGDoor unlocked!"
@@ -3906,47 +3939,47 @@ msgstr "^BG扉を開けた!"
 #: qcsrc/common/notifications/all.inc:665
 #, c-format
 msgid "^F2Extra lives taken: ^K1%s"
-msgstr ""
+msgstr "^F2奪った余分な命数: ^K1%s"
 
 #: qcsrc/common/notifications/all.inc:667
 #, c-format
 msgid "^K3You revived ^BG%s"
-msgstr ""
+msgstr "^K3あなたは ^BG%s を復活した"
 
 #: qcsrc/common/notifications/all.inc:668
 msgid "^K3You revived yourself"
-msgstr ""
+msgstr "^K3あなた自身を復活した"
 
 #: qcsrc/common/notifications/all.inc:669
 #, c-format
 msgid "^K3You were revived by ^BG%s"
-msgstr ""
+msgstr "^K3あなたは ^BG%s によって復活された"
 
 #: qcsrc/common/notifications/all.inc:670
 #, c-format
 msgid "^K3You were automatically revived after %s seconds"
-msgstr ""
+msgstr "^K3あなたは %s 秒後に自動的に復活した"
 
 #: qcsrc/common/notifications/all.inc:672
 msgid "^BGThe generator is under attack!"
-msgstr ""
+msgstr "^BG発生器が攻撃を受けている!"
 
 #: qcsrc/common/notifications/all.inc:674
 msgid "^TC^TT^BG team loses the round"
-msgstr ""
+msgstr "^TC^TT^BG チームがラウンドに負けた"
 
 #: qcsrc/common/notifications/all.inc:678
 msgid "^K1You froze yourself"
-msgstr ""
+msgstr "^K1あなたは自分を冷凍した"
 
 #: qcsrc/common/notifications/all.inc:679
 msgid "^K1Round already started, you spawn as frozen"
-msgstr ""
+msgstr "^K1ラウンドはすでに開始されており、凍結状態で現れる"
 
 #: qcsrc/common/notifications/all.inc:681
 #, c-format
 msgid "^K1A %s has arrived!"
-msgstr ""
+msgstr "^K1 %s が到着した!"
 
 #: qcsrc/common/notifications/all.inc:685
 msgid "^BGYou got the ^F1Fuel regenerator"
@@ -3961,54 +3994,64 @@ msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
 msgstr ""
+"^K1利用可能な現れられるスペースがありません!\n"
+"あなたのチームがそれを修正できることを願っています..."
 
 #: qcsrc/common/notifications/all.inc:695
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
 msgstr ""
+"現在、ゲームに参加できません。\n"
+"選手の制限が最大容量に達しました。"
 
 #: qcsrc/common/notifications/all.inc:699
 msgid "^BGYou picked up the ball"
-msgstr ""
+msgstr "^BGあなたはボールを拾いた"
 
 #: qcsrc/common/notifications/all.inc:700
 msgid "^BGKilling people while you don't have the ball gives no points!"
-msgstr ""
+msgstr "^BGあなたにはボールを持っていない時に人を殺してもポイントを与えない!"
 
 #: qcsrc/common/notifications/all.inc:702
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
 msgstr ""
+"^BG全ての鍵はチームの手にある!\n"
+"鍵持ちが会うのを助けて!"
 
 #: qcsrc/common/notifications/all.inc:703
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
 msgstr ""
+"^BG全ての鍵は ^TC^TT チーム^BGの手にあ全る!\n"
+"^F4今^BGすぐ干渉して!"
 
 #: qcsrc/common/notifications/all.inc:704
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
 msgstr ""
+"^BG全ての鍵はチームの手にある!\n"
+"^F4今^BGすぐ他の鍵持ちに会って!"
 
 #: qcsrc/common/notifications/all.inc:705
 msgid "^F4Round will start in ^COUNT"
-msgstr ""
+msgstr "^F4ラウンドは ^COUNT から開始する"
 
 #: qcsrc/common/notifications/all.inc:706
 msgid "^BGScanning frequency range..."
-msgstr ""
+msgstr "^BG周波数範囲をスキャン中..."
 
 #: qcsrc/common/notifications/all.inc:707
 msgid "^BGYou are starting with the ^TC^TT Key"
-msgstr ""
+msgstr "^BGあなたは ^TC^TT 鍵で開始ている"
 
 #: qcsrc/common/notifications/all.inc:709
 msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
+msgstr "^BGあなたには残りの命がない、あなたは次の試合まで待つ必要がない"
 
 #: qcsrc/common/notifications/all.inc:711
 #, c-format
@@ -4016,42 +4059,44 @@ msgid ""
 "^BGWaiting for players to join...\n"
 "Need active players for: %s"
 msgstr ""
+"^BG選手の参加を待ち中...\n"
+"必要活発な選手: %s"
 
 #: qcsrc/common/notifications/all.inc:712
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
-msgstr ""
+msgstr "^BG%s 選手の参加を待ち中..."
 
 #: qcsrc/common/notifications/all.inc:714
 msgid "^BGYour weapon has been downgraded until you find some ammo!"
-msgstr ""
+msgstr "^BGあなたは弾薬がいくつか見つかるまで、あなたの武器が格下げされた!"
 
 #: qcsrc/common/notifications/all.inc:715
 msgid "^F4^COUNT^BG left to find some ammo!"
-msgstr ""
+msgstr "^F4残り ^COUNT^BG で弾薬が見つかる!"
 
 #: qcsrc/common/notifications/all.inc:716
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
-msgstr ""
+msgstr "^BG弾薬を入手しないと ^F4^COUNT^BG で死んでしまいる!"
 
 #: qcsrc/common/notifications/all.inc:716
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
-msgstr ""
+msgstr "^BG弾薬を入手しろ! ^F4残り ^COUNT^BG !"
 
 #: qcsrc/common/notifications/all.inc:717
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
-msgstr ""
+msgstr "^F2残りの余分な命: ^K1%s"
 
 #: qcsrc/common/notifications/all.inc:719 qcsrc/menu/xonotic/campaign.qc:244
 #, c-format
 msgid "Level %s: "
-msgstr ""
+msgstr "レベル %s: "
 
 #: qcsrc/common/notifications/all.inc:719
 #, c-format
 msgid "^BGPress ^F2%s^BG to enter the game"
-msgstr ""
+msgstr "^BG ^F2%s^BG を押してゲームに入る"
 
 #: qcsrc/common/notifications/all.inc:722
 #, c-format
@@ -4059,71 +4104,81 @@ msgid ""
 "^F2^COUNT^BG until weapon change...\n"
 "Next weapon: ^F1%s"
 msgstr ""
+"^F2^COUNT^BG 、武器が変更されるまで...\n"
+"次の武器: ^F1%s"
 
 #: qcsrc/common/notifications/all.inc:723
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
-msgstr ""
+msgstr "^F2活発な武器: ^F1%s"
 
 #: qcsrc/common/notifications/all.inc:725
 #, c-format
 msgid "^BGYou captured %s^BG control point"
-msgstr ""
+msgstr "^BGあなたは %s^BG コントロールポイントを取れた"
 
 #: qcsrc/common/notifications/all.inc:726
 msgid "^BGYou captured a control point"
-msgstr ""
+msgstr "^BGあなたはコントロールポイントを取れた"
 
 #: qcsrc/common/notifications/all.inc:727
 #, c-format
 msgid "^TC^TT^BG team captured %s^BG control point"
-msgstr ""
+msgstr "^TC^TT^BG チームは %s^BG コントロールポイントを取れた"
 
 #: qcsrc/common/notifications/all.inc:728
 msgid "^TC^TT^BG team captured a control point"
-msgstr ""
+msgstr "^TC^TT^BG チームはコントロールポイントを取れた"
 
 #: qcsrc/common/notifications/all.inc:729
 msgid "^BGThis control point currently cannot be captured"
-msgstr ""
+msgstr "^BGこのコントロールポイントは現在取られない"
 
 #: qcsrc/common/notifications/all.inc:730
 msgid ""
 "^BGThe enemy generator cannot be destroyed yet\n"
 "^F2Capture some control points to unshield it"
 msgstr ""
+"^BG敵の発生器はまだ破壊できない\n"
+"^F2いくつかのコントロールポイントを取れて、非シールドする"
 
 #: qcsrc/common/notifications/all.inc:731
 msgid "^BGThe ^TCenemy^BG generator is no longer shielded!"
-msgstr ""
+msgstr "^BG ^TC 敵^BGの発生器はシールドされなくなった!"
 
 #: qcsrc/common/notifications/all.inc:732
 msgid ""
 "^K1Your generator is NOT shielded!\n"
 "^BGRe-capture control points to shield it!"
 msgstr ""
+"^K1あなたの発生器はシールドされていない!\n"
+"^BGコントロールポイントを再取れてシールドして!"
 
 #: qcsrc/common/notifications/all.inc:733
 #, c-format
 msgid "^BGPress ^F2%s^BG to teleport"
-msgstr ""
+msgstr "^BG ^F2%s^BG を押してテレポートする"
 
 #: qcsrc/common/notifications/all.inc:734
 #, c-format
 msgid "^BGTeleporting disabled for %s"
-msgstr ""
+msgstr "^BGテレポートは %s 間無効"
 
 #: qcsrc/common/notifications/all.inc:736
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
 msgstr ""
+"^F2残業中!\n"
+"勝者が出るまで削除を立て続けて!"
 
 #: qcsrc/common/notifications/all.inc:736
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
 msgstr ""
+"^F2残業中!\n"
+"勝者が出るまで得点を立て続けて!"
 
 #: qcsrc/common/notifications/all.inc:737
 msgid ""
@@ -4133,6 +4188,11 @@ msgid ""
 "The more control points your team holds,\n"
 "the faster the enemy generator decays"
 msgstr ""
+"^F2残業中!\n"
+"\n"
+"発電機は現在衰退してる。\n"
+"チームが保持するコントロールポイントが多いほど、\n"
+"敵の発生器の減衰が速くなる"
 
 #: qcsrc/common/notifications/all.inc:738
 #, c-format
@@ -4140,141 +4200,145 @@ msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "^BGAdded ^F4%s^BG to the game!"
 msgstr ""
+"^F2残業中!\n"
+"^BG F4%s^BG がゲームに追加された!"
 
 #: qcsrc/common/notifications/all.inc:740
 msgid "^K1In^BG-portal created"
-msgstr ""
+msgstr "^BGポータル^K1内^BGが作成された"
 
 #: qcsrc/common/notifications/all.inc:741
 msgid "^F3Out^BG-portal created"
-msgstr ""
+msgstr "^BGポータル^F3外^BGが作成された"
 
 #: qcsrc/common/notifications/all.inc:742
 msgid "^F1Portal creation failed"
-msgstr ""
+msgstr "^F1ポータルの作成に失敗した"
 
 #: qcsrc/common/notifications/all.inc:744
 msgid "^F2Strength infuses your weapons with devastating power"
-msgstr ""
+msgstr "^F2「力」はあなたの武器に壊滅的な力を吹き込みる"
 
 #: qcsrc/common/notifications/all.inc:745
 msgid "^F2Strength has worn off"
-msgstr ""
+msgstr "^F2「力」がすり減った"
 
 #: qcsrc/common/notifications/all.inc:747
 msgid "^F2Shield surrounds you"
-msgstr ""
+msgstr "^F2「盾」があなたを囲んでいる"
 
 #: qcsrc/common/notifications/all.inc:748
 msgid "^F2Shield has worn off"
-msgstr ""
+msgstr "^F2「盾」がすり減った"
 
 #: qcsrc/common/notifications/all.inc:750
 msgid "^F2You are on speed"
-msgstr ""
+msgstr "^F2あなたは「速度」に乗っている"
 
 #: qcsrc/common/notifications/all.inc:751
 msgid "^F2Speed has worn off"
-msgstr ""
+msgstr "^F2「速度」がすり減った"
 
 #: qcsrc/common/notifications/all.inc:753
 msgid "^F2You are invisible"
-msgstr ""
+msgstr "^F2あなたには「不可視」がある"
 
 #: qcsrc/common/notifications/all.inc:754
 msgid "^F2Invisibility has worn off"
-msgstr ""
+msgstr "^F2「不可視」がすり減った"
 
 #: qcsrc/common/notifications/all.inc:756
 msgid "^F2The race is over, finish your lap!"
-msgstr ""
+msgstr "^F2レースが終わった、ラップを終了して!"
 
 #: qcsrc/common/notifications/all.inc:758
 msgid "^BGSequence completed!"
-msgstr ""
+msgstr "^BG順序完了!"
 
 #: qcsrc/common/notifications/all.inc:759
 msgid "^BGThere are more to go..."
-msgstr ""
+msgstr "^BG続行するにはさらに必要がある..."
 
 #: qcsrc/common/notifications/all.inc:760
 #, c-format
 msgid "^BGOnly %s^BG more to go..."
-msgstr ""
+msgstr "^BG後 ^BG%s だけ..."
 
 #: qcsrc/common/notifications/all.inc:762
 msgid "^F2Superweapons have broken down"
-msgstr ""
+msgstr "^F2スーパー武器が壊れられた"
 
 #: qcsrc/common/notifications/all.inc:763
 msgid "^F2Superweapons have been lost"
-msgstr ""
+msgstr "^F2スーパー武器は失われた"
 
 #: qcsrc/common/notifications/all.inc:764
 msgid "^F2You now have a superweapon"
-msgstr ""
+msgstr "^F2今、あなたはスーパー武器がある"
 
 #: qcsrc/common/notifications/all.inc:766
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
-msgstr ""
+msgstr "^K1 ^COUNT に ^TC^TT^K1 に変更中"
 
 #: qcsrc/common/notifications/all.inc:767
 msgid "^K1Changing team in ^COUNT"
-msgstr ""
+msgstr "^K1 ^COUNT にチームに変更中"
 
 #: qcsrc/common/notifications/all.inc:768
 msgid "^K1Spectating in ^COUNT"
-msgstr ""
+msgstr "^K1 ^COUNT に観戦中"
 
 #: qcsrc/common/notifications/all.inc:769
 msgid "^K1Suicide in ^COUNT"
-msgstr ""
+msgstr "^K1 ^COUNT に自殺中"
 
 #: qcsrc/common/notifications/all.inc:771
 msgid "^F4Timeout begins in ^COUNT"
-msgstr ""
+msgstr "^F4タイムアウトは ^COUNT から開始します"
 
 #: qcsrc/common/notifications/all.inc:772
 msgid "^F4Timeout ends in ^COUNT"
-msgstr ""
+msgstr "^F4タイムアウトは ^COUNT で終了します"
 
 #: qcsrc/common/notifications/all.inc:774
 msgid "^K1Cannot join given minigame session!"
-msgstr ""
+msgstr "^K1特定のミニゲームセッションに参加できない!"
 
 #: qcsrc/common/notifications/all.inc:776
 #, c-format
 msgid "^BGPress ^F2%s^BG to enter/exit the vehicle"
-msgstr ""
+msgstr "^BG乗り物に出入りするために ^F2%s^BG を押して"
 
 #: qcsrc/common/notifications/all.inc:777
 #, c-format
 msgid "^BGPress ^F2%s^BG to enter the vehicle gunner"
-msgstr ""
+msgstr "^BG乗り物の砲手に入るために ^F2%s^BG を押して"
 
 #: qcsrc/common/notifications/all.inc:778
 #, c-format
 msgid "^BGPress ^F2%s^BG to steal this vehicle"
-msgstr ""
+msgstr "^BGこの乗り物を盗むために ^F2%s^BG を押して"
 
 #: qcsrc/common/notifications/all.inc:779
 msgid ""
 "^F2The enemy is stealing one of your vehicles!\n"
 "^F4Stop them!"
 msgstr ""
+"^F2敵はあなたの乗り物を盗んでいる!\n"
+"^F4彼らを止めて!"
 
 #: qcsrc/common/notifications/all.inc:780
 msgid "^F2Intruder detected, disabling shields!"
-msgstr ""
+msgstr "^F2侵入者を検出した、シールドを無効中!"
 
 #: qcsrc/common/notifications/all.qh:198
 msgid "Notification dump command only works with cl_cmd and sv_cmd."
-msgstr ""
+msgstr "通知ダンプコマンドは cl_cmd および sv_cmd でのみ機能します。"
 
 #: qcsrc/common/notifications/all.qh:408 qcsrc/common/notifications/all.qh:409
 #, c-format
 msgid " (near %s)"
-msgstr ""
+msgstr " ( %s に近い)"
 
 #: qcsrc/common/notifications/all.qh:416 qcsrc/common/notifications/all.qh:417
 msgid "primary"
@@ -4294,21 +4358,21 @@ msgstr "ポイント"
 
 #: qcsrc/common/notifications/all.qh:428
 msgid "drop flag"
-msgstr ""
+msgstr "旗を落とす"
 
 #: qcsrc/common/notifications/all.qh:429
 msgid "throw nade"
-msgstr ""
+msgstr "手榴弾を投げる"
 
 #: qcsrc/common/notifications/all.qh:455
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
-msgstr ""
+msgstr "%s^K1 がトリプル削除をした! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:455
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
-msgstr ""
+msgstr "%s^K1 がトリプル得点をした! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:455
 msgid "TRIPLE FRAG! "
@@ -4317,12 +4381,12 @@ msgstr "トリプル削除! "
 #: qcsrc/common/notifications/all.qh:456
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
-msgstr ""
+msgstr "%s^K1 は5得点を一列にした! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:456
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
-msgstr ""
+msgstr "%s^K1 が激怒を解除した! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:456
 msgid "RAGE! "
@@ -4331,12 +4395,12 @@ msgstr "激怒! "
 #: qcsrc/common/notifications/all.qh:457
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
-msgstr ""
+msgstr "%s^K1 は10得点を一列にした! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:457
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
-msgstr ""
+msgstr "%s^K1 が虐殺を開始した! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:457
 msgid "MASSACRE! "
@@ -4345,12 +4409,12 @@ msgstr "虐殺! "
 #: qcsrc/common/notifications/all.qh:458
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
-msgstr ""
+msgstr "%s^K1 が暴力を実行した! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:458
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
-msgstr ""
+msgstr "%s^K1 は15得点を一列にした! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:458
 msgid "MAYHEM! "
@@ -4359,12 +4423,12 @@ msgstr "暴力! "
 #: qcsrc/common/notifications/all.qh:459
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
-msgstr ""
+msgstr "%s^K1 はバーサーカーだ! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:459
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
-msgstr ""
+msgstr "%s^K1 は20得点を一列にした! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:459
 msgid "BERSERKER! "
@@ -4373,12 +4437,12 @@ msgstr "バーサーカー! "
 #: qcsrc/common/notifications/all.qh:460
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
-msgstr ""
+msgstr "%s^K1 は大虐殺をやった! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:460
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
-msgstr ""
+msgstr "%s^K1 は25得点を一列にした! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:460
 msgid "CARNAGE! "
@@ -4387,12 +4451,12 @@ msgstr "大虐殺! "
 #: qcsrc/common/notifications/all.qh:461
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
-msgstr ""
+msgstr "%s^K1 は30得点を一列にした! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:461
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
-msgstr ""
+msgstr "%s^K1 はアルマゲドンを解放する! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:461
 msgid "ARMAGEDDON! "
@@ -4401,7 +4465,7 @@ msgstr "アルマゲドン! "
 #: qcsrc/common/notifications/all.qh:468
 #, c-format
 msgid "%s(^F1Bot^BG)"
-msgstr "%s(^F1BOT^BG)"
+msgstr "%s(^F1ボット^BG)"
 
 #: qcsrc/common/notifications/all.qh:470
 #, c-format
@@ -4429,154 +4493,154 @@ msgstr ""
 #: qcsrc/common/notifications/all.qh:500 qcsrc/common/notifications/all.qh:513
 #, c-format
 msgid "%d score spree! "
-msgstr ""
+msgstr "連続 %d 得点! "
 
 #: qcsrc/common/notifications/all.qh:512
 #, c-format
 msgid "%d frag spree! "
-msgstr ""
+msgstr "連続 %d 削除! "
 
 #: qcsrc/common/notifications/all.qh:525
 msgid "First blood! "
-msgstr ""
+msgstr "初殺! "
 
 #: qcsrc/common/notifications/all.qh:525
 msgid "First score! "
-msgstr ""
+msgstr "初得点! "
 
 #: qcsrc/common/notifications/all.qh:529
 msgid "First casualty! "
-msgstr ""
+msgstr "初敗北! "
 
 #: qcsrc/common/notifications/all.qh:529
 msgid "First victim! "
-msgstr ""
+msgstr "初犠牲者! "
 
 #: qcsrc/common/notifications/all.qh:570
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
-msgstr ""
+msgstr "%s^K1 には %d の削除が連続している! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:571
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
-msgstr ""
+msgstr "%s^K1 が %d 得点を連続して獲得した! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:589
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
-msgstr ""
+msgstr "%s^K1 が初殺を引きた! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:590
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
-msgstr ""
+msgstr "%s^K1 が初得点を獲得した! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:606
 #, c-format
 msgid ", ending their %d frag spree"
-msgstr ""
+msgstr "、連続 %d 削除を終了中"
 
 #: qcsrc/common/notifications/all.qh:607
 #, c-format
 msgid ", ending their %d score spree"
-msgstr ""
+msgstr "、連続 %d 得点を終了中"
 
 #: qcsrc/common/notifications/all.qh:621
 #, c-format
 msgid ", losing their %d frag spree"
-msgstr ""
+msgstr "、連続 %d 削除を失い中"
 
 #: qcsrc/common/notifications/all.qh:622
 #, c-format
 msgid ", losing their %d score spree"
-msgstr ""
+msgstr "、連続 %d 得点を失い中"
 
 #: qcsrc/common/notifications/all.qh:647
 #, c-format
 msgid " with %d %s"
-msgstr ""
+msgstr " の %d %s"
 
 #: qcsrc/common/teams.qh:31
 msgid "TEAM^Red"
-msgstr ""
+msgstr ""
 
 #: qcsrc/common/teams.qh:32
 msgid "TEAM^Blue"
-msgstr ""
+msgstr ""
 
 #: qcsrc/common/teams.qh:33
 msgid "TEAM^Yellow"
-msgstr ""
+msgstr ""
 
 #: qcsrc/common/teams.qh:34
 msgid "TEAM^Pink"
-msgstr ""
+msgstr "ピンク"
 
 #: qcsrc/common/teams.qh:35
 msgid "Team"
-msgstr ""
+msgstr "チーム"
 
 #: qcsrc/common/teams.qh:36
 msgid "Neutral"
-msgstr ""
+msgstr "中立"
 
 #: qcsrc/common/teams.qh:39
 msgid "KEY^Red"
-msgstr ""
+msgstr ""
 
 #: qcsrc/common/teams.qh:40
 msgid "KEY^Blue"
-msgstr ""
+msgstr ""
 
 #: qcsrc/common/teams.qh:41
 msgid "KEY^Yellow"
-msgstr ""
+msgstr ""
 
 #: qcsrc/common/teams.qh:42
 msgid "KEY^Pink"
-msgstr ""
+msgstr "ピンク"
 
 #: qcsrc/common/teams.qh:43
 msgid "FLAG^Red"
-msgstr ""
+msgstr ""
 
 #: qcsrc/common/teams.qh:44
 msgid "FLAG^Blue"
-msgstr ""
+msgstr ""
 
 #: qcsrc/common/teams.qh:45
 msgid "FLAG^Yellow"
-msgstr ""
+msgstr ""
 
 #: qcsrc/common/teams.qh:46
 msgid "FLAG^Pink"
-msgstr ""
+msgstr "ピンク"
 
 #: qcsrc/common/teams.qh:47
 msgid "GENERATOR^Red"
-msgstr ""
+msgstr ""
 
 #: qcsrc/common/teams.qh:48
 msgid "GENERATOR^Blue"
-msgstr ""
+msgstr ""
 
 #: qcsrc/common/teams.qh:49
 msgid "GENERATOR^Yellow"
-msgstr ""
+msgstr ""
 
 #: qcsrc/common/teams.qh:50
 msgid "GENERATOR^Pink"
-msgstr ""
+msgstr "ピンク"
 
 #: qcsrc/common/turrets/all.qh:95
 msgid "Turrets dump command only works with sv_cmd."
-msgstr ""
+msgstr "砲塔ダンプコマンドは sv_cmd でのみ機能します。"
 
 #: qcsrc/common/turrets/cl_turrets.qc:125
 #, c-format
 msgid "%s under attack!"
-msgstr ""
+msgstr "%s 攻撃を受けている!"
 
 #: qcsrc/common/turrets/turret.qh:11
 msgid "Turret"
@@ -4592,7 +4656,7 @@ msgstr "eWheel"
 
 #: qcsrc/common/turrets/turret/flac.qh:13
 msgid "FLAC Cannon"
-msgstr ""
+msgstr "FLACキャノン"
 
 #: qcsrc/common/turrets/turret/flac_weapon.qh:7
 msgid "FLAC"
@@ -4600,68 +4664,68 @@ msgstr "FLAC"
 
 #: qcsrc/common/turrets/turret/fusionreactor.qh:11
 msgid "Fusion Reactor"
-msgstr ""
+msgstr "融合炉"
 
 #: qcsrc/common/turrets/turret/hellion.qh:13
 msgid "Hellion Missile Turret"
-msgstr ""
+msgstr "ヘリオンミサイル砲塔"
 
 #: qcsrc/common/turrets/turret/hellion_weapon.qh:7
 msgid "Hellion"
-msgstr ""
+msgstr "ヘリオン"
 
 #: qcsrc/common/turrets/turret/hk.qh:15
 msgid "Hunter-Killer Turret"
-msgstr ""
+msgstr "ハンターキラー砲塔"
 
 #: qcsrc/common/turrets/turret/hk_weapon.qh:7
 msgid "Hunter-Killer"
-msgstr ""
+msgstr "ハンターキラー"
 
 #: qcsrc/common/turrets/turret/machinegun.qh:13
 msgid "Machinegun Turret"
-msgstr ""
+msgstr "機関銃砲塔"
 
 #: qcsrc/common/turrets/turret/machinegun_weapon.qh:7
 msgid "Machinegun"
-msgstr ""
+msgstr "機関銃"
 
 #: qcsrc/common/turrets/turret/mlrs.qh:13
 msgid "MLRS Turret"
-msgstr ""
+msgstr "MLRS砲塔"
 
 #: qcsrc/common/turrets/turret/mlrs_weapon.qh:7
 msgid "MLRS"
-msgstr ""
+msgstr "MLRS"
 
 #: qcsrc/common/turrets/turret/phaser.qh:13
 msgid "Phaser Cannon"
-msgstr ""
+msgstr "フェイザーキャノン"
 
 #: qcsrc/common/turrets/turret/phaser_weapon.qh:7
 msgid "Phaser"
-msgstr ""
+msgstr "フェイザー"
 
 #: qcsrc/common/turrets/turret/plasma.qh:13
 msgid "Plasma Cannon"
-msgstr ""
+msgstr "プラズマキャノン"
 
 #: qcsrc/common/turrets/turret/plasma_dual.qh:8
 msgid "Dual plasma"
-msgstr ""
+msgstr "デュアルプラズマ"
 
 #: qcsrc/common/turrets/turret/plasma_dual.qh:20
 msgid "Dual Plasma Cannon"
-msgstr ""
+msgstr "デュアルプラズマキャノン"
 
 #: qcsrc/common/turrets/turret/plasma_weapon.qh:7
 msgid "Plasma"
-msgstr ""
+msgstr "プラズマ"
 
 #: qcsrc/common/turrets/turret/tesla.qh:13
 #: qcsrc/common/turrets/turret/tesla_weapon.qh:7
 msgid "Tesla Coil"
-msgstr ""
+msgstr "テスラコイル"
 
 #: qcsrc/common/turrets/turret/walker.qh:15
 msgid "Walker Turret"
@@ -4675,19 +4739,19 @@ msgstr "ウォーカー"
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:176
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:186
 msgid "Male"
-msgstr ""
+msgstr "男性"
 
 #: qcsrc/common/util.qc:1391
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:175
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:185
 msgid "Female"
-msgstr ""
+msgstr "女性"
 
 #: qcsrc/common/util.qc:1392
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:174
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:187
 msgid "Undisclosed"
-msgstr ""
+msgstr "未知"
 
 #: qcsrc/common/util.qc:1439
 msgid "<KEY NOT FOUND>"
@@ -5137,7 +5201,7 @@ msgstr "グラップリングフック"
 
 #: qcsrc/common/weapons/weapon/machinegun.qh:18
 msgid "MachineGun"
-msgstr "マシンガン"
+msgstr "機関銃"
 
 #: qcsrc/common/weapons/weapon/minelayer.qh:18
 msgid "Mine Layer"
@@ -5390,11 +5454,13 @@ msgid ""
 "Entity field %s.%s (%s) is not whitelisted. If you believe this is an error, "
 "please file an issue."
 msgstr ""
+"エンティティフィールド %s.%s (%s) がリストにありません。これがエラーだと思わ"
+"れる場合は、問題を報告してください。"
 
 #: qcsrc/lib/string.qh:81
 #, c-format
 msgid "%d days, %02d:%02d:%02d"
-msgstr "%d日, %02d:%02d:%02d"
+msgstr "%d 日、 %02d:%02d:%02d"
 
 #: qcsrc/lib/string.qh:82
 #, c-format
@@ -5403,19 +5469,19 @@ msgstr "%02d:%02d:%02d"
 
 #: qcsrc/menu/command/menu_cmd.qc:48
 msgid "Usage: menu_cmd command..., where possible commands are:"
-msgstr ""
+msgstr "使用法: menu_cmd コマンド...、可能なコマンドは次:"
 
 #: qcsrc/menu/command/menu_cmd.qc:49
 msgid "  sync - reloads all cvars on the current menu page"
-msgstr ""
+msgstr "  sync - 現在のメニューページの全ての cvar をリロードする"
 
 #: qcsrc/menu/command/menu_cmd.qc:50
 msgid "  directmenu ITEM - select a menu item as main item"
-msgstr ""
+msgstr "  directmenu ITEM - メニューアイテムをメインアイテムとして選択する"
 
 #: qcsrc/menu/command/menu_cmd.qc:51
 msgid "  dumptree - dump the state of the menu as a tree to the console"
-msgstr ""
+msgstr "  dumptree - メニューの状態をツリー状としてコンソールにダンプする"
 
 #: qcsrc/menu/command/menu_cmd.qc:81
 msgid "Available options:"
@@ -5617,15 +5683,15 @@ msgstr "以前の貢献者"
 
 #: qcsrc/menu/xonotic/cvarlist.qc:73
 msgid "forced to be saved to config.cfg"
-msgstr ""
+msgstr "強制的に config.cfg に保存される"
 
 #: qcsrc/menu/xonotic/cvarlist.qc:79 qcsrc/menu/xonotic/cvarlist.qc:89
 msgid "will not be saved"
-msgstr "ä¿\9då­\98ã\81\95ã\82\8cã\81¾ã\81\9bã\82\93"
+msgstr "ä¿\9då­\98ã\81\95ã\82\8cã\81ªã\81\84"
 
 #: qcsrc/menu/xonotic/cvarlist.qc:84
 msgid "will be saved to config.cfg"
-msgstr "config.cfgに保存されます"
+msgstr "config.cfg に保存される"
 
 #: qcsrc/menu/xonotic/cvarlist.qc:93
 msgid "private"
@@ -5672,7 +5738,7 @@ msgstr "もっと遊びます!"
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qh:6
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qh:6
 msgid "Disconnect"
-msgstr "切断する"
+msgstr "切断"
 
 #: qcsrc/menu/xonotic/dialog_disconnect.qh:7
 msgid "Disconnect from the server you are connected to"
@@ -5695,7 +5761,7 @@ msgstr "名前:"
 #: qcsrc/menu/xonotic/dialog_firstrun.qc:53
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:62
 msgid "Name under which you will appear in the game"
-msgstr ""
+msgstr "ゲームに登場するあなたの名前:"
 
 #: qcsrc/menu/xonotic/dialog_firstrun.qc:69
 msgid "Text language:"
@@ -5704,10 +5770,12 @@ msgstr "テキスト言語:"
 #: qcsrc/menu/xonotic/dialog_firstrun.qc:78
 msgid "Allow player statistics to use your nickname at stats.xonotic.org?"
 msgstr ""
+"選手の統計が stats.xonotic.org であなたのニックネームを使用できるようにします"
+"か?"
 
 #: qcsrc/menu/xonotic/dialog_firstrun.qc:84
 msgid "Undecided"
-msgstr ""
+msgstr "未定"
 
 #: qcsrc/menu/xonotic/dialog_firstrun.qc:88
 msgid "Save settings"
@@ -5719,26 +5787,26 @@ msgstr "ようこそ"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:18
 msgid "Ammunition display:"
-msgstr ""
+msgstr "弾薬表示:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:21
 msgid "Show only current ammo type"
-msgstr ""
+msgstr "現在の弾薬タイプのみを表示する"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:24
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:46
 msgid "Noncurrent alpha:"
-msgstr ""
+msgstr "非現行アルファ:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:28
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:50
 msgid "Noncurrent scale:"
-msgstr ""
+msgstr "非現在のスケール:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:32
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
 msgid "Align icon:"
-msgstr ""
+msgstr "整列アイコン:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:33
 #: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:32
@@ -5778,7 +5846,7 @@ msgstr "フェージング時刻"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:27
 msgid "Flip messages order"
-msgstr ""
+msgstr "メッセージの順序を逆にする"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qc:18
@@ -5793,27 +5861,27 @@ msgstr "中央"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:37
 msgid "Font scale:"
-msgstr ""
+msgstr "フォントスケール:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qh:6
 msgid "Centerprint Panel"
-msgstr ""
+msgstr "センタープリントパネル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:17
 msgid "Chat entries:"
-msgstr ""
+msgstr "チャットエントリ:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:20
 msgid "Chat size:"
-msgstr ""
+msgstr "チャットサイズ:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:24
 msgid "Chat lifetime:"
-msgstr ""
+msgstr "チャットの存続期間:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_chat.qc:28
 msgid "Chat beep sound"
-msgstr ""
+msgstr "チャットのビープ音"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_chat.qh:6
 msgid "Chat Panel"
@@ -5825,7 +5893,7 @@ msgstr "エンジン情報"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.qc:19
 msgid "Use an averaging algorithm for fps"
-msgstr ""
+msgstr "FPSの平均化アルゴリズムを使用する"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.qh:6
 msgid "Engine Info Panel"
@@ -5833,18 +5901,18 @@ msgstr "エンジン情報パネル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:17
 msgid "Combine health and armor"
-msgstr ""
+msgstr "健康と鎧を組み合わせる"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:19
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:28
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:17
 msgid "Enable status bar"
-msgstr ""
+msgstr "ステータスバーを有効にする"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:21
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:19
 msgid "Status bar alignment:"
-msgstr ""
+msgstr "ステータスバーの配置:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:39
@@ -5863,11 +5931,11 @@ msgstr "外部"
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:34
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:32
 msgid "Icon alignment:"
-msgstr "アイコンの配置"
+msgstr "アイコンの配置:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:42
 msgid "Flip health and armor positions"
-msgstr ""
+msgstr "健康 / 鎧の位置を逆にする"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qh:6
 msgid "Health/Armor Panel"
@@ -5879,7 +5947,7 @@ msgstr "情報メッセージ:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.qc:19
 msgid "Flip align"
-msgstr ""
+msgstr "配置を逆にする"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.qh:6
 msgid "Info Messages Panel"
@@ -5901,7 +5969,7 @@ msgstr "無効にする"
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:17
 #: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:15
 msgid "Enable spectating"
-msgstr "観戦を有効中"
+msgstr "観戦中を有効にする"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:18
 msgid "Enable even playing in warmup"
@@ -5917,11 +5985,11 @@ msgstr "テキスト / アイコン率"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
 msgid "Hide spawned items"
-msgstr ""
+msgstr "現れたアイテムを隠す"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:37
 msgid "Hide big armor and health"
-msgstr ""
+msgstr "大きな鎧と健康を隠す"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
 msgid "Dynamic size"
@@ -5929,11 +5997,11 @@ msgstr "ダイナミックサイズ:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qh:6
 msgid "Items Time Panel"
-msgstr ""
+msgstr "アイテムの時刻パネル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qh:6
 msgid "Mod Icons Panel"
-msgstr ""
+msgstr "MODアイコンパネル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:17
 msgid "Notifications:"
@@ -5941,19 +6009,19 @@ msgstr "通知:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:20
 msgid "Also print notifications to the console"
-msgstr ""
+msgstr "コンソールにも通知を印刷する"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:23
 msgid "Flip notify order"
-msgstr ""
+msgstr "通知の順序を逆にする"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:26
 msgid "Entry lifetime:"
-msgstr ""
+msgstr "通知を表示する:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_notification.qc:30
 msgid "Entry fadetime:"
-msgstr ""
+msgstr "通知の退色を表示する:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_notification.qh:6
 msgid "Notification Panel"
@@ -5966,49 +6034,49 @@ msgstr "有効にする"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:17
 msgid "Enable even observing"
-msgstr ""
+msgstr "観察さえに有効にする"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:18
 msgid "Enable only in Race/CTS"
-msgstr ""
+msgstr "レース / CTSでのみ有効にする"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:24
 msgid "Status bar"
-msgstr ""
+msgstr "ステータスバー"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:26
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:67
 msgid "Left align"
-msgstr ""
+msgstr "左揃え"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:27
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:73
 msgid "Right align"
-msgstr ""
+msgstr "右揃え"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:28
 msgid "Inward align"
-msgstr ""
+msgstr "内揃え"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:29
 msgid "Outward align"
-msgstr ""
+msgstr "外揃え"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:33
 msgid "Flip speed/acceleration positions"
-msgstr ""
+msgstr "速度/加速位置を逆にする"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:37
 msgid "Speed:"
-msgstr ""
+msgstr "速度:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:38
 msgid "Include vertical speed"
-msgstr ""
+msgstr "垂直速度を含める"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:49
 msgid "Speed unit:"
-msgstr ""
+msgstr "速度単位:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:51
 msgid "qu/s"
@@ -6032,56 +6100,56 @@ msgstr "ノット"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:57
 msgid "Show"
-msgstr ""
+msgstr "表示する"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:60
 msgid "Top speed"
-msgstr ""
+msgstr "トップ速度"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:66
 msgid "Acceleration:"
-msgstr ""
+msgstr "加速"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:67
 msgid "Include vertical acceleration"
-msgstr ""
+msgstr "垂直加速度を含める"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qh:6
 msgid "Physics Panel"
-msgstr ""
+msgstr "物理パネル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qh:6
 msgid "Powerups Panel"
-msgstr ""
+msgstr "パワーアップパネル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:16
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:17
 msgid "Always enable"
-msgstr ""
+msgstr "常に有効にする"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:23
 msgid "Forced aspect:"
-msgstr ""
+msgstr "強制アスペクト:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qh:6
 msgid "Pressed Keys Panel"
-msgstr ""
+msgstr "押されたキーパネル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_quickmenu.qh:6
 msgid "Quick Menu Panel"
-msgstr ""
+msgstr "クイックメニューパネル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_racetimer.qh:6
 msgid "Race Timer Panel"
-msgstr ""
+msgstr "レースタイマーパネル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:16
 msgid "Enable in team games"
-msgstr ""
+msgstr "チームゲームで有効にする"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:23
 msgid "Radar:"
-msgstr ""
+msgstr "レーダー:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:26
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:68
@@ -6094,59 +6162,59 @@ msgstr ""
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:124
 #: qcsrc/menu/xonotic/util.qc:792
 msgid "Alpha:"
-msgstr ""
+msgstr "アルファ:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:30
 msgid "Rotation:"
-msgstr ""
+msgstr "回転:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:32
 msgid "Forward"
-msgstr ""
+msgstr "前方"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:33
 msgid "West"
-msgstr ""
+msgstr "西"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:34
 msgid "South"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:35
 msgid "East"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:36
 msgid "North"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:40
 msgid "Scale:"
-msgstr ""
+msgstr "スケール:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:44
 msgid "Zoom mode:"
-msgstr ""
+msgstr "ズームモード:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:46
 msgid "Zoomed in"
-msgstr ""
+msgstr "ズームした内"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:47
 msgid "Zoomed out"
-msgstr ""
+msgstr "ズームした外"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:48
 msgid "Always zoomed"
-msgstr ""
+msgstr "常にズームした"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:49
 msgid "Never zoomed"
-msgstr ""
+msgstr "決してズームした"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qh:6
 msgid "Radar Panel"
-msgstr ""
+msgstr "レーダーパネル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:17
 msgid "Score:"
@@ -6159,43 +6227,43 @@ msgstr "ランキング:"
 #: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:21
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:58
 msgid "Off"
-msgstr ""
+msgstr "無効"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:22
 msgid "And me"
-msgstr ""
+msgstr "私も"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:23
 msgid "Pure"
-msgstr ""
+msgstr "純粋"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_score.qh:6
 msgid "Score Panel"
-msgstr ""
+msgstr "得点パネル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_timer.qc:16
 msgid "Timer:"
-msgstr ""
+msgstr "タイマー:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_timer.qc:19
 msgid "Show elapsed time"
-msgstr ""
+msgstr "経過時間を表示する:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_timer.qh:6
 msgid "Timer Panel"
-msgstr ""
+msgstr "タイマーパネル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_vote.qc:17
 msgid "Alpha after voting:"
-msgstr ""
+msgstr "投票後のアルファ:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_vote.qh:6
 msgid "Vote Panel"
-msgstr ""
+msgstr "投票パネル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:22
 msgid "Fade out after:"
-msgstr ""
+msgstr "退色後:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:24
 #: qcsrc/menu/xonotic/dialog_settings_audio.qc:167
@@ -6211,35 +6279,35 @@ msgstr "%ds"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:30
 msgid "Fade effect:"
-msgstr ""
+msgstr "退色効果:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:33
 msgid "EF^None"
-msgstr ""
+msgstr "なし"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:34
 msgid "Alpha"
-msgstr ""
+msgstr "アルファ"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:35
 msgid "Slide"
-msgstr ""
+msgstr "スライド"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:36
 msgid "EF^Both"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:40
 msgid "Weapon icons:"
-msgstr ""
+msgstr "武器アイコン:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:43
 msgid "Show only owned weapons"
-msgstr ""
+msgstr "所有している武器のみを表示する"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:54
 msgid "Show weapon ID as:"
-msgstr ""
+msgstr "武器IDを次として表示する:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:55
 msgid "SHOWAS^None"
@@ -6251,35 +6319,35 @@ msgstr "番号"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:57
 msgid "Bind"
-msgstr ""
+msgstr "割り当てられたキー"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:60
 msgid "Weapon ID scale:"
-msgstr ""
+msgstr "武器IDスケール:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:66
 msgid "Show Accuracy"
-msgstr ""
+msgstr "精度を表示する"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:67
 msgid "Show Ammo"
-msgstr ""
+msgstr "弾薬を表示する"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:70
 msgid "Ammo bar alpha:"
-msgstr ""
+msgstr "弾薬バーアルファ:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:76
 msgid "Ammo bar color:"
-msgstr ""
+msgstr "弾薬バーの色:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qh:6
 msgid "Weapons Panel"
-msgstr ""
+msgstr "武器パネル"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:19
 msgid "HUD skins"
-msgstr ""
+msgstr "HUDスキン"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:22
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:173
@@ -6300,11 +6368,11 @@ msgstr "更新する"
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:33
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:28
 msgid "Set skin"
-msgstr ""
+msgstr "スキンを設定する"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:37
 msgid "Save current skin"
-msgstr ""
+msgstr "現在のスキンを保存する"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:46
 msgid "Panel background defaults:"
@@ -6318,74 +6386,74 @@ msgstr "背景:"
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:60
 #: qcsrc/menu/xonotic/util.qc:783
 msgid "Border size:"
-msgstr ""
+msgstr "ボーダーサイズ:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:75
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:114
 msgid "Team color:"
-msgstr ""
+msgstr "チームカラー:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:83
 #: qcsrc/menu/xonotic/util.qc:809
 msgid "Test team color in configure mode"
-msgstr ""
+msgstr "構成モードでのチームカラーのテストする"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:86
 #: qcsrc/menu/xonotic/util.qc:812
 msgid "Padding:"
-msgstr ""
+msgstr "パディング:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:93
 msgid "HUD Dock:"
-msgstr ""
+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"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:97
 msgid "DOCK^Medium"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:98
 msgid "DOCK^Large"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:121
 msgid "Grid settings:"
-msgstr ""
+msgstr "グリッド設定:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:124
 msgid "Snap panels to grid"
-msgstr ""
+msgstr "グリッドパネルにスナップする:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:127
 msgid "Grid size:"
-msgstr ""
+msgstr "グリッドサイズ:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:129
 msgid "X:"
-msgstr ""
+msgstr "X:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:136
 msgid "Y:"
-msgstr ""
+msgstr "Y:"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:145
 msgid "Exit setup"
-msgstr ""
+msgstr "出口のセットアップ"
 
 #: qcsrc/menu/xonotic/dialog_hudsetup_exit.qh:6
 msgid "Panel HUD Setup"
-msgstr ""
+msgstr "パネルHUDセットアップ"
 
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:13
 msgid "Monster:"
-msgstr ""
+msgstr "モンスター:"
 
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:22
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:20
@@ -6418,20 +6486,20 @@ msgstr "動かない"
 
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:31
 msgid "Colors:"
-msgstr ""
+msgstr "色:"
 
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:33
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:39
 msgid "Set skin:"
-msgstr ""
+msgstr "スキンを設定する:"
 
 #: qcsrc/menu/xonotic/dialog_monstertools.qh:6
 msgid "Monster Tools"
-msgstr ""
+msgstr "モンスター用具"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer.qc:14
 msgid "Servers"
-msgstr ""
+msgstr "サーバー"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer.qc:15
 msgid "Find servers to play on"
@@ -6470,11 +6538,11 @@ msgstr "デフォルト"
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:40
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:60
 msgid "Unlimited"
-msgstr ""
+msgstr "無制限"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:74
 msgid "Gametype"
-msgstr ""
+msgstr "ゲームモード"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:79
 msgid "Time limit:"
@@ -6500,27 +6568,27 @@ msgstr "1分"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:101
 msgid "TIMLIM^Infinite"
-msgstr ""
+msgstr "無限"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:109
 msgid "Teams:"
-msgstr ""
+msgstr "チーム数:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:112
 msgid "2 teams"
-msgstr ""
+msgstr "2チーム"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:113
 msgid "3 teams"
-msgstr ""
+msgstr "3チーム"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:114
 msgid "4 teams"
-msgstr ""
+msgstr "4チーム"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:117
 msgid "Player slots:"
-msgstr ""
+msgstr "選手スロット:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:119
 msgid ""
@@ -6530,15 +6598,15 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:121
 msgid "Number of bots:"
-msgstr ""
+msgstr "ボット数:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:123
 msgid "Amount of bots on your server"
-msgstr ""
+msgstr "サーバーでボットの量"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:125
 msgid "Bot skill:"
-msgstr ""
+msgstr "ボット技術:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:128
 msgid "Specify how experienced the bots will be"
@@ -6546,43 +6614,43 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:129
 msgid "Botlike"
-msgstr ""
+msgstr "ボット"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:130
 msgid "Beginner"
-msgstr ""
+msgstr "初心者"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:131
 msgid "You will win"
-msgstr ""
+msgstr "あなたは勝つ"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:132
 msgid "You can win"
-msgstr ""
+msgstr "あなたは勝てる"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:133
 msgid "You might win"
-msgstr ""
+msgstr "あなたは勝つかもしれない"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:134
 msgid "Advanced"
-msgstr ""
+msgstr "高度"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:135
 msgid "Expert"
-msgstr ""
+msgstr "専門家"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:136
 msgid "Pro"
-msgstr ""
+msgstr "プロ"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:137
 msgid "Assassin"
-msgstr ""
+msgstr "暗殺者"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:138
 msgid "Unhuman"
-msgstr ""
+msgstr "非人間"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:139
 msgid "Godlike"
@@ -6590,15 +6658,15 @@ msgstr "神"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:155
 msgid "Mutators..."
-msgstr ""
+msgstr "ミューテーター..."
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:156
 msgid "Mutators and weapon arenas"
-msgstr ""
+msgstr "ミューテーターと武器アリーナ"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:165
 msgid "Maplist"
-msgstr ""
+msgstr "マップリスト"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:175
 msgid ""
@@ -6608,7 +6676,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:184
 msgid "Add shown"
-msgstr ""
+msgstr "表示された者を追加する"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:185
 msgid "Add the maps shown in the list to your selection"
@@ -6616,7 +6684,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:188
 msgid "Remove shown"
-msgstr ""
+msgstr "表示された者を全て削除する"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:189
 msgid "Remove the maps shown in the list from your selection"
@@ -6624,7 +6692,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:194
 msgid "Add all"
-msgstr ""
+msgstr "全て追加する"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:195
 msgid "Add every available map to your selection"
@@ -6632,7 +6700,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:198
 msgid "Remove all"
-msgstr ""
+msgstr "全て削除する"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:199
 msgid "Remove all the maps from your selection"
@@ -6988,11 +7056,11 @@ msgstr "MOD^デフォルト"
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:121
 #, c-format
 msgid "%d modified"
-msgstr ""
+msgstr "%d 変更した"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:121
 msgid "Official"
-msgstr ""
+msgstr "公式"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:129
 msgid "N/A (auth library missing, can't connect)"
@@ -7040,44 +7108,44 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:178
 msgid "Hostname:"
-msgstr ""
+msgstr "ホスト名:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:192
 msgid "Gametype:"
-msgstr ""
+msgstr "ゲームモード:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:197
 msgid "Map:"
-msgstr ""
+msgstr "マップ:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:202
 msgid "Mod:"
-msgstr ""
+msgstr "MOD:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:207
 msgid "Version:"
-msgstr ""
+msgstr "バージョン:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:212
 msgid "Settings:"
-msgstr ""
+msgstr "設定:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:219
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:251
 msgid "Players:"
-msgstr ""
+msgstr "選手:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:224
 msgid "Bots:"
-msgstr ""
+msgstr "ボット:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:229
 msgid "Free slots:"
-msgstr ""
+msgstr "自由スロット:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:235
 msgid "Encryption:"
-msgstr ""
+msgstr "暗号化:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:240
 msgid "ID:"
@@ -7085,39 +7153,40 @@ msgstr "ID:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:245
 msgid "Key:"
-msgstr ""
+msgstr "キー:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qh:7
 msgid "Server Information"
-msgstr ""
+msgstr "サーバー情報"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media.qc:25
 msgid "Demos"
-msgstr ""
+msgstr "デモ"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media.qc:26
 msgid "Screenshots"
-msgstr ""
+msgstr "スクリーンショット"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media.qc:27
 msgid "Music Player"
-msgstr ""
+msgstr "音楽プレーヤー"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:48
 msgid "Auto record demos"
-msgstr ""
+msgstr "自動録音デモ"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:57
 msgid "Timedemo"
-msgstr ""
+msgstr "最高速度でデモを再生する"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:58
 msgid "Benchmark how fast your computer can run the highlighted demo"
 msgstr ""
+"お使いのコンピューターが強調表示されたデモを実行できる速度をベンチマークする"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:62
 msgid "DEMO^Play"
-msgstr ""
+msgstr "再生する"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:13
 msgid "Playing a demo will disconnect you from the current match."
@@ -7158,15 +7227,15 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:60
 msgid "MUSICPL^Stop"
-msgstr ""
+msgstr "停止する"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:63
 msgid "MUSICPL^Play"
-msgstr ""
+msgstr "再生する"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:66
 msgid "MUSICPL^Pause"
-msgstr ""
+msgstr "一時停止する"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:69
 msgid "MUSICPL^Prev"
@@ -7178,15 +7247,15 @@ msgstr "次"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:76
 msgid "MUSICPL^Remove"
-msgstr ""
+msgstr "削除する"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:79
 msgid "MUSICPL^Remove all"
-msgstr ""
+msgstr "全て削除する"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:41
 msgid "Auto screenshot scoreboard"
-msgstr ""
+msgstr "自動スクリーンショット得点表"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:62
 msgid "Open in the viewer"
@@ -7194,7 +7263,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:137
 msgid "Reset"
-msgstr ""
+msgstr "リセット"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:142
 msgid "Previous"
@@ -7621,7 +7690,7 @@ msgstr "時刻アナウンサー:"
 
 #: qcsrc/menu/xonotic/dialog_settings_audio.qc:158
 msgid "WRN^Disabled"
-msgstr ""
+msgstr "無効"
 
 #: qcsrc/menu/xonotic/dialog_settings_audio.qc:160
 msgid "5 minutes"
@@ -7915,7 +7984,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"
@@ -8051,12 +8120,12 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:31
 msgid "No crosshair"
-msgstr ""
+msgstr "十字線なし"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:33
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:62
 msgid "Per weapon"
-msgstr ""
+msgstr "武器ごと"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:34
 msgid ""
@@ -8072,7 +8141,7 @@ msgstr "サイズ:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:64
 msgid "By health"
-msgstr ""
+msgstr "健康で"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:76
 msgid "Use rings to indicate weapon status"
@@ -8092,7 +8161,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:125
 msgid "Hit testing:"
-msgstr ""
+msgstr "照準テスト:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:128
 msgid ""
@@ -8103,15 +8172,15 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:129
 msgid "HTTST^Disabled"
-msgstr ""
+msgstr "無効"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:130
 msgid "HTTST^TrueAim"
-msgstr ""
+msgstr "真の照準"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:131
 msgid "HTTST^Enemies"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:136
 msgid "Blur crosshair if the shot is obstructed"
@@ -8161,7 +8230,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:64
 msgid "Waypoints"
-msgstr ""
+msgstr "ウェイポイント"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:66
 msgid "Display waypoint markers for objectives on the map"
@@ -8222,12 +8291,12 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:142
 msgid "Decolorize:"
-msgstr ""
+msgstr "脱色:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:146
 #: qcsrc/menu/xonotic/keybinder.qc:113
 msgid "Teamplay"
-msgstr ""
+msgstr "チームプレイ"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:154
 msgid "Only when near crosshair"
@@ -8296,7 +8365,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"
@@ -8730,7 +8799,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"
@@ -8867,7 +8936,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:93
 msgid "MAXFPS^Unlimited"
-msgstr ""
+msgstr "無制限"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:96
 msgid "Target:"
@@ -8875,7 +8944,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:98
 msgid "TRGT^Disabled"
-msgstr ""
+msgstr "無効"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:109
 msgid "Idle limit:"
@@ -8883,7 +8952,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:115
 msgid "IDLFPS^Unlimited"
-msgstr ""
+msgstr "無制限"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:119
 msgid "Save processing time for other apps"
@@ -8891,15 +8960,15 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:122
 msgid "Show frames per second"
-msgstr ""
+msgstr "FPSを表示する"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:123
 msgid "Show your rendered frames per second"
-msgstr ""
+msgstr "レンダリングしたFPSを表示する"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:128
 msgid "Menu tooltips:"
-msgstr ""
+msgstr "メニューツールチップ:"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:130
 msgid ""
@@ -8909,11 +8978,11 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:131
 msgid "TLTIP^Disabled"
-msgstr ""
+msgstr "無効"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:132
 msgid "TLTIP^Standard"
-msgstr ""
+msgstr "標準"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:133
 msgid "TLTIP^Advanced"
@@ -8942,11 +9011,11 @@ msgstr ""
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:150
 #: qcsrc/menu/xonotic/dialog_settings_misc_reset.qh:6
 msgid "Factory reset"
-msgstr ""
+msgstr "工場リセット"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:31
 msgid "Cvar filter:"
-msgstr ""
+msgstr "CVARフィルター:"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:38
 msgid "Modified cvars only"
@@ -8982,15 +9051,15 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:23
 msgid "Menu Skins"
-msgstr ""
+msgstr "メニュースキン"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:62
 msgid "Text Language"
-msgstr ""
+msgstr "テキスト言語"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:67
 msgid "Set language"
-msgstr ""
+msgstr "言語を設定"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:72
 msgid "Disable gore effects and harsh language"
@@ -9010,11 +9079,11 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:16
 msgid "Disconnect now"
-msgstr ""
+msgstr "今すぐ切断"
 
 #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:17
 msgid "Switch language"
-msgstr ""
+msgstr "言語を変更"
 
 #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qh:6
 msgid "Warning"
@@ -9022,51 +9091,51 @@ msgstr "警告"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:33
 msgid "Resolution:"
-msgstr ""
+msgstr "解像度:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:37
 msgid "Font/UI size:"
-msgstr ""
+msgstr "フォント / UIサイズ:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:39
 msgid "SZ^Unreadable"
-msgstr ""
+msgstr "読めない"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:40
 msgid "SZ^Tiny"
-msgstr ""
+msgstr "小っぽけ"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:41
 msgid "SZ^Little"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:42
 msgid "SZ^Small"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:43
 msgid "SZ^Medium"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:44
 msgid "SZ^Large"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:45
 msgid "SZ^Huge"
-msgstr ""
+msgstr "でかい"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:46
 msgid "SZ^Gigantic"
-msgstr ""
+msgstr "巨大"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:47
 msgid "SZ^Colossal"
-msgstr ""
+msgstr "膨大"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:51
 msgid "Color depth:"
-msgstr ""
+msgstr "色深度:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:53
 msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
@@ -9082,7 +9151,7 @@ msgstr "32bit"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:59
 msgid "Full screen"
-msgstr ""
+msgstr "フルスケ"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:61
 msgid "Vertical Synchronization"
@@ -9112,7 +9181,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:74
 msgid "ANISO^Disabled"
-msgstr ""
+msgstr "無効"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:75
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:86
@@ -9144,7 +9213,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:85
 msgid "AA^Disabled"
-msgstr ""
+msgstr "無効"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:92
 msgid "High-quality frame buffer"
@@ -9162,7 +9231,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:100
 msgid "DF^Disabled"
-msgstr ""
+msgstr "無効"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:101
 msgid "DF^World"
@@ -9170,11 +9239,11 @@ msgstr "マップ"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:102
 msgid "DF^All"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:105
 msgid "Vertex Buffer Objects (VBOs)"
-msgstr ""
+msgstr "頂点バッファーオブジェクト (VBOs)"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:108
 msgid "VBO^Off"
@@ -9182,7 +9251,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:109
 msgid "Vertices, some Tris (compatible)"
-msgstr ""
+msgstr "頂点、いくつかの三角形 (互換性)"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:110
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:114
@@ -9194,31 +9263,31 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:113
 msgid "Vertices"
-msgstr ""
+msgstr "頂点"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:115
 msgid "Vertices and Triangles"
-msgstr ""
+msgstr "頂点と三角形"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:119
 msgid "Brightness:"
-msgstr ""
+msgstr "明るさ:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:121
 msgid "Brightness of black"
-msgstr ""
+msgstr "黒の明るさ:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:123
 msgid "Contrast:"
-msgstr ""
+msgstr "コントラスト:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:125
 msgid "Brightness of white"
-msgstr ""
+msgstr "白の明るさ:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:127
 msgid "Gamma:"
-msgstr ""
+msgstr "ガンマ:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:130
 msgid ""
@@ -9228,7 +9297,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:133
 msgid "Contrast boost:"
-msgstr ""
+msgstr "コントラストの増加:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:136
 msgid "By how much to multiply the contrast in dark areas"
@@ -9236,7 +9305,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:139
 msgid "Saturation:"
-msgstr ""
+msgstr "飽和:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:142
 msgid ""
@@ -9246,7 +9315,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:146
 msgid "LIT^Ambient:"
-msgstr ""
+msgstr "アンビエント:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:148
 msgid ""
@@ -9256,7 +9325,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:150
 msgid "Intensity:"
-msgstr ""
+msgstr "強度:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:152
 msgid "Global rendering brightness"
@@ -9274,7 +9343,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:158
 msgid "Use OpenGL 2.0 shaders (GLSL)"
-msgstr ""
+msgstr "OpenGL 2.0 シェーダー(GLSL)を使う"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:163
 msgid "Psycho coloring (easter egg)"
@@ -9294,19 +9363,19 @@ msgstr "???"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:129
 msgid "Campaign Difficulty:"
-msgstr ""
+msgstr "キャンペーンの難しさ:"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:130
 msgid "CSKL^Easy"
-msgstr ""
+msgstr "簡単"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:131
 msgid "CSKL^Medium"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:132
 msgid "CSKL^Hard"
-msgstr ""
+msgstr "難い"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:134
 msgid "Start Singleplayer!"
@@ -9338,7 +9407,7 @@ msgstr "赤"
 
 #: qcsrc/menu/xonotic/dialog_teamselect.qc:38
 msgid "blue"
-msgstr "青"
+msgstr "青"
 
 #: qcsrc/menu/xonotic/dialog_teamselect.qc:39
 msgid "yellow"
@@ -9355,7 +9424,7 @@ msgstr "観戦する"
 
 #: qcsrc/menu/xonotic/dialog_teamselect.qh:7
 msgid "Team Selection"
-msgstr ""
+msgstr "チームの選択"
 
 #: qcsrc/menu/xonotic/dialog_uid2name.qc:10
 msgid "Allow player statistics to use your nickname?"
@@ -9379,7 +9448,7 @@ msgstr "動き中"
 
 #: qcsrc/menu/xonotic/keybinder.qc:36
 msgid "forward"
-msgstr ""
+msgstr "前方"
 
 #: qcsrc/menu/xonotic/keybinder.qc:37
 msgid "backpedal"
@@ -9499,7 +9568,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/keybinder.qc:109
 msgid "disconnect"
-msgstr ""
+msgstr "切断"
 
 #: qcsrc/menu/xonotic/keybinder.qc:110
 msgid "quit"
index fb71603..42b4896 100644 (file)
@@ -13,8 +13,8 @@ pl    "Polish" "Polski" 72%
 pt    "Portuguese" "Português" 84%
 pt_BR "Portuguese (Brazil)" "Português (Brasil)" 99%
 ro    "Romanian" "Romana" 74%
-fi    "Finnish" "Suomi" 98%
-ja_JP "ja_JP" "ja_JP" 57%
+fi    "Finnish" "Suomi" 100%
+ja_JP "ja_JP" "ja_JP" 81%
 el    "Greek" "Ελληνική" 47%
 be    "Belarusian" "Беларуская" 54%
 bg    "Bulgarian" "Български" 59%
index 99456bd..f08378b 100644 (file)
@@ -133,6 +133,9 @@ void CSQCPlayer_ModelAppearance_PostUpdate(entity this)
 }
 void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer)
 {
+       int cm = this.forceplayermodels_savecolormap;
+       cm = (cm >= 1024) ? cm : (entcs_GetClientColors(cm - 1) + 1024);
+
        if(MUTATOR_CALLHOOK(ForcePlayermodels_Skip, this, islocalplayer))
                goto skipforcemodels;
 
@@ -193,9 +196,6 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer)
 
        // apply it
        bool isfriend;
-       int cm;
-       cm = this.forceplayermodels_savecolormap;
-       cm = (cm >= 1024) ? cm : (entcs_GetClientColors(cm - 1) + 1024);
 
        if(teamplay)
                isfriend = (cm == 1024 + 17 * myteam);
@@ -227,6 +227,11 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer)
                this.skin = this.forceplayermodels_saveskin;
        }
 
+       LABEL(skipforcemodels)
+
+       if(MUTATOR_CALLHOOK(ForcePlayercolors_Skip, this, islocalplayer))
+               goto skipforcecolors;
+
        // forceplayercolors too
        if(teamplay)
        {
@@ -280,7 +285,7 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer)
                        this.colormap = player_localnum + 1;
        }
 
-       LABEL(skipforcemodels)
+       LABEL(skipforcecolors)
 
        if((this.csqcmodel_effects & CSQCMODEL_EF_RESPAWNGHOST) && !autocvar_cl_respawn_ghosts_keepcolors)
        {
index 363465d..83897df 100644 (file)
@@ -4,7 +4,6 @@
 #include <client/miscfunctions.qh>
 
 #include <common/ent_cs.qh>
-#include <common/mapinfo.qh>
 
 // Info messages (#14)
 
@@ -122,22 +121,15 @@ void HUD_InfoMessages()
                                InfoMessage(s);
                        }
 
-                       MUTATOR_CALLHOOK(DrawInfoMessages, pos, mySize);
+                       bool mutator_returnvalue = MUTATOR_CALLHOOK(DrawInfoMessages, pos, mySize, img_curr_group);
+                       pos = M_ARGV(0, vector);
+                       img_curr_group = M_ARGV(2, int);
 
-                       if(!warmup_stage && ISGAMETYPE(LMS))
+                       if(!mutator_returnvalue)
                        {
-                               entity sk;
-                               sk = playerslots[player_localnum];
-                               if(sk.(scores(ps_primary)) >= 666)
-                                       s = _("^1Match has already begun");
-                               else if(sk.(scores(ps_primary)) > 0)
-                                       s = _("^1You have no more lives left");
-                               else
-                                       s = sprintf(_("^1Press ^3%s^1 to join"), getcommandkey(_("jump"), "+jump"));
-                       }
-                       else
                                s = sprintf(_("^1Press ^3%s^1 to join"), getcommandkey(_("jump"), "+jump"));
-                       InfoMessage(s);
+                               InfoMessage(s);
+                       }
                }
 
                if (time < STAT(GAMESTARTTIME))
index 0a8b8cf..17ea987 100644 (file)
 #include <common/ent_cs.qh>
 #include <common/scores.qh>
 #include <common/gamemodes/_mod.qh>
+#include <common/gamemodes/gamemode/ctf/cl_ctf.qh>
 
 // Mod icons (#10)
 
 void HUD_ModIcons_Export(int fh)
 {
        // allow saving cvars that aesthetically change the panel into hud skin files
-       HUD_Write_Cvar("hud_panel_modicons_ca_layout");
-       HUD_Write_Cvar("hud_panel_modicons_dom_layout");
-       HUD_Write_Cvar("hud_panel_modicons_freezetag_layout");
-}
-
-void DrawCAItem(vector myPos, vector mySize, float aspect_ratio, int layout, int i)
-{
-       TC(int, layout); TC(int, i);
-       int stat = -1;
-       string pic = "";
-       vector color = '0 0 0';
-       switch(i)
-       {
-               case 0: stat = STAT(REDALIVE); pic = "player_red"; color = '1 0 0'; break;
-               case 1: stat = STAT(BLUEALIVE); pic = "player_blue"; color = '0 0 1'; break;
-               case 2: stat = STAT(YELLOWALIVE); pic = "player_yellow"; color = '1 1 0'; break;
-               default:
-               case 3: stat = STAT(PINKALIVE); pic = "player_pink"; color = '1 0 1'; break;
-       }
-
-       if(mySize.x/mySize.y > aspect_ratio)
-       {
-               i = aspect_ratio * mySize.y;
-               myPos.x = myPos.x + (mySize.x - i) / 2;
-               mySize.x = i;
-       }
-       else
-       {
-               i = 1/aspect_ratio * mySize.x;
-               myPos.y = myPos.y + (mySize.y - i) / 2;
-               mySize.y = i;
-       }
-
-       if(layout)
-       {
-               drawpic_aspect_skin(myPos, pic, vec2(0.5 * mySize.x, mySize.y), '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
-               drawstring_aspect(myPos + eX * 0.5 * mySize.x, ftos(stat), vec2(0.5 * mySize.x, mySize.y), color, panel_fg_alpha, DRAWFLAG_NORMAL);
-       }
-       else
-               drawstring_aspect(myPos, ftos(stat), mySize, color, panel_fg_alpha, DRAWFLAG_NORMAL);
-}
-
-// Clan Arena and Freeze Tag HUD modicons
-void HUD_Mod_CA(vector myPos, vector mySize)
-{
-       mod_active = 1; // required in each mod function that always shows something
-
-       int layout;
-       if(ISGAMETYPE(CA))
-               layout = autocvar_hud_panel_modicons_ca_layout;
-       else //if(ISGAMETYPE(FREEZETAG))
-               layout = autocvar_hud_panel_modicons_freezetag_layout;
-       int rows, columns;
-       float aspect_ratio;
-       aspect_ratio = (layout) ? 2 : 1;
-       rows = HUD_GetRowCount(team_count, mySize, aspect_ratio);
-       columns = ceil(team_count/rows);
-
-       int i;
-       float row = 0, column = 0;
-       vector pos = '0 0 0', itemSize;
-       itemSize = vec2(mySize.x / columns, mySize.y / rows);
-       for(i=0; i<team_count; ++i)
-       {
-               pos.x = myPos.x + column * itemSize.x;
-               pos.y = myPos.y + row * itemSize.y;
-
-               DrawCAItem(pos, itemSize, aspect_ratio, layout, i);
-
-               ++row;
-               if(row >= rows)
-               {
-                       row = 0;
-                       ++column;
-               }
-       }
-}
-
-// Race/CTS HUD mod icons
-float crecordtime_prev; // last remembered crecordtime
-float crecordtime_change_time; // time when crecordtime last changed
-float srecordtime_prev; // last remembered srecordtime
-float srecordtime_change_time; // time when srecordtime last changed
-
-float race_status_time;
-int race_status_prev;
-string race_status_name_prev;
-
-// Check if the given name already exist in race rankings? In that case, where? (otherwise return 0)
-int race_CheckName(string net_name)
-{
-       int rank = 0;
-       string zoned_name = strzone(strdecolorize(entcs_GetName(player_localnum)));
-       for (int i = RANKINGS_CNT - 1; i >= 0; --i)
-               if (strdecolorize(grecordholder[i]) == zoned_name)
-               {
-                       rank = i + 1;
-                       break;
-               }
-       strfree(zoned_name);
-       return rank;
-}
 
-void race_showTime(string text, vector pos, vector timeText_ofs, float theTime, vector textSize, float f)
-{
-       drawstring_aspect(pos, text, textSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
-       drawstring_aspect(pos + timeText_ofs, TIME_ENCODED_TOSTRING(theTime), textSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
-       if (f < 1) {
-               drawstring_aspect_expanding(pos, text, textSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f);
-               drawstring_aspect_expanding(pos + timeText_ofs, TIME_ENCODED_TOSTRING(theTime), textSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f);
-       }
-}
-
-void HUD_Mod_Race(vector pos, vector mySize)
-{
-       entity me = playerslots[player_localnum];
-       float score = me.(scores(ps_primary));
-
-       if(!(scores_flags(ps_primary) & SFL_TIME) || teamplay) // race/cts record display on HUD
-       {
-               mod_active = 0; // hide it in this case!
-               return; // no records in the actual race
-       }
-
-       mod_active = 1;
-
-       // clientside personal record
-       string rr;
-       if(ISGAMETYPE(CTS))
-               rr = CTS_RECORD;
-       else
-               rr = RACE_RECORD;
-       float t = stof(db_get(ClientProgsDB, strcat(shortmapname, rr, "time")));
-
-       if(score && (score < t || !t)) {
-               db_put(ClientProgsDB, strcat(shortmapname, rr, "time"), ftos(score));
-               if(autocvar_cl_autodemo_delete_keeprecords)
-               {
-                       float f = autocvar_cl_autodemo_delete;
-                       f &= ~1;
-                       cvar_set("cl_autodemo_delete", ftos(f)); // don't delete demo with new record!
-               }
-       }
-
-       if(t != crecordtime_prev) {
-               crecordtime_prev = t;
-               crecordtime_change_time = time;
-       }
-
-       vector textPos, medalPos;
-       float squareSize;
-       if(mySize.x > mySize.y) {
-               // text on left side
-               squareSize = min(mySize.y, mySize.x/2);
-               vector ofs = vec2(0.5 * max(0, mySize.x/2 - squareSize), 0.5 * (mySize.y - squareSize));
-               textPos = pos + ofs;
-               ofs.x += 0.5 * mySize.x;
-               medalPos = pos + ofs;
-       } else {
-               // text on top
-               squareSize = min(mySize.x, mySize.y/2);
-               vector ofs = vec2(0.5 * (mySize.x - squareSize), 0.5 * max(0, mySize.y/2 - squareSize));
-               textPos = pos + ofs;
-               ofs.y += 0.5 * mySize.y;
-               medalPos = pos + ofs;
-       }
-       vector textSize = vec2(squareSize, 0.25 * squareSize);
-
-       race_showTime(_("Personal best"), textPos, eY * 0.25 * squareSize, t, textSize, time - crecordtime_change_time);
-
-       // server record
-       t = race_server_record;
-       if(t != srecordtime_prev) {
-               srecordtime_prev = t;
-               srecordtime_change_time = time;
-       }
-
-       textPos += eY * 0.5 * squareSize;
-       race_showTime(_("Server best"), textPos, eY * 0.25 * squareSize, t, textSize, time - srecordtime_change_time);
-
-       if (race_status != race_status_prev || race_status_name != race_status_name_prev) {
-               race_status_time = time + 5;
-               race_status_prev = race_status;
-               strcpy(race_status_name_prev, race_status_name);
-       }
-
-       // race "awards"
-       float a = bound(0, race_status_time - time, 1);
-       string s = textShortenToWidth(ColorTranslateRGB(race_status_name), squareSize, '1 1 0' * 0.1 * squareSize, stringwidth_colors);
-
-       float rank = 0;
-       if(race_status > 0)
-               rank = race_CheckName(race_status_name);
-       string rankname = count_ordinal(rank);
-       vector namepos = medalPos + '0 0.8 0' * squareSize;
-       vector rankpos = medalPos + '0 0.15 0' * squareSize;
-
-       if(race_status == 0)
-               drawpic_aspect_skin(medalPos, "race_newfail", '1 1 0' * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
-       else if(race_status == 1) {
-               drawpic_aspect_skin(medalPos + '0.1 0 0' * squareSize, "race_newtime", '1 1 0' * 0.8 * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
-               drawcolorcodedstring_aspect(namepos, s, '1 0.2 0' * squareSize, panel_fg_alpha * a, DRAWFLAG_NORMAL);
-               drawstring_aspect(rankpos, rankname, '1 0.15 0' * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
-       } else if(race_status == 2) {
-               if(strdecolorize(race_status_name) == strdecolorize(entcs_GetName(player_localnum)) || !race_myrank || race_myrank < rank)
-                       drawpic_aspect_skin(medalPos + '0.1 0 0' * squareSize, "race_newrankgreen", '1 1 0' * 0.8 * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
-               else
-                       drawpic_aspect_skin(medalPos + '0.1 0 0' * squareSize, "race_newrankyellow", '1 1 0' * 0.8 * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
-               drawcolorcodedstring_aspect(namepos, s, '1 0.2 0' * squareSize, panel_fg_alpha * a, DRAWFLAG_NORMAL);
-               drawstring_aspect(rankpos, rankname, '1 0.15 0' * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
-       } else if(race_status == 3) {
-               drawpic_aspect_skin(medalPos + '0.1 0 0' * squareSize, "race_newrecordserver", '1 1 0' * 0.8 * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
-               drawcolorcodedstring_aspect(namepos, s, '1 0.2 0' * squareSize, panel_fg_alpha * a, DRAWFLAG_NORMAL);
-               drawstring_aspect(rankpos, rankname, '1 0.15 0' * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
-       }
-
-       if (race_status_time - time <= 0) {
-               race_status_prev = -1;
-               race_status = -1;
-               strfree(race_status_name);
-               strfree(race_status_name_prev);
-       }
+       FOREACH(Gametypes, it.m_modicons_export, it.m_modicons_export(fh));
 }
 
 void HUD_ModIcons_SetFunc()
index a451f92..139f29c 100644 (file)
@@ -4,7 +4,6 @@
 #include <client/defs.qh>
 #include <client/miscfunctions.qh>
 #include <client/main.qh>
-#include <common/mapinfo.qh>
 #include <lib/csqcmodel/cl_player.qh>
 
 // Physics (#15)
@@ -38,7 +37,7 @@ void HUD_Physics()
        {
                if(!autocvar_hud_panel_physics) return;
                if(spectatee_status == -1 && (autocvar_hud_panel_physics == 1 || autocvar_hud_panel_physics == 3)) return;
-               if(autocvar_hud_panel_physics == 3 && !(ISGAMETYPE(RACE) || ISGAMETYPE(CTS))) return;
+               if(autocvar_hud_panel_physics == 3 && !MUTATOR_CALLHOOK(HUD_Physics_showoptional)) return;
        }
 
        HUD_Panel_LoadCvars();
index cd0b26e..a0a971c 100644 (file)
@@ -3,7 +3,6 @@
 #include <client/autocvars.qh>
 #include <client/defs.qh>
 #include <client/miscfunctions.qh>
-#include <common/mapinfo.qh>
 
 // Race timer (#8)
 
@@ -103,7 +102,7 @@ void HUD_RaceTimer ()
        if(!autocvar__hud_configure)
        {
                if(!autocvar_hud_panel_racetimer) return;
-               if(!(ISGAMETYPE(RACE) || ISGAMETYPE(CTS))) return;
+               if(!MUTATOR_CALLHOOK(ShowRaceTimer)) return;
                if(spectatee_status == -1) return;
        }
 
index e31aa01..59bfa1a 100644 (file)
@@ -4,7 +4,6 @@
 #include <client/defs.qh>
 #include <client/miscfunctions.qh>
 #include <common/ent_cs.qh>
-#include <common/mapinfo.qh>
 #include <client/mapvoting.qh>
 #include <client/resources.qh>
 #include <client/teamradar.qh>
@@ -353,10 +352,12 @@ void HUD_Radar()
 
        IL_EACH(g_radarlinks, true, draw_teamradar_link(it.origin, it.velocity, it.team));
 
+       bool mutator_returnvalue = MUTATOR_CALLHOOK(TeamRadar_Draw); // TODO: allow players to show on the radar as well!
+
        IL_EACH(g_radaricons, it.teamradar_icon, {
                if ( hud_panel_radar_mouse )
                if ( GetResource(it, RES_HEALTH) >= 0 )
-               if ( it.team == myteam + 1 || ISGAMETYPE(RACE) || !teamplay )
+               if ( it.team == myteam + 1 || mutator_returnvalue || !teamplay )
                {
                        vector coord = teamradar_texcoord_to_2dcoord(teamradar_3dcoord_to_texcoord(it.origin));
                        if(vdist((mousepos - coord), <, 8))
index 10aec79..a6ec774 100644 (file)
@@ -5,7 +5,6 @@
 #include <client/miscfunctions.qh>
 #include "scoreboard.qh"
 #include <common/ent_cs.qh>
-#include <common/mapinfo.qh>
 #include <common/scores.qh>
 
 // Score (#7)
@@ -146,7 +145,7 @@ void HUD_Score()
        if(!autocvar__hud_configure)
        {
                if(!autocvar_hud_panel_score) return;
-               if(spectatee_status == -1 && (ISGAMETYPE(RACE) || ISGAMETYPE(CTS))) return;
+               if(MUTATOR_CALLHOOK(HUD_Score_show)) return;
        }
 
        HUD_Panel_LoadCvars();
index 120feea..47e08cb 100644 (file)
@@ -83,8 +83,6 @@ bool autocvar_hud_panel_scoreboard_accuracy_nocolors = false;
 float autocvar_hud_panel_scoreboard_accuracy_showdelay = 2;
 float autocvar_hud_panel_scoreboard_accuracy_showdelay_minpos = 0.75;
 
-bool autocvar_hud_panel_scoreboard_ctf_leaderboard = true;
-
 bool autocvar_hud_panel_scoreboard_dynamichud = false;
 
 float autocvar_hud_panel_scoreboard_maxheight = 0.6;
@@ -1148,7 +1146,7 @@ bool Scoreboard_WouldDraw()
                return true;
        else if (intermission == 2)
                return false;
-       else if (spectatee_status != -1 && STAT(HEALTH) <= 0 && autocvar_cl_deathscoreboard && !ISGAMETYPE(CTS)
+       else if (spectatee_status != -1 && STAT(HEALTH) <= 0 && autocvar_cl_deathscoreboard && !MUTATOR_CALLHOOK(DrawDeathScoreboard)
                && (!HUD_MinigameMenu_IsOpened() || !active_minigame))
        {
                return true;
@@ -1396,7 +1394,7 @@ vector Scoreboard_MapStats_Draw(vector pos, vector rgb, vector bg_size) {
 }
 
 
-vector Scoreboard_Rankings_Draw(vector pos, entity pl, vector rgb, vector bg_size)
+vector Scoreboard_Rankings_Draw(vector pos, string ranktitle, entity pl, vector rgb, vector bg_size)
 {
        int i;
        RANKINGS_RECEIVED_CNT = 0;
@@ -1410,7 +1408,7 @@ vector Scoreboard_Rankings_Draw(vector pos, entity pl, vector rgb, vector bg_siz
        vector hl_rgb = rgb + '0.5 0.5 0.5';
 
        pos.y += hud_fontsize.y;
-       drawstring(pos + eX * panel_bg_padding, ((ISGAMETYPE(CTF)) ? _("Capture time rankings") : _("Rankings")), hud_fontsize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+       drawstring(pos + eX * panel_bg_padding, ranktitle, hud_fontsize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
        pos.y += 1.25 * hud_fontsize.y;
        if(panel.current_panel_bg != "0")
                pos.y += panel_bg_border;
@@ -1506,7 +1504,7 @@ float scoreboard_time;
 bool have_weapon_stats;
 bool Scoreboard_AccuracyStats_WouldDraw(float ypos)
 {
-       if (ISGAMETYPE(CTS) || ISGAMETYPE(RACE) || ISGAMETYPE(NEXBALL))
+       if (MUTATOR_CALLHOOK(DrawScoreboardAccuracy))
                return false;
        if (!autocvar_hud_panel_scoreboard_accuracy || warmup_stage || ypos > 0.91 * vid_conheight)
                return false;
@@ -1629,7 +1627,7 @@ void Scoreboard_Draw()
        str = "";
        if(tl > 0)
                str = strcat(str, sprintf(_("^3%1.0f minutes"), tl));
-       if(!ISGAMETYPE(LMS))
+       if(!gametype.m_hidelimits)
        {
                if(fl > 0)
                {
@@ -1818,7 +1816,8 @@ void Scoreboard_Draw()
        if (Scoreboard_AccuracyStats_WouldDraw(pos.y))
                pos = Scoreboard_AccuracyStats_Draw(pos, panel_bg_color, bg_size);
 
-       if(ISGAMETYPE(CTS) || ISGAMETYPE(RACE) || (autocvar_hud_panel_scoreboard_ctf_leaderboard && ISGAMETYPE(CTF) && STAT(CTF_SHOWLEADERBOARD))) {
+       if(MUTATOR_CALLHOOK(ShowRankings)) {
+               string ranktitle = M_ARGV(0, string);
                if(race_speedaward) {
                        drawcolorcodedstring(pos, sprintf(_("Speed award: %d%s ^7(%s^7)"), race_speedaward, race_speedaward_unit, ColorTranslateRGB(race_speedaward_holder)), hud_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL);
                        pos.y += 1.25 * hud_fontsize.y;
@@ -1827,7 +1826,7 @@ void Scoreboard_Draw()
                        drawcolorcodedstring(pos, sprintf(_("All-time fastest: %d%s ^7(%s^7)"), race_speedaward_alltimebest, race_speedaward_alltimebest_unit, ColorTranslateRGB(race_speedaward_alltimebest_holder)), hud_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL);
                        pos.y += 1.25 * hud_fontsize.y;
                }
-               pos = Scoreboard_Rankings_Draw(pos, playerslots[player_localnum], panel_bg_color, bg_size);
+               pos = Scoreboard_Rankings_Draw(pos, ranktitle, playerslots[player_localnum], panel_bg_color, bg_size);
        }
 
        pos = Scoreboard_MapStats_Draw(pos, panel_bg_color, bg_size);
index 4aab1b9..60f8394 100644 (file)
@@ -3,7 +3,6 @@
 #include <client/autocvars.qh>
 #include <client/defs.qh>
 #include <client/miscfunctions.qh>
-#include <common/mapinfo.qh>
 
 // Vote (#9)
 
@@ -15,7 +14,7 @@ void HUD_Vote_Export(int fh)
 
 void HUD_Vote()
 {
-       if(autocvar_cl_allow_uid2name == -1 && (ISGAMETYPE(CTS) || ISGAMETYPE(RACE) || (serverflags & SERVERFLAG_PLAYERSTATS)))
+       if(autocvar_cl_allow_uid2name == -1 && (MUTATOR_CALLHOOK(ShowRankings) || (serverflags & SERVERFLAG_PLAYERSTATS)))
        {
                // this dialog gets overriden by the uid2name menu dialog, if it exists
                // TODO remove this client side uid2name dialog in the next release
index c025bdd..2129b78 100644 (file)
@@ -636,7 +636,7 @@ void GameTypeVote_ReadOption(int i)
        }
        else
        {
-               Gametype type = MapInfo_Type_FromString(gt);
+               Gametype type = MapInfo_Type_FromString(gt, false);
                mv_pk3[i] = strzone(MapInfo_Type_ToText(type));
                mv_desc[i] = MapInfo_Type_Description(type);
        }
index 0629c2a..23bbe00 100644 (file)
@@ -118,6 +118,12 @@ MUTATOR_HOOKABLE(HUD_Draw_overlay, EV_HUD_Draw_overlay);
 
 MUTATOR_HOOKABLE(HUD_Powerups_add, EV_NO_ARGS);
 
+/** return true to show the physics HUD panel when optional mode is enabled */
+MUTATOR_HOOKABLE(HUD_Physics_showoptional, EV_NO_ARGS);
+
+/** return true to hide the score HUD panel */
+MUTATOR_HOOKABLE(HUD_Score_show, EV_NO_ARGS);
+
 /** Return true to not draw any vortex beam */
 #define EV_Particles_VortexBeam(i, o) \
        /** beam shot origin */  i(vector, MUTATOR_ARGV_0_vector) \
@@ -163,10 +169,19 @@ MUTATOR_HOOKABLE(DrawCrosshair, EV_NO_ARGS);
 /** Return true to not draw scoreboard */
 MUTATOR_HOOKABLE(DrawScoreboard, EV_NO_ARGS);
 
-/** Called when drawing info messages, allows adding new info messages */
+/** Return true to not draw scoreboard while dead */
+MUTATOR_HOOKABLE(DrawDeathScoreboard, EV_NO_ARGS);
+
+/** Return true to not show accuracy stats in the scoreboard */
+MUTATOR_HOOKABLE(DrawScoreboardAccuracy, EV_NO_ARGS);
+
+/** Called when drawing info messages, allows adding new info messages. Return true to hide the standard join message */
 #define EV_DrawInfoMessages(i, o) \
        /** pos */                          i(vector, MUTATOR_ARGV_0_vector) \
+       /***/                           o(vector, MUTATOR_ARGV_0_vector) \
        /** mySize */                   i(vector, MUTATOR_ARGV_1_vector) \
+       /** img_curr_group */   i(int, MUTATOR_ARGV_2_int) \
+       /***/                                   o(int, MUTATOR_ARGV_2_int) \
        /**/
 MUTATOR_HOOKABLE(DrawInfoMessages, EV_DrawInfoMessages);
 
@@ -179,13 +194,20 @@ MUTATOR_HOOKABLE(DrawViewModel, EV_DrawViewModel);
 /** Called when updating the view's liquid contents, return true to disable the standard checks and apply your own */
 MUTATOR_HOOKABLE(HUD_Contents, EV_NO_ARGS);
 
-/** Return true to disable player model/color forcing */
+/** Return true to disable player model forcing */
 #define EV_ForcePlayermodels_Skip(i, o) \
        /** entity id */                i(entity, MUTATOR_ARGV_0_entity) \
        /** is local */                 i(bool, MUTATOR_ARGV_1_bool) \
        /**/
 MUTATOR_HOOKABLE(ForcePlayermodels_Skip, EV_ForcePlayermodels_Skip);
 
+/** Return true to disable player color forcing */
+#define EV_ForcePlayercolors_Skip(i, o) \
+       /** entity id */                i(entity, MUTATOR_ARGV_0_entity) \
+       /** is local */                 i(bool, MUTATOR_ARGV_1_bool) \
+       /**/
+MUTATOR_HOOKABLE(ForcePlayercolors_Skip, EV_ForcePlayercolors_Skip);
+
 /** Called when damage info is received on the client, useful for playing explosion effects */
 #define EV_DamageInfo(i, o) \
        /** entity id */                i(entity, MUTATOR_ARGV_0_entity) \
@@ -196,3 +218,23 @@ MUTATOR_HOOKABLE(DamageInfo, EV_DamageInfo);
 
 /** Return true to not draw zoom reticle */
 MUTATOR_HOOKABLE(DrawReticle, EV_NO_ARGS);
+
+/** Return true to show leaderboard rankings, needs title argument set */
+#define EV_ShowRankings(i, o) \
+       /** rankings title */   o(string, MUTATOR_ARGV_0_string) \
+       /**/
+MUTATOR_HOOKABLE(ShowRankings, EV_ShowRankings);
+
+/** Called when drawing a player's nameplate, return true to hide it */
+#define EV_ShowNames_Draw(i, o) \
+       /** entity id */ i(entity, MUTATOR_ARGV_0_entity) \
+       /** alpha */     i(float, MUTATOR_ARGV_1_float) \
+       /***/            o(float, MUTATOR_ARGV_1_float) \
+       /**/
+MUTATOR_HOOKABLE(ShowNames_Draw, EV_ShowNames_Draw);
+
+/** Return true to display the race timer HUD panel */
+MUTATOR_HOOKABLE(ShowRaceTimer, EV_NO_ARGS);
+
+/** Return true to force team radar to display entities regardless of their team */
+MUTATOR_HOOKABLE(TeamRadar_Draw, EV_NO_ARGS);
index 8d219c5..d4a221c 100644 (file)
@@ -8,7 +8,6 @@
 #include <common/ent_cs.qh>
 #include <common/constants.qh>
 #include <common/net_linked.qh>
-#include <common/mapinfo.qh>
 #include <common/teams.qh>
 
 #include <lib/csqcmodel/cl_model.qh>
@@ -126,7 +125,8 @@ void Draw_ShowNames(entity this)
                if (f < 0) f = 0;
                a *= f;
        }
-       if (a < ALPHA_MIN_VISIBLE && ISGAMETYPE(CTS)) return;
+       if (MUTATOR_CALLHOOK(ShowNames_Draw, this, a)) return;
+       a = M_ARGV(1, float);
        if (vdist(this.origin - view_origin, >=, max_shot_distance)) return;
        float dist = vlen(this.origin - view_origin);
        if (autocvar_hud_shownames_maxdistance)
index 05d2306..c9ad52e 100644 (file)
@@ -953,7 +953,7 @@ void HUD_Draw(entity this)
        if(autocvar_r_letterbox == 0)
                if(autocvar_viewsize < 120)
                {
-                       if(!(ISGAMETYPE(RACE) || ISGAMETYPE(CTS)))
+                       if(!MUTATOR_CALLHOOK(DrawScoreboardAccuracy))
                                Accuracy_LoadLevels();
 
                        HUD_Main();
index 96836a3..f342bdd 100644 (file)
@@ -65,7 +65,8 @@
        CSQCMODEL_PROPERTY(BIT(13), int, ReadInt24_t, WriteInt24_t, dphitcontentsmask) \
        CSQCMODEL_PROPERTY(BIT(14), TAG_VIEWLOC_TYPE, ReadShort, WriteEntity, TAG_VIEWLOC_NAME) \
        CSQCMODEL_PROPERTY(BIT(16), int, ReadByte, WriteByte, multijump_count) \
-       CSQCMODEL_PROPERTY(BIT(16), int, ReadByte, WriteByte, move_movetype)
+       CSQCMODEL_PROPERTY(BIT(16), int, ReadByte, WriteByte, move_movetype) \
+       CSQCMODEL_PROPERTY(BIT(17), int, ReadByte, WriteByte, clipgroup)
 // TODO get rid of colormod/glowmod here; also get rid of some useless properties on non-players that only exist for CopyBody
 
 // add hook function calls here
index c25805c..019ae61 100644 (file)
@@ -122,7 +122,7 @@ EFFECT(0, RACER_BOOSTER,            "wakizashi_booster_smoke")
 EFFECT(0, RACER_IMPACT,             "wakizashi_gun_impact")
 EFFECT(0, RACER_MUZZLEFLASH,        "wakizashi_gun_muzzleflash")
 EFFECT(0, RACER_ROCKETLAUNCH,       "wakizashi_rocket_launch")
-EFFECT(0, RACER_ROCKET_EXPLODE,     "wakizashi_rocket_launch")
+EFFECT(0, RACER_ROCKET_EXPLODE,     "wakizashi_rocket_explode")
 EFFECT(1, RACER_ROCKET_TRAIL,       "wakizashi_rocket_thrust")
 
 EFFECT(0, SPIDERBOT_ROCKETLAUNCH,           "spiderbot_rocket_launch")
index 9ee58f5..d3a1446 100644 (file)
@@ -51,7 +51,7 @@ bool Net_Write_Effect(entity this, entity client, int sf)
        return true;
 }
 
-void Send_Effect(entity eff, vector eff_loc, vector eff_vel, int eff_cnt)
+void Send_Effect_Except(entity eff, vector eff_loc, vector eff_vel, int eff_cnt, entity ignore)
 {
        if(!eff) { return; }
        if(!eff.eent_eff_trail && !eff_cnt) { return; } // effect has no count!
@@ -64,10 +64,15 @@ void Send_Effect(entity eff, vector eff_loc, vector eff_vel, int eff_cnt)
        net_eff.eent_net_count = eff_cnt;
        net_eff.eent_eff_trail = eff.eent_eff_trail;
 
-       FOREACH_CLIENT(IS_REAL_CLIENT(it), Net_Write_Effect(net_eff, it, 0));
+       FOREACH_CLIENT(IS_REAL_CLIENT(it) && it != ignore && !(IS_SPEC(it) && it.enemy && it.enemy == ignore), Net_Write_Effect(net_eff, it, 0));
        delete(net_eff);
 }
 
+void Send_Effect(entity eff, vector eff_loc, vector eff_vel, int eff_cnt)
+{
+       Send_Effect_Except(eff, eff_loc, eff_vel, eff_cnt, NULL);
+}
+
 void Send_Effect_(string eff_name, vector eff_loc, vector eff_vel, int eff_cnt)
 {
        // problem with this is, we might not have all the available effects for it
index fe7bbc3..5253363 100644 (file)
@@ -3,6 +3,7 @@
 #include "effect.qh"
 
 #ifdef SVQC
+void Send_Effect_Except(entity eff, vector eff_loc, vector eff_vel, int eff_cnt, entity ignore);
 void Send_Effect(entity eff, vector eff_loc, vector eff_vel, int eff_cnt);
 void Send_Effect_(string eff_name, vector eff_loc, vector eff_vel, int eff_cnt);
 #endif
index 80c6bba..090d2b1 100644 (file)
@@ -9089,8 +9089,8 @@ SUB(TE_TEI_G3_HIT) {
 }
 
 // respawn ghosts effect
-DEF(RESPAWN_GHOST);
-SUB(RESPAWN_GHOST) {
+DEF(respawn_ghost);
+SUB(respawn_ghost) {
        MY(count) = 75;
        MY(type) = "static";
        MY(color_min) = "0xA0A0A0";
index e03d3c5..2235e53 100644 (file)
@@ -1,4 +1,5 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/assault/assault.qc>
 #ifdef SVQC
     #include <common/gamemodes/gamemode/assault/sv_assault.qc>
 #endif
index 211daa8..32bd160 100644 (file)
@@ -1,4 +1,5 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/assault/assault.qh>
 #ifdef SVQC
     #include <common/gamemodes/gamemode/assault/sv_assault.qh>
 #endif
diff --git a/qcsrc/common/gamemodes/gamemode/assault/assault.qc b/qcsrc/common/gamemodes/gamemode/assault/assault.qc
new file mode 100644 (file)
index 0000000..c3e582a
--- /dev/null
@@ -0,0 +1 @@
+#include "assault.qh"
diff --git a/qcsrc/common/gamemodes/gamemode/assault/assault.qh b/qcsrc/common/gamemodes/gamemode/assault/assault.qh
new file mode 100644 (file)
index 0000000..f4f4b3f
--- /dev/null
@@ -0,0 +1,27 @@
+#pragma once
+
+#include <common/mapinfo.qh>
+
+CLASS(Assault, Gametype)
+    INIT(Assault)
+    {
+        this.gametype_init(this, _("Assault"),"as","g_assault",GAMETYPE_FLAG_TEAMPLAY,"","timelimit=20",_("Destroy obstacles to find and destroy the enemy power core before time runs out"));
+    }
+    METHOD(Assault, m_generate_mapinfo, void(Gametype this, string v))
+    {
+        if(v == "target_assault_roundend")
+            MapInfo_Map_supportedGametypes |= this.m_flags;
+    }
+    METHOD(Assault, m_isTwoBaseMode, bool())
+    {
+        return true;
+    }
+    METHOD(Assault, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
+    {
+        TC(Gametype, this);
+        returns(menu, _("Point limit:"),    50,  500, 10, string_null,                 string_null,                    string_null);
+    }
+    ATTRIB(Assault, m_legacydefaults, string, "20 0");
+ENDCLASS(Assault)
+REGISTER_GAMETYPE(ASSAULT, NEW(Assault));
+#define g_assault IS_GAMETYPE(ASSAULT)
index ce7b593..d2a6992 100644 (file)
@@ -1,4 +1,8 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/clanarena/clanarena.qc>
+#ifdef CSQC
+    #include <common/gamemodes/gamemode/clanarena/cl_clanarena.qc>
+#endif
 #ifdef SVQC
     #include <common/gamemodes/gamemode/clanarena/sv_clanarena.qc>
 #endif
index 55789f7..b583c0d 100644 (file)
@@ -1,4 +1,8 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/clanarena/clanarena.qh>
+#ifdef CSQC
+    #include <common/gamemodes/gamemode/clanarena/cl_clanarena.qh>
+#endif
 #ifdef SVQC
     #include <common/gamemodes/gamemode/clanarena/sv_clanarena.qh>
 #endif
diff --git a/qcsrc/common/gamemodes/gamemode/clanarena/cl_clanarena.qc b/qcsrc/common/gamemodes/gamemode/clanarena/cl_clanarena.qc
new file mode 100644 (file)
index 0000000..2bded9d
--- /dev/null
@@ -0,0 +1,79 @@
+#include "cl_clanarena.qh"
+
+void HUD_Mod_CA_Export(int fh)
+{
+       HUD_Write_Cvar("hud_panel_modicons_ca_layout");
+}
+
+void DrawCAItem(vector myPos, vector mySize, float aspect_ratio, int layout, int i)
+{
+       TC(int, layout); TC(int, i);
+       int stat = -1;
+       string pic = "";
+       vector color = '0 0 0';
+       switch(i)
+       {
+               case 0: stat = STAT(REDALIVE); pic = "player_red"; color = '1 0 0'; break;
+               case 1: stat = STAT(BLUEALIVE); pic = "player_blue"; color = '0 0 1'; break;
+               case 2: stat = STAT(YELLOWALIVE); pic = "player_yellow"; color = '1 1 0'; break;
+               default:
+               case 3: stat = STAT(PINKALIVE); pic = "player_pink"; color = '1 0 1'; break;
+       }
+
+       if(mySize.x/mySize.y > aspect_ratio)
+       {
+               i = aspect_ratio * mySize.y;
+               myPos.x = myPos.x + (mySize.x - i) / 2;
+               mySize.x = i;
+       }
+       else
+       {
+               i = 1/aspect_ratio * mySize.x;
+               myPos.y = myPos.y + (mySize.y - i) / 2;
+               mySize.y = i;
+       }
+
+       if(layout)
+       {
+               drawpic_aspect_skin(myPos, pic, vec2(0.5 * mySize.x, mySize.y), '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+               drawstring_aspect(myPos + eX * 0.5 * mySize.x, ftos(stat), vec2(0.5 * mySize.x, mySize.y), color, panel_fg_alpha, DRAWFLAG_NORMAL);
+       }
+       else
+               drawstring_aspect(myPos, ftos(stat), mySize, color, panel_fg_alpha, DRAWFLAG_NORMAL);
+}
+
+void HUD_Mod_CA_Draw(vector myPos, vector mySize, int layout)
+{
+       int rows, columns;
+       float aspect_ratio;
+       aspect_ratio = (layout) ? 2 : 1;
+       rows = HUD_GetRowCount(team_count, mySize, aspect_ratio);
+       columns = ceil(team_count/rows);
+
+       int i;
+       float row = 0, column = 0;
+       vector pos = '0 0 0', itemSize;
+       itemSize = vec2(mySize.x / columns, mySize.y / rows);
+       for(i=0; i<team_count; ++i)
+       {
+               pos.x = myPos.x + column * itemSize.x;
+               pos.y = myPos.y + row * itemSize.y;
+
+               DrawCAItem(pos, itemSize, aspect_ratio, layout, i);
+
+               ++row;
+               if(row >= rows)
+               {
+                       row = 0;
+                       ++column;
+               }
+       }
+}
+
+// Clan Arena and Freeze Tag HUD modicons
+void HUD_Mod_CA(vector myPos, vector mySize)
+{
+       mod_active = 1; // required in each mod function that always shows something
+
+       HUD_Mod_CA_Draw(myPos, mySize, autocvar_hud_panel_modicons_ca_layout);
+}
diff --git a/qcsrc/common/gamemodes/gamemode/clanarena/cl_clanarena.qh b/qcsrc/common/gamemodes/gamemode/clanarena/cl_clanarena.qh
new file mode 100644 (file)
index 0000000..7ccd5bb
--- /dev/null
@@ -0,0 +1,5 @@
+#pragma once
+
+void HUD_Mod_CA(vector myPos, vector mySize);
+void HUD_Mod_CA_Draw(vector myPos, vector mySize, int layout);
+void HUD_Mod_CA_Export(int fh);
diff --git a/qcsrc/common/gamemodes/gamemode/clanarena/clanarena.qc b/qcsrc/common/gamemodes/gamemode/clanarena/clanarena.qc
new file mode 100644 (file)
index 0000000..079d4b6
--- /dev/null
@@ -0,0 +1 @@
+#include "clanarena.qh"
diff --git a/qcsrc/common/gamemodes/gamemode/clanarena/clanarena.qh b/qcsrc/common/gamemodes/gamemode/clanarena/clanarena.qh
new file mode 100644 (file)
index 0000000..3b3dace
--- /dev/null
@@ -0,0 +1,49 @@
+#pragma once
+
+#include <common/mapinfo.qh>
+
+#ifdef CSQC
+void HUD_Mod_CA(vector pos, vector mySize);
+void HUD_Mod_CA_Export(int fh);
+#endif
+CLASS(ClanArena, Gametype)
+    INIT(ClanArena)
+    {
+        this.gametype_init(this, _("Clan Arena"),"ca","g_ca",GAMETYPE_FLAG_TEAMPLAY | GAMETYPE_FLAG_USEPOINTS,"","timelimit=20 pointlimit=10 teams=2 leadlimit=6",_("Kill all enemy teammates to win the round"));
+    }
+    METHOD(ClanArena, m_parse_mapinfo, bool(string k, string v))
+    {
+        if (!k) {
+            cvar_set("g_ca_teams", cvar_defstring("g_ca_teams"));
+            return true;
+        }
+        switch (k) {
+            case "teams":
+                cvar_set("g_ca_teams", v);
+                return true;
+        }
+        return false;
+    }
+    METHOD(ClanArena, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter))
+    {
+        if(spawnpoints >= 8 && diameter > 4096)
+            return true;
+        return false;
+    }
+    METHOD(ClanArena, m_setTeams, void(string sa))
+    {
+        cvar_set("g_ca_teams", sa);
+    }
+    METHOD(ClanArena, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
+    {
+        TC(Gametype, this);
+        returns(menu, _("Frag limit:"),      5,  100,  5, "fraglimit_override",        "g_ca_teams_override",          _("The amount of frags needed before the match will end"));
+    }
+#ifdef CSQC
+    ATTRIB(ClanArena, m_modicons, void(vector pos, vector mySize), HUD_Mod_CA);
+    ATTRIB(ClanArena, m_modicons_export, void(int fh), HUD_Mod_CA_Export);
+#endif
+    ATTRIB(ClanArena, m_legacydefaults, string, "10 20 0");
+ENDCLASS(ClanArena)
+REGISTER_GAMETYPE(CA, NEW(ClanArena));
+#define g_ca IS_GAMETYPE(CA)
index cbbe9af..85f8e22 100644 (file)
@@ -187,3 +187,16 @@ void HUD_Mod_CTF(vector pos, vector mySize)
     X(neutral);
     #undef X
 }
+
+bool autocvar_hud_panel_scoreboard_ctf_leaderboard = true;
+
+REGISTER_MUTATOR(cl_ctf, true);
+
+MUTATOR_HOOKFUNCTION(cl_ctf, ShowRankings)
+{
+    if(autocvar_hud_panel_scoreboard_ctf_leaderboard && ISGAMETYPE(CTF) && STAT(CTF_SHOWLEADERBOARD))
+    {
+        M_ARGV(0, string) = _("Capture time rankings");
+        return true;
+    }
+}
index 3cbd334..5d74f31 100644 (file)
@@ -1,5 +1,44 @@
 #pragma once
 
+#include <common/mapinfo.qh>
+
+#ifdef CSQC
+void HUD_Mod_CTF(vector pos, vector mySize);
+void HUD_Mod_CTF_Reset();
+#endif
+CLASS(CaptureTheFlag, Gametype)
+    INIT(CaptureTheFlag)
+    {
+        this.gametype_init(this, _("Capture the Flag"),"ctf","g_ctf",GAMETYPE_FLAG_TEAMPLAY | GAMETYPE_FLAG_USEPOINTS | GAMETYPE_FLAG_PRIORITY,"","timelimit=20 caplimit=10 leadlimit=6",_("Find and bring the enemy flag to your base to capture it, defend your base from the other team"));
+    }
+    METHOD(CaptureTheFlag, m_generate_mapinfo, void(Gametype this, string v))
+    {
+        if(v == "item_flag_team2" || v == "team_CTF_blueflag")
+            MapInfo_Map_supportedGametypes |= this.m_flags;
+    }
+    METHOD(CaptureTheFlag, m_isTwoBaseMode, bool())
+    {
+        return true;
+    }
+    METHOD(CaptureTheFlag, m_setTeams, void(string sa))
+    {
+        cvar_set("fraglimit", sa);
+    }
+    METHOD(CaptureTheFlag, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
+    {
+        TC(Gametype, this);
+        returns(menu, _("Capture limit:"),   1,   20,  1, "capturelimit_override",     string_null,                    _("The amount of captures needed before the match will end"));
+    }
+#ifdef CSQC
+    ATTRIB(CaptureTheFlag, m_modicons, void(vector pos, vector mySize), HUD_Mod_CTF);
+    ATTRIB(CaptureTheFlag, m_modicons_reset, void(), HUD_Mod_CTF_Reset);
+#endif
+    ATTRIB(CaptureTheFlag, m_legacydefaults, string, "300 20 10 0");
+ENDCLASS(CaptureTheFlag)
+REGISTER_GAMETYPE(CTF, NEW(CaptureTheFlag));
+#define g_ctf IS_GAMETYPE(CTF)
+
+#ifdef GAMEQC
 const int CTF_RED_FLAG_TAKEN                   = 1;
 const int CTF_RED_FLAG_LOST                            = 2;
 const int CTF_RED_FLAG_CARRYING                        = 3;
@@ -18,3 +57,4 @@ const int CTF_NEUTRAL_FLAG_CARRYING           = 768;
 const int CTF_FLAG_NEUTRAL                             = 2048;
 const int CTF_SHIELDED                                 = 4096;
 const int CTF_STALEMATE                                        = 8192;
+#endif
index 9f38cd9..4721d5e 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <common/effects/all.qh>
 #include <common/vehicles/all.qh>
+#include <server/gamelog.qh>
 #include <server/teamplay.qh>
 
 #include <lib/warpzone/common.qh>
index b1518bd..4cffb0c 100644 (file)
@@ -2,6 +2,8 @@
 
 #include "ctf.qh"
 
+#include <common/gamemodes/sv_rules.qh>
+
 void ctf_Initialize();
 
 REGISTER_MUTATOR(ctf, false)
index a48cd89..f60b8de 100644 (file)
@@ -1,4 +1,8 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/cts/cts.qc>
+#ifdef CSQC
+    #include <common/gamemodes/gamemode/cts/cl_cts.qc>
+#endif
 #ifdef SVQC
     #include <common/gamemodes/gamemode/cts/sv_cts.qc>
 #endif
index d05e629..5e9ba63 100644 (file)
@@ -1,4 +1,8 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/cts/cts.qh>
+#ifdef CSQC
+    #include <common/gamemodes/gamemode/cts/cl_cts.qh>
+#endif
 #ifdef SVQC
     #include <common/gamemodes/gamemode/cts/sv_cts.qh>
 #endif
diff --git a/qcsrc/common/gamemodes/gamemode/cts/cl_cts.qc b/qcsrc/common/gamemodes/gamemode/cts/cl_cts.qc
new file mode 100644 (file)
index 0000000..27d6b86
--- /dev/null
@@ -0,0 +1,42 @@
+#include "cl_cts.qh"
+
+REGISTER_MUTATOR(cl_cts, true);
+
+MUTATOR_HOOKFUNCTION(cl_cts, HUD_Physics_showoptional)
+{
+       return ISGAMETYPE(CTS); // show the optional physics panel
+}
+
+MUTATOR_HOOKFUNCTION(cl_cts, HUD_Score_show)
+{
+       return spectatee_status == -1 && ISGAMETYPE(CTS); // hide the score panel while observing
+}
+
+MUTATOR_HOOKFUNCTION(cl_cts, DrawDeathScoreboard)
+{
+       return ISGAMETYPE(CTS); // no scoreboard shown while dead
+}
+
+MUTATOR_HOOKFUNCTION(cl_cts, DrawScoreboardAccuracy)
+{
+       return ISGAMETYPE(CTS); // accuracy is not a factor in this gamemode
+}
+
+MUTATOR_HOOKFUNCTION(cl_cts, ShowRankings)
+{
+       if(ISGAMETYPE(CTS))
+       {
+               M_ARGV(0, string) = _("Rankings");
+               return true;
+       }
+}
+
+MUTATOR_HOOKFUNCTION(cl_cts, ShowNames_Draw)
+{
+       return (ISGAMETYPE(CTS) && M_ARGV(1, float) < ALPHA_MIN_VISIBLE);
+}
+
+MUTATOR_HOOKFUNCTION(cl_cts, ShowRaceTimer)
+{
+       return ISGAMETYPE(CTS); // show the race timer panel
+}
diff --git a/qcsrc/common/gamemodes/gamemode/cts/cl_cts.qh b/qcsrc/common/gamemodes/gamemode/cts/cl_cts.qh
new file mode 100644 (file)
index 0000000..6f70f09
--- /dev/null
@@ -0,0 +1 @@
+#pragma once
diff --git a/qcsrc/common/gamemodes/gamemode/cts/cts.qc b/qcsrc/common/gamemodes/gamemode/cts/cts.qc
new file mode 100644 (file)
index 0000000..cfc0c6f
--- /dev/null
@@ -0,0 +1 @@
+#include "cts.qh"
diff --git a/qcsrc/common/gamemodes/gamemode/cts/cts.qh b/qcsrc/common/gamemodes/gamemode/cts/cts.qh
new file mode 100644 (file)
index 0000000..c59b73c
--- /dev/null
@@ -0,0 +1,36 @@
+#pragma once
+
+#include <common/mapinfo.qh>
+#if defined(CSQC)
+       #include <common/gamemodes/gamemode/race/cl_race.qh>
+#endif
+
+CLASS(RaceCTS, Gametype)
+    INIT(RaceCTS)
+    {
+        this.gametype_init(this, _("Race CTS"),"cts","g_cts",0,"cloaked","timelimit=20",_("Race for fastest time."));
+    }
+    METHOD(RaceCTS, m_generate_mapinfo, void(Gametype this, string v))
+    {
+        if(v == "target_startTimer")
+            MapInfo_Map_supportedGametypes |= this.m_flags;
+    }
+    METHOD(RaceCTS, m_setTeams, void(string sa))
+    {
+        // this is the skill of the map
+        // not parsed by anything yet
+        // for map databases
+        //  cvar_set("fraglimit", sa);
+    }
+    METHOD(RaceCTS, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
+    {
+        TC(Gametype, this);
+        returns(menu, _("Point limit:"),    50,  500, 10, string_null,                 string_null,                    string_null);
+    }
+#ifdef CSQC
+    ATTRIB(RaceCTS, m_modicons, void(vector pos, vector mySize), HUD_Mod_Race);
+#endif
+    ATTRIB(RaceCTS, m_legacydefaults, string, "20 0 0");
+ENDCLASS(RaceCTS)
+REGISTER_GAMETYPE(CTS, NEW(RaceCTS));
+#define g_cts IS_GAMETYPE(CTS)
index 4e219ea..c08176c 100644 (file)
@@ -1,6 +1,7 @@
 #include "sv_cts.qh"
 
 #include <server/race.qh>
+#include <server/gamelog.qh>
 #include <server/items.qh>
 
 float autocvar_g_cts_finish_kill_delay;
index ba24493..4b37b09 100644 (file)
@@ -1,4 +1,5 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/deathmatch/deathmatch.qc>
 #ifdef SVQC
     #include <common/gamemodes/gamemode/deathmatch/sv_deathmatch.qc>
 #endif
index abc7db3..3e67c78 100644 (file)
@@ -1,4 +1,5 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/deathmatch/deathmatch.qh>
 #ifdef SVQC
     #include <common/gamemodes/gamemode/deathmatch/sv_deathmatch.qh>
 #endif
diff --git a/qcsrc/common/gamemodes/gamemode/deathmatch/deathmatch.qc b/qcsrc/common/gamemodes/gamemode/deathmatch/deathmatch.qc
new file mode 100644 (file)
index 0000000..fd1e1e1
--- /dev/null
@@ -0,0 +1 @@
+#include "deathmatch.qh"
diff --git a/qcsrc/common/gamemodes/gamemode/deathmatch/deathmatch.qh b/qcsrc/common/gamemodes/gamemode/deathmatch/deathmatch.qh
new file mode 100644 (file)
index 0000000..ca55a3b
--- /dev/null
@@ -0,0 +1,16 @@
+#pragma once
+
+#include <common/mapinfo.qh>
+
+CLASS(Deathmatch, Gametype)
+    INIT(Deathmatch)
+    {
+        this.gametype_init(this, _("Deathmatch"),"dm","g_dm",GAMETYPE_FLAG_USEPOINTS | GAMETYPE_FLAG_PREFERRED,"","timelimit=15 pointlimit=30 leadlimit=0",_("Score as many frags as you can"));
+    }
+    METHOD(Deathmatch, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter))
+    {
+        return true;
+    }
+    ATTRIB(Deathmatch, m_legacydefaults, string, "30 20 0");
+ENDCLASS(Deathmatch)
+REGISTER_GAMETYPE(DEATHMATCH, NEW(Deathmatch));
index 418a843..5a91165 100644 (file)
@@ -2,6 +2,11 @@
 
 #include <client/hud/panel/modicons.qh>
 
+void HUD_Mod_Dom_Export(int fh)
+{
+       HUD_Write_Cvar("hud_panel_modicons_dom_layout");
+}
+
 int autocvar_hud_panel_modicons_dom_layout;
 
 void DrawDomItem(vector myPos, vector mySize, float aspect_ratio, int layout, int i)
index 6f70f09..4ebb684 100644 (file)
@@ -1 +1,43 @@
 #pragma once
+
+#include <common/mapinfo.qh>
+
+#ifdef CSQC
+void HUD_Mod_Dom(vector pos, vector mySize);
+void HUD_Mod_Dom_Export(int fh);
+#endif
+CLASS(Domination, Gametype)
+    INIT(Domination)
+    {
+        this.gametype_init(this, _("Domination"),"dom","g_domination",GAMETYPE_FLAG_TEAMPLAY | GAMETYPE_FLAG_USEPOINTS,"","timelimit=20 pointlimit=200 teams=2 leadlimit=0",_("Capture and defend all the control points to win"));
+    }
+    METHOD(Domination, m_parse_mapinfo, bool(string k, string v))
+    {
+        if (!k) {
+            cvar_set("g_domination_default_teams", cvar_defstring("g_domination_default_teams"));
+            return true;
+        }
+        switch (k) {
+            case "teams":
+                cvar_set("g_domination_default_teams", v);
+                return true;
+        }
+        return false;
+    }
+    METHOD(Domination, m_generate_mapinfo, void(Gametype this, string v))
+    {
+        if(v == "dom_controlpoint")
+            MapInfo_Map_supportedGametypes |= this.m_flags;
+    }
+    METHOD(Domination, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
+    {
+        TC(Gametype, this);
+        returns(menu, _("Point limit:"),    50,  500, 10, "g_domination_point_limit",  "g_domination_teams_override",  _("The amount of points needed before the match will end"));
+    }
+#ifdef CSQC
+    ATTRIB(Domination, m_modicons, void(vector pos, vector mySize), HUD_Mod_Dom);
+    ATTRIB(Domination, m_modicons_export, void(int fh), HUD_Mod_Dom_Export);
+#endif
+    ATTRIB(Domination, m_legacydefaults, string, "200 20 0");
+ENDCLASS(Domination)
+REGISTER_GAMETYPE(DOMINATION, NEW(Domination));
index 32e39e2..6e333c1 100644 (file)
@@ -1,5 +1,6 @@
 #include "sv_domination.qh"
 
+#include <server/gamelog.qh>
 #include <server/teamplay.qh>
 
 bool g_domination;
index 5925816..1a7e0d3 100644 (file)
@@ -1,4 +1,5 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/duel/duel.qc>
 #ifdef SVQC
     #include <common/gamemodes/gamemode/duel/sv_duel.qc>
 #endif
index 00e553c..6d6cc3c 100644 (file)
@@ -1,4 +1,5 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/duel/duel.qh>
 #ifdef SVQC
     #include <common/gamemodes/gamemode/duel/sv_duel.qh>
 #endif
diff --git a/qcsrc/common/gamemodes/gamemode/duel/duel.qc b/qcsrc/common/gamemodes/gamemode/duel/duel.qc
new file mode 100644 (file)
index 0000000..6cba48c
--- /dev/null
@@ -0,0 +1 @@
+#include "duel.qh"
diff --git a/qcsrc/common/gamemodes/gamemode/duel/duel.qh b/qcsrc/common/gamemodes/gamemode/duel/duel.qh
new file mode 100644 (file)
index 0000000..298e62e
--- /dev/null
@@ -0,0 +1,28 @@
+#pragma once
+
+#include <common/gamemodes/gamemode/deathmatch/deathmatch.qh>
+#include <common/mapinfo.qh>
+
+CLASS(Duel, Gametype)
+    INIT(Duel)
+    {
+        this.gametype_init(this, _("Duel"),"duel","g_duel",GAMETYPE_FLAG_USEPOINTS,"","timelimit=10 pointlimit=0 leadlimit=0",_("Fight in a one versus one arena battle to decide the winner"));
+    }
+    METHOD(Duel, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter))
+    {
+        return (diameter < 16384);
+    }
+    METHOD(Duel, m_isForcedSupported, bool(Gametype this))
+    {
+        if(!cvar("g_duel_not_dm_maps"))
+        {
+            // if this is set, all DM maps support duel too
+            // TODO: we should really check the size of maps, some DM maps do not work for duel!
+            if(!(MapInfo_Map_supportedGametypes & this.m_flags) && (MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DEATHMATCH.m_flags))
+                return true; // TODO: references another gametype (alternatively, we could check which gamemodes are always enabled and append this if any are supported)
+        }
+        return false;
+    }
+ENDCLASS(Duel)
+REGISTER_GAMETYPE(DUEL, NEW(Duel));
+#define g_duel IS_GAMETYPE(DUEL)
index 4d62800..28034e6 100644 (file)
@@ -1,4 +1,8 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/freezetag/freezetag.qc>
+#ifdef CSQC
+    #include <common/gamemodes/gamemode/freezetag/cl_freezetag.qc>
+#endif
 #ifdef SVQC
     #include <common/gamemodes/gamemode/freezetag/sv_freezetag.qc>
 #endif
index 785d7b8..84007e9 100644 (file)
@@ -1,4 +1,8 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/freezetag/freezetag.qh>
+#ifdef CSQC
+    #include <common/gamemodes/gamemode/freezetag/cl_freezetag.qh>
+#endif
 #ifdef SVQC
     #include <common/gamemodes/gamemode/freezetag/sv_freezetag.qh>
 #endif
diff --git a/qcsrc/common/gamemodes/gamemode/freezetag/cl_freezetag.qc b/qcsrc/common/gamemodes/gamemode/freezetag/cl_freezetag.qc
new file mode 100644 (file)
index 0000000..df4931a
--- /dev/null
@@ -0,0 +1,15 @@
+#include "cl_freezetag.qh"
+
+#include <common/gamemodes/gamemode/clanarena/cl_clanarena.qh>
+
+void HUD_Mod_FreezeTag_Export(int fh)
+{
+       HUD_Write_Cvar("hud_panel_modicons_freezetag_layout");
+}
+
+void HUD_Mod_FreezeTag(vector myPos, vector mySize)
+{
+       mod_active = 1; // required in each mod function that always shows something
+
+       HUD_Mod_CA_Draw(myPos, mySize, autocvar_hud_panel_modicons_freezetag_layout);
+}
diff --git a/qcsrc/common/gamemodes/gamemode/freezetag/cl_freezetag.qh b/qcsrc/common/gamemodes/gamemode/freezetag/cl_freezetag.qh
new file mode 100644 (file)
index 0000000..0d2f440
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+void HUD_Mod_FreezeTag_Export(int fh);
diff --git a/qcsrc/common/gamemodes/gamemode/freezetag/freezetag.qc b/qcsrc/common/gamemodes/gamemode/freezetag/freezetag.qc
new file mode 100644 (file)
index 0000000..9bb8304
--- /dev/null
@@ -0,0 +1 @@
+#include "freezetag.qh"
diff --git a/qcsrc/common/gamemodes/gamemode/freezetag/freezetag.qh b/qcsrc/common/gamemodes/gamemode/freezetag/freezetag.qh
new file mode 100644 (file)
index 0000000..61d3b91
--- /dev/null
@@ -0,0 +1,52 @@
+#pragma once
+
+#include <common/mapinfo.qh>
+#if defined(CSQC)
+       #include <common/gamemodes/gamemode/clanarena/cl_clanarena.qh>
+#endif
+
+#ifdef CSQC
+void HUD_Mod_FreezeTag(vector myPos, vector mySize);
+void HUD_Mod_FreezeTag_Export(int fh);
+#endif
+CLASS(FreezeTag, Gametype)
+    INIT(FreezeTag)
+    {
+        this.gametype_init(this, _("Freeze Tag"),"ft","g_freezetag",GAMETYPE_FLAG_TEAMPLAY | GAMETYPE_FLAG_USEPOINTS,"","timelimit=20 pointlimit=10 teams=2 leadlimit=6",_("Kill enemies to freeze them, stand next to frozen teammates to revive them; freeze all enemies to win"));
+    }
+    METHOD(FreezeTag, m_parse_mapinfo, bool(string k, string v))
+    {
+        if (!k) {
+            cvar_set("g_freezetag_teams", cvar_defstring("g_freezetag_teams"));
+            return true;
+        }
+        switch (k) {
+            case "teams":
+                cvar_set("g_freezetag_teams", v);
+                return true;
+        }
+        return false;
+    }
+    METHOD(FreezeTag, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter))
+    {
+        if(spawnpoints >= 8 && diameter > 4096)
+            return true;
+        return false;
+    }
+    METHOD(FreezeTag, m_setTeams, void(string sa))
+    {
+        cvar_set("g_freezetag_teams", sa);
+    }
+    METHOD(FreezeTag, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
+    {
+        TC(Gametype, this);
+        returns(menu, _("Frag limit:"),      5,  100,  5, "fraglimit_override",        "g_freezetag_teams_override",   _("The amount of frags needed before the match will end"));
+    }
+#ifdef CSQC
+    ATTRIB(FreezeTag, m_modicons, void(vector pos, vector mySize), HUD_Mod_FreezeTag);
+    ATTRIB(FreezeTag, m_modicons_export, void(int fh), HUD_Mod_FreezeTag_Export);
+#endif
+    ATTRIB(FreezeTag, m_legacydefaults, string, "10 20 0");
+ENDCLASS(FreezeTag)
+REGISTER_GAMETYPE(FREEZETAG, NEW(FreezeTag));
+#define g_freezetag IS_GAMETYPE(FREEZETAG)
index a197891..e8b28e9 100644 (file)
@@ -1,4 +1,5 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/invasion/invasion.qc>
 #ifdef SVQC
     #include <common/gamemodes/gamemode/invasion/sv_invasion.qc>
 #endif
index f90ea9b..5181956 100644 (file)
@@ -1,4 +1,5 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/invasion/invasion.qh>
 #ifdef SVQC
     #include <common/gamemodes/gamemode/invasion/sv_invasion.qh>
 #endif
diff --git a/qcsrc/common/gamemodes/gamemode/invasion/invasion.qc b/qcsrc/common/gamemodes/gamemode/invasion/invasion.qc
new file mode 100644 (file)
index 0000000..6462b92
--- /dev/null
@@ -0,0 +1 @@
+#include "invasion.qh"
diff --git a/qcsrc/common/gamemodes/gamemode/invasion/invasion.qh b/qcsrc/common/gamemodes/gamemode/invasion/invasion.qh
new file mode 100644 (file)
index 0000000..2195b84
--- /dev/null
@@ -0,0 +1,33 @@
+#pragma once
+
+#include <common/mapinfo.qh>
+
+CLASS(Invasion, Gametype)
+    INIT(Invasion)
+    {
+        this.gametype_init(this, _("Invasion"),"inv","g_invasion",GAMETYPE_FLAG_USEPOINTS,"","pointlimit=50 teams=0 type=0",_("Survive against waves of monsters"));
+    }
+    METHOD(Invasion, m_parse_mapinfo, bool(string k, string v))
+    {
+        switch (k) {
+            case "teams":
+                cvar_set("g_invasion_teams", v);
+                return true;
+            case "type":
+                cvar_set("g_invasion_type", v);
+                return true;
+        }
+        return false;
+    }
+    METHOD(Invasion, m_generate_mapinfo, void(Gametype this, string v))
+    {
+        if(v == "invasion_spawnpoint")
+            MapInfo_Map_supportedGametypes |= this.m_flags;
+    }
+    METHOD(Invasion, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
+    {
+        TC(Gametype, this);
+        returns(menu, _("Point limit:"),    50,  500, 10, string_null,                 string_null,                    string_null);
+    }
+ENDCLASS(Invasion)
+REGISTER_GAMETYPE(INVASION, NEW(Invasion));
index 6f70f09..cf21ab0 100644 (file)
@@ -1 +1,21 @@
 #pragma once
+
+#include <common/mapinfo.qh>
+
+#ifdef CSQC
+void HUD_Mod_Keepaway(vector pos, vector mySize);
+#endif
+CLASS(Keepaway, Gametype)
+    INIT(Keepaway)
+    {
+        this.gametype_init(this, _("Keepaway"),"ka","g_keepaway",GAMETYPE_FLAG_USEPOINTS,"","timelimit=20 pointlimit=30",_("Hold the ball to get points for kills"));
+    }
+    METHOD(Keepaway, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter))
+    {
+        return true;
+    }
+#ifdef CSQC
+    ATTRIB(Keepaway, m_modicons, void(vector pos, vector mySize), HUD_Mod_Keepaway);
+#endif
+ENDCLASS(Keepaway)
+REGISTER_GAMETYPE(KEEPAWAY, NEW(Keepaway));
index f3c140f..735b01b 100644 (file)
@@ -1,6 +1,7 @@
 #include "sv_keepaway.qh"
 
 #include <common/effects/all.qh>
+#include <server/gamelog.qh>
 
 .entity ballcarried;
 
index 6f70f09..cc9cecd 100644 (file)
@@ -1 +1,46 @@
 #pragma once
+
+#include <common/mapinfo.qh>
+
+#ifdef CSQC
+void HUD_Mod_KH(vector pos, vector mySize);
+#endif
+CLASS(KeyHunt, Gametype)
+    INIT(KeyHunt)
+    {
+        this.gametype_init(this, _("Key Hunt"),"kh","g_keyhunt",GAMETYPE_FLAG_TEAMPLAY | GAMETYPE_FLAG_USEPOINTS,"","timelimit=20 pointlimit=1000 teams=3 leadlimit=0",_("Gather all the keys to win the round"));
+    }
+    METHOD(KeyHunt, m_parse_mapinfo, bool(string k, string v))
+    {
+        if (!k) {
+            cvar_set("g_keyhunt_teams", cvar_defstring("g_keyhunt_teams"));
+            return true;
+        }
+        switch (k) {
+            case "teams":
+                cvar_set("g_keyhunt_teams", v);
+                return true;
+        }
+        return false;
+    }
+    METHOD(KeyHunt, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter))
+    {
+        if(spawnpoints >= 12 && diameter > 5120)
+            return true;
+        return false;
+    }
+    METHOD(KeyHunt, m_setTeams, void(string sa))
+    {
+        cvar_set("g_keyhunt_teams", sa);
+    }
+    METHOD(KeyHunt, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
+    {
+        TC(Gametype, this);
+        returns(menu, _("Point limit:"),   200, 1500, 50, "g_keyhunt_point_limit",     "g_keyhunt_teams_override",     _("The amount of points needed before the match will end"));
+    }
+#ifdef CSQC
+    ATTRIB(KeyHunt, m_modicons, void(vector pos, vector mySize), HUD_Mod_KH);
+#endif
+    ATTRIB(KeyHunt, m_legacydefaults, string, "1000 20 3 0");
+ENDCLASS(KeyHunt)
+REGISTER_GAMETYPE(KEYHUNT, NEW(KeyHunt));
index 5d52ed7..40870a7 100644 (file)
@@ -1,5 +1,7 @@
 #include "sv_keyhunt.qh"
 
+#include <server/gamelog.qh>
+
 float autocvar_g_balance_keyhunt_damageforcescale;
 float autocvar_g_balance_keyhunt_delay_collect;
 float autocvar_g_balance_keyhunt_delay_damage_return;
index fcf63d7..11f7446 100644 (file)
@@ -1,4 +1,8 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/lms/lms.qc>
+#ifdef CSQC
+    #include <common/gamemodes/gamemode/lms/cl_lms.qc>
+#endif
 #ifdef SVQC
     #include <common/gamemodes/gamemode/lms/sv_lms.qc>
 #endif
index 51c1ee1..1b1143f 100644 (file)
@@ -1,4 +1,8 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/lms/lms.qh>
+#ifdef CSQC
+    #include <common/gamemodes/gamemode/lms/cl_lms.qh>
+#endif
 #ifdef SVQC
     #include <common/gamemodes/gamemode/lms/sv_lms.qh>
 #endif
diff --git a/qcsrc/common/gamemodes/gamemode/lms/cl_lms.qc b/qcsrc/common/gamemodes/gamemode/lms/cl_lms.qc
new file mode 100644 (file)
index 0000000..649f964
--- /dev/null
@@ -0,0 +1,30 @@
+#include "cl_lms.qh"
+
+REGISTER_MUTATOR(cl_lms, true);
+
+MUTATOR_HOOKFUNCTION(cl_lms, DrawInfoMessages)
+{
+       if(!warmup_stage && ISGAMETYPE(LMS))
+       {
+               entity sk = playerslots[player_localnum];
+               vector pos = M_ARGV(0, vector);
+               vector mySize = M_ARGV(1, vector);
+               vector fontsize = '0.2 0.2 0' * mySize.y;
+               int img_curr_group = M_ARGV(2, int);
+               if(sk.(scores(ps_primary)) >= 666)
+               {
+                       InfoMessage(_("^1Match has already begun"));
+                       M_ARGV(0, vector) = pos;
+                       M_ARGV(2, int) = img_curr_group;
+                       return true;
+               }
+               else if(sk.(scores(ps_primary)) > 0)
+               {
+                       InfoMessage(_("^1You have no more lives left"));
+                       M_ARGV(0, vector) = pos;
+                       M_ARGV(2, int) = img_curr_group;
+                       return true;
+               }
+       }
+       return false;
+}
diff --git a/qcsrc/common/gamemodes/gamemode/lms/cl_lms.qh b/qcsrc/common/gamemodes/gamemode/lms/cl_lms.qh
new file mode 100644 (file)
index 0000000..6f70f09
--- /dev/null
@@ -0,0 +1 @@
+#pragma once
diff --git a/qcsrc/common/gamemodes/gamemode/lms/lms.qc b/qcsrc/common/gamemodes/gamemode/lms/lms.qc
new file mode 100644 (file)
index 0000000..92fb7df
--- /dev/null
@@ -0,0 +1 @@
+#include "lms.qh"
diff --git a/qcsrc/common/gamemodes/gamemode/lms/lms.qh b/qcsrc/common/gamemodes/gamemode/lms/lms.qh
new file mode 100644 (file)
index 0000000..8a208c5
--- /dev/null
@@ -0,0 +1,21 @@
+#pragma once
+
+#include <common/mapinfo.qh>
+
+CLASS(LastManStanding, Gametype)
+    INIT(LastManStanding)
+    {
+        this.gametype_init(this, _("Last Man Standing"),"lms","g_lms",GAMETYPE_FLAG_USEPOINTS | GAMETYPE_FLAG_HIDELIMITS,"","timelimit=20 lives=5 leadlimit=0",_("Survive and kill until the enemies have no lives left"));
+    }
+    METHOD(LastManStanding, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter))
+    {
+        return true;
+    }
+    METHOD(LastManStanding, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
+    {
+        TC(Gametype, this);
+        returns(menu, _("Lives:"),           3,   50,  1, "g_lms_lives_override",      string_null,                    string_null);
+    }
+    ATTRIB(LastManStanding, m_legacydefaults, string, "9 20 0");
+ENDCLASS(LastManStanding)
+REGISTER_GAMETYPE(LMS, NEW(LastManStanding));
index 5a6b42d..19b7b63 100644 (file)
@@ -42,3 +42,8 @@ MUTATOR_HOOKFUNCTION(cl_nb, WantEventchase)
                return true;
        return false;
 }
+
+MUTATOR_HOOKFUNCTION(cl_nb, DrawScoreboardAccuracy)
+{
+       return ISGAMETYPE(NEXBALL); // accuracy is not a factor in this gamemode
+}
index 6f70f09..9a8fca3 100644 (file)
@@ -1 +1,33 @@
 #pragma once
+
+#include <common/mapinfo.qh>
+
+#ifdef CSQC
+void HUD_Mod_NexBall(vector pos, vector mySize);
+#endif
+CLASS(NexBall, Gametype)
+    INIT(NexBall)
+    {
+        this.gametype_init(this, _("Nexball"),"nb","g_nexball",GAMETYPE_FLAG_TEAMPLAY | GAMETYPE_FLAG_USEPOINTS,"","timelimit=20 pointlimit=5 leadlimit=0",_("Shoot and kick the ball into the enemies goal, keep your goal clean"));
+    }
+    METHOD(NexBall, m_generate_mapinfo, void(Gametype this, string v))
+    {
+        if(substring(v, 0, 8) == "nexball_" || substring(v, 0, 4) == "ball")
+            MapInfo_Map_supportedGametypes |= this.m_flags;
+    }
+    METHOD(NexBall, m_isTwoBaseMode, bool())
+    {
+        return true;
+    }
+    METHOD(NexBall, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
+    {
+        TC(Gametype, this);
+        returns(menu, _("Goals:"),           1,   50,  1, "g_nexball_goallimit",       string_null,                    _("The amount of goals needed before the match will end"));
+    }
+#ifdef CSQC
+    ATTRIB(NexBall, m_modicons, void(vector pos, vector mySize), HUD_Mod_NexBall);
+#endif
+    ATTRIB(NexBall, m_legacydefaults, string, "5 20 0");
+ENDCLASS(NexBall)
+REGISTER_GAMETYPE(NEXBALL, NEW(NexBall));
+#define g_nexball IS_GAMETYPE(NEXBALL)
index 38b7a7f..079b181 100644 (file)
@@ -1,5 +1,7 @@
 #include "sv_nexball.qh"
 
+#include <server/gamelog.qh>
+
 .entity ballcarried;
 
 int autocvar_g_nexball_goalleadlimit;
index ccabc47..bde6340 100644 (file)
@@ -1,5 +1,7 @@
 #pragma once
 
+#include <common/weapons/_all.qh>
+
 CLASS(BallStealer, PortoLaunch)
 /* flags     */ ATTRIB(BallStealer, spawnflags, int, WEP_TYPE_OTHER | WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_NOTRUEAIM);
 /* impulse   */ ATTRIB(BallStealer, impulse, int, 0);
index add678d..0c37549 100644 (file)
@@ -1,5 +1,26 @@
 #pragma once
 
+#include <common/mapinfo.qh>
+
+CLASS(Onslaught, Gametype)
+    INIT(Onslaught)
+    {
+        this.gametype_init(this, _("Onslaught"),"ons","g_onslaught",GAMETYPE_FLAG_TEAMPLAY,"","pointlimit=1 timelimit=20",_("Capture control points to reach and destroy the enemy generator"));
+    }
+    METHOD(Onslaught, m_generate_mapinfo, void(Gametype this, string v))
+    {
+        if(v == "onslaught_generator")
+            MapInfo_Map_supportedGametypes |= this.m_flags;
+    }
+    METHOD(Onslaught, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
+    {
+        TC(Gametype, this);
+        returns(menu, _("Point limit:"),    50,  500, 10, string_null,                 string_null,                    string_null);
+    }
+    ATTRIB(Onslaught, m_legacydefaults, string, "20 0");
+ENDCLASS(Onslaught)
+REGISTER_GAMETYPE(ONSLAUGHT, NEW(Onslaught));
+
 #ifdef GAMEQC
 REGISTER_NET_LINKED(ENT_CLIENT_GENERATOR)
 REGISTER_NET_LINKED(ENT_CLIENT_CONTROLPOINT_ICON)
index 5ed2c95..f7c4794 100644 (file)
@@ -1,4 +1,8 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/race/race.qc>
+#ifdef CSQC
+    #include <common/gamemodes/gamemode/race/cl_race.qc>
+#endif
 #ifdef SVQC
     #include <common/gamemodes/gamemode/race/sv_race.qc>
 #endif
index 1e76e7a..52348a2 100644 (file)
@@ -1,4 +1,8 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/race/race.qh>
+#ifdef CSQC
+    #include <common/gamemodes/gamemode/race/cl_race.qh>
+#endif
 #ifdef SVQC
     #include <common/gamemodes/gamemode/race/sv_race.qh>
 #endif
diff --git a/qcsrc/common/gamemodes/gamemode/race/cl_race.qc b/qcsrc/common/gamemodes/gamemode/race/cl_race.qc
new file mode 100644 (file)
index 0000000..c2346a4
--- /dev/null
@@ -0,0 +1,183 @@
+#include "cl_race.qh"
+
+// Race/CTS HUD mod icons
+float crecordtime_prev; // last remembered crecordtime
+float crecordtime_change_time; // time when crecordtime last changed
+float srecordtime_prev; // last remembered srecordtime
+float srecordtime_change_time; // time when srecordtime last changed
+
+float race_status_time;
+int race_status_prev;
+string race_status_name_prev;
+
+// Check if the given name already exist in race rankings? In that case, where? (otherwise return 0)
+int race_CheckName(string net_name)
+{
+       int rank = 0;
+       string zoned_name = strzone(strdecolorize(entcs_GetName(player_localnum)));
+       for (int i = RANKINGS_CNT - 1; i >= 0; --i)
+               if (strdecolorize(grecordholder[i]) == zoned_name)
+               {
+                       rank = i + 1;
+                       break;
+               }
+       strfree(zoned_name);
+       return rank;
+}
+
+void race_showTime(string text, vector pos, vector timeText_ofs, float theTime, vector textSize, float f)
+{
+       drawstring_aspect(pos, text, textSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+       drawstring_aspect(pos + timeText_ofs, TIME_ENCODED_TOSTRING(theTime), textSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+       if (f < 1) {
+               drawstring_aspect_expanding(pos, text, textSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f);
+               drawstring_aspect_expanding(pos + timeText_ofs, TIME_ENCODED_TOSTRING(theTime), textSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f);
+       }
+}
+
+void HUD_Mod_Race(vector pos, vector mySize)
+{
+       entity me = playerslots[player_localnum];
+       float score = me.(scores(ps_primary));
+
+       if(!(scores_flags(ps_primary) & SFL_TIME) || teamplay) // race/cts record display on HUD
+       {
+               mod_active = 0; // hide it in this case!
+               return; // no records in the actual race
+       }
+
+       mod_active = 1;
+
+       // clientside personal record
+       string rr;
+       if(ISGAMETYPE(CTS))
+               rr = CTS_RECORD;
+       else
+               rr = RACE_RECORD;
+       float t = stof(db_get(ClientProgsDB, strcat(shortmapname, rr, "time")));
+
+       if(score && (score < t || !t)) {
+               db_put(ClientProgsDB, strcat(shortmapname, rr, "time"), ftos(score));
+               if(autocvar_cl_autodemo_delete_keeprecords)
+               {
+                       float f = autocvar_cl_autodemo_delete;
+                       f &= ~1;
+                       cvar_set("cl_autodemo_delete", ftos(f)); // don't delete demo with new record!
+               }
+       }
+
+       if(t != crecordtime_prev) {
+               crecordtime_prev = t;
+               crecordtime_change_time = time;
+       }
+
+       vector textPos, medalPos;
+       float squareSize;
+       if(mySize.x > mySize.y) {
+               // text on left side
+               squareSize = min(mySize.y, mySize.x/2);
+               vector ofs = vec2(0.5 * max(0, mySize.x/2 - squareSize), 0.5 * (mySize.y - squareSize));
+               textPos = pos + ofs;
+               ofs.x += 0.5 * mySize.x;
+               medalPos = pos + ofs;
+       } else {
+               // text on top
+               squareSize = min(mySize.x, mySize.y/2);
+               vector ofs = vec2(0.5 * (mySize.x - squareSize), 0.5 * max(0, mySize.y/2 - squareSize));
+               textPos = pos + ofs;
+               ofs.y += 0.5 * mySize.y;
+               medalPos = pos + ofs;
+       }
+       vector textSize = vec2(squareSize, 0.25 * squareSize);
+
+       race_showTime(_("Personal best"), textPos, eY * 0.25 * squareSize, t, textSize, time - crecordtime_change_time);
+
+       // server record
+       t = race_server_record;
+       if(t != srecordtime_prev) {
+               srecordtime_prev = t;
+               srecordtime_change_time = time;
+       }
+
+       textPos += eY * 0.5 * squareSize;
+       race_showTime(_("Server best"), textPos, eY * 0.25 * squareSize, t, textSize, time - srecordtime_change_time);
+
+       if (race_status != race_status_prev || race_status_name != race_status_name_prev) {
+               race_status_time = time + 5;
+               race_status_prev = race_status;
+               strcpy(race_status_name_prev, race_status_name);
+       }
+
+       // race "awards"
+       float a = bound(0, race_status_time - time, 1);
+       string s = textShortenToWidth(ColorTranslateRGB(race_status_name), squareSize, '1 1 0' * 0.1 * squareSize, stringwidth_colors);
+
+       float rank = 0;
+       if(race_status > 0)
+               rank = race_CheckName(race_status_name);
+       string rankname = count_ordinal(rank);
+       vector namepos = medalPos + '0 0.8 0' * squareSize;
+       vector rankpos = medalPos + '0 0.15 0' * squareSize;
+
+       if(race_status == 0)
+               drawpic_aspect_skin(medalPos, "race_newfail", '1 1 0' * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
+       else if(race_status == 1) {
+               drawpic_aspect_skin(medalPos + '0.1 0 0' * squareSize, "race_newtime", '1 1 0' * 0.8 * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
+               drawcolorcodedstring_aspect(namepos, s, '1 0.2 0' * squareSize, panel_fg_alpha * a, DRAWFLAG_NORMAL);
+               drawstring_aspect(rankpos, rankname, '1 0.15 0' * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
+       } else if(race_status == 2) {
+               if(strdecolorize(race_status_name) == strdecolorize(entcs_GetName(player_localnum)) || !race_myrank || race_myrank < rank)
+                       drawpic_aspect_skin(medalPos + '0.1 0 0' * squareSize, "race_newrankgreen", '1 1 0' * 0.8 * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
+               else
+                       drawpic_aspect_skin(medalPos + '0.1 0 0' * squareSize, "race_newrankyellow", '1 1 0' * 0.8 * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
+               drawcolorcodedstring_aspect(namepos, s, '1 0.2 0' * squareSize, panel_fg_alpha * a, DRAWFLAG_NORMAL);
+               drawstring_aspect(rankpos, rankname, '1 0.15 0' * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
+       } else if(race_status == 3) {
+               drawpic_aspect_skin(medalPos + '0.1 0 0' * squareSize, "race_newrecordserver", '1 1 0' * 0.8 * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
+               drawcolorcodedstring_aspect(namepos, s, '1 0.2 0' * squareSize, panel_fg_alpha * a, DRAWFLAG_NORMAL);
+               drawstring_aspect(rankpos, rankname, '1 0.15 0' * squareSize, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
+       }
+
+       if (race_status_time - time <= 0) {
+               race_status_prev = -1;
+               race_status = -1;
+               strfree(race_status_name);
+               strfree(race_status_name_prev);
+       }
+}
+
+REGISTER_MUTATOR(cl_race, true);
+
+MUTATOR_HOOKFUNCTION(cl_race, HUD_Physics_showoptional)
+{
+       return ISGAMETYPE(RACE); // show the optional physics panel
+}
+
+MUTATOR_HOOKFUNCTION(cl_race, HUD_Score_show)
+{
+       return spectatee_status == -1 && ISGAMETYPE(RACE); // hide the score panel while observing
+}
+
+MUTATOR_HOOKFUNCTION(cl_race, ShowRankings)
+{
+       if(ISGAMETYPE(RACE))
+       {
+               M_ARGV(0, string) = _("Rankings");
+               return true;
+       }
+}
+
+MUTATOR_HOOKFUNCTION(cl_race, DrawScoreboardAccuracy)
+{
+       return ISGAMETYPE(RACE); // accuracy is not a factor in this gamemode
+}
+
+MUTATOR_HOOKFUNCTION(cl_race, ShowRaceTimer)
+{
+       return ISGAMETYPE(RACE); // show the race timer panel
+}
+
+MUTATOR_HOOKFUNCTION(cl_race, TeamRadar_Draw)
+{
+       return ISGAMETYPE(RACE); // show all competitors in a race
+}
diff --git a/qcsrc/common/gamemodes/gamemode/race/cl_race.qh b/qcsrc/common/gamemodes/gamemode/race/cl_race.qh
new file mode 100644 (file)
index 0000000..8ed2e3a
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+void HUD_Mod_Race(vector pos, vector mySize);
diff --git a/qcsrc/common/gamemodes/gamemode/race/race.qc b/qcsrc/common/gamemodes/gamemode/race/race.qc
new file mode 100644 (file)
index 0000000..f41a747
--- /dev/null
@@ -0,0 +1 @@
+#include "race.qh"
diff --git a/qcsrc/common/gamemodes/gamemode/race/race.qh b/qcsrc/common/gamemodes/gamemode/race/race.qh
new file mode 100644 (file)
index 0000000..2eed343
--- /dev/null
@@ -0,0 +1,46 @@
+#pragma once
+
+#include <common/mapinfo.qh>
+
+#ifdef CSQC
+void HUD_Mod_Race(vector pos, vector mySize);
+#endif
+CLASS(Race, Gametype)
+    INIT(Race)
+    {
+        this.gametype_init(this, _("Race"),"rc","g_race",GAMETYPE_FLAG_USEPOINTS,"","timelimit=20 qualifying_timelimit=5 laplimit=7 teamlaplimit=15 leadlimit=0",_("Race against other players to the finish line"));
+    }
+    METHOD(Race, m_parse_mapinfo, bool(string k, string v))
+    {
+        if (!k) {
+            cvar_set("g_race_qualifying_timelimit", cvar_defstring("g_race_qualifying_timelimit"));
+            return true;
+        }
+        switch (k) {
+            case "qualifying_timelimit":
+                cvar_set("g_race_qualifying_timelimit", v);
+                return true;
+        }
+        return false;
+    }
+    METHOD(Race, m_generate_mapinfo, void(Gametype this, string v))
+    {
+        if(v == "trigger_race_checkpoint")
+            MapInfo_Map_supportedGametypes |= this.m_flags;
+    }
+    METHOD(Race, m_isTwoBaseMode, bool())
+    {
+        return true;
+    }
+    METHOD(Race, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
+    {
+        TC(Gametype, this);
+        returns(menu, _("Laps:"),            1,   25,  1, "g_race_laps_limit",         string_null,                    string_null);
+    }
+#ifdef CSQC
+    ATTRIB(Race, m_modicons, void(vector pos, vector mySize), HUD_Mod_Race);
+#endif
+    ATTRIB(Race, m_legacydefaults, string, "20 5 7 15 0");
+ENDCLASS(Race)
+REGISTER_GAMETYPE(RACE, NEW(Race));
+#define g_race IS_GAMETYPE(RACE)
index bef3b19..baf2131 100644 (file)
@@ -1,5 +1,6 @@
 #include "sv_race.qh"
 
+#include <server/gamelog.qh>
 #include <server/race.qh>
 
 #define autocvar_g_race_laps_limit cvar("g_race_laps_limit")
index 5c0e949..bea3814 100644 (file)
@@ -1,4 +1,5 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/tdm/tdm.qc>
 #ifdef SVQC
     #include <common/gamemodes/gamemode/tdm/sv_tdm.qc>
 #endif
index 5be8ea6..4ff6f48 100644 (file)
@@ -1,4 +1,5 @@
 // generated file; do not modify
+#include <common/gamemodes/gamemode/tdm/tdm.qh>
 #ifdef SVQC
     #include <common/gamemodes/gamemode/tdm/sv_tdm.qh>
 #endif
diff --git a/qcsrc/common/gamemodes/gamemode/tdm/tdm.qc b/qcsrc/common/gamemodes/gamemode/tdm/tdm.qc
new file mode 100644 (file)
index 0000000..ca84d01
--- /dev/null
@@ -0,0 +1 @@
+#include "tdm.qh"
diff --git a/qcsrc/common/gamemodes/gamemode/tdm/tdm.qh b/qcsrc/common/gamemodes/gamemode/tdm/tdm.qh
new file mode 100644 (file)
index 0000000..d0e2394
--- /dev/null
@@ -0,0 +1,52 @@
+#pragma once
+
+#include <common/gamemodes/gamemode/deathmatch/deathmatch.qh>
+#include <common/mapinfo.qh>
+
+CLASS(TeamDeathmatch, Gametype)
+    INIT(TeamDeathmatch)
+    {
+        this.gametype_init(this, _("Team Deathmatch"),"tdm","g_tdm",GAMETYPE_FLAG_TEAMPLAY | GAMETYPE_FLAG_USEPOINTS | GAMETYPE_FLAG_PRIORITY,"","timelimit=15 pointlimit=50 teams=2 leadlimit=0",_("Help your team score the most frags against the enemy team"));
+    }
+    METHOD(TeamDeathmatch, m_parse_mapinfo, bool(string k, string v))
+    {
+        if (!k) {
+            cvar_set("g_tdm_teams", cvar_defstring("g_tdm_teams"));
+            return true;
+        }
+        switch (k) {
+            case "teams":
+                cvar_set("g_tdm_teams", v);
+                return true;
+        }
+        return false;
+    }
+    METHOD(TeamDeathmatch, m_isAlwaysSupported, bool(Gametype this, int spawnpoints, float diameter))
+    {
+        if(spawnpoints >= 8 && diameter > 4096)
+            return true;
+        return false;
+    }
+    METHOD(TeamDeathmatch, m_isForcedSupported, bool(Gametype this))
+    {
+        if(cvar("g_tdm_on_dm_maps"))
+        {
+            // if this is set, all DM maps support TDM too
+            if(!(MapInfo_Map_supportedGametypes & this.m_flags) && (MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DEATHMATCH.m_flags))
+                return true; // TODO: references another gametype (alternatively, we could check which gamemodes are always enabled and append this if any are supported)
+        }
+        return false;
+    }
+    METHOD(TeamDeathmatch, m_setTeams, void(string sa))
+    {
+        cvar_set("g_tdm_teams", sa);
+    }
+    METHOD(TeamDeathmatch, m_configuremenu, void(Gametype this, entity menu, void(entity me, string pLabel, float pMin, float pMax, float pStep, string pCvar, string tCvar, string pTooltip) returns))
+    {
+        TC(Gametype, this);
+        returns(menu, _("Point limit:"),     5,  100,  5, "g_tdm_point_limit",         "g_tdm_teams_override",         _("The amount of points needed before the match will end"));
+    }
+    ATTRIB(TeamDeathmatch, m_legacydefaults, string, "50 20 2 0");
+ENDCLASS(TeamDeathmatch)
+REGISTER_GAMETYPE(TEAM_DEATHMATCH, NEW(TeamDeathmatch));
+#define g_tdm IS_GAMETYPE(TEAM_DEATHMATCH)
index ae387e3..dce55aa 100644 (file)
@@ -589,7 +589,7 @@ void _MapInfo_Map_ApplyGametypeEx(string s, Gametype pWantedType, Gametype pThis
        }
 }
 
-Gametype MapInfo_Type_FromString(string gtype)
+Gametype MapInfo_Type_FromString(string gtype, bool dowarn)
 {
        string replacement = "";
        switch (gtype)
@@ -601,9 +601,10 @@ Gametype MapInfo_Type_FromString(string gtype)
                case "assault":   replacement = "as"; break;
                case "race":      replacement = "rc"; break;
        }
-       if (replacement != "" && WARN_COND)
+       if (replacement != "")
        {
-               LOG_WARNF("MapInfo_Type_FromString (probably %s): using deprecated name '%s'. Should use '%s'.", MapInfo_Map_bspname, gtype, replacement);
+               if (dowarn && WARN_COND)
+                       LOG_WARNF("MapInfo_Type_FromString (probably %s): using deprecated name '%s'. Should use '%s'.", MapInfo_Map_bspname, gtype, replacement);
                gtype = replacement;
        }
        FOREACH(Gametypes, it.mdl == gtype, return it);
@@ -920,7 +921,7 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet
                else if(t == "type")
                {
                        t = car(s); s = cdr(s);
-                       Gametype f = MapInfo_Type_FromString(t);
+                       Gametype f = MapInfo_Type_FromString(t, true);
                        //if(WARN_COND)
                                //LOG_WARN("Map ", pFilename, " contains the legacy 'type' keyword which is deprecated and will be removed in the future. Please migrate the mapinfo file to 'gametype'.");
                        if(f)
@@ -931,7 +932,7 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet
                else if(t == "gametype")
                {
                        t = car(s); s = cdr(s);
-                       Gametype f = MapInfo_Type_FromString(t);
+                       Gametype f = MapInfo_Type_FromString(t, true);
                        if(f)
                                _MapInfo_Map_ApplyGametypeEx (s, pGametypeToSet, f);
                        else if(WARN_COND)
@@ -982,7 +983,7 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, int pAllowGenerate, Gamet
                        t = car(s); s = cdr(s);
                        bool all = t == "all";
                     &