Merge branch 'master' into Mario/q3_speaker_fix 844/head
authorMario <mario.mario@y7mail.com>
Fri, 17 Jul 2020 07:42:39 +0000 (17:42 +1000)
committerMario <mario.mario@y7mail.com>
Fri, 17 Jul 2020 07:42:39 +0000 (17:42 +1000)
70 files changed:
.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/mutators/events.qh
qcsrc/common/csqcmodel_settings.qh
qcsrc/common/effects/all.inc
qcsrc/common/effects/effectinfo.inc
qcsrc/common/gamemodes/gamemode/ctf/sv_ctf.qc
qcsrc/common/gamemodes/gamemode/ctf/sv_ctf.qh
qcsrc/common/gamemodes/gamemode/cts/sv_cts.qc
qcsrc/common/gamemodes/gamemode/domination/sv_domination.qc
qcsrc/common/gamemodes/gamemode/keepaway/sv_keepaway.qc
qcsrc/common/gamemodes/gamemode/keyhunt/sv_keyhunt.qc
qcsrc/common/gamemodes/gamemode/nexball/sv_nexball.qc
qcsrc/common/gamemodes/gamemode/race/sv_race.qc
qcsrc/common/mapinfo.qc
qcsrc/common/mapinfo.qh
qcsrc/common/mapobjects/models.qc
qcsrc/common/minigames/sv_minigames.qc
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/stats.qh
qcsrc/common/vehicles/vehicle/racer.qc
qcsrc/common/vehicles/vehicle/racer_weapon.qc
qcsrc/common/vehicles/vehicle/racer_weapon.qh
qcsrc/common/weapons/all.qh
qcsrc/common/weapons/weapon.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/lib/self.qh
qcsrc/menu/xonotic/dialog_settings_misc.qc
qcsrc/menu/xonotic/dialog_settings_video.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/client.qc
qcsrc/server/command/vote.qc
qcsrc/server/compat/quake3.qc
qcsrc/server/g_damage.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/items.qc
qcsrc/server/mapvoting.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/miscfunctions.qh
qcsrc/server/mutators/events.qh
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 ef2b4ce..99d3dab 100644 (file)
@@ -1 +1 @@
-Tue Jul  7 07:23:45 CEST 2020
+Fri Jul 17 07:23:57 CEST 2020
index 28d247d..9eeec99 100644 (file)
@@ -4,12 +4,13 @@
 #
 # Translators:
 # 77960155d0a4db79ed901e7c2ee242e7_4b8c532, 2016
+# aaa627661149cfc7c57d1c75ef650b07_039425b, 2018
 # Hector Champipis <hector-hab@hotmail.com>, 2019
 # 77960155d0a4db79ed901e7c2ee242e7_4b8c532, 2016
 # Vindex <kon14.inside@gmail.com>, 2014
 # Konstantinos Mihalenas <ldinos99@gmail.com>, 2014
 # Marinus Savoritias, 2018
-# Marinus Savoritias, 2018
+# aaa627661149cfc7c57d1c75ef650b07_039425b, 2018
 # MasterWord, 2016
 # Mensious Mensious <ektoras@tutanota.com>, 2018-2019
 # Vindex <kon14.inside@gmail.com>, 2014
index 94fab4d..8bee8d5 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-06 21:37+0000\n"
+"PO-Revision-Date: 2020-07-14 22:31+0000\n"
 "Last-Translator: LegendGuard\n"
 "Language-Team: Spanish (http://www.transifex.com/team-xonotic/xonotic/"
 "language/es/)\n"
@@ -2493,7 +2493,7 @@ msgstr "^BG%s^K1 estuvo en el agua demasiado tiempo%s%s"
 #: qcsrc/common/notifications/all.inc:302
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
-msgstr "^BG%s^K1 chocó contra el suelo con un poca fuerza%s%s"
+msgstr "^BG%s^K1 chocó contra el suelo con poca fuerza%s%s"
 
 #: qcsrc/common/notifications/all.inc:302
 #, c-format
@@ -2675,7 +2675,7 @@ msgstr "^BG%s^K1 fue acribillado por una torreta Ametralladora%s%s"
 #: qcsrc/common/notifications/all.inc:333
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
-msgstr "^BG%s^K1 fue convertido en entrañas ardientes por una torreta MLRS%s%s"
+msgstr "^BG%s^K1 fue convertido en vísceras ardientes por una torreta MLRS%s%s"
 
 #: qcsrc/common/notifications/all.inc:334
 #, c-format
@@ -2944,7 +2944,7 @@ msgstr "^BG%s^BG recogió la Llave ^TC^TT"
 #: qcsrc/common/notifications/all.inc:395
 #, c-format
 msgid "^BG%s^F3 forfeited"
-msgstr "^BG%s^F3 perdido"
+msgstr "^BG%s^F3 ha abandonado"
 
 #: qcsrc/common/notifications/all.inc:396
 #, c-format
@@ -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!"
@@ -3815,7 +3816,7 @@ msgstr "^K1¡No pudiste recuperar tu aliento!"
 
 #: qcsrc/common/notifications/all.inc:626
 msgid "^K1You hit the ground with a crunch!"
-msgstr "^K1¡Golpeaste la tierra con un crujido!"
+msgstr "^K1¡Chocaste contra el suelo con un crujido!"
 
 #: qcsrc/common/notifications/all.inc:627
 msgid "^K1You felt a little too hot!"
@@ -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
@@ -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>"
@@ -8670,7 +8671,7 @@ msgstr "Desvanecimiento de cuerpo:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:63
 msgid "Gibs:"
-msgstr "Gibs:"
+msgstr "Vísceras:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:65
 msgid "GIBS^None"
@@ -9230,16 +9231,16 @@ msgstr "Texto del idioma"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:67
 msgid "Set language"
-msgstr "Elegir idioma:"
+msgstr "Elegir idioma"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:72
 msgid "Disable gore effects and harsh language"
-msgstr "Deshabilitar efectos sangrientos y lenguage ofensivo"
+msgstr "Deshabilitar efectos sangrientos y lenguaje ofensivo"
 
 #: qcsrc/menu/xonotic/dialog_settings_user.qc:73
 msgid "Replace blood and gibs with content that does not have any gore effects"
 msgstr ""
-"Reemplazar sangre y carne por contenido que no tenga nada de efectos "
+"Reemplazar sangre y vísceras por contenido que no tenga nada de efectos "
 "sangrientos"
 
 #: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:10
@@ -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 c268b79..22e19ea 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-06 22:07+0000\n"
+"PO-Revision-Date: 2020-07-17 03:11+0000\n"
 "Last-Translator: LegendGuard\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/team-xonotic/"
 "xonotic/language/ja_JP/)\n"
@@ -66,17 +66,17 @@ msgstr "FPS: %.*f"
 
 #: qcsrc/client/hud/panel/infomessages.qc:95
 msgid "^1Observing"
-msgstr "^1観察してる"
+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,20 +174,20 @@ 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..."
-msgstr "^2準備演習が終了する前に、全員の準備ができるまで待ちます..."
+msgstr "^2準備演習が終了する前に、全員の準備ができるまで待ち..."
 
 #: qcsrc/client/hud/panel/infomessages.qc:177
 msgid "^2Waiting for others to ready up..."
-msgstr "^2全員の準備ができるまで待ちます..."
+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
@@ -203,15 +205,15 @@ msgstr "チームメニュー"
 
 #: qcsrc/client/hud/panel/infomessages.qc:217
 msgid "^1Spectating this player:"
-msgstr "^1この選手を観戦する:"
+msgstr "^1この選手を観戦:"
 
 #: qcsrc/client/hud/panel/infomessages.qc:217
 msgid "^1Spectating you:"
-msgstr "^1あなたを観戦する:"
+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."
@@ -346,27 +348,27 @@ msgstr "QMCMD^旗が見えました、アイコン"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:807
 msgid "QMCMD^defending (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr "QMCMD^å®\88ã\81£ã\81¦ã\82\8b (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr "QMCMD^å®\88ã\82\8a中 (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:807
 msgid "QMCMD^defending, icon"
-msgstr "QMCMD^å®\88ã\81£ã\81¦ã\82\8b、アイコン"
+msgstr "QMCMD^å®\88ã\82\8a中、アイコン"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:808
 msgid "QMCMD^roaming (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr "QMCMD^動きてる (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr "QMCMD^動き (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:808
 msgid "QMCMD^roaming, icon"
-msgstr "QMCMD^動きてる、アイコン"
+msgstr "QMCMD^動き、アイコン"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:809
 msgid "QMCMD^attacking (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
-msgstr "QMCMD^攻撃してる (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
+msgstr "QMCMD^攻撃 (l:%l^7) (h:%h^7 a:%a^7 w:%w^7)"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:809
 msgid "QMCMD^attacking, icon"
-msgstr "QMCMD^攻撃してる、アイコン"
+msgstr "QMCMD^攻撃、アイコン"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:810
 msgid "QMCMD^killed flagcarrier (l:%y^7)"
@@ -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
@@ -1047,7 +1049,7 @@ msgstr "観客"
 #: qcsrc/client/hud/panel/scoreboard.qc:1870
 #, c-format
 msgid "^1Respawning in ^3%s^1..."
-msgstr "^3%s^1 後に再表示されてる..."
+msgstr "^3%s^1 後に再び現れ中..."
 
 #: qcsrc/client/hud/panel/scoreboard.qc:1880
 #, c-format
@@ -1182,7 +1184,7 @@ msgstr "^1ERROR:^7 pak index が見つかりませんでした。"
 
 #: qcsrc/client/mapvoting.qc:531
 msgid "Requesting preview..."
-msgstr "プレビューをリクエストしている..."
+msgstr "プレビューをリクエスト..."
 
 #: qcsrc/client/miscfunctions.qc:111
 msgid "Trying to remove a team which is not in the teamlist!"
@@ -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"
@@ -2193,12 +2195,12 @@ msgstr "^BG%s^BG が旗を失った"
 #: qcsrc/common/notifications/all.inc:251
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
-msgstr "^BG%s^BG が ^TC^TT^BG 旗を取得した"
+msgstr "^BG%s^BG が ^TC^TT^BG 旗を手に入れた"
 
 #: qcsrc/common/notifications/all.inc:252
 #, c-format
 msgid "^BG%s^BG got the flag"
-msgstr "^BG%s^BG が旗を取得した"
+msgstr "^BG%s^BG が旗を手に入れた"
 
 #: qcsrc/common/notifications/all.inc:253
 #: qcsrc/common/notifications/all.inc:254
@@ -2210,7 +2212,7 @@ msgstr "BG%s^BG が ^TC^TT^BG 旗を返した"
 #: qcsrc/common/notifications/all.inc:544
 #, c-format
 msgid "^F2Throwing coin... Result: %s^F2!"
-msgstr "^F2硬貨を投げている... 結果: %s^F2!"
+msgstr "^F2硬貨を投げ... 結果: %s^F2!"
 
 #: qcsrc/common/notifications/all.inc:258
 msgid "^BGYou don't have any fuel for the ^F1Jetpack"
@@ -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 の弾薬%s%sがなくなった"
+msgstr "^BG%s^K1 の弾薬%s%sがった"
 
 #: qcsrc/common/notifications/all.inc:320
 #, c-format
@@ -2642,309 +2644,310 @@ msgstr "^BG%s^K1 はテスラの砲塔%s%sによって感電死された"
 #: qcsrc/common/notifications/all.inc:337
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 はウォーカー砲塔%s%sから鉛強化を受けた"
 
 #: qcsrc/common/notifications/all.inc:338
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 はウォーカー砲塔%s%sによって釘付けされた"
 
 #: qcsrc/common/notifications/all.inc:339
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 はウォーカー砲塔%s%sによって爆破された"
 
 #: qcsrc/common/notifications/all.inc:340
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
-msgstr ""
+msgstr "^BG%s^K1 はバンブルビー爆発%s%sの爆風に巻き込まれた"
 
 #: qcsrc/common/notifications/all.inc:341
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
-msgstr ""
+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 ""
+msgstr "^BG%s^K1 はラプターのクラスター爆弾%s%sに捕まられた"
 
 #: qcsrc/common/notifications/all.inc:343
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
-msgstr ""
+msgstr "^BG%s^K1 はラプター爆発%s%sの爆風に巻き込まれた"
 
 #: qcsrc/common/notifications/all.inc:344
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
-msgstr ""
+msgstr "^BG%s^K1 は蜘蛛ボットの爆発%s%sの爆風に巻き込まれた"
 
 #: qcsrc/common/notifications/all.inc:345
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
-msgstr ""
+msgstr "^BG%s^K1 は蜘蛛ボットロケット%s%sによって爆破された"
 
 #: qcsrc/common/notifications/all.inc:346
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
-msgstr ""
+msgstr "^BG%s^K1 はレーサー爆発%s%sの爆風に巻き込まれた"
 
 #: qcsrc/common/notifications/all.inc:347
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
+"^BG%s^K1 はレーサーロケット%s%sからの避難所を見つけることができませんでした"
 
 #: qcsrc/common/notifications/all.inc:350
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s^K1 は ^BG%s^K1%s%s に裏切られた"
 
 #: qcsrc/common/notifications/all.inc:352
 #, c-format
 msgid "^BG%s^BG%s^BG (%s %s every %s seconds)"
-msgstr ""
+msgstr "^BG%s^BG%s^BG (%s %s、%s 秒ごと)"
 
 #: qcsrc/common/notifications/all.inc:354
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
-msgstr ""
+msgstr "^BG%s^K1 は ^BG%s によって凍結された"
 
 #: qcsrc/common/notifications/all.inc:355
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
-msgstr ""
+msgstr "^BG%s^K3 は ^BG%s によって復活された"
 
 #: qcsrc/common/notifications/all.inc:356
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
-msgstr ""
+msgstr "^BG%s^K3 は落下によって復活された"
 
 #: qcsrc/common/notifications/all.inc:357
 #, c-format
 msgid "^BG%s^K3 was revived by their Nade explosion"
-msgstr ""
+msgstr "^BG%s^K3 は手榴弾の爆発で復活された"
 
 #: qcsrc/common/notifications/all.inc:358
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s seconds"
-msgstr ""
+msgstr "^BG%s^K3 は %s 秒後に自動的に復活された"
 
 #: qcsrc/common/notifications/all.inc:359
 #, c-format
 msgid "^BG%s^K1 froze themself"
-msgstr ""
+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 ""
+msgstr "^TC^TT^BG チームがラウンドに勝利した"
 
 #: qcsrc/common/notifications/all.inc:362
 #: qcsrc/common/notifications/all.inc:676
 #, c-format
 msgid "^BG%s^BG wins the round"
-msgstr ""
+msgstr "^BG%s^BG がラウンドに勝利した"
 
 #: qcsrc/common/notifications/all.inc:363
 #: qcsrc/common/notifications/all.inc:539
 msgid "^BGRound tied"
-msgstr ""
+msgstr "^BGラウンドに引き分けになりました"
 
 #: qcsrc/common/notifications/all.inc:364
 #: qcsrc/common/notifications/all.inc:540
 msgid "^BGRound over, there's no winner"
-msgstr ""
+msgstr "^BGラウンド終了、勝者はいません"
 
 #: qcsrc/common/notifications/all.inc:366
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
-msgstr ""
+msgstr "^BG神モードはあなたに %s ユニットのダメージを保存した、詐欺師!"
 
 #: qcsrc/common/notifications/all.inc:368
 #, c-format
 msgid "^BG%s^BG got the %s^BG buff!"
-msgstr ""
+msgstr "^BG%s^BG が %s^BG バフを手に入れた!"
 
 #: qcsrc/common/notifications/all.inc:369
 #, c-format
 msgid "^BG%s^BG lost the %s^BG buff!"
-msgstr ""
+msgstr "^BG%s^BG は %s^BG バフを失った!"
 
 #: qcsrc/common/notifications/all.inc:370
 #: qcsrc/common/notifications/all.inc:683
 #, c-format
 msgid "^BGYou dropped the %s^BG buff!"
-msgstr ""
+msgstr "^BGあなたは %s^BG バフを落とした!"
 
 #: qcsrc/common/notifications/all.inc:371
 #: qcsrc/common/notifications/all.inc:684
 #, c-format
 msgid "^BGYou got the %s^BG buff!"
-msgstr ""
+msgstr "^BGあなたは %s^BG バフを手に入れた!"
 
 #: qcsrc/common/notifications/all.inc:373
 #: qcsrc/common/notifications/all.inc:687
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
-msgstr ""
+msgstr "^BGあなたは ^F1%s がない"
 
 #: qcsrc/common/notifications/all.inc:374
 #: qcsrc/common/notifications/all.inc:688
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
-msgstr ""
+msgstr "^BGあなたは ^F1%s^BG%s を落とした"
 
 #: qcsrc/common/notifications/all.inc:375
 #: qcsrc/common/notifications/all.inc:689
 #, c-format
 msgid "^BGYou got the ^F1%s"
-msgstr ""
+msgstr "^BGあなたは ^F1%s を手に入れた"
 
 #: qcsrc/common/notifications/all.inc:376
 #: qcsrc/common/notifications/all.inc:690
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
-msgstr ""
+msgstr "^BGあなたは ^F1%s に必要な弾薬が不足しています"
 
 #: qcsrc/common/notifications/all.inc:377
 #: qcsrc/common/notifications/all.inc:691
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
-msgstr ""
+msgstr "^F1%s %s^BG は発砲できませんが、^F1%s^BG は発砲できます"
 
 #: qcsrc/common/notifications/all.inc:378
 #: qcsrc/common/notifications/all.inc:692
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
-msgstr ""
+msgstr "^F1%s^BG はこのマップで ^F4使用できません^BG"
 
 #: qcsrc/common/notifications/all.inc:380
 #, c-format
 msgid "^BG%s^BG is connecting..."
-msgstr ""
+msgstr "^BG%s^BG が接続中..."
 
 #: qcsrc/common/notifications/all.inc:381
 #, c-format
 msgid "^BG%s^F3 connected"
-msgstr ""
+msgstr "^BG%s^F3 が接続されました"
 
 #: qcsrc/common/notifications/all.inc:382
 #, c-format
 msgid "^BG%s^F3 is now playing"
-msgstr ""
+msgstr "^BG%s^F3 は遊び中です"
 
 #: qcsrc/common/notifications/all.inc:383
 #, c-format
 msgid "^BG%s^F3 is now playing on the ^TC^TT team"
-msgstr ""
+msgstr "^BG%s^F3 は ^TC^TT チームでが遊び中です"
 
 #: qcsrc/common/notifications/all.inc:385
 #: qcsrc/common/notifications/all.inc:697
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
-msgstr ""
+msgstr "^BG%s^BG がボールを落とした!"
 
 #: qcsrc/common/notifications/all.inc:386
 #: qcsrc/common/notifications/all.inc:698
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
-msgstr ""
+msgstr "^BG%s^BG はボールを拾いた!"
 
 #: qcsrc/common/notifications/all.inc:388
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
-msgstr ""
+msgstr "^BG%s^BG は ^TC^TT チームの鍵を手に入った"
 
 #: qcsrc/common/notifications/all.inc:389
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
-msgstr ""
+msgstr "^BG%s^BG が ^TC^TT 鍵を落とした"
 
 #: qcsrc/common/notifications/all.inc:390
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
-msgstr ""
+msgstr "^BG%s^BG は ^TC^TT 鍵を失った"
 
 #: qcsrc/common/notifications/all.inc:391
 #, c-format
 msgid "^BG%s^BG pushed %s^BG causing the ^TC^TT Key ^BGdestruction"
-msgstr ""
+msgstr "^BG%s^BG が %s^BG を押したため、^TC^TT 鍵の^BG破壊を引き起こしている"
 
 #: qcsrc/common/notifications/all.inc:392
 #, c-format
 msgid "^BG%s^BG destroyed the ^TC^TT Key"
-msgstr ""
+msgstr "^BG%s^BG は ^TC^TT 鍵を破壊した"
 
 #: qcsrc/common/notifications/all.inc:393
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
-msgstr ""
+msgstr "^BG%s^BG は ^TC^TT 鍵を拾いた"
 
 #: qcsrc/common/notifications/all.inc:395
 #, c-format
 msgid "^BG%s^F3 forfeited"
-msgstr ""
+msgstr "^BG%s^F3 は捨てた"
 
 #: qcsrc/common/notifications/all.inc:396
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
-msgstr ""
+msgstr "^BG%s^F3 の寿命は残っていない"
 
 #: qcsrc/common/notifications/all.inc:398
 msgid "^BGMonsters are currently disabled"
-msgstr ""
+msgstr "^BGモンスターは現在無効になっています"
 
 #: qcsrc/common/notifications/all.inc:400
 msgid "^BGThe ^TC^TT^BG team held the ball for too long"
-msgstr ""
+msgstr "^BG ^TC^TT^BG チームがボールを長時間保持した"
 
 #: qcsrc/common/notifications/all.inc:402
 #, c-format
 msgid "^BG%s^BG captured %s^BG control point"
-msgstr ""
+msgstr "^BG%s^BG が %s^BG コントロールポイントを取れた"
 
 #: qcsrc/common/notifications/all.inc:403
 #, c-format
 msgid "^BG%s^BG captured a control point"
-msgstr ""
+msgstr "^BG%s^BG がコントロールポイントを取れた"
 
 #: qcsrc/common/notifications/all.inc:404
 #, c-format
 msgid "^TC^TT^BG team %s^BG control point has been destroyed by %s"
-msgstr ""
+msgstr "^TC^TT^BG チーム %s^BG コントロールポイントが %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 チームコントロールポイントが %s によって破壊された"
 
 #: qcsrc/common/notifications/all.inc:406
 msgid "^TC^TT^BG generator has been destroyed"
-msgstr ""
+msgstr "^TC^TT^BG 発生器が破壊された"
 
 #: qcsrc/common/notifications/all.inc:407
 msgid "^TC^TT^BG generator spontaneously combusted due to overtime!"
-msgstr ""
+msgstr "^TC^TT^BG 発生器は自発的に残業により燃焼した"
 
 #: qcsrc/common/notifications/all.inc:409
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
-msgstr ""
+msgstr "^BG%s^K1 は「不可視」を拾いた"
 
 #: qcsrc/common/notifications/all.inc:410
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
-msgstr ""
+msgstr "^BG%s^K1 は「盾」を拾いた"
 
 #: qcsrc/common/notifications/all.inc:411
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
-msgstr ""
+msgstr "^BG%s^K1 は「速度」を拾いた"
 
 #: qcsrc/common/notifications/all.inc:412
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
-msgstr ""
+msgstr "^BG%s^K1 は「力」を拾いた"
 
 #: qcsrc/common/notifications/all.inc:414
 #, c-format
@@ -2954,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
@@ -3008,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
@@ -3038,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
@@ -3058,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
@@ -3071,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
@@ -3293,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 ""
@@ -3440,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 ""
@@ -3451,216 +3480,219 @@ 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!"
-msgstr ""
+msgstr "^BGあなたは ^TC^TT^BG 旗を手に入れた!"
 
 #: qcsrc/common/notifications/all.inc:561
 msgid "^BGYou got the flag!"
-msgstr ""
+msgstr "^BGあなたのは旗を手に入れた!"
 
 #: qcsrc/common/notifications/all.inc:562
 #, c-format
 msgid "^BGYou got your %steam^BG's flag, return it!"
-msgstr ""
+msgstr "^BGあなたの%sチーム^BGの旗を手に入れた、返して!"
 
 #: qcsrc/common/notifications/all.inc:563
 #, c-format
 msgid "^BGYou got the %senemy^BG's flag, return it!"
-msgstr ""
+msgstr "^BGあなたは %s敵^BG の旗を手に入れた、返して!"
 
 #: qcsrc/common/notifications/all.inc:564
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
-msgstr ""
+msgstr "^BG%s敵^BGがあなたの旗を手に入れた! 取り戻せ!"
 
 #: qcsrc/common/notifications/all.inc:565
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
-msgstr ""
+msgstr "^BG%s敵 (^BG%s%s)^BG があなたの旗を手に入れた! 取り戻せ!"
 
 #: qcsrc/common/notifications/all.inc:566
 #, c-format
 msgid "^BGThe %senemy^BG got the flag! Retrieve it!"
-msgstr ""
+msgstr "^BG%s敵^BGが旗を手に入れた! 取り戻せ!"
 
 #: qcsrc/common/notifications/all.inc:567
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got the flag! Retrieve it!"
-msgstr ""
+msgstr "^BG%s敵 (^BG%s%s)^BG が旗を手に入れた! 取り戻せ!"
 
 #: qcsrc/common/notifications/all.inc:568
 #, c-format
 msgid "^BGThe %senemy^BG got their flag! Retrieve it!"
-msgstr ""
+msgstr "^BG%s敵^BGは旗を手に入れた! 取り戻せ!"
 
 #: qcsrc/common/notifications/all.inc:569
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got their flag! Retrieve it!"
-msgstr ""
+msgstr "^BG%s敵 (^B%s%sG)^BG は旗を手に入れた! 取り戻せ!"
 
 #: qcsrc/common/notifications/all.inc:570
 #, c-format
 msgid "^BGYour %steam mate^BG got the ^TC^TT^BG flag! Protect them!"
-msgstr ""
+msgstr "^BGあなたの%sチームメイト^BGは ^TC^TT^BG 旗を手に入れた! 守れ!"
 
 #: qcsrc/common/notifications/all.inc:571
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the ^TC^TT^BG flag! Protect them!"
 msgstr ""
+"^BGあなたの%sチームメイト (^B%s%sG)^BG は ^TC^TT^BG 旗を手に入れた! 守れ!"
 
 #: qcsrc/common/notifications/all.inc:572
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
-msgstr ""
+msgstr "^BGあなたの%sチームメイト^BGは旗を手に入れた! 守れ!"
 
 #: qcsrc/common/notifications/all.inc:573
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
-msgstr ""
+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!"
-msgstr ""
+msgstr "^F2あなたは^K1ボーナス手榴弾^F2を手に入れた!"
 
 #: qcsrc/common/notifications/all.inc:620
 #, c-format
@@ -3668,216 +3700,219 @@ 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..."
-msgstr "^K1あなたは弾薬がなくなったために再び現れている..."
+msgstr "^K1あなたは弾薬が切れたために再び現れている..."
 
 #: qcsrc/common/notifications/all.inc:635
 msgid "^K1You were killed for running out of ammo..."
-msgstr "^K1あなたは弾薬がなくなったために殺された..."
+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 ""
@@ -3890,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!"
@@ -3904,109 +3939,119 @@ 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"
-msgstr ""
+msgstr "^BGあなたは^F1燃料再生器を手に入れた"
 
 #: qcsrc/common/notifications/all.inc:686
 msgid "^BGYou got the ^F1Jetpack"
-msgstr ""
+msgstr "^BGあなたは^F1ジェットパックを手に入れた"
 
 #: qcsrc/common/notifications/all.inc:694
 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
@@ -4014,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
@@ -4057,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 ""
@@ -4131,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
@@ -4138,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"
@@ -4292,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! "
@@ -4315,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! "
@@ -4329,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! "
@@ -4348,7 +4414,7 @@ msgstr ""
 #: 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! "
@@ -4362,7 +4428,7 @@ msgstr ""
 #: 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! "
@@ -4376,7 +4442,7 @@ msgstr ""
 #: 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! "
@@ -4385,7 +4451,7 @@ 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
@@ -4497,23 +4563,23 @@ msgstr ""
 
 #: 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"
@@ -4521,51 +4587,51 @@ 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."
@@ -4590,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"
@@ -4598,94 +4664,94 @@ 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"
-msgstr ""
+msgstr "ウォーカー砲塔"
 
 #: qcsrc/common/turrets/turret/walker_weapon.qh:7
 msgid "Walker"
-msgstr ""
+msgstr "ウォーカー"
 
 #: qcsrc/common/util.qc:1390
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:176
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:186
 msgid "Male"
-msgstr ""
+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>"
@@ -5091,7 +5157,7 @@ msgstr "ラプターフレア"
 
 #: qcsrc/common/vehicles/vehicle/spiderbot.qh:19
 msgid "Spiderbot"
-msgstr "スパイダーボット"
+msgstr "蜘蛛ボット"
 
 #: qcsrc/common/weapons/all.qh:76
 msgid "Weapons dump command only works with sv_cmd."
@@ -5135,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"
@@ -5670,7 +5736,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"
@@ -5899,7 +5965,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"
@@ -5923,7 +5989,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
 msgid "Dynamic size"
-msgstr ""
+msgstr "ダイナミックサイズ:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qh:6
 msgid "Items Time Panel"
@@ -6010,23 +6076,23 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:51
 msgid "qu/s"
-msgstr ""
+msgstr "qu/s"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:52
 msgid "m/s"
-msgstr ""
+msgstr "ミリ秒"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:53
 msgid "km/h"
-msgstr ""
+msgstr "時速キロ"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:54
 msgid "mph"
-msgstr ""
+msgstr "時速マイル"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:55
 msgid "knots"
-msgstr ""
+msgstr "ノット"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:57
 msgid "Show"
@@ -6079,7 +6145,7 @@ 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
@@ -6092,31 +6158,31 @@ 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:"
@@ -6148,11 +6214,11 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:17
 msgid "Score:"
-msgstr ""
+msgstr "得点:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:20
 msgid "Rankings:"
-msgstr ""
+msgstr "ランキング:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_score.qc:21
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:58
@@ -6321,7 +6387,7 @@ 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
@@ -6339,51 +6405,51 @@ msgstr ""
 
 #: 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
@@ -6412,24 +6478,24 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:29
 msgid "No moving"
-msgstr ""
+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"
@@ -6498,27 +6564,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 ""
@@ -6528,15 +6594,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"
@@ -6544,59 +6610,59 @@ 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"
-msgstr ""
+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 ""
@@ -6606,7 +6672,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"
@@ -6614,7 +6680,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"
@@ -6622,7 +6688,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"
@@ -6630,7 +6696,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"
@@ -6790,6 +6856,8 @@ msgid ""
 "Enable dodging (quick acceleration in a given direction). Double-tap a "
 "directional key to dodge"
 msgstr ""
+"避けるを有効にする (特定の方向への迅速な加速)。方向キーを避けてダブルタップし"
+"て"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:168
 msgid "An explosion occurs when two players collide"
@@ -6829,7 +6897,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:211
 msgid "Grappling hook"
-msgstr ""
+msgstr "グラップリングフック"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:212
 msgid "Players spawn with the grappling hook. Press the 'hook' key to use it"
@@ -7166,19 +7234,19 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:69
 msgid "MUSICPL^Prev"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:72
 msgid "MUSICPL^Next"
-msgstr ""
+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"
@@ -7194,11 +7262,11 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:142
 msgid "Previous"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:145
 msgid "Next"
-msgstr ""
+msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:150
 msgid "Slide show"
@@ -7214,11 +7282,11 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:50
 msgid "Name"
-msgstr ""
+msgstr "名前"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:79
 msgid "Model"
-msgstr ""
+msgstr "モデル"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:98
 msgid "Glowing color"
@@ -7617,7 +7685,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"
@@ -7667,7 +7735,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:45
 msgid "PRE^OMG!"
-msgstr ""
+msgstr "OMG!"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:48
 msgid "PRE^Low"
@@ -7911,7 +7979,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"
@@ -8047,12 +8115,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 ""
@@ -8064,11 +8132,11 @@ msgstr ""
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:81
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:97
 msgid "Size:"
-msgstr ""
+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"
@@ -8088,7 +8156,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 ""
@@ -8099,15 +8167,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"
@@ -8218,12 +8286,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"
@@ -8292,7 +8360,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"
@@ -8439,7 +8507,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:63
 msgid "Gibs:"
-msgstr ""
+msgstr "内臓:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:65
 msgid "GIBS^None"
@@ -8631,16 +8699,16 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:91
 msgid "Gun model swaying"
-msgstr ""
+msgstr "揺れる銃モデル"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qc:96
 msgid "Gun model bobbing"
-msgstr ""
+msgstr "振る銃モデル"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_weapons.qh:7
 #: qcsrc/menu/xonotic/keybinder.qc:51
 msgid "Weapons"
-msgstr ""
+msgstr "武器"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:34
 msgid "Key Bindings"
@@ -8726,7 +8794,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"
@@ -8799,7 +8867,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:38
 msgid "ISDN"
-msgstr ""
+msgstr "ISDN"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:39
 msgid "Slow ADSL"
@@ -8871,7 +8939,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:"
@@ -8895,7 +8963,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:128
 msgid "Menu tooltips:"
-msgstr ""
+msgstr "メニューツールチップ:"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:130
 msgid ""
@@ -8905,11 +8973,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"
@@ -8938,11 +9006,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"
@@ -8950,7 +9018,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:45
 msgid "Setting:"
-msgstr ""
+msgstr "設定:"
 
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:49
 msgid "Type:"
@@ -8978,15 +9046,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"
@@ -9006,11 +9074,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"
@@ -9018,51 +9086,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"
@@ -9070,15 +9138,15 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:54
 msgid "16bit"
-msgstr ""
+msgstr "16bit"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:55
 msgid "32bit"
-msgstr ""
+msgstr "32bit"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:59
 msgid "Full screen"
-msgstr ""
+msgstr "フルスケ"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:61
 msgid "Vertical Synchronization"
@@ -9108,25 +9176,25 @@ 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
 msgid "2x"
-msgstr ""
+msgstr "2x"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:76
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:87
 msgid "4x"
-msgstr ""
+msgstr "4x"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:77
 msgid "8x"
-msgstr ""
+msgstr "8x"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:78
 msgid "16x"
-msgstr ""
+msgstr "16x"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:81
 msgid "Antialiasing:"
@@ -9140,7 +9208,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"
@@ -9158,7 +9226,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"
@@ -9166,11 +9234,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"
@@ -9178,7 +9246,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
@@ -9190,31 +9258,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 ""
@@ -9224,7 +9292,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"
@@ -9232,7 +9300,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:139
 msgid "Saturation:"
-msgstr ""
+msgstr "飽和:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:142
 msgid ""
@@ -9242,7 +9310,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:146
 msgid "LIT^Ambient:"
-msgstr ""
+msgstr "アンビエント:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:148
 msgid ""
@@ -9252,7 +9320,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"
@@ -9270,7 +9338,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)"
@@ -9290,19 +9358,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!"
@@ -9334,7 +9402,7 @@ msgstr "赤"
 
 #: qcsrc/menu/xonotic/dialog_teamselect.qc:38
 msgid "blue"
-msgstr "青"
+msgstr "青"
 
 #: qcsrc/menu/xonotic/dialog_teamselect.qc:39
 msgid "yellow"
@@ -9351,7 +9419,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?"
@@ -9371,11 +9439,11 @@ msgstr "やりたい放題"
 
 #: qcsrc/menu/xonotic/keybinder.qc:35
 msgid "Moving"
-msgstr ""
+msgstr "動き中"
 
 #: qcsrc/menu/xonotic/keybinder.qc:36
 msgid "forward"
-msgstr ""
+msgstr "前方"
 
 #: qcsrc/menu/xonotic/keybinder.qc:37
 msgid "backpedal"
@@ -9407,7 +9475,7 @@ msgstr "ジェットパック"
 
 #: qcsrc/menu/xonotic/keybinder.qc:46
 msgid "Attacking"
-msgstr ""
+msgstr "攻撃中"
 
 #: qcsrc/menu/xonotic/keybinder.qc:52
 msgid "WEAPON^previous"
@@ -9495,7 +9563,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/keybinder.qc:109
 msgid "disconnect"
-msgstr ""
+msgstr "切断"
 
 #: qcsrc/menu/xonotic/keybinder.qc:110
 msgid "quit"
index 21a1802..6e56e0d 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" 52%
+fi    "Finnish" "Suomi" 100%
+ja_JP "ja_JP" "ja_JP" 74%
 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 0629c2a..2b17928 100644 (file)
@@ -179,13 +179,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) \
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 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 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 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 32e39e2..6e333c1 100644 (file)
@@ -1,5 +1,6 @@
 #include "sv_domination.qh"
 
+#include <server/gamelog.qh>
 #include <server/teamplay.qh>
 
 bool g_domination;
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 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 38b7a7f..079b181 100644 (file)
@@ -1,5 +1,7 @@
 #include "sv_nexball.qh"
 
+#include <server/gamelog.qh>
+
 .entity ballcarried;
 
 int autocvar_g_nexball_goalleadlimit;
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 ae387e3..c9e5099 100644 (file)
@@ -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 (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);
index 4d598e8..9b4dfa2 100644 (file)
@@ -680,4 +680,4 @@ void MapInfo_ClearTemps(); // call this when done with mapinfo for this frame
 void MapInfo_Shutdown(); // call this in the shutdown handler
 
 #define MAPINFO_SETTEMP_ACL_USER cvar_string("g_mapinfo_settemp_acl")
-#define MAPINFO_SETTEMP_ACL_SYSTEM "-g_mapinfo_* -rcon_* -_* -g_ban* -r_water +*"
+#define MAPINFO_SETTEMP_ACL_SYSTEM "-g_mapinfo_* -rcon_* -_* -g_ban* +*"
index 18d0336..790978b 100644 (file)
@@ -195,11 +195,11 @@ spawnfunc(misc_models)            { this.angles_x = -this.angles.x; G_MODEL_INIT
 // non-solid brush entities:
 spawnfunc(func_illusionary)       { G_MODEL_INIT      (this, SOLID_NOT) } // Q1 name (WARNING: MISPREDICTED)
 spawnfunc(func_clientillusionary) { G_CLIENTMODEL_INIT(this, SOLID_NOT) } // brush entity
-spawnfunc(func_static)            { G_MODEL_INIT      (this, SOLID_NOT) } // DEPRECATED old alias name from some other game
 
 // solid brush entities
 spawnfunc(func_wall)              { G_MODEL_INIT      (this, SOLID_BSP) } // Q1 name
 spawnfunc(func_clientwall)        { G_CLIENTMODEL_INIT(this, SOLID_BSP) } // brush entity (WARNING: MISPREDICTED)
+spawnfunc(func_static)            { G_MODEL_INIT      (this, SOLID_BSP) } // DEPRECATED old alias name from some other game
 #elif defined(CSQC)
 .float alpha;
 .float scale;
index af74e6a..2e793d1 100644 (file)
@@ -1,6 +1,8 @@
 #include "sv_minigames.qh"
 #include "minigames.qh"
 
+#include <server/gamelog.qh>
+
 void player_clear_minigame(entity player)
 {
        CS(player).active_minigame = NULL;
index 5cb1d0b..4effcbd 100644 (file)
@@ -1,6 +1,7 @@
 // generated file; do not modify
 #include <common/physics/movetypes/follow.qc>
 #include <common/physics/movetypes/movetypes.qc>
+#include <common/physics/movetypes/push.qc>
 #include <common/physics/movetypes/step.qc>
 #include <common/physics/movetypes/toss.qc>
 #include <common/physics/movetypes/walk.qc>
index 1b1241a..32ae381 100644 (file)
@@ -1,6 +1,7 @@
 // generated file; do not modify
 #include <common/physics/movetypes/follow.qh>
 #include <common/physics/movetypes/movetypes.qh>
+#include <common/physics/movetypes/push.qh>
 #include <common/physics/movetypes/step.qh>
 #include <common/physics/movetypes/toss.qh>
 #include <common/physics/movetypes/walk.qh>
index 70157d1..b34bd3f 100644 (file)
@@ -2,5 +2,6 @@
 #include "walk.qc"
 #include "step.qc"
 #include "follow.qc"
+#include "push.qc"
 
 #include "movetypes.qc"
index 7894d14..28af884 100644 (file)
@@ -4,12 +4,12 @@
 void set_movetype(entity this, int mt)
 {
        this.move_movetype = mt;
-       if (mt == MOVETYPE_PHYSICS || mt == MOVETYPE_PUSH || mt == MOVETYPE_FAKEPUSH) {
+       if (mt == MOVETYPE_PHYSICS) {
                this.move_qcphysics = false;
        }
        if(!IL_CONTAINS(g_moveables, this))
                IL_PUSH(g_moveables, this); // add it to the moveable entities list (even if it doesn't move!) logic: if an object never sets its movetype, we assume it never does anything notable
-       this.movetype = (this.move_qcphysics) ? MOVETYPE_NONE : mt;
+       this.movetype = (this.move_qcphysics) ? MOVETYPE_QCENTITY : mt;
 }
 #elif defined(CSQC)
 void set_movetype(entity this, int mt)
@@ -18,6 +18,89 @@ void set_movetype(entity this, int mt)
 }
 #endif
 
+bool _Movetype_NudgeOutOfSolid_PivotIsKnownGood(entity this, vector pivot) // SV_NudgeOutOfSolid_PivotIsKnownGood
+{
+       vector stuckorigin = this.origin;
+       vector goodmins = pivot, goodmaxs = pivot;
+       for(int bump = 0; bump < 6; bump++)
+       {
+               int coord = 2 - (bump >> 1);
+               int dir = (bump & 1);
+
+               for(int subbump = 0; ; ++subbump)
+               {
+                       vector testorigin = stuckorigin;
+                       if(dir)
+                       {
+                               // pushing maxs
+                               switch(coord)
+                               {
+                                       case 0: testorigin.x += this.maxs_x - goodmaxs.x; break;
+                                       case 1: testorigin.y += this.maxs_y - goodmaxs.y; break;
+                                       case 2: testorigin.z += this.maxs_z - goodmaxs.z; break;
+                               }
+                       }
+                       else
+                       {
+                               // pushing mins
+                               switch(coord)
+                               {
+                                       case 0: testorigin.x += this.mins_x - goodmins.x; break;
+                                       case 1: testorigin.y += this.mins_y - goodmins.y; break;
+                                       case 2: testorigin.z += this.mins_z - goodmins.z; break;
+                               }
+                       }
+
+                       tracebox(stuckorigin, goodmins, goodmaxs, testorigin, MOVE_NOMONSTERS, this);
+                       if(trace_startsolid && trace_ent.solid == SOLID_BSP) // NOTE: this checks for bmodelstartsolid in the engine
+                       {
+                               // BAD BAD, can't fix that
+                               return false;
+                       }
+
+                       if(trace_fraction >= 1)
+                               break; // it WORKS!
+
+                       if(subbump >= 10)
+                       {
+                               // BAD BAD, can't fix that
+                               return false;
+                       }
+
+                       // we hit something... let's move out of it
+                       vector move = trace_endpos - testorigin;
+                       float nudge = (trace_plane_normal * move) + 0.03125; // FIXME cvar this constant
+                       stuckorigin = stuckorigin + nudge * trace_plane_normal;
+               }
+
+               if(dir)
+               {
+                       // pushing maxs
+                       switch(coord)
+                       {
+                               case 0: goodmaxs.x = this.maxs_x; break;
+                               case 1: goodmaxs.y = this.maxs_y; break;
+                               case 2: goodmaxs.z = this.maxs_z; break;
+                       }
+               }
+               else
+               {
+                       // pushing mins
+                       switch(coord)
+                       {
+                               case 0: goodmins.x = this.mins_x; break;
+                               case 1: goodmins.y = this.mins_y; break;
+                               case 2: goodmins.z = this.mins_z; break;
+                       }
+               }
+       }
+
+       // WE WIN
+       this.origin = stuckorigin;
+
+       return true;
+}
+
 void _Movetype_WallFriction(entity this, vector stepnormal)  // SV_WallFriction
 {
        /*float d, i;
@@ -43,7 +126,7 @@ int _Movetype_FlyMove(entity this, float dt, bool applygravity, bool applystepno
        if(dt <= 0)
                return 0;
 
-       int blocked = 0;
+       int blockedflag = 0;
        int i, j, numplanes = 0;
        float time_left = dt, grav = 0;
        vector push;
@@ -79,7 +162,7 @@ int _Movetype_FlyMove(entity this, float dt, bool applygravity, bool applystepno
                {
                        // we got teleported by a touch function
                        // let's abort the move
-                       blocked |= 8;
+                       blockedflag |= 8;
                        break;
                }
 
@@ -102,7 +185,7 @@ int _Movetype_FlyMove(entity this, float dt, bool applygravity, bool applystepno
                        if(trace_plane_normal.z > 0.7)
                        {
                                // floor
-                               blocked |= 1;
+                               blockedflag |= 1;
 
                                if(!trace_ent)
                                {
@@ -122,19 +205,19 @@ int _Movetype_FlyMove(entity this, float dt, bool applygravity, bool applystepno
 
                        if(!_Movetype_PushEntity(this, steppush, true, false))
                        {
-                               blocked |= 8;
+                               blockedflag |= 8;
                                break;
                        }
                        if(!_Movetype_PushEntity(this, push, true, false))
                        {
-                               blocked |= 8;
+                               blockedflag |= 8;
                                break;
                        }
                        float trace2_fraction = trace_fraction;
                        steppush = vec3(0, 0, org.z - this.origin_z);
                        if(!_Movetype_PushEntity(this, steppush, true, false))
                        {
-                               blocked |= 8;
+                               blockedflag |= 8;
                                break;
                        }
 
@@ -152,7 +235,7 @@ int _Movetype_FlyMove(entity this, float dt, bool applygravity, bool applystepno
                else
                {
                        // step - return it to caller
-                       blocked |= 2;
+                       blockedflag |= 2;
                        // save the trace for player extrafriction
                        if(applystepnormal)
                                move_stepnormal = trace_plane_normal;
@@ -172,7 +255,7 @@ int _Movetype_FlyMove(entity this, float dt, bool applygravity, bool applystepno
                {
                        // this shouldn't really happen
                        this.velocity = '0 0 0';
-                       blocked = 3;
+                       blockedflag = 3;
                        break;
                }
 
@@ -208,7 +291,7 @@ int _Movetype_FlyMove(entity this, float dt, bool applygravity, bool applystepno
                        if(numplanes != 2)
                        {
                                this.velocity = '0 0 0';
-                               blocked = 7;
+                               blockedflag = 7;
                                break;
                        }
                        vector dir = cross(planes[0], planes[1]);
@@ -233,10 +316,10 @@ int _Movetype_FlyMove(entity this, float dt, bool applygravity, bool applystepno
        }
 
        // LordHavoc: this came from QW and allows you to get out of water more easily
-       if(GAMEPLAYFIX_EASIERWATERJUMP(this) && (this.flags & FL_WATERJUMP) && !(blocked & 8))
+       if(GAMEPLAYFIX_EASIERWATERJUMP(this) && (this.flags & FL_WATERJUMP) && !(blockedflag & 8))
                this.velocity = primal_velocity;
 
-       if(PHYS_WALLCLIP(this) && this.pm_time && !(this.flags & FL_WATERJUMP) && !(blocked & 8))
+       if(PHYS_WALLCLIP(this) && this.pm_time && !(this.flags & FL_WATERJUMP) && !(blockedflag & 8))
                this.velocity = primal_velocity;
 
        if(applygravity)
@@ -248,7 +331,7 @@ int _Movetype_FlyMove(entity this, float dt, bool applygravity, bool applystepno
                }
        }
 
-       return blocked;
+       return blockedflag;
 }
 
 void _Movetype_CheckVelocity(entity this)  // SV_CheckVelocity
@@ -578,10 +661,6 @@ bool _Movetype_PushEntity(entity this, vector push, bool failonstartsolid, bool
        return (this.origin == last_origin); // false if teleported by touch
 }
 
-
-.float ltime;
-.void() blocked;
-
 void _Movetype_Physics_Frame(entity this, float movedt)
 {
        this.move_didgravity = -1;
@@ -589,7 +668,7 @@ void _Movetype_Physics_Frame(entity this, float movedt)
        {
                case MOVETYPE_PUSH:
                case MOVETYPE_FAKEPUSH:
-                       LOG_DEBUG("Physics: Lacking QuakeC support for Push movetype, FIX ME by using engine physics!");
+                       _Movetype_Physics_Push(this, movedt);
                        break;
                case MOVETYPE_NONE:
                        break;
@@ -644,17 +723,23 @@ void _Movetype_Physics_ClientFrame(entity this, float movedt)
                        this.angles = this.angles + movedt * this.avelocity;
                        break;
                case MOVETYPE_STEP:
+                       if (GAMEPLAYFIX_UNSTICKPLAYERS(this) == 2)
+                               _Movetype_CheckStuck(this);
                        _Movetype_Physics_Step(this, movedt);
                        break;
                case MOVETYPE_WALK:
                case MOVETYPE_FLY:
                case MOVETYPE_FLY_WORLDONLY:
+                       if (movedt > 0 && GAMEPLAYFIX_UNSTICKPLAYERS(this) == 2)
+                               _Movetype_CheckStuck(this);
                        _Movetype_Physics_Walk(this, movedt);
                        break;
                case MOVETYPE_TOSS:
                case MOVETYPE_BOUNCE:
                case MOVETYPE_BOUNCEMISSILE:
                case MOVETYPE_FLYMISSILE:
+                       if (GAMEPLAYFIX_UNSTICKPLAYERS(this) == 2)
+                               _Movetype_CheckStuck(this);
                        _Movetype_Physics_Toss(this, movedt);
                        break;
                case MOVETYPE_PHYSICS:
index 52610c5..13867d1 100644 (file)
@@ -94,6 +94,7 @@ const int UNSTICK_STUCK = 2;
 // set by _Movetype_FlyMove
 vector move_stepnormal;
 
+bool _Movetype_NudgeOutOfSolid_PivotIsKnownGood(entity this, vector pivot);
 void _Movetype_WallFriction(entity this, vector stepnormal);
 int _Movetype_FlyMove(entity this, float dt, bool applygravity, bool applystepnormal, float stepheight);
 void _Movetype_CheckVelocity(entity this);
@@ -142,6 +143,7 @@ const int MOVETYPE_ANGLECLIP        = 2;
 #endif
 
 const int MOVETYPE_QCPLAYER = 150; // QC-driven player physics, no think functions!
+const int MOVETYPE_QCENTITY = 151; // QC-driven entity physics, some think functions!
 
 const int FL_ONSLICK = BIT(20);
 
diff --git a/qcsrc/common/physics/movetypes/push.qc b/qcsrc/common/physics/movetypes/push.qc
new file mode 100644 (file)
index 0000000..66ff42a
--- /dev/null
@@ -0,0 +1,222 @@
+#include "push.qh"
+void _Movetype_PushMove(entity this, float dt) // SV_PushMove
+{
+       if(this.velocity == '0 0 0' && this.avelocity == '0 0 0')
+       {
+               this.ltime += dt;
+               return;
+       }
+
+       switch(this.solid)
+       {
+               // LadyHavoc: valid pusher types
+               case SOLID_BSP:
+               case SOLID_BBOX:
+               case SOLID_SLIDEBOX:
+               case SOLID_CORPSE: // LadyHavoc: this would be weird...
+                       break;
+               // LadyHavoc: no collisions
+               case SOLID_NOT:
+               case SOLID_TRIGGER:
+               {
+                       this.origin = this.origin + dt * this.velocity;
+                       this.angles = this.angles + dt * this.avelocity;
+                       this.angles_x -= 360.0 * floor(this.angles_x * (1.0 / 360.0));
+                       this.angles_y -= 360.0 * floor(this.angles_y * (1.0 / 360.0));
+                       this.angles_z -= 360.0 * floor(this.angles_z * (1.0 / 360.0));
+                       this.ltime += dt;
+                       _Movetype_LinkEdict(this, false);
+                       return;
+               }
+               default:
+               {
+                       LOG_INFOF("_Movetype_Physics_Push: entity #%d, unrecognized solid type %d", etof(this), this.solid);
+                       return;
+               }
+       }
+       if(!this.modelindex)
+       {
+               LOG_INFOF("_Movetype_Physics_Push: entity #%d has an invalid modelindex %d", etof(this), this.modelindex);
+               return;
+       }
+
+       bool rotated = ((vlen2(this.angles) + vlen2(this.avelocity)) > 0);
+
+       vector move1 = this.velocity * dt;
+       vector moveangle = this.avelocity * dt;
+
+       vector a = -moveangle;
+       vector forward, left, up;
+       MAKE_VECTORS(a, forward, left, up);
+       left *= -1; // actually make it left!
+
+       vector pushorig = this.origin;
+       vector pushang = this.angles;
+       float pushltime = this.ltime;
+
+       // move the pusher to its final position
+
+       this.origin = this.origin + dt * this.velocity;
+       this.angles = this.angles + dt * this.avelocity;
+       this.ltime += dt;
+       _Movetype_LinkEdict(this, false); // pulls absmin/absmax from the engine
+
+       if(this.move_movetype == MOVETYPE_FAKEPUSH) // Tenebrae's MOVETYPE_PUSH variant that doesn't push...
+       {
+               this.angles_x -= 360.0 * floor(this.angles_x * (1.0 / 360.0));
+               this.angles_y -= 360.0 * floor(this.angles_y * (1.0 / 360.0));
+               this.angles_z -= 360.0 * floor(this.angles_z * (1.0 / 360.0));
+               return;
+       }
+
+       IL_CLEAR(g_pushmove_moved); // make sure it's not somehow uncleared
+
+       for(entity check = findradius((this.absmin + this.absmax) * 0.5, vlen(this.absmax - this.absmin) * 0.5 + 1); check; check = check.chain)
+       {
+               switch(check.move_movetype)
+               {
+                       case MOVETYPE_NONE:
+                       case MOVETYPE_PUSH:
+                       case MOVETYPE_FOLLOW:
+                       case MOVETYPE_NOCLIP:
+                       case MOVETYPE_FLY_WORLDONLY:
+                               continue;
+                       default:
+                               break;
+               }
+
+               if(check.owner == this || this.owner == check)
+                       continue;
+
+               // if the entity is standing on the pusher, it will definitely be moved
+               // if the entity is not standing on the pusher, but is in the pusher's
+               // final position, move it
+               if (!IS_ONGROUND(check) || check.groundentity != this)
+               {
+                       tracebox(check.origin, check.mins, check.maxs, check.origin, MOVE_NOMONSTERS, check);
+                       if(!trace_startsolid)
+                               continue;
+               }
+               vector pivot = check.mins + 0.5 * (check.maxs - check.mins);
+               vector move;
+
+               if(rotated)
+               {
+                       vector org = check.origin - this.origin;
+                       org = org + pivot;
+
+                       vector org2;
+                       org2.x = (org * forward);
+                       org2.y = (org * left);
+                       org2.z = (org * up);
+                       move = org2 - org;
+                       move = move + move1;
+               }
+               else
+                       move = move1;
+
+               check.moved_from = check.origin;
+               check.moved_fromangles = check.angles;
+               IL_PUSH(g_pushmove_moved, check);
+
+               // physics objects need better collisions than this code can do
+               if(check.move_movetype == MOVETYPE_PHYSICS)
+               {
+                       check.origin = check.origin + move;
+                       _Movetype_LinkEdict(check, true);
+                       continue;
+               }
+
+               // try moving the contacted entity
+               int savesolid = this.solid;
+               this.solid = SOLID_NOT;
+               if(!_Movetype_PushEntity(check, move, true, true))
+               {
+                       // entity "check" got teleported
+                       check.angles_y += trace_fraction * moveangle.y;
+                       this.solid = savesolid;
+                       continue; // pushed enough
+               }
+               // FIXME: turn players specially
+               check.angles_y += trace_fraction * moveangle.y;
+               this.solid = savesolid;
+
+               // this trace.fraction < 1 check causes items to fall off of pushers
+               // if they pass under or through a wall
+               // the groundentity check causes items to fall off of ledges
+               if(check.move_movetype != MOVETYPE_WALK && (trace_fraction < 1 || check.groundentity != this))
+                       UNSET_ONGROUND(check);
+
+               // if it is still inside the pusher, block
+               tracebox(check.origin, check.mins, check.maxs, check.origin, MOVE_NOMONSTERS, check);
+               if(trace_startsolid)
+               {
+                       if(_Movetype_NudgeOutOfSolid_PivotIsKnownGood(check, pivot))
+                       {
+                               // hack to invoke all necessary movement triggers
+                               _Movetype_PushEntity(check, '0 0 0', true, true);
+                               // we could fix it or entity "check" was telported
+                               continue;
+                       }
+
+                       // still inside pusher, so it's really blocked
+
+                       // fail the move
+                       if(check.mins_x == check.maxs_x)
+                               continue;
+                       if(check.solid == SOLID_NOT || check.solid == SOLID_TRIGGER)
+                       {
+                               // corpse
+                               check.mins_x = check.mins_y = 0;
+                               check.maxs = check.mins;
+                               continue;
+                       }
+
+                       this.origin = pushorig;
+                       this.angles = pushang;
+                       this.ltime = pushltime;
+                       _Movetype_LinkEdict(this, false);
+
+                       // move back any entities we already moved
+                       IL_EACH(g_pushmove_moved, true,
+                       {
+                               check.origin = check.moved_from;
+                               check.angles = check.moved_fromangles;
+                               _Movetype_LinkEdict(check, false);
+                       });
+
+                       // if the pusher has a "blocked" function, call it, otherwise just stay in place until the obstacle is gone
+                       if(getblocked(this))
+                               getblocked(this)(this, check);
+                       break;
+               }
+       }
+       this.angles_x -= 360.0 * floor(this.angles_x * (1.0 / 360.0));
+       this.angles_y -= 360.0 * floor(this.angles_y * (1.0 / 360.0));
+       this.angles_z -= 360.0 * floor(this.angles_z * (1.0 / 360.0));
+       IL_CLEAR(g_pushmove_moved); // clean up
+}
+
+void _Movetype_Physics_Push(entity this, float dt) // SV_Physics_Pusher
+{
+       float oldltime = this.ltime;
+       float movetime = dt;
+       if(this.nextthink < this.ltime + dt)
+       {
+               movetime = this.nextthink - this.ltime;
+               if(movetime < 0)
+                       movetime = 0;
+       }
+
+       if(movetime)
+       {
+               // advances this.ltime if not blocked
+               _Movetype_PushMove(this, movetime);
+       }
+
+       if(this.nextthink > oldltime && this.nextthink <= this.ltime)
+       {
+               this.nextthink = 0;
+               getthink(this)(this);
+       }
+}
diff --git a/qcsrc/common/physics/movetypes/push.qh b/qcsrc/common/physics/movetypes/push.qh
new file mode 100644 (file)
index 0000000..f33e761
--- /dev/null
@@ -0,0 +1,12 @@
+#pragma once
+
+void _Movetype_Physics_Push(entity this, float dt);
+
+.vector moved_from, moved_fromangles;
+
+IntrusiveList g_pushmove_moved;
+STATIC_INIT(g_pushmove_moved) { g_pushmove_moved = IL_NEW(); }
+
+#ifdef CSQC
+.float ltime;
+#endif
index e0d05d7..cd33ebc 100644 (file)
@@ -5,7 +5,7 @@ void _Movetype_Physics_Walk(entity this, float dt)  // SV_WalkMove
        if (dt <= 0)
                return;
 
-       if (GAMEPLAYFIX_UNSTICKPLAYERS(this))
+       if (GAMEPLAYFIX_UNSTICKPLAYERS(this) == 1)
                _Movetype_CheckStuck(this);
 
        bool applygravity = (!_Movetype_CheckWater(this) && this.move_movetype == MOVETYPE_WALK && !(this.flags & FL_WATERJUMP));
index c77ca16..9ecac9f 100644 (file)
@@ -193,7 +193,7 @@ int autocvar_sv_gameplayfix_easierwaterjump = 1;
 int autocvar_sv_gameplayfix_stepdown = 2;
 float autocvar_sv_gameplayfix_stepdown_maxspeed = 0;
 int autocvar_sv_gameplayfix_stepmultipletimes = 1;
-int autocvar_sv_gameplayfix_unstickplayers = 1;
+int autocvar_sv_gameplayfix_unstickplayers = 2;
 int autocvar_sv_gameplayfix_fixedcheckwatertransition = 1;
 int autocvar_sv_gameplayfix_slidemoveprojectiles = 1;
 int autocvar_sv_gameplayfix_grenadebouncedownslopes = 1;
index ff124d0..a0e35e0 100644 (file)
@@ -142,7 +142,7 @@ void racer_align4point(entity this, entity player, float _delta)
 void racer_fire_rocket_aim(entity this, entity player, string tagname, entity trg)
 {
        vector v = gettaginfo(this, gettagindex(this, tagname));
-       racer_fire_rocket(player, v, v_forward, trg);
+       racer_fire_rocket(this, player, v, v_forward, trg);
 }
 
 bool racer_frame(entity this, float dt)
@@ -324,7 +324,7 @@ bool racer_frame(entity this, float dt)
                }
        }
 
-       if(!weaponLocked(player))
+       if (!weaponLocked(player) && !weaponUseForbidden(player))
        if(time > vehic.delay)
        if(PHYS_INPUT_BUTTON_ATCK2(player))
        {
index 473f9a7..e8c18ed 100644 (file)
@@ -2,7 +2,7 @@
 
 #ifdef SVQC
 
-void racer_fire_rocket(entity player, vector org, vector dir, entity trg);
+void racer_fire_rocket(entity this, entity player, vector org, vector dir, entity trg);
 METHOD(RacerAttack, wr_think, void(entity thiswep, entity actor, .entity weaponentity, int fire))
 {
     bool isPlayer = IS_PLAYER(actor);
@@ -14,20 +14,23 @@ METHOD(RacerAttack, wr_think, void(entity thiswep, entity actor, .entity weapone
             veh.vehicle_energy -= autocvar_g_vehicle_racer_cannon_cost;
             veh.wait = time;
         }
-        string tagname = (veh.cnt)
-            ? (veh.cnt = 0, "tag_fire1")
-            : (veh.cnt = 1, "tag_fire2");
-        vector vshotorg = gettaginfo(veh, gettagindex(veh, tagname));
-        w_shotorg = vshotorg;
-        w_shotdir = v_forward;
-        // Fix z-aim (for chase mode)
-        crosshair_trace(player);
-        w_shotdir.z = normalize(trace_endpos - vshotorg).z * 0.5;
-
+        if(!isPlayer)
+        {
+            string tagname = (veh.cnt)
+                ? (veh.cnt = 0, "tag_fire1")
+                : (veh.cnt = 1, "tag_fire2");
+            vector vshotorg = gettaginfo(veh, gettagindex(veh, tagname));
+            w_shotorg = vshotorg;
+            w_shotdir = v_forward;
+
+            // Fix z-aim (for chase mode)
+            crosshair_trace(player);
+            w_shotdir.z = normalize(trace_endpos - vshotorg).z * 0.5;
+        }
         if (isPlayer) W_SetupShot_Dir(player, weaponentity, v_forward, false, 0, SND_Null, CH_WEAPON_B, 0, DEATH_VH_WAKI_GUN.m_id);
         vector org = w_shotorg;
         vector dir = w_shotdir;
-        entity bolt = vehicles_projectile(veh, EFFECT_RACER_MUZZLEFLASH, SND_LASERGUN_FIRE,
+        entity bolt = vehicles_projectile(((veh) ? veh : player), EFFECT_RACER_MUZZLEFLASH, SND_LASERGUN_FIRE,
                                org, normalize(v_forward + randomvec() * autocvar_g_vehicle_racer_cannon_spread) * autocvar_g_vehicle_racer_cannon_speed,
                                autocvar_g_vehicle_racer_cannon_damage, autocvar_g_vehicle_racer_cannon_radius, autocvar_g_vehicle_racer_cannon_force,  0,
                                DEATH_VH_WAKI_GUN.m_id, PROJECTILE_WAKICANNON, 0, true, true, player);
@@ -37,7 +40,7 @@ METHOD(RacerAttack, wr_think, void(entity thiswep, entity actor, .entity weapone
     if (fire & 2)
     if (!isPlayer || weapon_prepareattack(thiswep, actor, weaponentity, false, 0.2)) {
         if (isPlayer) W_SetupShot_Dir(actor, weaponentity, v_forward, false, 0, SND_Null, CH_WEAPON_B, 0, DEATH_VH_WAKI_ROCKET.m_id);
-        racer_fire_rocket(player, w_shotorg, w_shotdir, NULL);
+        racer_fire_rocket(((veh) ? veh : player), player, w_shotorg, w_shotdir, NULL);
         weapon_thinkf(actor, weaponentity, WFRAME_FIRE2, 0, w_ready);
     }
 }
@@ -53,9 +56,9 @@ METHOD(RacerAttack, wr_checkammo1, bool(RacerAttack thiswep, entity actor, .enti
 void racer_rocket_tracker(entity this);
 void racer_rocket_groundhugger(entity this);
 
-void racer_fire_rocket(entity player, vector org, vector dir, entity trg)
+void racer_fire_rocket(entity this, entity player, vector org, vector dir, entity trg)
 {
-    entity rocket = vehicles_projectile(player.vehicle, EFFECT_RACER_ROCKETLAUNCH, SND_ROCKET_FIRE,
+    entity rocket = vehicles_projectile(this, EFFECT_RACER_ROCKETLAUNCH, SND_ROCKET_FIRE,
                            org, dir * autocvar_g_vehicle_racer_rocket_speed,
                            autocvar_g_vehicle_racer_rocket_damage, autocvar_g_vehicle_racer_rocket_radius, autocvar_g_vehicle_racer_rocket_force, 3,
                            DEATH_VH_WAKI_ROCKET.m_id, PROJECTILE_WAKIROCKET, 20, false, false, player);
index ede81f6..f4f3104 100644 (file)
@@ -12,7 +12,7 @@ REGISTER_WEAPON(RACER, NEW(RacerAttack));
 
 // TODO: move into implementation
 #ifdef SVQC
-void racer_fire_rocket(entity player, vector org, vector dir, entity trg);
+void racer_fire_rocket(entity this, entity player, vector org, vector dir, entity trg);
 #endif
 
 #ifdef SVQC
index c60243e..b8d7c56 100644 (file)
@@ -291,6 +291,7 @@ const .float reloading_time = reload_time;
 
 
 // read cvars from weapon settings
+// cvars are created as such: g_balance_wepname_name
 #define WEP_CVAR(wepname, name) (_wep_##wepname.wepvar_##name)
 #define WEP_CVAR_PRI(wepname, name) WEP_CVAR(wepname, primary_##name)
 #define WEP_CVAR_SEC(wepname, name) WEP_CVAR(wepname, secondary_##name)
index 02fbdb5..2d176c0 100644 (file)
@@ -129,6 +129,13 @@ void weapon_defaultspawnfunc(entity this, Weapon e);
 #define SPAWNFUNC_WEAPON(name, weapon) \
     spawnfunc(name) { weapon_defaultspawnfunc(this, weapon); }
 
+#define SPAWNFUNC_WEAPON_COND(name, cond, wep1, wep2) \
+    spawnfunc(name) \
+    { \
+        entity wep = (cond) ? wep1 : wep2; \
+        weapon_defaultspawnfunc(this, wep); \
+    }
+
 #else
 
 #define SPAWNFUNC_WEAPON(name, weapon)
index eaea70f..e7eaf01 100644 (file)
 #define STAT_MOVEVARS_TIMESCALE _STAT_MOVEVARS_TIMESCALE
 #define STAT_MOVEVARS_GRAVITY _STAT_MOVEVARS_GRAVITY
 
+#define drawpic drawpic_builtin
+#define drawstring drawstring_builtin
+#define drawcharacter drawcharacter_builtin
+#define drawfill drawfill_builtin
+#define drawsetcliparea drawsetcliparea_builtin
+#define drawcolorcodedstring drawcolorcodedstring_builtin
+#define drawcolorcodedstring2 drawcolorcodedstring2_builtin
+#define stringwidth stringwidth_builtin
+
 #include "upstream/csprogsdefs.qc"
 
 #undef true
 
 #define use use1
 .void(entity this, entity actor, entity trigger) use;
-#define touch move_touch
+
+#undef drawpic
+#undef drawstring
+#undef drawcharacter
+#undef drawfill
+#undef drawsetcliparea
+#undef drawcolorcodedstring
+#undef drawcolorcodedstring2
+#undef stringwidth
 
 void(vector ang) _makevectors_hidden = #1;
 vector(float skel, float bonenum) _skel_get_boneabs_hidden = #270;
index 3748b8d..457bd7c 100644 (file)
@@ -337,7 +337,7 @@ void(entity e, vector min, vector max) setsize = #4;
 
 void() break_to_debugger = #6;
 float() random = #7;
-void(entity e, float chan, string samp) sound = #8;
+void(entity e, float chan, string samp, float volume, float atten, ...) sound = #8;
 vector(vector v) normalize = #9;
 void(string e) error = #10;
 void(string e) objerror = #11;
@@ -470,20 +470,20 @@ void() R_EndPolygon = #308;
 vector (vector v) cs_unproject = #310;
 vector (vector v) cs_project = #311;
 
-void(float width, vector pos1, vector pos2, float flag) drawline = #315;
+void(float width, vector pos1, vector pos2, vector rgb, float alpha, float flag) drawline = #315;
 float(string name) iscachedpic = #316;
 string(string name, ...) precache_pic = #317;
 string(string name) precache_cubemap = #317;
 vector(string picname) draw_getimagesize = #318;
 void(string name) freepic = #319;
-float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter_builtin = #320;
-float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring_builtin = #321;
-float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic_builtin = #322;
-float(vector position, vector size, vector rgb, float alpha, float flag) drawfill_builtin = #323;
-void(float x, float y, float width, float height) drawsetcliparea_builtin = #324;
+float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
+float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
+float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
+float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
+void(float x, float y, float width, float height) drawsetcliparea = #324;
 void(void) drawresetcliparea = #325;
-float(vector position, string text, vector scale, float alpha, float flag) drawcolorcodedstring_builtin = #326;
-vector(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawcolorcodedstring2_builtin = #326;
+float(vector position, string text, vector scale, float alpha, float flag) drawcolorcodedstring = #326;
+vector(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawcolorcodedstring2 = #326;
 
 float(float stnum) getstatf = #330;
 float(float stnum, ...) getstati = #331; // can optionally take first bit and count
@@ -522,7 +522,7 @@ float() ReadAngle = #365;
 string() ReadString = #366;
 float() ReadFloat = #367;
 
-// LordHavoc's range #400-#499
+// LadyHavoc's range #400-#499
 void(entity from, entity to) copyentity = #400;
 
 entity(.string fld, string match) findchain = #402;
@@ -597,7 +597,7 @@ float(float t) atan = #473;
 float(float c, float s) atan2 = #474;
 float(float a) tan = #475;
 float(string s) strippedstringlen = #476;
-float(string s) strlennocol = #476; // This is the correct name for the function, but not removing the decolorizedstring mapping.
+float(string s) strlennocol = #476; // This is the correct name for the function, but not removing the strippedstringlen mapping.
 string(string s) decolorizedstring = #477;
 string(string s) strdecolorize = #477; // This is the correct name for the function, but not removing the decolorizedstring mapping.
 string(float uselocaltime, string format, ...) strftime = #478;
@@ -846,7 +846,7 @@ float loadfont(string fontname, string fontmaps, string sizes, float slot, float
 // fix_* parms let you fix badly made fonts by applying some transformations to them
 // fix_scale : per-character center-oriented scale (doesn't change line height at all)
 // fix_voffset : vertical offset for each character, it's a multiplier to character height
-float stringwidth_builtin(string text, float allowColorCodes, vector size) = #327; // get a width of string with given font and char size
+float stringwidth(string text, float allowColorCodes, vector size) = #327; // get a width of string with given font and char size
 float stringwidth_menu(string text, float allowColorCodes, vector size) = #468; // in menu.dat it has different builtin #
 //description: engine support for custom fonts in console, hud, qc etc.
 // limits:
@@ -956,7 +956,7 @@ vector(entity e, float s, float n) getsurfacetriangle = #629;
 
 //DP_QC_ASINACOSATANATAN2TAN
 //idea: Urre
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //constant definitions:
 float DEG2RAD = 0.0174532925199432957692369076848861271344287188854172545609719144;
 float RAD2DEG = 57.2957795130823208767981548141051703324054724665643215491602438612;
@@ -1022,8 +1022,8 @@ float GETTIME_CDTRACK = 4;
 //see DP_END_GETSOUNDTIME for similar functionality but for entity sound channels
 
 //DP_QC_TOKENIZEBYSEPARATOR
-//idea: Electro, SavageX, LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: Electro, SavageX, LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 float(string s, string separator1, ...) tokenizebyseparator = #479;
 //description:
@@ -1083,8 +1083,8 @@ float PRECACHE_PIC_MIPMAP = 8; // mipmap the texture for possibly better downsca
 //notes: these constants are given as optional second argument to precache_pic()
 
 //DP_QC_TRACE_MOVETYPE_WORLDONLY
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //constant definitions:
 float MOVE_WORLDONLY = 3;
 //description:
@@ -1112,8 +1112,8 @@ float(string sample) soundlength = #534; // returns length of sound sample in se
 float(entity num) num_for_edict = #512;
 
 //DP_TRACE_HITCONTENTSMASK_SURFACEINFO
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //globals:
 .float dphitcontentsmask; // if non-zero on the entity passed to traceline/tracebox/tracetoss this will override the normal collidable contents rules and instead hit these contents values (for example AI can use tracelines that hit DONOTENTER if it wants to, by simply changing this field on the entity passed to traceline), this affects normal movement as well as trace calls
 float trace_dpstartcontents; // DPCONTENTS_ value at start position of trace
@@ -1215,8 +1215,8 @@ float log(float f) = #532;
 //logarithm
 
 //FTE_CSQC_SKELETONOBJECTS
-//idea: Spike, LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: Spike, LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 // all skeleton numbers are 1-based (0 being no skeleton)
 // all bone numbers are 1-based (0 being invalid)
@@ -1438,6 +1438,15 @@ void(entity e, string s) parseentitydata = #608;
 //function definitions:
 void coverage() = #642;  // Reports a coverage event. The engine counts for each of the calls to this builtin whether it has been called.
 
+//DP_QC_FS_SEARCH_PACKFILE
+//idea: Mario
+//darkplaces implementation: Mario
+//builtin definitions:
+float(string pattern, float caseinsensitive, float quiet, string packfile) search_packfile_begin = #444;
+//description:
+//extension to search_begin (DP_QC_FS_SEARCH), performs a filename search with the specified pattern (for example "maps/*.bsp") and stores the results in a search slot (minimum of 128 supported by any engine with this extension), the other functions take this returned search slot number, be sure to search_free when done (they are also freed on progs reload).
+//only searches for files within the specified packfile, which is expected to match the results of whichpack().
+
 // assorted builtins
 const float            STAT_MOVEVARS_TICRATE           = 240;
 const float            STAT_MOVEVARS_TIMESCALE         = 241;
index 2f49d97..43dd56c 100644 (file)
@@ -9,7 +9,7 @@ float MOVE_MISSILE = 2; // save as movement with .movetype == MOVETYPE_FLYMISSIL
 
 //checkextension function
 //idea: expected by almost everyone
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 float(string s) checkextension = #99;
 //description:
 //check if (cvar("pr_checkextension")) before calling this, this is the only
@@ -24,14 +24,14 @@ float(string s) checkextension = #99;
 
 //BX_WAL_SUPPORT
 //idea: id Software
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //indicates the engine supports .wal textures for filenames in the textures/ directory
 //(note: DarkPlaces has supported this since 2001 or 2002, but did not advertise it as an extension, then I noticed Betwix was advertising it and added the extension accordingly)
 
 //DP_BUTTONCHAT
 //idea: Vermeulen
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .float buttonchat;
 //description:
@@ -39,7 +39,7 @@ float(string s) checkextension = #99;
 
 //DP_BUTTONUSE
 //idea: id Software
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .float buttonuse;
 //client console commands:
@@ -49,8 +49,8 @@ float(string s) checkextension = #99;
 //made +use and -use commands work, they now control the .buttonuse field (.button1 was used by many mods for other purposes).
 
 //DP_CL_LOADSKY
-//idea: Nehahra, LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: Nehahra, LadyHavoc
+//darkplaces implementation: LadyHavoc
 //client console commands:
 //"loadsky" (parameters: "basename", example: "mtnsun_" would load "mtnsun_up.tga" and "mtnsun_rt.tga" and similar names, use "" to revert to quake sky, note: this is the same as Quake2 skybox naming)
 //description:
@@ -58,13 +58,13 @@ float(string s) checkextension = #99;
 
 //DP_CON_SET
 //idea: id Software
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //indicates this engine supports the "set" console command which creates or sets a non-archived cvar (not saved to config.cfg on exit), it is recommended that set and seta commands be placed in default.cfg for mod-specific cvars.
 
 //DP_CON_SETA
 //idea: id Software
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //indicates this engine supports the "seta" console command which creates or sets an archived cvar (saved to config.cfg on exit), it is recommended that set and seta commands be placed in default.cfg for mod-specific cvars.
 
@@ -81,14 +81,14 @@ float(string s) checkextension = #99;
 //indicates this engine supports console commandlines containing $cvarname which will expand to the contents of that cvar as a parameter, for instance say my fov is $fov, will say "my fov is 90", or similar.
 
 //DP_CON_STARTMAP
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //adds two engine-called aliases named startmap_sp and startmap_dm which are called when the engine tries to start a singleplayer game from the menu (startmap_sp) or the -listen or -dedicated options are used or the engine is a dedicated server (uses startmap_dm), these allow a mod or game to specify their own map instead of start, and also distinguish between singleplayer and -listen/-dedicated, also these need not be a simple "map start" command, they can do other things if desired, startmap_sp and startmap_dm both default to "map start".
 
 //DP_EF_ADDITIVE
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //effects bit:
 float   EF_ADDITIVE     = 32;
 //description:
@@ -96,15 +96,15 @@ float   EF_ADDITIVE     = 32;
 
 //DP_EF_BLUE
 //idea: id Software
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //effects bit:
 float   EF_BLUE         = 64;
 //description:
 //entity emits blue light (used for quad)
 
 //DP_EF_DOUBLESIDED
-//idea: LordHavoc
-//darkplaces implementation: [515] and LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: [515] and LadyHavoc
 //effects bit:
 float EF_DOUBLESIDED = 32768;
 //description:
@@ -119,16 +119,16 @@ float   EF_DYNAMICMODELLIGHT     = 131072;
 //force dynamic model light on the entity, even if it's a BSP model (or anything else with lightmaps or light colors)
 
 //DP_EF_FLAME
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //effects bit:
 float   EF_FLAME        = 1024;
 //description:
 //entity is on fire
 
 //DP_EF_FULLBRIGHT
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //effects bit:
 float   EF_FULLBRIGHT   = 512;
 //description:
@@ -136,7 +136,7 @@ float   EF_FULLBRIGHT   = 512;
 
 //DP_EF_NODEPTHTEST
 //idea: Supa
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //effects bit:
 float   EF_NODEPTHTEST       = 8192;
 //description:
@@ -144,7 +144,7 @@ float   EF_NODEPTHTEST       = 8192;
 
 //DP_EF_NODRAW
 //idea: id Software
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //effects bit:
 float   EF_NODRAW       = 16;
 //description:
@@ -152,7 +152,7 @@ float   EF_NODRAW       = 16;
 
 //DP_EF_NOGUNBOB
 //idea: Chris Page, Dresk
-//darkplaces implementation: LordHAvoc
+//darkplaces implementation: LadyHavoc
 //effects bit:
 float   EF_NOGUNBOB     = 256;
 //description:
@@ -165,8 +165,8 @@ float   EF_NOGUNBOB     = 256;
 //disabling gun bobbing on view-relative models meant to be part of the heads up display.  (note: if fov is changed these entities may be off-screen, or too near the center of the screen, so use fov 90 in this case)
 
 //DP_EF_NOSHADOW
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //effects bit:
 float   EF_NOSHADOW     = 4096;
 //description:
@@ -174,7 +174,7 @@ float   EF_NOSHADOW     = 4096;
 
 //DP_EF_RED
 //idea: id Software
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //effects bit:
 float   EF_RED          = 128;
 //description:
@@ -192,7 +192,7 @@ float   EF_RESTARTANIM_BIT = 1048576;
 
 //DP_EF_STARDUST
 //idea: MythWorks Inc
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //effects bit:
 float   EF_STARDUST     = 2048;
 //description:
@@ -210,31 +210,31 @@ float   EF_TELEPORT_BIT = 2097152;
 
 //DP_ENT_ALPHA
 //idea: Nehahra
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //fields:
 .float alpha;
 //description:
 //controls opacity of the entity, 0.0 is forced to be 1.0 (otherwise everything would be invisible), use -1 if you want to make something invisible, 1.0 is solid (like normal).
 
 //DP_ENT_COLORMOD
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definition:
 .vector colormod;
 //description:
 //controls color of the entity, '0 0 0', is forced to be '1 1 1' (otherwise everything would be black), used for tinting objects, for instance using '1 0.6 0.4' on an ogre would give you an orange ogre (order is red green blue), note the colors can go up to '8 8 8' (8x as bright as normal).
 
 //DP_ENT_CUSTOMCOLORMAP
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //if .colormap is set to 1024 + pants + shirt * 16, those colors will be used for colormapping the entity, rather than looking up a colormap by player number.
 
 /*
 //NOTE: no longer supported by darkplaces because all entities are delta compressed now
 //DP_ENT_DELTACOMPRESS // no longer supported
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //effects bit:
 float EF_DELTA = 8388608;
 //description:
@@ -242,16 +242,16 @@ float EF_DELTA = 8388608;
 */
 
 //DP_ENT_EXTERIORMODELTOCLIENT
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //fields:
 .entity exteriormodeltoclient;
 //description:
 //the entity is visible to all clients with one exception: if the specified client is using first person view (not using chase_active) the entity will not be shown.  Also if tag attachments are supported any entities attached to the player entity will not be drawn in first person.
 
 //DP_ENT_GLOW
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .float glow_color;
 .float glow_size;
@@ -260,32 +260,32 @@ float EF_DELTA = 8388608;
 //customizable glowing light effect on the entity, glow_color is a paletted (8bit) color in the range 0-255 (note: 0 and 254 are white), glow_size is 0 or higher (up to the engine what limit to cap it to, darkplaces imposes a 1020 limit), if glow_trail is true it will leave a trail of particles of the same color as the light.
 
 //DP_ENT_GLOWMOD
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definition:
 .vector glowmod;
 //description:
 //controls color of the entity's glow texture (fullbrights), '0 0 0', is forced to be '1 1 1' (otherwise everything would be black), used for tinting objects, see colormod (same color restrictions apply).
 
 //DP_ENT_LOWPRECISION
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //effects bit:
 float EF_LOWPRECISION = 4194304;
 //description:
 //uses low quality origin coordinates, reducing network traffic compared to the default high precision, intended for numerous objects (projectiles/gibs/bullet holes/etc).
 
 //DP_ENT_SCALE
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .float scale;
 //description:
 //controls rendering scale of the object, 0 is forced to be 1, darkplaces uses 1/16th accuracy and a limit of 15.9375, can be used to make an object larger or smaller.
 
 //DP_ENT_TRAILEFFECTNUM
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .float traileffectnum;
 //description:
@@ -294,16 +294,16 @@ float EF_LOWPRECISION = 4194304;
 //this will do both the dlight and particle trail as described in the effect, basically equivalent to trailparticles() in CSQC but performed on a server entity.
 
 //DP_ENT_VIEWMODEL
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .entity viewmodelforclient;
 //description:
 //this is a very special capability, attachs the entity to the view of the client specified, origin and angles become relative to the view of that client, all effects can be used (multiple skins on a weapon model etc)...  the entity is not visible to any other client.
 
 //DP_GFX_EXTERNALTEXTURES
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //loads external textures found in various directories (tenebrae compatible)...
 /*
@@ -361,7 +361,7 @@ game/gfx/conchars.tga
 
 //DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES
 //idea: Fuh?
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //Q1BSP and HLBSP map loading loads external textures found in textures/<mapname>/ as well as textures/.
 //Where mapname is the bsp filename minus the extension (typically .bsp) and minus maps/ if it is in maps/ (any other path is not removed)
@@ -372,8 +372,8 @@ game/gfx/conchars.tga
 //progs/something/blah.bsp uses textures in the directory textures/progs/something/blah/ and falls back to textures/
 
 //DP_GFX_FOG
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //worldspawn fields:
 //"fog" (parameters: "density red green blue", example: "0.1 0.3 0.3 0.3")
 //description:
@@ -381,7 +381,7 @@ game/gfx/conchars.tga
 
 //DP_GFX_QUAKE3MODELTAGS
 //idea: id Software
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .entity tag_entity; // entity this is attached to (call setattachment to set this)
 .float tag_index; // which tag on that entity (0 is relative to the entity, > 0 is an index into the tags on the model if it has any) (call setattachment to set this)
@@ -395,8 +395,8 @@ void(entity e, entity tagentity, string tagname) setattachment = #443; // attach
 //note 5: if an entity is attached to the player entity it will not be drawn in first person.
 
 //DP_GFX_SKINFILES
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //alias models (mdl, md2, md3) can have .skin files to replace conventional texture naming, these have a naming format such as:
 //progs/test.md3_0.skin
@@ -421,8 +421,8 @@ void(entity e, entity tagentity, string tagname) setattachment = #443; // attach
 //other commands might be added someday but it is not expected.
 
 //DP_GFX_SKYBOX
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //worldspawn fields:
 //"sky" (parameters: "basename", example: "mtnsun_" would load "mtnsun_up.tga" and "mtnsun_rt.tga" and similar names, note: "sky" is also used the same way by Quake2)
 //description:
@@ -439,28 +439,28 @@ void(entity e, entity tagentity, string tagname) setattachment = #443; // attach
 // note: beware that str2chr() could return value bigger than 255 once utf8 is enabled
 
 //DP_HALFLIFE_MAP
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //simply indicates that the engine supports HalfLife maps (BSP version 30, NOT the QER RGBA ones which are also version 30).
 
 //DP_HALFLIFE_MAP_CVAR
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //cvars:
 //halflifebsp 0/1
 //description:
 //engine sets this cvar when loading a map to indicate if it is halflife format or not.
 
 //DP_HALFLIFE_SPRITE
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //simply indicates that the engine supports HalfLife sprites.
 
 //DP_INPUTBUTTONS
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .float button3;
 .float button4;
@@ -499,21 +499,21 @@ void(entity e, entity tagentity, string tagname) setattachment = #443; // attach
 // that other engines (which do not support this extension) could connect to a game and misunderstand this kind of lightstyle syntax
 
 //DP_LITSPRITES
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //indicates this engine supports lighting on sprites, any sprite with ! in its filename (both on disk and in the qc) will be lit rather than having forced EF_FULLBRIGHT (EF_FULLBRIGHT on the entity can still force these sprites to not be lit).
 
 //DP_LITSUPPORT
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //indicates this engine loads .lit files for any quake1 format .bsp files it loads to enhance maps with colored lighting.
 //implementation description: these files begin with the header QLIT followed by version number 1 (as little endian 32bit), the rest of the file is a replacement lightmaps lump, except being 3x as large as the lightmaps lump of the map it matches up with (and yes the between-lightmap padding is expanded 3x to keep this consistent), so the lightmap offset in each surface is simply multiplied by 3 during loading to properly index the lit data, and the lit file is loaded instead of the lightmap lump, other renderer changes are needed to display these of course...  see the litsupport.zip sample code (almost a tutorial) at http://icculus.org/twilight/darkplaces for more information.
 
 //DP_MONSTERWALK
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //MOVETYPE_WALK is permitted on non-clients, so bots can move smoothly, run off ledges, etc, just like a real player.
 
@@ -543,8 +543,8 @@ float MOVETYPE_FLY_WORLDONLY = 33;
 //networked. useful for shared CSQC entities.
 
 //DP_MOVETYPEFOLLOW
-//idea: id Software, LordHavoc (redesigned)
-//darkplaces implementation: LordHavoc
+//idea: id Software, LadyHavoc (redesigned)
+//darkplaces implementation: LadyHavoc
 //movetype definitions:
 float MOVETYPE_FOLLOW = 12;
 //description:
@@ -563,7 +563,7 @@ float MOVETYPE_FOLLOW = 12;
 
 //DP_QC_ASINACOSATANATAN2TAN
 //idea: Urre
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //constant definitions:
 float DEG2RAD = 0.0174532925199432957692369076848861271344287188854172545609719144;
 float RAD2DEG = 57.2957795130823208767981548141051703324054724665643215491602438612;
@@ -621,8 +621,8 @@ void(entity ent) changepitch = #63;
 //equivalent to changeyaw, ent is normally self. (this was a Q2 builtin)
 
 //DP_QC_COPYENTITY
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(entity from, entity to) copyentity = #400;
 //description:
@@ -636,8 +636,8 @@ void(entity from, entity to) copyentity = #400;
 float(float caseinsensitive, string s, ...) crc16 = #494;
 
 //DP_QC_CVAR_DEFSTRING
-//idea: id Software (Doom3), LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: id Software (Doom3), LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 string(string s) cvar_defstring = #482;
 //description:
@@ -653,7 +653,7 @@ string(string name) cvar_description = #518;
 
 //DP_QC_CVAR_STRING
 //idea: VorteX
-//DarkPlaces implementation: VorteX, LordHavoc
+//DarkPlaces implementation: VorteX, LadyHavoc
 //builtin definitions:
 string(string s) cvar_string = #448;
 //description:
@@ -691,7 +691,7 @@ string(string digest, string data, ...) digest_hex = #639;
 
 //DP_QC_EDICT_NUM
 //idea: 515
-//DarkPlaces implementation: LordHavoc
+//DarkPlaces implementation: LadyHavoc
 //builtin definitions:
 entity(float entnum) edict_num = #459;
 float(entity ent) wasfreed = #353; // same as in EXT_CSQC extension
@@ -752,8 +752,8 @@ string(void) getextresponse = #624;
 //listening port.
 
 //DP_QC_FINDCHAIN
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 entity(.string fld, string match) findchain = #402;
 //description:
@@ -773,15 +773,15 @@ entity(.string fld, float match, .entity tofield) findchainfloat_tofield = #403;
 
 //DP_QC_FINDCHAINFLAGS
 //idea: Sajt
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 entity(.float fld, float match) findchainflags = #450;
 //description:
 //similar to findflags() but returns a chain of entities like findradius.
 
 //DP_QC_FINDCHAINFLOAT
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 entity(.entity fld, entity match) findchainentity = #403;
 entity(.float fld, float match) findchainfloat = #403;
@@ -790,15 +790,15 @@ entity(.float fld, float match) findchainfloat = #403;
 
 //DP_QC_FINDFLAGS
 //idea: Sajt
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 entity(entity start, .float fld, float match) findflags = #449;
 //description:
 //finds an entity with the specified flag set in the field, similar to find()
 
 //DP_QC_FINDFLOAT
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 entity(entity start, .entity fld, entity match) findentity = #98;
 entity(entity start, .float fld, float match) findfloat = #98;
@@ -820,16 +820,16 @@ string(float handle, float num) search_getfilename = #447;
 //search_getfilename returns a filename from the search.
 
 //DP_QC_GETLIGHT
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 vector(vector org) getlight = #92;
 //description:
 //returns the lighting at the requested location (in color), 0-255 range (can exceed 255).
 
 //DP_QC_GETSURFACE
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 float(entity e, float s) getsurfacenumpoints = #434;
 vector(entity e, float s, float n) getsurfacepoint = #435;
@@ -867,7 +867,7 @@ vector(entity e, float s, float n) getsurfacetriangle = #629;
 //function to query triangles of a surface
 
 //DP_QC_GETTAGINFO
-//idea: VorteX, LordHavoc
+//idea: VorteX, LadyHavoc
 //DarkPlaces implementation: VorteX
 //builtin definitions:
 float(entity ent, string tagname) gettagindex = #451;
@@ -947,8 +947,8 @@ float log(float f) = #532;
 //logarithm
 
 //DP_QC_MINMAXBOUND
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 float(float a, float b, ...) min = #94;
 float(float a, float b, float c) min3 = #94;
@@ -971,8 +971,8 @@ float(float minimum, float val, float maximum) bound = #96;
 //bound clamps the value to the range and returns it.
 
 //DP_QC_MULTIPLETEMPSTRINGS
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //this extension makes all builtins returning tempstrings (ftos for example)
 //cycle through a pool of multiple tempstrings (at least 16), allowing
@@ -992,16 +992,16 @@ float(float minimum, float val, float maximum) bound = #96;
 float(entity num) num_for_edict = #512;
 
 //DP_QC_RANDOMVEC
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 vector() randomvec = #91;
 //description:
 //returns a vector of length < 1, much quicker version of this QC: do {v_x = random()*2-1;v_y = random()*2-1;v_z = random()*2-1;} while(vlen(v) > 1)
 
 //DP_QC_SINCOSSQRTPOW
-//idea: id Software, LordHavoc
-//darkplaces implementation: id Software, LordHavoc
+//idea: id Software, LadyHavoc
+//darkplaces implementation: id Software, LadyHavoc
 //builtin definitions:
 float(float val) sin = #60;
 float(float val) cos = #61;
@@ -1039,8 +1039,8 @@ string(string format, ...) sprintf = #627;
 //      the + flag.
 
 //DP_QC_STRFTIME
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 string(float uselocaltime, string format, ...) strftime = #478;
 //description:
@@ -1070,7 +1070,7 @@ string(string s) strdecolorize = #477; // returns a string minus the color codes
 
 //DP_QC_STRING_CASE_FUNCTIONS
 //idea: Dresk
-//darkplaces implementation: LordHavoc / Dresk
+//darkplaces implementation: LadyHavoc / Dresk
 //builtin definitions:
 string(string s) strtolower = #480; // returns the passed in string in pure lowercase form
 string(string s) strtoupper = #481; // returns the passed in string in pure uppercase form
@@ -1078,8 +1078,8 @@ string(string s) strtoupper = #481; // returns the passed in string in pure uppe
 //provides simple string uppercase and lowercase functions
 
 //DP_QC_TOKENIZEBYSEPARATOR
-//idea: Electro, SavageX, LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: Electro, SavageX, LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 float(string s, string separator1, ...) tokenizebyseparator = #479;
 //description:
@@ -1117,16 +1117,16 @@ void(entity ent, entity ignore) tracetoss = #64;
 //simulates movement of the entity as if it is MOVETYPE_TOSS and starting with it's current state (location, velocity, etc), returns relevant trace_ variables (trace_fraction is always 0, all other values are supported - trace_ent, trace_endpos, trace_plane_normal), does not actually alter the entity.
 
 //DP_QC_TRACE_MOVETYPE_HITMODEL
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //constant definitions:
 float MOVE_HITMODEL = 4;
 //description:
 //allows traces to hit alias models (not sprites!) instead of entity boxes, use as the nomonsters parameter to trace functions, note that you can hit invisible model entities (alpha < 0 or EF_NODRAW or model "", it only checks modelindex)
 
 //DP_QC_TRACE_MOVETYPE_WORLDONLY
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //constant definitions:
 float MOVE_WORLDONLY = 3;
 //description:
@@ -1134,7 +1134,7 @@ float MOVE_WORLDONLY = 3;
 
 //DP_QC_UNLIMITEDTEMPSTRINGS
 //idea: divVerent
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //this extension alters Quake behavior such that instead of reusing a single
 //tempstring (or multiple) there are an unlimited number of tempstrings, which
@@ -1158,8 +1158,8 @@ float MOVE_WORLDONLY = 3;
 //this is basically a poor man's garbage collection system for strings.
 
 //DP_QC_VECTOANGLES_WITH_ROLL
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 vector(vector forward, vector up) vectoangles2 = #51; // same number as vectoangles
 //description:
@@ -1167,8 +1167,8 @@ vector(vector forward, vector up) vectoangles2 = #51; // same number as vectoang
 //note: just like normal vectoangles you need to negate the pitch of the returned angles if you want to feed them to makevectors or assign to self.v_angle
 
 //DP_QC_VECTORVECTORS
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector dir) vectorvectors = #432;
 //description:
@@ -1216,8 +1216,8 @@ float(string url, float id, string content_type, string data) uri_post = #513;
 float(string url, float id, string content_type, string delim, float buf) uri_postbuf = #513;
 
 //DP_SKELETONOBJECTS
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //this extension indicates that FTE_CSQC_SKELETONOBJECTS functionality is available in server QC (as well as CSQC).
 
@@ -1231,31 +1231,31 @@ float(string url, float id, string content_type, string delim, float buf) uri_po
 
 //DP_QUAKE2_MODEL
 //idea: quake community
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //shows that the engine supports Quake2 .md2 files.
 
 //DP_QUAKE2_SPRITE
-//idea: LordHavoc
+//idea: LadyHavoc
 //darkplaces implementation: Elric
 //description:
 //shows that the engine supports Quake2 .sp2 files.
 
 //DP_QUAKE3_MAP
 //idea: quake community
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //shows that the engine supports Quake3 .bsp files.
 
 //DP_QUAKE3_MODEL
 //idea: quake community
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //shows that the engine supports Quake3 .md3 files.
 
 //DP_REGISTERCVAR
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 float(string name, string value) registercvar = #93;
 //description:
@@ -1263,8 +1263,8 @@ float(string name, string value) registercvar = #93;
 //NOTE: DP_CON_SET is much better.
 
 //DP_SND_DIRECTIONLESSATTNNONE
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //make sounds with ATTN_NONE have no spatialization (enabling easy use as music sources).
 
@@ -1312,8 +1312,8 @@ float SOUNDFLAG_RELIABLE = 1;
 //the engine supports loading Ogg Vorbis sound files.  Use either the .ogg filename directly, or a .wav of the same name (will try to load the .wav first and then .ogg).
 
 //DP_SND_STEREOWAV
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //the engine supports stereo WAV files.  (useful with DP_SND_DIRECTIONLESSATTNNONE for music)
 
@@ -1333,8 +1333,8 @@ float(string sample) soundlength = #534; // returns length of sound sample in se
 //  - subtitles
 
 //DP_VIDEO_DPV
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //console commands:
 //  playvideo <videoname> - start playing video
 //  stopvideo - stops current video
@@ -1368,22 +1368,22 @@ float(string sample) soundlength = #534; // returns length of sound sample in se
 //   18        7       "I'll hack you from crotch to gizzard and feed what's left of you to your brides..."
 
 //DP_SOLIDCORPSE
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //solid definitions:
 float SOLID_CORPSE = 5;
 //description:
 //the entity will not collide with SOLID_CORPSE and SOLID_SLIDEBOX entities (and likewise they will not collide with it), this is useful if you want dead bodies that are shootable but do not obstruct movement by players and monsters, note that if you traceline with a SOLID_SLIDEBOX entity as the ignoreent, it will ignore SOLID_CORPSE entities, this is desirable for visibility and movement traces, but not for bullets, for the traceline to hit SOLID_CORPSE you must temporarily force the player (or whatever) to SOLID_BBOX and then restore to SOLID_SLIDEBOX after the traceline.
 
 //DP_SPRITE32
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //the engine supports .spr32 sprites.
 
 //DP_SV_BOTCLIENT
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //constants:
 float CLIENTTYPE_DISCONNECTED = 0;
 float CLIENTTYPE_REAL = 1;
@@ -1443,7 +1443,7 @@ float(entity clent) clienttype = #455; // returns one of the CLIENTTYPE_* consta
 //allows qc to customize MOVETYPE_BOUNCE a bit
 
 //DP_SV_CLIENTCAMERA
-//idea: LordHavoc, others
+//idea: LadyHavoc, others
 //darkplaces implementation: Black
 //field definitions:
 .entity clientcamera; // override camera entity
@@ -1451,22 +1451,22 @@ float(entity clent) clienttype = #455; // returns one of the CLIENTTYPE_* consta
 //allows another entity to be the camera for a client, for example a remote camera, this is similar to sending svc_setview manually except that it also changes the network culling appropriately.
 
 //DP_SV_CLIENTCOLORS
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .float clientcolors; // colors of the client (format: pants + shirt * 16)
 //description:
 //allows qc to read and modify the client colors associated with a client entity (not particularly useful on other entities), and automatically sends out any appropriate network updates if changed
 
 //DP_SV_CLIENTNAME
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //allows qc to modify the client's .netname, and automatically sends out any appropriate network updates if changed
 
 //DP_SV_CUSTOMIZEENTITYFORCLIENT
-//idea: LordHavoc
-//darkplaces implementation: [515] and LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: [515] and LadyHavoc
 //field definitions:
 .float() customizeentityforclient; // self = this entity, other = client entity
 //description:
@@ -1481,6 +1481,37 @@ float(entity clent) clienttype = #455; // returns one of the CLIENTTYPE_* consta
 //implementation notes:
 //entity customization is done before per-client culling (visibility for instance) because the entity may be doing setorigin to display itself in different locations on different clients, may be altering its .modelindex, .effects and other fields important to culling, so customized entities increase cpu usage (non-customized entities can use all the early culling they want however, as they are not changing on a per client basis).
 
+//DP_SV_DISABLECLIENTPREDICTION
+//idea: LadyHavoc, Mario
+//darkplaces implementation: LadyHavoc, Mario
+//field definitions:
+.float disableclientprediction;
+//description:
+//By default, player entities are enabled for prediction by the engine if the
+//engine assumes the client can sensibly predict them. As the NQ and DarkPlaces
+//protocol does not network movetype, this in particular allows for client
+//prediction only if movetype == MOVETYPE_WALK.
+//Setting this field to 1 disables prediction in any case - this is useful when
+//the client cannot sensibly predict the server's idea of how the player moves
+//(common in case of pure serverside grappling hook or jetpack
+//implementations).
+//Setting this field to -1 forces prediction even if the server assumes the
+//client cannot predict the current movetype of a player entity (obviously,
+//this then requires matching client-side prediction code in CSQC, as the
+//engine's own client prediction will sure not handle these cases right due to
+//not knowing the serverside value of movetype). This is allowed in combination
+//with the following movetypes:
+// MOVETYPE_NONE (useful to have full QC control over movement)
+// MOVETYPE_WALK (redundant but harmless)
+// MOVETYPE_STEP
+// MOVETYPE_FLY (useful for spectators)
+// MOVETYPE_TOSS
+// MOVETYPE_NOCLIP (useful for spectators)
+// MOVETYPE_FLYMISSILE
+// MOVETYPE_BOUNCE
+// MOVETYPE_BOUNCEMISSILE
+// MOVETYPE_FLY_WORLDONLY (useful for spectators)
+
 //DP_SV_DISCARDABLEDEMO
 //idea: parasti
 //darkplaces implementation: parasti
@@ -1493,8 +1524,8 @@ float(entity clent) clienttype = #455; // returns one of the CLIENTTYPE_* consta
 //  discarding demos is enabled (the cvar sv_autodemo_perclient_discardable is set)
 
 //DP_SV_DRAWONLYTOCLIENT
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .entity drawonlytoclient;
 //description:
@@ -1502,15 +1533,15 @@ float(entity clent) clienttype = #455; // returns one of the CLIENTTYPE_* consta
 
 //DP_SV_DROPCLIENT
 //idea: FrikaC
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(entity clent) dropclient = #453;
 //description:
 //causes the server to immediately drop the client, more reliable than stuffcmd(clent, "disconnect\n"); which could be intentionally ignored by the client engine
 
 //DP_SV_EFFECT
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector org, string modelname, float startframe, float endframe, float framerate) effect = #404;
 //SVC definitions:
@@ -1572,8 +1603,8 @@ void(vector origin, string sample, float volume, float attenuation) pointsound =
 // SV_OnEntityPostSpawnFunction is called ONLY after its spawn function or SV_OnEntityNoSpawnFunction was called, and skipped if the entity got removed by either.
 
 //DP_SV_MODELFLAGS_AS_EFFECTS
-//idea: LordHavoc, Dresk
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc, Dresk
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .float modelflags;
 //constant definitions:
@@ -1608,24 +1639,24 @@ float MF_TRACER3 = 128; // purple trail
 // provides the netaddress of the associated entity (ie. 127.0.0.1) and "null/botclient" if the netconnection of the entity is invalid
 
 //DP_SV_NODRAWTOCLIENT
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .entity nodrawtoclient;
 //description:
 //the entity is not visible to the specified client.
 
 //DP_SV_PING
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .float ping;
 //description:
 //continuously updated field indicating client's ping (based on average of last 16 packet time differences).
 
 //DP_SV_PING_PACKETLOSS
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .float ping_packetloss;
 .float ping_movementloss;
@@ -1634,7 +1665,7 @@ float MF_TRACER3 = 128; // purple trail
 
 //DP_SV_POINTPARTICLES
 //idea: Spike
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //function definitions:
 float(string effectname) particleeffectnum = #335; // same as in CSQC
 void(entity ent, float effectnum, vector start, vector end) trailparticles = #336; // same as in CSQC
@@ -1649,16 +1680,16 @@ void(float effectnum, vector org, vector vel, float howmany) pointparticles = #3
 //warning: server must have same order of effects in effectinfo.txt as client does or the numbers would not match up, except for standard quake effects which are always the same numbers.
 
 //DP_SV_PUNCHVECTOR
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .vector punchvector;
 //description:
 //offsets client view in worldspace, similar to view_ofs but all 3 components are used and are sent with at least 8 bits of fraction, this allows the view to be kicked around by damage or hard landings or whatever else, note that unlike punchangle this is not faded over time, it is up to the mod to fade it (see also DP_SV_PLAYERPHYSICS).
 
 //DP_SV_PLAYERPHYSICS
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .vector movement;
 //cvar definitions:
@@ -1669,8 +1700,8 @@ void(float effectnum, vector org, vector vel, float howmany) pointparticles = #3
 //.movement vector contains the movement input from the player, allowing QC to do as it wishs with the input, and SV_PlayerPhysics will completely replace the player physics if present (works for all MOVETYPE's), see darkplaces mod source for example of this function (in playermovement.qc, adds HalfLife ladders support, as well as acceleration/deceleration while airborn (rather than the quake sudden-stop while airborn), and simplifies the physics a bit)
 
 //DP_PHYSICS_ODE
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //globals:
 //new movetypes:
 const float MOVETYPE_PHYSICS = 32; // need to be set before any physics_* builtins applied
@@ -1725,37 +1756,6 @@ const float FORCETYPE_TORQUE = 3;
 //   for a force:
 //     force vector to apply
 //field definitions:
-//DP_SV_DISABLECLIENTPREDICTION
-//idea: LordHavoc, Mario
-//darkplaces implementation: LordHavoc, Mario
-//field definitions:
-.float disableclientprediction;
-//description:
-//By default, player entities are enabled for prediction by the engine if the
-//engine assumes the client can sensibly predict them. As the NQ and DarkPlaces
-//protocol does not network movetype, this in particular allows for client
-//prediction only if movetype == MOVETYPE_WALK.
-//Setting this field to 1 disables prediction in any case - this is useful when
-//the client cannot sensibly predict the server's idea of how the player moves
-//(common in case of pure serverside grappling hook or jetpack
-//implementations).
-//Setting this field to -1 forces prediction even if the server assumes the
-//client cannot predict the current movetype of a player entity (obviously,
-//this then requires matching client-side prediction code in CSQC, as the
-//engine's own client prediction will sure not handle these cases right due to
-//not knowing the serverside value of movetype). This is allowed in combination
-//with the following movetypes:
-// MOVETYPE_NONE (useful to have full QC control over movement)
-// MOVETYPE_WALK (redundant but harmless)
-// MOVETYPE_STEP
-// MOVETYPE_FLY (useful for spectators)
-// MOVETYPE_TOSS
-// MOVETYPE_NOCLIP (useful for spectators)
-// MOVETYPE_FLYMISSILE
-// MOVETYPE_BOUNCE
-// MOVETYPE_BOUNCEMISSILE
-// MOVETYPE_FLY_WORLDONLY (useful for spectators)
-
 .float  geomtype;     // see GEOMTYPE_*, a more correct way to set collision shape, allows to set SOLID_CORPSE and trimesh collisions
 .float  maxcontacts;  // maximum number of contacts to make for this object, lesser = faster (but setting it too low will could make object pass though walls), default is 16, maximum is 32
 .float  mass;         // ODE mass, standart value is 1
@@ -1779,14 +1779,14 @@ void(entity e, vector torque) physics_addtorque = #542; // deprecated, add relat
 
 //DP_SV_PRINT
 //idea: id Software (QuakeWorld Server)
-//darkplaces implementation: Black, LordHavoc
+//darkplaces implementation: Black, LadyHavoc
 void(string s, ...) print = #339; // same number as in EXT_CSQC
 //description:
 //this is identical to dprint except that it always prints regardless of the developer cvar.
 
 //DP_SV_PRECACHEANYTIME
 //idea: id Software (Quake2)
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //this extension allows precache_model and precache_sound (and any variants) to be used during the game (with automatic messages to clients to precache the new model/sound indices), also setmodel/sound/ambientsound can be called without precaching first (they will cause an automatic precache).
 
@@ -1805,14 +1805,14 @@ string worldstatus;
 
 //DP_SV_ROTATINGBMODEL
 //idea: id Software
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //this extension merely indicates that MOVETYPE_PUSH supports avelocity, allowing rotating brush models to be created, they rotate around their origin (needs rotation supporting qbsp/light utilities because id ones expected bmodel entity origins to be '0 0 0', recommend setting "origin" key in the entity fields in the map before compiling, there may be other methods depending on your qbsp, most are more complicated however).
 //tip: level designers can create a func_wall with an origin, and avelocity (for example "avelocity" "0 90 0"), and "nextthink" "99999999" to make a rotating bmodel without any qc modifications, such entities will be solid in stock quake but will not rotate)
 
 //DP_SV_SETCOLOR
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(entity ent, float colors) setcolor = #401;
 //engine called QC functions (optional):
@@ -1823,8 +1823,8 @@ void(entity ent, float colors) setcolor = #401;
 //the color format is pants + shirt * 16 (0-255 potentially)
 
 //DP_SV_SLOWMO
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //cvars:
 //"slowmo" (0+, default 1)
 //description:
@@ -1853,11 +1853,11 @@ void(float to, string s, float sz) WritePicture = #501;
 void(float to, string s) WriteUnterminatedString = #456;
 //description:
 //like WriteString, but does not write a terminating 0 after the string. This means you can include things like a player's netname in the middle of a string sent over the network. Just be sure to end it up with either a call to WriteString (which includes the trailing 0) or WriteByte(0) to terminate it yourself.
-//A historical note: this extension was suggested by FrikaC years ago, more recently Shadowalker has been badmouthing LordHavoc and Spike for stealing 'his' extension writestring2 which does exactly the same thing but uses a different builtin number and name and extension string, this argument hinges on the idea that it was his idea in the first place, which is incorrect as FrikaC first suggested it and used a rough equivalent of it in his FrikBot mod years ago involving WriteByte calls on each character.
+//A historical note: this extension was suggested by FrikaC years ago, more recently Shadowalker has been badmouthing LadyHavoc and Spike for stealing 'his' extension writestring2 which does exactly the same thing but uses a different builtin number and name and extension string, this argument hinges on the idea that it was his idea in the first place, which is incorrect as FrikaC first suggested it and used a rough equivalent of it in his FrikBot mod years ago involving WriteByte calls on each character.
 
 //DP_TE_BLOOD
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector org, vector velocity, float howmany) te_blood = #405;
 //temp entity definitions:
@@ -1872,8 +1872,8 @@ float TE_BLOOD = 50;
 //creates a blood effect.
 
 //DP_TE_BLOODSHOWER
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector mincorner, vector maxcorner, float explosionspeed, float howmany) te_bloodshower = #406;
 //temp entity definitions:
@@ -1887,8 +1887,8 @@ void(vector mincorner, vector maxcorner, float explosionspeed, float howmany) te
 //creates an exploding shower of blood, for making gibbings more convincing.
 
 //DP_TE_CUSTOMFLASH
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector org, float radius, float lifetime, vector color) te_customflash = #417;
 //temp entity definitions:
@@ -1904,8 +1904,8 @@ void(vector org, float radius, float lifetime, vector color) te_customflash = #4
 //creates a customized light flash.
 
 //DP_TE_EXPLOSIONRGB
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector org, vector color) te_explosionrgb = #407;
 //temp entity definitions:
@@ -1919,8 +1919,8 @@ void(vector org, vector color) te_explosionrgb = #407;
 //creates a colored explosion effect.
 
 //DP_TE_FLAMEJET
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector org, vector vel, float howmany) te_flamejet = #457;
 //temp entity definitions:
@@ -1933,8 +1933,8 @@ void(vector org, vector vel, float howmany) te_flamejet = #457;
 //creates a single puff of flame particles.  (not very useful really)
 
 //DP_TE_PARTICLECUBE
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector mincorner, vector maxcorner, vector vel, float howmany, float color, float gravityflag, float randomveljitter) te_particlecube = #408;
 //temp entity definitions:
@@ -1951,8 +1951,8 @@ void(vector mincorner, vector maxcorner, vector vel, float howmany, float color,
 //creates a cloud of particles, useful for forcefields but quite customizable.
 
 //DP_TE_PARTICLERAIN
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlerain = #409;
 //temp entity definitions:
@@ -1967,8 +1967,8 @@ void(vector mincorner, vector maxcorner, vector vel, float howmany, float color)
 //creates a shower of rain, the rain will appear either at the top (if falling down) or bottom (if falling up) of the cube.
 
 //DP_TE_PARTICLESNOW
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlesnow = #410;
 //temp entity definitions:
@@ -1983,8 +1983,8 @@ void(vector mincorner, vector maxcorner, vector vel, float howmany, float color)
 //creates a shower of snow, the snow will appear either at the top (if falling down) or bottom (if falling up) of the cube, low velocities are advisable for convincing snow.
 
 //DP_TE_PLASMABURN
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector org) te_plasmaburn = #433;
 //temp entity definitions:
@@ -1995,8 +1995,8 @@ void(vector org) te_plasmaburn = #433;
 //creates a small light flash (radius 200, time 0.2) and marks the walls.
 
 //DP_TE_QUADEFFECTS1
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector org) te_gunshotquad = #412;
 void(vector org) te_spikequad = #413;
@@ -2013,8 +2013,8 @@ void(vector org) te_explosionquad = #415;
 //all of these just take a location, and are equivalent in function (but not appearance :) to the original TE_GUNSHOT, etc.
 
 //DP_TE_SMALLFLASH
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector org) te_smallflash = #416;
 //temp entity definitions:
@@ -2025,8 +2025,8 @@ void(vector org) te_smallflash = #416;
 //creates a small light flash (radius 200, time 0.2).
 
 //DP_TE_SPARK
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector org, vector vel, float howmany) te_spark = #411;
 //temp entity definitions:
@@ -2041,8 +2041,8 @@ void(vector org, vector vel, float howmany) te_spark = #411;
 //creates a shower of sparks and a smoke puff.
 
 //DP_TE_STANDARDEFFECTBUILTINS
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 void(vector org) te_gunshot = #418;
 void(vector org) te_spike = #419;
@@ -2062,8 +2062,8 @@ void(entity own, vector start, vector end) te_beam = #431;
 //to make life easier on mod coders.
 
 //DP_TRACE_HITCONTENTSMASK_SURFACEINFO
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //globals:
 .float dphitcontentsmask; // if non-zero on the entity passed to traceline/tracebox/tracetoss this will override the normal collidable contents rules and instead hit these contents values (for example AI can use tracelines that hit DONOTENTER if it wants to, by simply changing this field on the entity passed to traceline), this affects normal movement as well as trace calls
 float trace_dpstartcontents; // DPCONTENTS_ value at start position of trace
@@ -2114,8 +2114,8 @@ float Q3SURFACEFLAG_NONSOLID = 16384; // compiler hint (not important to qc)
 //little information in the trace_ variables as it was not moving at the time)
 
 //DP_VIEWZOOM
-//idea: LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: LadyHavoc
+//darkplaces implementation: LadyHavoc
 //field definitions:
 .float viewzoom;
 //description:
@@ -2132,7 +2132,7 @@ float(float number, float quantity) bitshift = #218;
 
 //FRIK_FILE
 //idea: FrikaC
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 float(string s) stof = #81; // get numerical value from a string
 float(string filename, float mode) fopen = #110; // opens a file inside quake/gamedir/data/ (mode is FILE_READ, FILE_APPEND, or FILE_WRITE), returns fhandle >= 0 if successful, or fhandle < 0 if unable to open file for any reason
@@ -2159,8 +2159,8 @@ float FILE_WRITE = 2;
 //NOTE: substring is upgraded by FTE_STRINGS extension with negative start/length handling identical to php 5.2.0
 
 //FTE_CSQC_SKELETONOBJECTS
-//idea: Spike, LordHavoc
-//darkplaces implementation: LordHavoc
+//idea: Spike, LadyHavoc
+//darkplaces implementation: LadyHavoc
 //builtin definitions:
 // all skeleton numbers are 1-based (0 being no skeleton)
 // all bone numbers are 1-based (0 being invalid)
@@ -2345,7 +2345,7 @@ void() example_skel_player_delete =
 
 //KRIMZON_SV_PARSECLIENTCOMMAND
 //idea: KrimZon
-//darkplaces implementation: KrimZon, LordHavoc
+//darkplaces implementation: KrimZon, LadyHavoc
 //engine-called QC prototypes:
 //void(string s) SV_ParseClientCommand;
 //builtin definitions:
@@ -2357,13 +2357,13 @@ string(float n) argv = #442;
 
 //NEH_CMD_PLAY2
 //idea: Nehahra
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //shows that the engine supports the "play2" console command (plays a sound without spatialization).
 
 //NEH_RESTOREGAME
 //idea: Nehahra
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //engine-called QC prototypes:
 //void() RestoreGame;
 //description:
@@ -2383,13 +2383,13 @@ string(float n) argv = #442;
 
 //NXQ_GFX_LETTERBOX
 //idea: nxQuake
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //description:
 //shows that the engine supports the "r_letterbox" console variable, set to values in the range 0-100 this restricts the view vertically (and turns off sbar and crosshair), value is a 0-100 percentage of how much to constrict the view, <=0 = normal view height, 25 = 75% of normal view height, 50 = 50%, 75 = 25%, >=100 = no view
 
 //PRYDON_CLIENTCURSOR
 //idea: FrikaC
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //effects bit:
 float EF_SELECTABLE = 16384; // allows cursor to highlight entity (brighten)
 //field definitions:
@@ -2409,7 +2409,7 @@ float EF_SELECTABLE = 16384; // allows cursor to highlight entity (brighten)
 
 //TENEBRAE_GFX_DLIGHTS
 //idea: Tenebrae
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //fields:
 .float light_lev; // radius (does not affect brightness), typical value 350
 .vector color; // color (does not affect radius), typical value '1 1 1' (bright white), can be up to '255 255 255' (nuclear blast)
@@ -2430,7 +2430,7 @@ float PFLAGS_FULLDYNAMIC = 128; // light enable (without this set no light is pr
 
 //TW_SV_STEPCONTROL
 //idea: Transfusion
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //cvars:
 //sv_jumpstep (0/1, default 1)
 //sv_stepheight (default 18)
@@ -2498,7 +2498,7 @@ float(string s1, string s2, float len) strncasecmp = #230; // same as strcasecmp
 
 //DP_QC_STRINGBUFFERS
 //idea: ??
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //functions to manage string buffer objects - that is, arbitrary length string arrays that are handled by the engine
 float() buf_create = #460;
 void(float bufhandle) buf_del = #461;
@@ -2608,3 +2608,27 @@ float MOVETYPE_USER_FIRST = 128;
 float MOVETYPE_USER_LAST = 191;
 //description:
 //user defined movetypes can be added between the start and end points, without producing unknown movetype warnings
+
+//DP_RM_CLIPGROUP
+//idea: Akari
+//darkplaces implementation: Akari
+//field definitions:
+.float clipgroup;
+//description:
+//If two entities have this field set to the same non-zero integer value, they won't collide with each other.
+
+//idea: eukara
+//darkplaces implementation: Cloudwalk
+// Do NOT use in production yet.
+string __fullspawndata;
+//description:
+// http://icculus.org/finger/marco?date=2019-01-25&time=05-38-02
+
+//DP_QC_FS_SEARCH_PACKFILE
+//idea: Mario
+//darkplaces implementation: Mario
+//builtin definitions:
+float(string pattern, float caseinsensitive, float quiet, string packfile) search_packfile_begin = #444;
+//description:
+//extension to search_begin (DP_QC_FS_SEARCH), performs a filename search with the specified pattern (for example "maps/*.bsp") and stores the results in a search slot (minimum of 128 supported by any engine with this extension), the other functions take this returned search slot number, be sure to search_free when done (they are also freed on progs reload).
+//only searches for files within the specified packfile, which is expected to match the results of whichpack().
index e3d98ab..7752f50 100644 (file)
@@ -144,3 +144,4 @@ float K_MOUSE13             =       526;
 float K_MOUSE14                =       527;
 float K_MOUSE15                =       528;
 float K_MOUSE16                =       529;
+
index d1a67ab..36cedec 100644 (file)
@@ -304,7 +304,7 @@ float       drawstring(vector position, string text, vector scale, vector rgb, float a
 float  drawcolorcodedstring(vector position, string text, vector scale, float alpha, float flag) = #467;
 
 vector drawcolorcodedstring2(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #467;
-
 float  drawpic(vector position, string pic, vector size, vector rgb, float alpha, float flag) = #456;
 
 float  drawfill(vector position, vector size, vector rgb, float alpha, float flag) = #457;
@@ -434,7 +434,7 @@ float CVAR_TYPEFLAG_READONLY = 32;
 
 //DP_QC_STRINGBUFFERS
 //idea: ??
-//darkplaces implementation: LordHavoc
+//darkplaces implementation: LadyHavoc
 //functions to manage string buffer objects - that is, arbitrary length string arrays that are handled by the engine
 float() buf_create = #440;
 void(float bufhandle) buf_del = #441;
@@ -450,7 +450,7 @@ void(float bufhandle, string pattern, string antipattern) buf_cvarlist = #517;
 
 //DP_QC_STRING_CASE_FUNCTIONS
 //idea: Dresk
-//darkplaces implementation: LordHavoc / Dresk
+//darkplaces implementation: LadyHavoc / Dresk
 //builtin definitions:
 string(string s) strtolower = #480; // returns the passed in string in pure lowercase form
 string(string s) strtoupper = #481; // returns the passed in string in pure uppercase form
@@ -538,9 +538,19 @@ float FIELD_FUNCTION = 6;
 //function definitions:
 void coverage() = #642;  // Reports a coverage event. The engine counts for each of the calls to this builtin whether it has been called.
 
+//DP_QC_FS_SEARCH_PACKFILE
+//idea: Mario
+//darkplaces implementation: Mario
+//builtin definitions:
+float(string pattern, float caseinsensitive, float quiet, string packfile) search_packfile_begin = #444;
+//description:
+//extension to search_begin (DP_QC_FS_SEARCH), performs a filename search with the specified pattern (for example "maps/*.bsp") and stores the results in a search slot (minimum of 128 supported by any engine with this extension), the other functions take this returned search slot number, be sure to search_free when done (they are also freed on progs reload).
+//only searches for files within the specified packfile, which is expected to match the results of whichpack().
+
 // assorted undocumented extensions
 string(string, float) netaddress_resolve = #625;
 string(string search, string replace, string subject) strreplace = #484;
+string(string search, string replace, string subject) strireplace = #485;
 string(float uselocaltime, string format, ...) strftime = #478;
 float(string s) tokenize_console = #514;
 float(float i) argv_start_index = #515;
index 2ccd843..68f161c 100644 (file)
@@ -404,7 +404,7 @@ void(entity e, vector min, vector max) setsize = #4;
 // #5 was removed
 void() break_to_debugger                                               = #6;
 float() random                                         = #7;           // returns 0 - 1
-void(entity e, float chan, string samp, float vol, float atten) sound = #8;
+void(entity e, float chan, string samp, float volume, ...) sound = #8;
 vector(vector v) normalize                     = #9;
 void(string e, ...) error                              = #10;
 void(string e, ...) objerror                           = #11;
index 4299c19..d5ddf20 100644 (file)
@@ -77,7 +77,7 @@ SELFWRAP(touch, void, (), (entity this, entity toucher), (this, other))
 #ifdef GAMEQC
 SELFWRAP(blocked, void, (), (entity this, entity blocker), (this, other))
 #define setblocked(e, f) SELFWRAP_SET(blocked, e, f)
-#define blocked stopusingthis
+#define getblocked(e) SELFWRAP_GET(blocked, e)
 #endif
 
 SELFWRAP(predraw, void, (), (entity this), (this))
index 1033919..5044793 100644 (file)
@@ -41,9 +41,6 @@ void XonoticMiscSettingsTab_fill(entity me)
                        e.addValue(e, _("Broadband"), "66666");
                        e.configureXonoticTextSliderValues(e);
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Server queries/s:")));
-               me.TD(me, 1, 2, e = makeXonoticSlider(20, 100, 10, "net_slist_queriespersecond"));
-       me.TR(me);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Downloads:")));
                me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 5, 1, "cl_curl_maxdownloads",
index 77f2602..c43e0af 100644 (file)
@@ -102,6 +102,8 @@ void XonoticVideoSettingsTab_fill(entity me)
                        e.addValue(e, ZCTX(_("DF^All")), "2");
                        e.configureXonoticTextSliderValues(e);
        me.TR(me);
+       if(cvar_type("gl_vbo") & CVAR_TYPEFLAG_ENGINE)
+       {
                me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Vertex Buffer Objects (VBOs)")));
        me.TR(me);
                me.TDempty(me, 0.2);
@@ -114,6 +116,7 @@ void XonoticVideoSettingsTab_fill(entity me)
                        _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering")));
                me.TD(me, 1, 1.9, e = makeXonoticRadioButton_T(1, "gl_vbo", "1", _("Vertices and Triangles"),
                        _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering")));
+       }
 
        me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Brightness:")));
@@ -155,8 +158,11 @@ void XonoticVideoSettingsTab_fill(entity me)
                me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "gl_finish", _("Wait for GPU to finish each frame"),
                        _("Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines")));
        me.TR(me);
+       if(cvar_type("vid_gl20") & CVAR_TYPEFLAG_ENGINE)
+       {
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_gl20", _("Use OpenGL 2.0 shaders (GLSL)")));
                        e.applyButton = videoApplyButton;
+       }
        if(cvar("developer") > 0)
        {
                me.TR(me);
diff --git a/qcsrc/server-testcase/framework.qc b/qcsrc/server-testcase/framework.qc
deleted file mode 100644 (file)
index 1735e1c..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-void LOG_TRACE(string s, ...) = #25;
-string ftos(float f) = #26;
-string vtos(vector v) = #27;
-void error(string e) = #10;
-float test();
-
-spawnfunc(worldspawn)
-{
-       float r;
-       LOG_TRACE("TESTCASE: START");
-       r = test();
-       if(r == 1)
-               error("TESTCASE: PASS");
-       else if(r == 0)
-               error("TESTCASE: FAIL");
-       else
-               error("TESTCASE: INVALID");
-}
diff --git a/qcsrc/server-testcase/progs.src b/qcsrc/server-testcase/progs.src
deleted file mode 100644 (file)
index bd5c571..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-../../progs-testcase.dat
-../server/sys.qh
-framework.qc
-testcase.qc
diff --git a/qcsrc/server-testcase/run.sh b/qcsrc/server-testcase/run.sh
deleted file mode 100755 (executable)
index c05013b..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/sh
-
-if [ "$#" -lt 3 ]; then
-       echo "Usage: $0 'float test() { if(fail) return 0; else if(good) return 1; else return -1; }' ./darkplaces-dedicated basement +sv_cheats 1"
-       exit 125
-fi
-
-case "$0" in
-       */*)
-               dir=${0%/*}
-               ;;
-       *)
-               dir=`pwd`
-               ;;
-esac
-testcase=$1; shift
-engine=$1; shift
-map=$1; shift
-echo "$testcase" > "$dir/testcase.qc"
-if ( cd $dir && fteqcc ); then
-       set -- "$engine" -xonotic -basedir "$dir/../../.." +sv_progs progs-testcase.dat "$@" +map "$map"
-       if [ -n "$GDB_ME" ]; then
-               cmdfile=`mktemp`
-               {
-                       echo "break VM_dprint"
-                       echo "run"
-                       echo "delete 1"
-                       echo "finish"
-               } > "$cmdfile"
-               gdb -x "$cmdfile" --args "$@"
-               rm -f "$cmdfile"
-               exit 0
-       else
-               r=`"$@" | tee /dev/stderr`
-       fi
-       case "$r" in
-               *"TESTCASE: PASS"*)
-                       echo "PASS detected"
-                       exit 0
-                       ;;
-               *"TESTCASE: FAIL"*)
-                       echo "FAIL detected"
-                       exit 1
-                       ;;
-               *"TESTCASE: INVALID"*)
-                       echo "INVALID detected"
-                       exit 125
-                       ;;
-               *)
-                       echo "Running failed"
-                       exit 125
-                       ;;
-       esac
-else
-       echo "Compilation failed"
-       exit 125
-fi
index 2ec8386..6c66dd9 100644 (file)
@@ -8,6 +8,7 @@
 #include <server/g_damage.qc>
 #include <server/g_hook.qc>
 #include <server/g_world.qc>
+#include <server/gamelog.qc>
 #include <server/handicap.qc>
 #include <server/impulse.qc>
 #include <server/ipban.qc>
index cc27baf..06bb03d 100644 (file)
@@ -8,6 +8,7 @@
 #include <server/g_damage.qh>
 #include <server/g_hook.qh>
 #include <server/g_world.qh>
+#include <server/gamelog.qh>
 #include <server/handicap.qh>
 #include <server/impulse.qh>
 #include <server/ipban.qh>
index 9327a20..fa4af04 100644 (file)
@@ -3,6 +3,7 @@
 #include "antilag.qh"
 #include "autocvars.qh"
 #include "defs.qh"
+#include <server/gamelog.qh>
 #include "miscfunctions.qh"
 
 #include "command/common.qh"
index ea2a629..5047334 100644 (file)
@@ -20,6 +20,7 @@
 #include "clientkill.qh"
 #include "cheats.qh"
 #include "g_world.qh"
+#include <server/gamelog.qh>
 #include "race.qh"
 #include "antilag.qh"
 #include "campaign.qh"
@@ -2712,6 +2713,9 @@ void PlayerPostThink (entity this)
                this.solid = SOLID_NOT;
                this.takedamage = DAMAGE_NO;
                set_movetype(this, MOVETYPE_NONE);
+               CS(this).teamkill_complain = 0;
+               CS(this).teamkill_soundtime = 0;
+               CS(this).teamkill_soundsource = NULL;
        }
 
        if (IS_PLAYER(this)) {
index a34203f..f98242a 100644 (file)
@@ -1,6 +1,7 @@
 #include "vote.qh"
 
 #include <server/defs.qh>
+#include <server/gamelog.qh>
 #include <server/miscfunctions.qh>
 
 #include <common/command/_mod.qh>
@@ -476,7 +477,7 @@ void ReadyRestart_force()
 
 void ReadyRestart()
 {
-       if (MUTATOR_CALLHOOK(ReadyRestart_Deny) || game_stopped || race_completing) localcmd("restart\n");
+       if (MUTATOR_CALLHOOK(ReadyRestart_Deny) || intermission_running || race_completing) localcmd("restart\n");
        else localcmd("\nsv_hook_readyrestart\n");
 
        // Reset ALL scores, but only do that at the beginning of the countdown if sv_ready_restart_after_countdown is off!
index 4d469b4..c405b8a 100644 (file)
@@ -5,6 +5,7 @@
 #include <server/items.qh>
 #include <server/resources.qh>
 #include <common/t_items.qh>
+#include <common/gamemodes/gamemode/ctf/sv_ctf.qh>
 #include <common/mapobjects/triggers.qh>
 #include <common/mapobjects/trigger/counter.qh>
 #include <common/mutators/mutator/buffs/buffs.qh>
@@ -294,11 +295,13 @@ bool DoesQ3ARemoveThisEntity(entity this)
                        gametypename = "team";
                if(g_ctf)
                        gametypename = "ctf";
+               if(g_ctf && ctf_oneflag)
+                       gametypename = "oneflag";
                if(g_duel)
                        gametypename = "tournament";
                if(maxclients == 1)
                        gametypename = "single";
-               // we do not have the other types (oneflag, obelisk, harvester, teamtournament)
+               // we do not have the other types (obelisk, harvester, teamtournament)
                if(strstrofs(this.gametype, gametypename, 0) < 0)
                        return true;
        }
index 48aa78b..9a8be98 100644 (file)
@@ -3,6 +3,7 @@
 #include <common/effects/all.qh>
 #include "bot/api.qh"
 #include "g_hook.qh"
+#include <server/gamelog.qh>
 #include <server/mutators/_mod.qh>
 #include "teamplay.qh"
 #include "scores.qh"
@@ -208,12 +209,12 @@ float Obituary_WeaponDeath(
        return true;
 }
 
-bool frag_centermessage_override(entity attacker, entity targ, int deathtype, int kill_count_to_attacker, int kill_count_to_target)
+bool frag_centermessage_override(entity attacker, entity targ, int deathtype, int kill_count_to_attacker, int kill_count_to_target, string attacker_name)
 {
        if(deathtype == DEATH_FIRE.m_id)
        {
                Send_Notification(NOTIF_ONE, attacker, MSG_CHOICE, CHOICE_FRAG_FIRE, targ.netname, kill_count_to_attacker, (IS_BOT_CLIENT(targ) ? -1 : CS(targ).ping));
-               Send_Notification(NOTIF_ONE, targ, MSG_CHOICE, CHOICE_FRAGGED_FIRE, attacker.netname, kill_count_to_target, GetResource(attacker, RES_HEALTH), GetResource(attacker, RES_ARMOR), (IS_BOT_CLIENT(attacker) ? -1 : CS(attacker).ping));
+               Send_Notification(NOTIF_ONE, targ, MSG_CHOICE, CHOICE_FRAGGED_FIRE, attacker_name, kill_count_to_target, GetResource(attacker, RES_HEALTH), GetResource(attacker, RES_ARMOR), (IS_BOT_CLIENT(attacker) ? -1 : CS(attacker).ping));
                return true;
        }
 
@@ -228,16 +229,25 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en
        // Declarations
        float notif_firstblood = false;
        float kill_count_to_attacker, kill_count_to_target;
+       bool notif_anonymous = false;
+       string attacker_name = attacker.netname;
 
        // Set final information for the death
        targ.death_origin = targ.origin;
        string deathlocation = (autocvar_notification_server_allows_location ? NearestLocation(targ.death_origin) : "");
 
+       // Abort now if a mutator requests it
+       if (MUTATOR_CALLHOOK(ClientObituary, inflictor, attacker, targ, deathtype, attacker.(weaponentity))) { CS(targ).killcount = 0; return; }
+       notif_anonymous = M_ARGV(5, bool);
+
+       if(notif_anonymous)
+               attacker_name = "Anonymous player";
+
        #ifdef NOTIFICATIONS_DEBUG
        Debug_Notification(
                sprintf(
                        "Obituary(%s, %s, %s, %s = %d);\n",
-                       attacker.netname,
+                       attacker_name,
                        inflictor.netname,
                        targ.netname,
                        Deathtype_Name(deathtype),
@@ -298,8 +308,8 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en
                        CS(attacker).killcount = 0;
 
                        Send_Notification(NOTIF_ONE, attacker, MSG_CENTER, CENTER_DEATH_TEAMKILL_FRAG, targ.netname);
-                       Send_Notification(NOTIF_ONE, targ, MSG_CENTER, CENTER_DEATH_TEAMKILL_FRAGGED, attacker.netname);
-                       Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(targ.team, INFO_DEATH_TEAMKILL), targ.netname, attacker.netname, deathlocation, CS(targ).killcount);
+                       Send_Notification(NOTIF_ONE, targ, MSG_CENTER, CENTER_DEATH_TEAMKILL_FRAGGED, attacker_name);
+                       Send_Notification(NOTIF_ALL, NULL, MSG_INFO, APP_TEAM_NUM(targ.team, INFO_DEATH_TEAMKILL), targ.netname, attacker_name, deathlocation, CS(targ).killcount);
 
                        // In this case, the death message will ALWAYS be "foo was betrayed by bar"
                        // No need for specific death/weapon messages...
@@ -363,14 +373,14 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en
                                        targ,
                                        MSG_CHOICE,
                                        CHOICE_TYPEFRAGGED,
-                                       attacker.netname,
+                                       attacker_name,
                                        kill_count_to_target,
                                        GetResource(attacker, RES_HEALTH),
                                        GetResource(attacker, RES_ARMOR),
                                        (IS_BOT_CLIENT(attacker) ? -1 : CS(attacker).ping)
                                );
                        }
-                       else if(!frag_centermessage_override(attacker, targ, deathtype, kill_count_to_attacker, kill_count_to_target))
+                       else if(!frag_centermessage_override(attacker, targ, deathtype, kill_count_to_attacker, kill_count_to_target, attacker_name))
                        {
                                Send_Notification(
                                        NOTIF_ONE,
@@ -386,7 +396,7 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en
                                        targ,
                                        MSG_CHOICE,
                                        CHOICE_FRAGGED,
-                                       attacker.netname,
+                                       attacker_name,
                                        kill_count_to_target,
                                        GetResource(attacker, RES_HEALTH),
                                        GetResource(attacker, RES_ARMOR),
@@ -398,8 +408,8 @@ void Obituary(entity attacker, entity inflictor, entity targ, int deathtype, .en
                        if(deathtype == DEATH_BUFF.m_id)
                                f3 = buff_FirstFromFlags(STAT(BUFFS, attacker)).m_id;
 
-                       if (!Obituary_WeaponDeath(targ, true, deathtype, targ.netname, attacker.netname, deathlocation, CS(targ).killcount, kill_count_to_attacker))
-                               Obituary_SpecialDeath(targ, true, deathtype, targ.netname, attacker.netname, deathlocation, CS(targ).killcount, kill_count_to_attacker, f3);
+                       if (!Obituary_WeaponDeath(targ, true, deathtype, targ.netname, attacker_name, deathlocation, CS(targ).killcount, kill_count_to_attacker))
+                               Obituary_SpecialDeath(targ, true, deathtype, targ.netname, attacker_name, deathlocation, CS(targ).killcount, kill_count_to_attacker, f3);
                }
        }
 
@@ -619,7 +629,15 @@ void Damage(entity targ, entity inflictor, entity attacker, float damage, int de
                                        damage = 0;
                                else if(attacker != targ)
                                {
-                                       if(autocvar_teamplay_mode == 3)
+                                       if(autocvar_teamplay_mode == 2)
+                                       {
+                                               if(IS_PLAYER(targ) && !IS_DEAD(targ))
+                                               {
+                                                       attacker.dmg_team = attacker.dmg_team + damage;
+                                                       complainteamdamage = attacker.dmg_team - autocvar_g_teamdamage_threshold;
+                                               }
+                                       }
+                                       else if(autocvar_teamplay_mode == 3)
                                                damage = 0;
                                        else if(autocvar_teamplay_mode == 4)
                                        {
index 67049e7..f6a5355 100644 (file)
@@ -11,6 +11,7 @@
 #include "command/sv_cmd.qh"
 #include "command/vote.qh"
 #include "g_hook.qh"
+#include <server/gamelog.qh>
 #include "ipban.qh"
 #include "mapvoting.qh"
 #include <server/mutators/_mod.qh>
@@ -259,6 +260,7 @@ void cvar_changes_init()
                BADCVAR("g_ca");
                BADCVAR("g_ca_teams");
                BADCVAR("g_conquest");
+               BADCVAR("g_conquest_teams");
                BADCVAR("g_ctf");
                BADCVAR("g_cts");
                BADCVAR("g_dotc");
@@ -286,6 +288,8 @@ void cvar_changes_init()
                BADCVAR("g_runematch");
                BADCVAR("g_shootfromeye");
                BADCVAR("g_snafu");
+               BADCVAR("g_survival");
+               BADCVAR("g_survival_not_dm_maps");
                BADCVAR("g_tdm");
                BADCVAR("g_tdm_on_dm_maps");
                BADCVAR("g_tdm_teams");
@@ -294,6 +298,7 @@ void cvar_changes_init()
                BADCVAR("nextmap");
                BADCVAR("teamplay");
                BADCVAR("timelimit");
+               BADCVAR("g_mapinfo_settemp_acl");
                BADCVAR("g_mapinfo_ignore_warnings");
                BADCVAR("g_maplist_ignore_sizes");
                BADCVAR("g_maplist_sizes_count_bots");
@@ -2067,21 +2072,20 @@ void Physics_Frame()
 
        IL_EACH(g_moveables, true,
        {
-               if(IS_CLIENT(it) || it.classname == "" || it.move_movetype == MOVETYPE_PUSH || it.move_movetype == MOVETYPE_FAKEPUSH || it.move_movetype == MOVETYPE_PHYSICS)
+               if(IS_CLIENT(it) || it.classname == "" || it.move_movetype == MOVETYPE_PHYSICS)
                        continue;
 
                //set_movetype(it, it.move_movetype);
                // inline the set_movetype function, since this is called a lot
-               it.movetype = (it.move_qcphysics) ? MOVETYPE_NONE : it.move_movetype;
+               it.movetype = (it.move_qcphysics) ? MOVETYPE_QCENTITY : it.move_movetype;
 
-               if(it.move_movetype == MOVETYPE_NONE)
-                       continue;
-
-               if(it.move_qcphysics)
+               if(it.move_qcphysics && it.move_movetype != MOVETYPE_NONE)
                        Movetype_Physics_NoMatchTicrate(it, PHYS_INPUT_TIMELENGTH, false);
 
                if(it.movetype >= MOVETYPE_USER_FIRST && it.movetype <= MOVETYPE_USER_LAST) // these cases have no think handling
                {
+                       if(it.move_movetype == MOVETYPE_PUSH || it.move_movetype == MOVETYPE_FAKEPUSH)
+                               continue; // these movetypes have no regular think function
                        // handle thinking here
                        if (getthink(it) && it.nextthink > 0 && it.nextthink <= time + frametime)
                                RunThink(it);
@@ -2093,7 +2097,7 @@ void Physics_Frame()
 
        IL_EACH(g_moveables, it.move_qcphysics,
        {
-               if(IS_CLIENT(it) || is_pure(it) || it.classname == "" || it.move_movetype == MOVETYPE_NONE)
+               if(IS_CLIENT(it) || it.classname == "" || it.move_movetype == MOVETYPE_NONE)
                        continue;
                Movetype_Physics_NoMatchTicrate(it, PHYS_INPUT_TIMELENGTH, false);
        });
diff --git a/qcsrc/server/gamelog.qc b/qcsrc/server/gamelog.qc
new file mode 100644 (file)
index 0000000..2c61419
--- /dev/null
@@ -0,0 +1,56 @@
+#include "gamelog.qh"
+
+#include <server/autocvars.qh>
+#include <server/miscfunctions.qh>
+
+string GameLog_ProcessIP(string s)
+{
+       if(!autocvar_sv_eventlog_ipv6_delimiter)
+               return s;
+       return strreplace(":", "_", s);
+}
+
+void GameLogEcho(string s)
+{
+       if (autocvar_sv_eventlog_files)
+       {
+               if (!logfile_open)
+               {
+                       logfile_open = true;
+                       int matches = autocvar_sv_eventlog_files_counter + 1;
+                       cvar_set("sv_eventlog_files_counter", itos(matches));
+                       string fn = ftos(matches);
+                       if (strlen(fn) < 8)
+                               fn = strcat(substring("00000000", 0, 8 - strlen(fn)), fn);
+                       fn = strcat(autocvar_sv_eventlog_files_nameprefix, fn, autocvar_sv_eventlog_files_namesuffix);
+                       logfile = fopen(fn, FILE_APPEND);
+                       fputs(logfile, ":logversion:3\n");
+               }
+               if (logfile >= 0)
+               {
+                       if (autocvar_sv_eventlog_files_timestamps)
+                               fputs(logfile, strcat(":time:", strftime(true, "%Y-%m-%d %H:%M:%S", "\n", s, "\n")));
+                       else
+                               fputs(logfile, strcat(s, "\n"));
+               }
+       }
+       if (autocvar_sv_eventlog_console)
+       {
+               dedicated_print(strcat(s, "\n"));
+       }
+}
+
+void GameLogInit()
+{
+       logfile_open = false;
+       // will be opened later
+}
+
+void GameLogClose()
+{
+       if (logfile_open && logfile >= 0)
+       {
+               fclose(logfile);
+               logfile = -1;
+       }
+}
diff --git a/qcsrc/server/gamelog.qh b/qcsrc/server/gamelog.qh
new file mode 100644 (file)
index 0000000..2fac52e
--- /dev/null
@@ -0,0 +1,12 @@
+#pragma once
+
+bool logfile_open;
+float logfile;
+
+string GameLog_ProcessIP(string s);
+
+void GameLogEcho(string s);
+
+void GameLogInit();
+
+void GameLogClose();
index b21df78..ab53a10 100644 (file)
@@ -105,7 +105,7 @@ bool Item_InitializeLoot(entity item, string class_name, vector position,
 
 bool Item_IsLoot(entity item)
 {
-       return item.m_isloot;
+       return item.m_isloot || item.classname == "droppedweapon";
 }
 
 void Item_SetLoot(entity item, bool loot)
index 523d32b..fe8748f 100644 (file)
@@ -1,6 +1,7 @@
 #include "mapvoting.qh"
 
 #include <server/defs.qh>
+#include <server/gamelog.qh>
 #include <server/miscfunctions.qh>
 #include "g_world.qh"
 #include "command/cmd.qh"
index d4d5d34..98bd775 100644 (file)
@@ -4,6 +4,7 @@
 #include "command/common.qh"
 #include "constants.qh"
 #include "g_hook.qh"
+#include <server/gamelog.qh>
 #include "ipban.qh"
 #include <server/mutators/_mod.qh>
 #include "../common/t_items.qh"
@@ -84,61 +85,6 @@ void dedicated_print(string input)
        if (server_is_dedicated) print(input);
 }
 
-string GameLog_ProcessIP(string s)
-{
-       if(!autocvar_sv_eventlog_ipv6_delimiter)
-               return s;
-       return strreplace(":", "_", s);
-}
-
-void GameLogEcho(string s)
-{
-    string fn;
-    int matches;
-
-    if (autocvar_sv_eventlog_files)
-    {
-        if (!logfile_open)
-        {
-            logfile_open = true;
-            matches = autocvar_sv_eventlog_files_counter + 1;
-            cvar_set("sv_eventlog_files_counter", itos(matches));
-            fn = ftos(matches);
-            if (strlen(fn) < 8)
-                fn = strcat(substring("00000000", 0, 8 - strlen(fn)), fn);
-            fn = strcat(autocvar_sv_eventlog_files_nameprefix, fn, autocvar_sv_eventlog_files_namesuffix);
-            logfile = fopen(fn, FILE_APPEND);
-            fputs(logfile, ":logversion:3\n");
-        }
-        if (logfile >= 0)
-        {
-            if (autocvar_sv_eventlog_files_timestamps)
-                fputs(logfile, strcat(":time:", strftime(true, "%Y-%m-%d %H:%M:%S", "\n", s, "\n")));
-            else
-                fputs(logfile, strcat(s, "\n"));
-        }
-    }
-    if (autocvar_sv_eventlog_console)
-    {
-        dedicated_print(strcat(s, "\n"));
-    }
-}
-
-void GameLogInit()
-{
-    logfile_open = 0;
-    // will be opened later
-}
-
-void GameLogClose()
-{
-    if (logfile_open && logfile >= 0)
-    {
-        fclose(logfile);
-        logfile = -1;
-    }
-}
-
 entity findnearest(vector point, bool checkitems, vector axismod)
 {
     vector dist;
index 35fc07b..e94ee9c 100644 (file)
@@ -56,14 +56,6 @@ string formatmessage(entity this, string msg);
 /** print(), but only print if the server is not local */
 void dedicated_print(string input);
 
-string GameLog_ProcessIP(string s);
-
-void GameLogEcho(string s);
-
-void GameLogInit();
-
-void GameLogClose();
-
 void GetCvars(entity this, entity store, int f);
 
 string GetMapname();
@@ -115,9 +107,6 @@ void WarpZone_traceline_antilag (entity source, vector v1, vector v2, float nomo
 // copies a string to a tempstring (so one can strunzone it)
 string strcat1(string s) = #115; // FRIK_FILE
 
-float logfile_open;
-float logfile;
-
 /*
 // NOTE: DO NOT USE THIS FUNCTION TOO OFTEN.
 // IT WILL MOST PROBABLY DESTROY _ALL_ OTHER TEMP
index a310c6c..35a8f6f 100644 (file)
@@ -90,6 +90,17 @@ MUTATOR_HOOKABLE(PlayerDies, EV_PlayerDies);
     /**/
 MUTATOR_HOOKABLE(PlayerDied, EV_PlayerDied);
 
+/** called when showing an obituary for the player. return true to show nothing (workarounds may be needed) */
+#define EV_ClientObituary(i, o) \
+    /** inflictor       */ i(entity, MUTATOR_ARGV_0_entity) \
+    /** attacker        */ i(entity, MUTATOR_ARGV_1_entity) \
+    /** target          */ i(entity, MUTATOR_ARGV_2_entity) \
+    /** deathtype       */ i(float,  MUTATOR_ARGV_3_float) \
+    /** wep entity      */ i(entity, MUTATOR_ARGV_4_entity) \
+    /** anonymous killer*/ o(bool,   MUTATOR_ARGV_5_bool) \
+    /**/
+MUTATOR_HOOKABLE(ClientObituary, EV_ClientObituary);
+
 /** allows overriding the frag centerprint messages */
 #define EV_FragCenterMessage(i, o) \
     /** attacker       */ i(entity, MUTATOR_ARGV_0_entity) \
index 531a153..0944620 100644 (file)
@@ -4,6 +4,7 @@
 #include "g_hook.qh"
 #include "g_damage.qh"
 #include "g_world.qh"
+#include <server/gamelog.qh>
 
 #include "bot/api.qh"
 
index a7c7205..83f1d38 100644 (file)
@@ -1,6 +1,7 @@
 #include "teamplay.qh"
 
 #include "client.qh"
+#include <server/gamelog.qh>
 #include "race.qh"
 #include "scores.qh"
 #include "scores_rules.qh"
diff --git a/scripts/cellammo.Shader b/scripts/cellammo.Shader
deleted file mode 100644 (file)
index 94b1c88..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-cellammo\r
-{\r
-       dpreflectcube cubemaps/default/sky\r
-       dpoffsetmapping - 0.5 match8 128\r
-       {\r
-               map textures/items/cellammo\r
-               rgbgen lightingDiffuse\r
-       }\r
-}
\ No newline at end of file
diff --git a/scripts/cellammo.shader b/scripts/cellammo.shader
new file mode 100644 (file)
index 0000000..0d6197c
--- /dev/null
@@ -0,0 +1,9 @@
+cellammo
+{
+       dpreflectcube cubemaps/default/sky
+       dpoffsetmapping - 0.5 match8 128
+       {
+               map textures/items/cellammo
+               rgbgen lightingDiffuse
+       }
+}
\ No newline at end of file
index 90d4bdb..17224b2 100644 (file)
@@ -171,6 +171,7 @@ v_kicktime 0 // how long damage kicks of the view last, default is 0 seconds
 gl_polyblend 0 // whether to use screen tints, this has now been replaced by a better system in CSQC
 r_motionblur 0 // motion blur value, default is 0
 r_damageblur 0 // motion blur when damaged, default is 0 (removed in Xonotic)
+net_slist_queriespersecond 60 // to be reduced if any major issues arise&nbs