]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'bones_was_here/q3compat' into 'master'
authorMario <mario.mario@y7mail.com>
Fri, 10 Sep 2021 15:34:51 +0000 (15:34 +0000)
committerMario <mario.mario@y7mail.com>
Fri, 10 Sep 2021 15:34:51 +0000 (15:34 +0000)
Merge branch bones_was_here/q3compat

Closes #2465

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

45 files changed:
.tx/merge-base
bal-wep-xonotic.cfg
balance-mario.cfg
balance-nexuiz25.cfg
balance-overkill.cfg
balance-samual.cfg
balance-xdf.cfg
balance-xonotic.cfg
balance-xpm.cfg
common.es.po
common.gd.po
common.it.po
common.ja_JP.po
common.pt_BR.po
gamemodes-server.cfg
gfx/menu/luma/icon_mod_jeff.tga [deleted file]
gfx/menu/luminos/icon_mod_jeff.tga [deleted file]
gfx/menu/wickedx/icon_mod_jeff.tga [deleted file]
gfx/menu/xaw/icon_mod_jeff.tga [deleted file]
languages.txt
qcsrc/client/csqcmodel_hooks.qc
qcsrc/client/csqcmodel_hooks.qh
qcsrc/client/hud/panel/scoreboard.qc
qcsrc/client/hud/panel/weapons.qc
qcsrc/client/items/items.qc
qcsrc/common/items/item/pickup.qh
qcsrc/common/mutators/mutator/powerups/powerup/invisibility.qh
qcsrc/common/mutators/mutator/powerups/powerup/shield.qh
qcsrc/common/mutators/mutator/powerups/powerup/speed.qh
qcsrc/common/mutators/mutator/powerups/powerup/strength.qh
qcsrc/common/mutators/mutator/powerups/sv_powerups.qh
qcsrc/common/mutators/mutator/status_effects/status_effect/superweapons.qc
qcsrc/common/mutators/mutator/status_effects/sv_status_effects.qc
qcsrc/common/notifications/all.inc
qcsrc/common/physics/movetypes/movetypes.qc
qcsrc/common/physics/movetypes/toss.qc
qcsrc/common/weapons/weapon/electro.qc
qcsrc/server/client.qc
qcsrc/server/client.qh
qcsrc/server/items/items.qc
ruleset-XDF.cfg
ruleset-XPM.cfg
sound/weapons/shotgun_melee.ogg
xonotic-client.cfg
xonotic-server.cfg

index bda5a3ab00da92929a2391603c9c67121cacb710..05ada6be4cd19f6c7375fe650c43dda3fb54f03b 100644 (file)
@@ -1 +1 @@
-Fri Jul 16 07:23:25 CEST 2021
+Fri Aug 27 07:23:20 CEST 2021
index cb7e71ce29e5674513c59366db4ce03dd4770374..7715b7c46d707322746680f1f450a5b2cdb9f375 100644 (file)
@@ -505,7 +505,7 @@ set g_balance_hlac_primary_force 90
 set g_balance_hlac_primary_lifetime 5
 set g_balance_hlac_primary_radius 70
 set g_balance_hlac_primary_refire 0.15
-set g_balance_hlac_primary_speed 9000
+set g_balance_hlac_primary_speed 6000
 set g_balance_hlac_primary_spread_add 0.0045
 set g_balance_hlac_primary_spread_crouchmod 0.25
 set g_balance_hlac_primary_spread_max 0.25
@@ -522,7 +522,7 @@ set g_balance_hlac_secondary_lifetime 5
 set g_balance_hlac_secondary_radius 70
 set g_balance_hlac_secondary_refire 1
 set g_balance_hlac_secondary_shots 6
-set g_balance_hlac_secondary_speed 9000
+set g_balance_hlac_secondary_speed 6000
 set g_balance_hlac_secondary_spread 0.15
 set g_balance_hlac_secondary_spread_crouchmod 0.5
 set g_balance_hlac_switchdelay_drop 0.2
index ad6a0e5c42c40a254c2c8015e3fb7384f6d3b53a..42e3a66967db0f6d958a220c9a9e6425c1683f1d 100644 (file)
@@ -263,4 +263,8 @@ set g_balance_portal_health 200 // these get recharged whenever the portal is us
 set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
 // }}}
 
+// {{{ hlac
+// hlac projectile settings are supposed to match the blaster, make sure they match when updating the blaster balance
+// }}}
+
 exec bal-wep-mario.cfg
index 80716a51b945d771c5f6e1c1f357951b91b8d910..6cdc29dcc4deec4152bd1e8f985cf87630e90de9 100644 (file)
@@ -263,4 +263,8 @@ set g_balance_portal_health 200 // these get recharged whenever the portal is us
 set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
 // }}}
 
+// {{{ hlac
+// hlac projectile settings are supposed to match the blaster, make sure they match when updating the blaster balance
+// }}}
+
 exec bal-wep-nexuiz25.cfg
index 2ab3e5b4c3ff81ec348fd86ba2d6621c11b29b1a..e33ee827f66699289c388db8bd38351d4e8c8ccf 100644 (file)
@@ -262,3 +262,7 @@ set g_balance_grapplehook_pull_frozen 0
 set g_balance_portal_health 200 // these get recharged whenever the portal is used
 set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
 // }}}
+
+// {{{ hlac
+// hlac projectile settings are supposed to match the blaster, make sure they match when updating the blaster balance
+// }}}
index 24e166ae02d70595b4a0caf28024ac727e2d20c6..7850aaba8b97eac07e8c77dce3ee632d85433a09 100644 (file)
@@ -263,4 +263,8 @@ set g_balance_portal_health 200 // these get recharged whenever the portal is us
 set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
 // }}}
 
+// {{{ hlac
+// hlac projectile settings are supposed to match the blaster, make sure they match when updating the blaster balance
+// }}}
+
 exec bal-wep-samual.cfg
index ddea3d6eb6c6379eb5c1ea5343696df56274aaf5..94e98a6461ccc1f85ded776b3bd7685f9c6f71ad 100644 (file)
@@ -263,4 +263,8 @@ set g_balance_portal_health 200 // these get recharged whenever the portal is us
 set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
 // }}}
 
+// {{{ hlac
+// hlac projectile settings are supposed to match the blaster, make sure they match when updating the blaster balance
+// }}}
+
 exec bal-wep-xdf.cfg
index ee2da53f12ce6f447189ac8fe091e7415bb08b47..5731be9f5f24e0311f84f01aeef467fd68ce161e 100644 (file)
@@ -263,4 +263,8 @@ set g_balance_portal_health 200 // these get recharged whenever the portal is us
 set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
 // }}}
 
+// {{{ hlac
+// hlac projectile settings are supposed to match the blaster, make sure they match when updating the blaster balance
+// }}}
+
 exec bal-wep-xonotic.cfg
index 2eac05cc557e8f9e62a084d034930fc533beec50..ed2b81c3f3e4a6093ad6127b410803eb2f841d0c 100644 (file)
@@ -263,4 +263,8 @@ set g_balance_portal_health 200 // these get recharged whenever the portal is us
 set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
 // }}}
 
+// {{{ hlac
+// hlac projectile settings are supposed to match the blaster, make sure they match when updating the blaster balance
+// }}}
+
 exec bal-wep-xonotic.cfg
index 371689cba586c310cbfe79110ba3c6dc441c24b4..ba6b8e1d30c0e739b47d613506422004d426a36d 100644 (file)
@@ -31,8 +31,8 @@ msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-06-27 07:23+0200\n"
-"PO-Revision-Date: 2021-06-27 05:24+0000\n"
-"Last-Translator: Alan García <bearz_x@hotmail.com>\n"
+"PO-Revision-Date: 2021-07-23 11:37+0000\n"
+"Last-Translator: LegendGuard\n"
 "Language-Team: Spanish (http://www.transifex.com/team-xonotic/xonotic/"
 "language/es/)\n"
 "Language: es\n"
@@ -1807,7 +1807,7 @@ msgstr "Ataque arácnido"
 
 #: qcsrc/common/monsters/monster/spider.qh:39
 msgid "Webbed"
-msgstr ""
+msgstr "Telaraña"
 
 #: qcsrc/common/monsters/monster/wyvern.qh:17
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:19
@@ -2009,7 +2009,7 @@ msgstr "Ardor"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/spawnshield.qh:10
 msgid "Spawn Shield"
-msgstr ""
+msgstr "Reaparición del Escudo"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/superweapons.qh:7
 msgid "Superweapons"
index c706a63ae806c4fe242b06ff1ee71274958d12a2..8550fff596b3b5a5d6bb9c28e90093742efbf94a 100644 (file)
@@ -3,7 +3,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Translators:
-# GunChleoc, 2017-2019
+# GunChleoc, 2017-2019,2021
 # GunChleoc, 2017
 # GunChleoc, 2017
 msgid ""
@@ -11,8 +11,8 @@ msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-06-27 07:23+0200\n"
-"PO-Revision-Date: 2021-06-27 05:23+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"PO-Revision-Date: 2021-08-18 16:33+0000\n"
+"Last-Translator: GunChleoc\n"
 "Language-Team: Gaelic, Scottish (http://www.transifex.com/team-xonotic/"
 "xonotic/language/gd/)\n"
 "Language: gd\n"
@@ -6521,7 +6521,7 @@ msgstr ""
 #: qcsrc/menu/xonotic/util.qc:785 qcsrc/menu/xonotic/util.qc:794
 #: qcsrc/menu/xonotic/util.qc:802 qcsrc/menu/xonotic/util.qc:814
 msgid "Default"
-msgstr ""
+msgstr "Bun-roghainn"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:40
 #: qcsrc/menu/xonotic/dialog_settings_misc.qc:57
@@ -9937,7 +9937,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/util.qc:780
 msgid "Use default"
-msgstr ""
+msgstr "Cleachd a’ bhun-roghainn"
 
 #: qcsrc/menu/xonotic/util.qc:800
 msgid "Team Color:"
index 13a2d18b90de19dfec613fde5e6a8cf25dfa2df4..ce12414c45a1062b40d01fa8a748bb001a28d3e7 100644 (file)
@@ -7,6 +7,7 @@
 # Antonio 'terencehill' Piu <piuntn@gmail.com>, 2011-2012
 # Costa <yesbubu@hotmail.it>, 2014,2021
 # Felice Sallustio <fel.sallustio@gmail.com>, 2011
+# Jessica Amoruso <jessica.amoruso123@gmail.com>, 2021
 # Mirio <opivy@hotmail.de>, 2017
 # Antonio <piuntn@gmail.com>, 2013
 msgid ""
@@ -14,8 +15,8 @@ msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-06-27 07:23+0200\n"
-"PO-Revision-Date: 2021-06-27 05:24+0000\n"
-"Last-Translator: Antonio <piuntn@gmail.com>\n"
+"PO-Revision-Date: 2021-08-19 23:34+0000\n"
+"Last-Translator: Jessica Amoruso <jessica.amoruso123@gmail.com>\n"
 "Language-Team: Italian (http://www.transifex.com/team-xonotic/xonotic/"
 "language/it/)\n"
 "Language: it\n"
@@ -1785,7 +1786,7 @@ msgstr "Attacco di Spider"
 
 #: qcsrc/common/monsters/monster/spider.qh:39
 msgid "Webbed"
-msgstr ""
+msgstr "Intrappolato"
 
 #: qcsrc/common/monsters/monster/wyvern.qh:17
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:19
@@ -1983,15 +1984,15 @@ msgstr "Forza"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/burning.qh:16
 msgid "Burning"
-msgstr ""
+msgstr "In fiamme"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/spawnshield.qh:10
 msgid "Spawn Shield"
-msgstr ""
+msgstr "Genera Scudo"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/superweapons.qh:7
 msgid "Superweapons"
-msgstr ""
+msgstr "Superarmi"
 
 #: qcsrc/common/mutators/mutator/waypoints/all.inc:3
 msgid "Waypoint"
@@ -3064,12 +3065,14 @@ msgstr "^BG%s^F3 si è disconnesso"
 #: qcsrc/common/notifications/all.inc:411
 #, c-format
 msgid "^BG%s^F3 was kicked after idling for %s seconds"
-msgstr ""
+msgstr "^BG%s^F3 è stato cacciato per inattività per %s secondi"
 
 #: qcsrc/common/notifications/all.inc:412
 #, c-format
 msgid "^BG%s^F3 was moved to^BG spectators^F3 after idling for %s seconds"
 msgstr ""
+"^BG%s^F3 è stato spostato tra gli ^BG spettatori ^F3 after idling for %s "
+"secondi"
 
 #: qcsrc/common/notifications/all.inc:413
 msgid ""
@@ -3088,7 +3091,7 @@ msgstr ""
 #: qcsrc/common/notifications/all.inc:415
 #, c-format
 msgid "^BG%s^F3 is now^BG spectating"
-msgstr ""
+msgstr "^BG%s^F3 adesso è uno^BG spettatore"
 
 #: qcsrc/common/notifications/all.inc:417
 #, c-format
@@ -3847,7 +3850,7 @@ msgstr ""
 
 #: qcsrc/common/notifications/all.inc:616
 msgid "^K1You were punished for attacking your team mates!"
-msgstr ""
+msgstr "^K1Sei stato punito per aver attaccato i tuoi compagni di squadra!"
 
 #: qcsrc/common/notifications/all.inc:617
 msgid "^K1Die camper!"
@@ -3884,7 +3887,7 @@ msgstr "^K1Sei diventato un pò troppo croccante!"
 
 #: qcsrc/common/notifications/all.inc:623
 msgid "^K1You fragged yourself!"
-msgstr ""
+msgstr "^K1Ti sei fraggato da solo!"
 
 #: qcsrc/common/notifications/all.inc:623
 msgid "^K1You need to be more careful!"
@@ -4034,22 +4037,22 @@ msgstr "^K1Attento a dove metti i piedi!"
 #: qcsrc/common/notifications/all.inc:651
 #, c-format
 msgid "^K1Traitor! You betrayed team mate ^BG%s"
-msgstr ""
+msgstr "^K1Traditore! Hai tradito il tuo compagno di sqaudra ^BG%s"
 
 #: qcsrc/common/notifications/all.inc:651
 #, c-format
 msgid "^K1Traitor! You team killed ^BG%s"
-msgstr ""
+msgstr "^K1Traditore! Hai ucciso ^BG%s"
 
 #: qcsrc/common/notifications/all.inc:652
 #, c-format
 msgid "^K1You were betrayed by team mate ^BG%s"
-msgstr ""
+msgstr "^K1Sei stato tradito dal tuo compagno di squadra ^BG%s"
 
 #: qcsrc/common/notifications/all.inc:652
 #, c-format
 msgid "^K1You were team killed by ^BG%s"
-msgstr ""
+msgstr "^K1Sei stato ucciso dal tuo compagno di squadra ^BG%s"
 
 #: qcsrc/common/notifications/all.inc:654
 msgid ""
@@ -4064,6 +4067,8 @@ msgid ""
 "^K1Stop idling!\n"
 "^BGMoving to spectators in ^COUNT..."
 msgstr ""
+"^K1Smettila di non far nulla!\n"
+"^BGVerrai spostato tra gli spettatori fra ^COUNT..."
 
 #: qcsrc/common/notifications/all.inc:657
 #, c-format
@@ -5733,7 +5738,7 @@ msgstr "Italiano"
 
 #: qcsrc/menu/xonotic/credits.qc:227
 msgid "Japanese"
-msgstr ""
+msgstr "Giapponese"
 
 #: qcsrc/menu/xonotic/credits.qc:230
 msgid "Kazakh"
index 5e36173f8c0bf334633d9c628008d3e9ac49fb8b..109b6ea8eb23b346d579ce9d8cd0906fd48dcf8f 100644 (file)
@@ -3,17 +3,19 @@
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Translators:
+# 8fb942b4466cdbffede843a6379dce7e_4dc4284 <cbc8558ff26f685f62baa2a2eaee30b3_1013263>, 2021
 # Antoni Das <Antonidas159@gmail.com>, 2017
 # LegendGuard, 2020
 # LegendGuard, 2020-2021
 # Lento <securemailfor28-xonotic@yahoo.co.jp>, 2015
+# RYU N. <ryusho2523@yahoo.co.jp>, 2021
 msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-06-27 07:23+0200\n"
-"PO-Revision-Date: 2021-06-27 05:23+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"PO-Revision-Date: 2021-07-24 01:09+0000\n"
+"Last-Translator: RYU N. <ryusho2523@yahoo.co.jp>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/team-xonotic/"
 "xonotic/language/ja_JP/)\n"
 "Language: ja_JP\n"
@@ -30,7 +32,7 @@ msgstr "^2%s への書き出すに成功! (註: data/data/ に保存されまし
 #: qcsrc/client/hud/hud_config.qc:84
 #, c-format
 msgid "^1Couldn't write to %s"
-msgstr "^1%sã\81¸æ\9b¸ã\81\8bã\81ªã\81\8bã\81£た"
+msgstr "^1%sã\81¸æ\9b¸ã\81\91ã\81¾ã\81\9bã\82\93ã\81§ã\81\97た"
 
 #: qcsrc/client/hud/panel/centerprint.qc:173
 #, c-format
@@ -57,7 +59,7 @@ msgstr "一般的なメッセージ"
 
 #: qcsrc/client/hud/panel/chat.qc:95
 msgid "^3Player^7: This is the chat area."
-msgstr "^3選手^7: ここがチャット面積."
+msgstr "^3プレイヤー^7: ここがチャットエリアです。"
 
 #: qcsrc/client/hud/panel/engineinfo.qc:75
 #, c-format
@@ -81,12 +83,12 @@ msgstr "観戦するために ^3%s ^1を押して"
 #: qcsrc/client/hud/panel/infomessages.qc:105
 #: qcsrc/menu/xonotic/keybinder.qc:47
 msgid "primary fire"
-msgstr "一次射撃"
+msgstr "メイン射撃"
 
 #: qcsrc/client/hud/panel/infomessages.qc:107
 #, c-format
 msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
-msgstr "^1次または前の選手を表示されるために ^3%s ^1または ^3%s ^1を押して"
+msgstr "^3%s^1または^3%s^1を押すと次または前のプレイヤーが表示されます"
 
 #: qcsrc/client/hud/panel/infomessages.qc:107
 #: qcsrc/client/hud/panel/infomessages.qc:111
@@ -101,14 +103,12 @@ msgstr "前の武器"
 #: qcsrc/client/hud/panel/infomessages.qc:111
 #, c-format
 msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
-msgstr "^3%s ^1または ^3%s ^1を使用して速度を変更する"
+msgstr "^3%s ^1または ^3%s ^1を使用してスピードを変更します"
 
 #: qcsrc/client/hud/panel/infomessages.qc:113
 #, c-format
 msgid "^1Press ^3%s^1 to observe, ^3%s^1 to change camera mode"
-msgstr ""
-"^1観戦するために ^3%s ^1を押して、カメラモードを変更するために ^3%s ^1を押し"
-"て"
+msgstr "^1^3%s^1で観戦、^3%s^1でカメラモードを変更"
 
 #: qcsrc/client/hud/panel/infomessages.qc:113
 #: qcsrc/common/vehicles/cl_vehicles.qc:171
@@ -118,7 +118,7 @@ msgstr "武器を落とす"
 #: qcsrc/client/hud/panel/infomessages.qc:113
 #: qcsrc/menu/xonotic/keybinder.qc:48
 msgid "secondary fire"
-msgstr "二次射撃"
+msgstr "サブ射撃"
 
 #: qcsrc/client/hud/panel/infomessages.qc:116
 #, c-format
@@ -147,12 +147,12 @@ msgstr "^1ゲームは ^3%d ^1秒で始まります"
 
 #: qcsrc/client/hud/panel/infomessages.qc:143
 msgid "^2Currently in ^1warmup^2 stage!"
-msgstr "^2現在、^1準備運動 ^2の段階に入っています!"
+msgstr "^2現在、^1ウォームアップ^2の段階に入っています!"
 
 #: qcsrc/client/hud/panel/infomessages.qc:158
 #, 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:158
 #: qcsrc/client/hud/panel/infomessages.qc:160
@@ -164,7 +164,7 @@ msgstr "準備"
 #: qcsrc/client/hud/panel/infomessages.qc:160
 #, c-format
 msgid "%sPress ^3%s%s once you are ready"
-msgstr "%s準備ができたら ^3%s%s を押して"
+msgstr "%s準備ができたら ^3%s%sを押してください"
 
 #: qcsrc/client/hud/panel/infomessages.qc:165
 msgid "^2Waiting for others to ready up to end warmup..."
@@ -177,7 +177,7 @@ msgstr "^2全員の準備ができるまで待ち中..."
 #: qcsrc/client/hud/panel/infomessages.qc:173
 #, c-format
 msgid "^2Press ^3%s^2 to end warmup"
-msgstr "^2準備運動を終了するために ^2^3%s ^2を押して"
+msgstr "^3%s ^2を押すとウォームアップを終了します"
 
 #: qcsrc/client/hud/panel/infomessages.qc:194
 msgid "Teamnumbers are unbalanced!"
@@ -249,7 +249,7 @@ msgstr "QMCMD^公開メッセージを送信する:"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:803
 msgid "QMCMD^:-) / nice one"
-msgstr "QMCMD^ ^‿^ ) / ナイス"
+msgstr "QMCMD^ (^_^) / ナイス"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:803
 msgid "QMCMD^nice one"
@@ -261,11 +261,11 @@ msgstr "よくやった"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:805
 msgid "QMCMD^hi / good luck"
-msgstr "QMCMD^ã\82\88ã\83¼ / æ¥½ã\81\97ã\82\93ã\81§ã\81­"
+msgstr "QMCMD^ã\82\84ã\81\82 / ã\82°ã\83\83ã\83\89ã\83©ã\83\83ã\82¯"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:805
 msgid "QMCMD^hi / good luck and have fun"
-msgstr "QMCMD^ã\82\88ã\83¼ / é \91å¼µã\81£ã\81¦楽しんでね"
+msgstr "QMCMD^ã\82\84ã\81\82 / ã\82°ã\83\83ã\83\89ã\83©ã\83\83ã\82¯ã\80\81楽しんでね"
 
 #: qcsrc/client/hud/panel/quickmenu.qc:807
 msgid "QMCMD^Send in English"
@@ -652,7 +652,7 @@ msgstr "キル数 - 自殺数 = "
 
 #: qcsrc/client/hud/panel/scoreboard.qc:133
 msgid "SCO^frags"
-msgstr "削除数"
+msgstr "FRAG数"
 
 #: qcsrc/client/hud/panel/scoreboard.qc:134
 msgid "Number of goals scored"
@@ -1553,11 +1553,11 @@ msgstr "よくやった! 「次のレベル」をクリックして続行する"
 
 #: qcsrc/common/minigames/minigame/bd.qc:1163
 msgid "Better luck next time!"
-msgstr "次回は頑張って!"
+msgstr "次回は頑張ってくれたまえ!"
 
 #: qcsrc/common/minigames/minigame/bd.qc:1168
 msgid "Tubular! Press \"Next Level\" to continue!"
-msgstr "管状! 「次のレベル」を押して続行して!"
+msgstr "管状! 「次のレベル」を押して次へ!"
 
 #: qcsrc/common/minigames/minigame/bd.qc:1170
 msgid "Wicked! Press \"Next Level\" to continue!"
@@ -1767,7 +1767,7 @@ msgstr "蜘蛛の攻撃"
 
 #: qcsrc/common/monsters/monster/spider.qh:39
 msgid "Webbed"
-msgstr ""
+msgstr ""
 
 #: qcsrc/common/monsters/monster/wyvern.qh:17
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:19
@@ -1811,7 +1811,7 @@ msgstr "障害"
 
 #: qcsrc/common/mutators/mutator/buffs/all.inc:83
 msgid "Disabled"
-msgstr ""
+msgstr "無効"
 
 #: qcsrc/common/mutators/mutator/buffs/all.inc:94
 msgid "Vengeance"
@@ -1969,7 +1969,7 @@ msgstr "燃焼"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/spawnshield.qh:10
 msgid "Spawn Shield"
-msgstr ""
+msgstr "スポーンシールド"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/superweapons.qh:7
 msgid "Superweapons"
@@ -6202,19 +6202,19 @@ msgstr "ズームモード:"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:46
 msgid "Zoomed in"
-msgstr "ã\82ºã\83¼ã\83 ã\81\97ã\81\9få\86\85"
+msgstr "ã\82ºã\83¼ã\83 ã\82¤ã\83³"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:47
 msgid "Zoomed out"
-msgstr "ã\82ºã\83¼ã\83 ã\81\97ã\81\9få¤\96"
+msgstr "ã\82ºã\83¼ã\83 ã\82¢ã\82¦ã\83\88"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:48
 msgid "Always zoomed"
-msgstr "常にズームした"
+msgstr "常にズーム"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:49
 msgid "Never zoomed"
-msgstr "決してズームした"
+msgstr "ズームしない"
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_radar.qh:6
 msgid "Radar Panel"
@@ -6549,7 +6549,7 @@ msgstr "モンスター:"
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:22
 #: qcsrc/menu/xonotic/dialog_sandboxtools.qc:20
 msgid "Spawn"
-msgstr "現れる"
+msgstr "スポーン"
 
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:23
 msgid "Remove"
@@ -6586,7 +6586,7 @@ msgstr "スキンを設定する:"
 
 #: qcsrc/menu/xonotic/dialog_monstertools.qh:6
 msgid "Monster Tools"
-msgstr "モンスター用具"
+msgstr "モンスターツール"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer.qc:14
 msgid "Servers"
@@ -6610,14 +6610,14 @@ msgstr "プロフィール"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer.qh:6
 msgid "Multiplayer"
-msgstr "マルチプレイヤー"
+msgstr "マルチプレイ"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer.qh:7
 msgid ""
 "Play online, against your friends in LAN, view demos or change player "
 "settings"
 msgstr ""
-"ã\82ªã\83³ã\83©ã\82¤ã\83³ã\81§é\81\8aã\81¶ã\80\81LANã\81®å\8f\8bé\81\94ã\81«å¯¾ã\81\97ã\81¦ã\80\81ã\83\87ã\83¢ã\82\92表示ã\81\99ã\82\8bã\81\8bã\80\81é\81¸æ\89\8b設å®\9aã\82\92å¤\89æ\9b´ã\81\99ã\82\8b"
+"ã\82ªã\83³ã\83©ã\82¤ã\83³ã\81§é\81\8aã\81¶ã\80\81LANã\81®å\8f\8bé\81\94ã\81¨å¯¾æ±ºã\80\81ã\83\87ã\83¢ã\82\92表示ã\81\99ã\82\8bã\81\8bã\80\81ã\83\97ã\83¬ã\82¤ã\83¤ã\83¼è¨­å®\9aã\82\92å¤\89æ\9b´"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:111
@@ -6710,15 +6710,15 @@ 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 "å¿\85ã\81\9aå\8b\9dã\81¤"
 
 #: 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"
@@ -6726,11 +6726,11 @@ 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"
@@ -6738,7 +6738,7 @@ msgstr "プロ"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:137
 msgid "Assassin"
-msgstr "暗殺者"
+msgstr "アサシン"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:138
 msgid "Unhuman"
@@ -6802,7 +6802,7 @@ msgstr "利用可能な全てのマップを選択から削除する"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:206
 msgid "Start Multiplayer!"
-msgstr "ã\83\9eã\83«ã\83\81ã\83\97ã\83¬ã\82¤ã\83¤ã\83¼ã\82\92é\96\8bå§\8b!"
+msgstr "ã\83\9eã\83«ã\83\81ã\83\97ã\83¬ã\82¤ã\82\92ã\82¹ã\82¿ã\83¼ã\83\88!"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.qc:50
 msgid "Title:"
@@ -6997,23 +6997,25 @@ msgstr "武器とアイテムのミューテーター:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:212
 msgid "Players spawn with the grappling hook. Press the 'hook' key to use it"
-msgstr "選手はグラップリングフックで現れる。使用するには「フック」キーを押して"
+msgstr ""
+"プレイヤーはグラップリングフックでスポーンします。「フック」キーを押して使用"
+"してください"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:216
 msgid ""
 "Players spawn with the jetpack. Double-tap 'jump' or press the 'jetpack' key "
 "to use it"
 msgstr ""
-"選手はジェットパックでスポーンする。 「ジャンプ」をダブルタップするか、使用す"
-"ã\82\8bã\81\9fã\82\81ã\81«ã\80\8cã\82¸ã\82§ã\83\83ã\83\88ã\83\91ã\83\83ã\82¯ã\80\8dã\82­ã\83¼ã\82\92æ\8a¼ã\81\97ã\81¦"
+"プレイヤーはジェットパックでスポーンします。 「ジャンプ」をダブルタップする"
+"ã\81\8bã\80\81ã\80\8cã\82¸ã\82§ã\83\83ã\83\88ã\83\91ã\83\83ã\82¯ã\80\8dã\82­ã\83¼ã\82\92æ\8a¼ã\81\97ã\81¦ä½¿ç\94¨ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84"
 
 #: 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 ""
-"å¼¾ã\81¯ç ´å£\8aã\81§ã\81\8dã\81ªã\81\84ã\80\82ã\81\9fã\81 ã\81\97ã\80\81ã\82¨ã\83¬ã\82¯ã\83\88ã\81®ä¸\80次å°\84æ\92\83ã\81§ã\82¨ã\83¬ã\82¯ã\83\88ã\82ªã\83¼ã\83\96ã\82\92ç\88\86ç\99ºã\81\95ã\81\9bã\82\8bã\81\93ã\81¨"
-"ã\81¯ã\81§ã\81\8dã\82\8b"
+"å¼¾ã\81¯ç ´å£\8aã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82ã\81\9fã\81 ã\81\97ã\80\81ã\82¨ã\83¬ã\82¯ã\83\88ã\81®ã\83¡ã\82¤ã\83³å°\84æ\92\83ã\81§ã\82¨ã\83¬ã\82¯ã\83\88ã\82ªã\83¼ã\83\96ã\82\92ç\88\86ç\99ºã\81\95ã\81\9bã\82\8b"
+"ã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:225
 msgid ""
@@ -7081,7 +7083,7 @@ msgid ""
 msgstr ""
 "選手は武器を受け取り、一発で敵を即座に殺すことができます。選手が弾薬を使い果"
 "たした場合、弾薬を見つけるまで10秒かかりますが、弾薬を見つけられない場合は死"
-"にます。二次射撃モードはダメージを与えませんが、ジャンプに適しています。"
+"にます。サブ射撃モードはダメージを与えませんが、ジャンプに適しています。"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:289
 msgid ""
@@ -7220,7 +7222,7 @@ msgstr "必須 (暗号化します)"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:161
 msgid "Use the `crypto_aeslevel` cvar to change your preferences"
-msgstr "設å®\9aã\82\92å¤\89æ\9b´ã\81\99ã\82\8bã\81«ã\81¯ `crypto_aeslevel` cvarã\82\92使ç\94¨ã\81\99ã\82\8b"
+msgstr "設å®\9aã\82\92å¤\89æ\9b´ã\81\99ã\82\8bã\81«ã\81¯ `crypto_aeslevel` cvarã\82\92使ç\94¨ã\81\97ã\81¾ã\81\99"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.qc:178
 msgid "Hostname:"
@@ -7289,7 +7291,7 @@ msgstr "音楽プレーヤー"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:48
 msgid "Auto record demos"
-msgstr "自動録デモ"
+msgstr "自動録デモ"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:57
 msgid "Timedemo"
@@ -7298,7 +7300,8 @@ msgstr "最高速度でデモを再生する"
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:58
 msgid "Benchmark how fast your computer can run the highlighted demo"
 msgstr ""
-"お使いのコンピューターが強調表示されたデモを実行できる速度をベンチマークする"
+"お使いのコンピューターが強調表示されたデモを実行できる速度をベンチマークしま"
+"す"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:62
 msgid "DEMO^Play"
@@ -7306,7 +7309,7 @@ msgstr "再生する"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:13
 msgid "Playing a demo will disconnect you from the current match."
-msgstr "ã\83\87ã\83¢ã\82\92å\86\8dç\94\9fã\81\99ã\82\8bã\81¨ã\80\81ç\8f¾å\9c¨ã\81®è©¦å\90\88ã\81\8bã\82\89å\88\87æ\96­ã\81\95ã\82\8cã\82\8b。"
+msgstr "ã\83\87ã\83¢ã\82\92å\86\8dç\94\9fã\81\99ã\82\8bã\81¨ã\80\81ç\8f¾å\9c¨ã\81®è©¦å\90\88ã\81\8bã\82\89å\88\87æ\96­ã\81\95ã\82\8cã\81¾ã\81\99。"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qc:15
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_timeconfirm.qc:15
@@ -7435,7 +7438,7 @@ msgstr "選手の統計が得点表であなたをランク付けできるよう
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:156
 msgid "Select language..."
-msgstr "言語を選択する..."
+msgstr "言語選択..."
 
 #: qcsrc/menu/xonotic/dialog_quit.qc:11
 msgid "Are you sure you want to quit?"
@@ -7660,7 +7663,7 @@ msgstr "新しいスタイルの音響減衰"
 
 #: qcsrc/menu/xonotic/dialog_settings_audio.qc:103
 msgid "Mute sounds when not active"
-msgstr "活発でないときに音を消す"
+msgstr "アクティブでないときに音を消す"
 
 #: qcsrc/menu/xonotic/dialog_settings_audio.qc:106
 msgid "Frequency:"
@@ -7828,7 +7831,7 @@ msgstr "両"
 
 #: qcsrc/menu/xonotic/dialog_settings_audio.qc:176
 msgid "Automatic taunts:"
-msgstr "自動からかう:"
+msgstr "自動挑発:"
 
 #: qcsrc/menu/xonotic/dialog_settings_audio.qc:178
 msgid "Automatically taunt enemies after fragging them"
@@ -8015,8 +8018,8 @@ msgid ""
 "Use high resolution lightmaps, which will look pretty but use up some extra "
 "video memory"
 msgstr ""
-"é«\98解å\83\8f度ã\81®ã\83©ã\82¤ã\83\88ã\83\9eã\83\83ã\83\97ã\82\92使ç\94¨ã\81\99ã\82\8bã\80\81è¦\8bã\81\9fç\9b®ã\81¯ã\81\8dã\82\8cã\81\84ã\81§ã\81\99ã\81\8cã\80\81追å\8a ã\81®ã\83\93ã\83\87ã\82ªã\83¡ã\83¢ã\83ªã\82\92"
-"使い果たします。"
+"é«\98解å\83\8f度ã\81®ã\83©ã\82¤ã\83\88ã\83\9eã\83\83ã\83\97ã\82\92使ç\94¨ã\81\97ã\81¾ã\81\99ã\80\81è¦\8bã\81\9fç\9b®ã\81¯ã\81\8dã\82\8cã\81\84ã\81§ã\81\99ã\81\8cã\80\81追å\8a ã\81®ã\83\93ã\83\87ã\82ªã\83¡ã\83¢ã\83ª"
+"使い果たします。"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:139
 msgid "Deluxe mapping"
@@ -8227,7 +8230,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:233
 msgid "Motion blur strength - 0.4 recommended"
-msgstr "ã\83¢ã\83¼ã\82·ã\83§ã\83³ã\83\96ã\83©ã\83¼ã\81®å¼·åº¦ - 0.4ã\82\92å\8b§ã\82\81ã\81\99"
+msgstr "ã\83¢ã\83¼ã\82·ã\83§ã\83³ã\83\96ã\83©ã\83¼ã\81®å¼·åº¦ - 0.4ã\81\8cã\82ªã\82¹ã\82¹ã\83¡"
 
 #: qcsrc/menu/xonotic/dialog_settings_effects.qc:234
 msgid "Motion blur:"
@@ -8286,7 +8289,7 @@ msgstr "サイズ:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:64
 msgid "By health"
-msgstr "健康で"
+msgstr "ヘルスで"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc:76
 msgid "Use rings to indicate weapon status"
@@ -8436,7 +8439,7 @@ msgstr "十字線に近い場合のみ"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:158
 msgid "Display health and armor"
-msgstr "健康と鎧を表示する"
+msgstr "ヘルスとアーマーを表示する"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:163
 msgid "Damage overlay:"
@@ -8448,11 +8451,11 @@ msgstr "ダイナミックHUD"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:167
 msgid "HUD moves around following player's movement"
-msgstr "HUDã\81¯é\81¸æ\89\8bの動きに従って動き回る"
+msgstr "HUDã\82\92ã\83\97ã\83¬ã\82¤ã\83¤ã\83¼の動きに従って動き回る"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:169
 msgid "Shake the HUD when hurt"
-msgstr "å\82·ã\81¤ã\81\84ã\81\9fã\81¨ã\81\8dã\81«HUDã\82\92æ\8c¯ã\82\8b"
+msgstr "å\82·ã\81¤ã\81\84ã\81\9fã\81¨ã\81\8dã\81«HUDã\82\92æ\8fºã\82\89ã\81\99"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:173
 #: qcsrc/menu/xonotic/dialog_settings_game_hudconfirm.qh:6
@@ -8473,11 +8476,11 @@ msgstr "HUDを構成するローカルゲームを開始しますか?"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:24
 msgid "Frag Information"
-msgstr "削除情報"
+msgstr "FRAG情報"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:26
 msgid "Display information about killing sprees"
-msgstr "殺害に関する情報を表示する"
+msgstr "連続キルに関する情報を表示する"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:29
 msgid "Only display sprees if they are achievements"
@@ -8656,7 +8659,7 @@ msgstr "体フェージング:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:65
 msgid "Gibs:"
-msgstr "å\86\85è\87\93:"
+msgstr "ã\83\90ã\83©ã\83\90ã\83©æ­»ä½\93:"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_model.qc:67
 msgid "GIBS^None"
@@ -8779,7 +8782,7 @@ msgstr "ズーム中にレチクル2Dオーバーレイを表示する"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:115
 msgid "Release zoom when you die or respawn"
-msgstr "死んだり再び現れたときにズームを解放する"
+msgstr "死んだりリスポーンしたときにズームを解放する"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_view.qc:119
 msgid "Release zoom when you switch weapons"
@@ -8928,7 +8931,7 @@ msgstr "DGAマウス入力を利用する"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:94
 msgid "Pressing \"enter console\" key also closes it"
-msgstr "「コンソールを入力する」キーを押すと、それも閉じる"
+msgstr "「コンソール入力」キーを押すと、それも閉じる"
 
 #: qcsrc/menu/xonotic/dialog_settings_input.qc:95
 msgid "Allow the console toggling bind to also close the console"
@@ -9238,7 +9241,7 @@ msgstr "解像度:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:37
 msgid "Font/UI size:"
-msgstr "フォント / UIサイズ:"
+msgstr "フォント/UIサイズ:"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:39
 msgid "SZ^Unreadable"
@@ -9246,7 +9249,7 @@ 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"
@@ -9294,7 +9297,7 @@ msgstr "32bit"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:59
 msgid "Full screen"
-msgstr "フルスケ"
+msgstr "全画面"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:61
 msgid "Vertical Synchronization"
@@ -9306,7 +9309,7 @@ msgid ""
 "screen refresh rate"
 msgstr ""
 "垂直同期を有効にしてティアリングを防止し、fpsを画面のリフレッシュレートに制限"
-"ã\81\99ã\82\8b"
+"ã\81\97ã\81¾ã\81\99"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:67
 msgid "Flip view horizontally"
@@ -9376,7 +9379,7 @@ msgid ""
 "normal rendering starts"
 msgstr ""
 "通常のレンダリングが開始する前に、深度のみのバージョンのシーンをレンダリング"
-"ã\81\99ã\82\8bã\81\93ã\81¨ã\81«ã\82\88ã\82\8aã\80\81ã\82ªã\83¼ã\83\90ã\83¼ã\83\89ã\83­ã\83¼ã\82\92æ\8e\92é\99¤ã\81\99ã\82\8b"
+"ã\81\99ã\82\8bã\81\93ã\81¨ã\81«ã\82\88ã\82\8aã\80\81ã\82ªã\83¼ã\83\90ã\83¼ã\83\89ã\83­ã\83¼ã\82\92æ\8e\92é\99¤ã\81\97ã\81¾ã\81\99"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:100
 msgid "DF^Disabled"
@@ -9410,7 +9413,7 @@ msgid ""
 "for faster rendering"
 msgstr ""
 "頂点バッファオブジェクトを使用して、静的ジオメトリをビデオメモリに格納し、レ"
-"ã\83³ã\83\80ã\83ªã\83³ã\82°ã\82\92é«\98é\80\9få\8c\96ã\81\99ã\82\8b"
+"ã\83³ã\83\80ã\83ªã\83³ã\82°ã\82\92é«\98é\80\9få\8c\96ã\81\97ã\81¾ã\81\99"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:115
 msgid "Vertices"
@@ -9464,7 +9467,7 @@ msgid ""
 "requires GLSL color control"
 msgstr ""
 "彩度調整 (0 = グレースケール、1 = 通常、2 = 過飽和)、GLSLカラーコントロールが"
-"å¿\85è¦\81ã\81\99ã\82\8b"
+"å¿\85è¦\81ã\81§ã\81\99"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:149
 msgid "LIT^Ambient:"
@@ -9504,7 +9507,7 @@ msgstr "OpenGL 2.0 シェーダー(GLSL)を使う"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:169
 msgid "Psycho coloring (easter egg)"
-msgstr "サイコカラー (イースターエッグ)"
+msgstr "サイコカラー (イースターエッグ)"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:172
 msgid "Trippy vertices (easter egg)"
@@ -9520,7 +9523,7 @@ msgstr "???"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:165
 msgid "Campaign Difficulty:"
-msgstr "キャンペーンの難しさ:"
+msgstr "キャンペーンの難易度:"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:166
 msgid "CSKL^Easy"
@@ -9536,11 +9539,11 @@ msgstr "難い"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qc:170
 msgid "Start Singleplayer!"
-msgstr "ã\82·ã\83³ã\82°ã\83«ã\83\97ã\83¬ã\82¤ã\83¤ã\83¼ã\82\92é\96\8bå§\8b!"
+msgstr "ã\82·ã\83³ã\82°ã\83«ã\83\97ã\83¬ã\82¤ã\82\92ã\82¹ã\82¿ã\83¼ã\83\88!"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qh:6
 msgid "Singleplayer"
-msgstr "シングルプレイヤー"
+msgstr "シングルプレイ"
 
 #: qcsrc/menu/xonotic/dialog_singleplayer.qh:7
 msgid "Play the singleplayer campaign or instant action matches against bots"
@@ -9599,11 +9602,11 @@ msgstr "チームのトーナメント"
 
 #: qcsrc/menu/xonotic/gametypelist.qc:90
 msgid "free for all"
-msgstr "ã\82\84ã\82\8aã\81\9fã\81\84æ\94¾é¡\8c"
+msgstr "ã\83\95ã\83ªã\83¼ã\83»ã\83\95ã\82©ã\83¼ã\83»ã\82ªã\83¼ã\83«"
 
 #: qcsrc/menu/xonotic/keybinder.qc:35
 msgid "Moving"
-msgstr "動き中"
+msgstr "移動"
 
 #: qcsrc/menu/xonotic/keybinder.qc:36
 msgid "forward"
@@ -9615,11 +9618,11 @@ msgstr "後方"
 
 #: qcsrc/menu/xonotic/keybinder.qc:38
 msgid "strafe left"
-msgstr "左"
+msgstr "左へ水平移動"
 
 #: qcsrc/menu/xonotic/keybinder.qc:39
 msgid "strafe right"
-msgstr "右"
+msgstr "右へ水平移動"
 
 #: qcsrc/menu/xonotic/keybinder.qc:40
 msgid "jump / swim"
@@ -9743,7 +9746,7 @@ msgstr "鍵/旗を落とす / 乗り物から降りる"
 
 #: qcsrc/menu/xonotic/keybinder.qc:121
 msgid "suicide / respawn"
-msgstr "自殺する / 再び現れる"
+msgstr "自殺/リスポーン"
 
 #: qcsrc/menu/xonotic/keybinder.qc:122
 msgid "quick menu"
@@ -9777,21 +9780,21 @@ msgstr "もう一度このボタンを押さないでください!"
 msgid ""
 "Huh? Can't play this (m is NULL). Refiltering so this won't happen again."
 msgstr ""
-"ã\81\82ã\82\8c? ã\81\93ã\82\8cã\82\92é\81\8aã\81¹ã\81¾ã\81\9bã\82\93 (m is NULL)ã\80\82ã\81\93ã\82\8cã\81\8cå\86\8d度ç\99ºç\94\9fã\81\97ã\81ªã\81\84ã\82\88ã\81\86ã\81«å\86\8dã\83\95ã\82£ã\83«ã\82¿ã\83ªã\83³"
-"グします。"
+"ã\81\8aã\82\84? ã\81\93ã\82\8cã\82\92é\81\8aã\81¶ã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\9bã\82\93 (m is NULL)ã\80\82ã\81\93ã\82\8cã\81\8cå\86\8d度ç\99ºç\94\9fã\81\97ã\81ªã\81\84ã\82\88ã\81\86ã\81«å\86\8d"
+"ã\83\95ã\82£ã\83«ã\82¿ã\83ªã\83³ã\82°ã\81\97ã\81¾ã\81\99ã\80\82"
 
 #: qcsrc/menu/xonotic/maplist.qc:296
 #, c-format
 msgid "%s's Xonotic Server"
-msgstr "%s XONOTICサーバー"
+msgstr "%sXONOTICサーバー"
 
 #: qcsrc/menu/xonotic/maplist.qc:301
 msgid ""
 "Huh? Can't play this (invalid game type). Refiltering so this won't happen "
 "again."
 msgstr ""
-"ã\81\82ã\82\8c? ã\81\93ã\82\8cã\82\92é\81\8aã\81¹ã\81¾ã\81\9bã\82\93 (invalid game type)ã\80\82ã\81\93ã\82\8cã\81\8cå\86\8d度ç\99ºç\94\9fã\81\97ã\81ªã\81\84ã\82\88ã\81\86ã\81«å\86\8dã\83\95ã\82£"
-"ルタリングします。"
+"ã\81\8aã\82\84? ã\81\93ã\82\8cã\82\92é\81\8aã\81¶ã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\9bã\82\93 (invalid game type)ã\80\82ã\81\93ã\82\8cã\81\8cå\86\8d度ç\99ºç\94\9fã\81\97ã\81ªã\81\84ã\82\88"
+"ã\81\86ã\81«å\86\8dã\83\95ã\82£ã\83«ã\82¿ã\83ªã\83³ã\82°ã\81\97ã\81¾ã\81\99ã\80\82"
 
 #: qcsrc/menu/xonotic/playerlist.qc:102 qcsrc/menu/xonotic/playerlist.qc:112
 msgid "spectator"
@@ -9874,7 +9877,7 @@ msgstr "有効な状態"
 
 #: qcsrc/menu/xonotic/serverlist.qh:156
 msgid "SLCAT^Favorites"
-msgstr "好き"
+msgstr "お気に入り"
 
 #: qcsrc/menu/xonotic/serverlist.qh:157
 msgid "SLCAT^Recommended"
@@ -9902,11 +9905,11 @@ msgstr "オーバーキル"
 
 #: qcsrc/menu/xonotic/serverlist.qh:163
 msgid "SLCAT^InstaGib"
-msgstr "インスタギブ"
+msgstr "一触即発"
 
 #: qcsrc/menu/xonotic/serverlist.qh:164
 msgid "SLCAT^Defrag Mode"
-msgstr "デフラグモード"
+msgstr "DEFRAGモード"
 
 #: qcsrc/menu/xonotic/skinlist.qc:70
 msgid "<TITLE>"
index f102dd042feb44db23cf4a3890aab4e25e545cf0..e81bb9b22b1f16a2ba5f6c0edc53c65cf6f48a4a 100644 (file)
@@ -9,13 +9,14 @@
 # NotThatPrivate Yes <henriqueferreira2009@gmail.com>, 2015
 # Ricardo Manuel da Cruz Coelho da Silva <ricardo.mccs@gmail.com>, 2015
 # Rui <xymarior@yandex.com>, 2018
+# zerowhy . <anymailz@tutanota.com>, 2021
 msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2021-06-27 07:23+0200\n"
-"PO-Revision-Date: 2021-06-27 05:23+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"PO-Revision-Date: 2021-08-26 06:05+0000\n"
+"Last-Translator: Jean Trindade Pereira <jean_trindade2@hotmail.com>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/team-xonotic/"
 "xonotic/language/pt_BR/)\n"
 "Language: pt_BR\n"
@@ -1789,7 +1790,7 @@ msgstr "Ataque da Aranha"
 
 #: qcsrc/common/monsters/monster/spider.qh:39
 msgid "Webbed"
-msgstr ""
+msgstr "Preso por teia"
 
 #: qcsrc/common/monsters/monster/wyvern.qh:17
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:19
@@ -1833,7 +1834,7 @@ msgstr "Incapacidade"
 
 #: qcsrc/common/mutators/mutator/buffs/all.inc:83
 msgid "Disabled"
-msgstr ""
+msgstr "Desabilitado"
 
 #: qcsrc/common/mutators/mutator/buffs/all.inc:94
 msgid "Vengeance"
@@ -1987,15 +1988,15 @@ msgstr "Força"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/burning.qh:16
 msgid "Burning"
-msgstr ""
+msgstr "Em chamas"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/spawnshield.qh:10
 msgid "Spawn Shield"
-msgstr ""
+msgstr "Surgir Escudo"
 
 #: qcsrc/common/mutators/mutator/status_effects/status_effect/superweapons.qh:7
 msgid "Superweapons"
-msgstr ""
+msgstr "Superarmas"
 
 #: qcsrc/common/mutators/mutator/waypoints/all.inc:3
 msgid "Waypoint"
index 77a6d735dc80c97fff785a4ffdbf9ecabc7d1fca..be48bcd7bc293d1448ae420898741f32d5b794f0 100644 (file)
@@ -366,7 +366,7 @@ set g_freezetag 0 "Freeze Tag: Freeze the opposing team(s) to win, unfreeze team
 set g_freezetag_warmup 10 "time players get to run around before the round starts"
 set g_freezetag_point_limit -1 "Freeze Tag point limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
 set g_freezetag_point_leadlimit -1     "Freeze Tag point lead limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
-set g_freezetag_revive_speed 0.4 "Speed for reviving a frozen teammate"
+set g_freezetag_revive_speed 0.4 "Speed for reviving a frozen teammate if g_freezetag_revive_time_to_score is off"
 set g_freezetag_revive_speed_t2s 0.25 "Speed for reviving a frozen teammate if g_freezetag_revive_time_to_score is active"
 set g_freezetag_revive_clearspeed 1.6 "Speed at which reviving progress gets lost when out of range (if g_freezetag_revive_time_to_score is active reviving progress is not cleared)"
 set g_freezetag_revive_extra_size 100 "Distance in qu that you can stand from a frozen teammate to keep reviving him"
diff --git a/gfx/menu/luma/icon_mod_jeff.tga b/gfx/menu/luma/icon_mod_jeff.tga
deleted file mode 100644 (file)
index 9fc2a9a..0000000
Binary files a/gfx/menu/luma/icon_mod_jeff.tga and /dev/null differ
diff --git a/gfx/menu/luminos/icon_mod_jeff.tga b/gfx/menu/luminos/icon_mod_jeff.tga
deleted file mode 100644 (file)
index 4bf904b..0000000
Binary files a/gfx/menu/luminos/icon_mod_jeff.tga and /dev/null differ
diff --git a/gfx/menu/wickedx/icon_mod_jeff.tga b/gfx/menu/wickedx/icon_mod_jeff.tga
deleted file mode 100644 (file)
index 4bf904b..0000000
Binary files a/gfx/menu/wickedx/icon_mod_jeff.tga and /dev/null differ
diff --git a/gfx/menu/xaw/icon_mod_jeff.tga b/gfx/menu/xaw/icon_mod_jeff.tga
deleted file mode 100644 (file)
index 4bf904b..0000000
Binary files a/gfx/menu/xaw/icon_mod_jeff.tga and /dev/null differ
index 9095dad508eb427221779de5f6f0162757b5b9e3..4c90ac196046ae1d3e1c673da3d47661e8487517 100644 (file)
@@ -3,15 +3,15 @@ de    "German" "Deutsch" 100%
 de_CH "German (Switzerland)" "Deutsch (Schweiz)" 100%
 en    "English" "English" 100%
 en_AU "English (Australia)" "English (Australia)" 74%
-es    "Spanish" "Español" 99%
+es    "Spanish" "Español" 100%
 fr    "French" "Français" 100%
 ga    "Irish" "Irish" 31%
-it    "Italian" "Italiano" 99%
+it    "Italian" "Italiano" 100%
 hu    "Hungarian" "Magyar" 46%
 nl    "Dutch" "Nederlands" 60%
 pl    "Polish" "Polski" 71%
 pt    "Portuguese" "Português" 83%
-pt_BR "Portuguese (Brazil)" "Português (Brasil)" 99%
+pt_BR "Portuguese (Brazil)" "Português (Brasil)" 100%
 ro    "Romanian" "Romana" 72%
 fi    "Finnish" "Suomi" 98%
 tr    "Turkish" "Türkçe" 30%
@@ -24,5 +24,5 @@ sr    "Serbian" "Српски" 62%
 uk    "Ukrainian" "Українська" 49%
 zh_CN "Chinese (China)" "中文" 60%
 zh_TW "Chinese (Taiwan)" "國語" 59%
-ja_JP "Japanese" "日本語" 99%
+ja_JP "Japanese" "日本語" 100%
 ko    "Korean" "한국의" 28%
index 0b38b108bdc5e8c63a57c1fb86ac300f0f80e584..0f5c919f9b02886feceb9774f9bd6f05a404d5a7 100644 (file)
@@ -279,10 +279,22 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer)
                                this.colormap = forcecolor_enemy;
                }
        }
-       else
+       else // if(!teamplay)
        {
                if(autocvar_cl_forcemyplayercolors && islocalplayer)
                        this.colormap = 1024 + autocvar_cl_forcemyplayercolors;
+               else if (autocvar_cl_forceuniqueplayercolors && !islocalplayer && !ISGAMETYPE(DUEL))
+               {
+                       // Assign each enemy unique colors
+                       // pick colors from 0 to 14 since 15 is the rainbow color
+                       // pl01 0 1, pl02 1 2, ..., pl14 13 14, pl15 14 0
+                       // pl16 0 2, pl17 1 3, ..., pl29 13  0, pl30 14 1
+                       int num = this.entnum - 1;
+                       int c1 = num % 15;
+                       int q = floor(num / 15);
+                       int c2 = (c1 + 1 + q) % 15;
+                       this.colormap = 1024 + (c1 << 4) + c2;
+               }
                else if(autocvar_cl_forceplayercolors && (autocvar_cl_forceplayercolors != 3 || ISGAMETYPE(DUEL)))
                        this.colormap = player_localnum + 1;
        }
index dd10112d73634822347de0df314d3e0ff290aace..16cc29a0b06b10da56bb51174145dde8cd95df79 100644 (file)
@@ -7,6 +7,7 @@ float autocvar_cl_loddistance1 = 768;
 float autocvar_cl_loddistance2 = 2048;
 bool autocvar_cl_forceplayermodels;
 bool autocvar_cl_forceplayercolors;
+bool autocvar_cl_forceuniqueplayercolors;
 string autocvar_cl_forcemyplayermodel;
 int autocvar_cl_forcemyplayerskin;
 int autocvar_cl_forcemyplayercolors;
index 938316bb1caa1421395a2f0d9b47f3d7babd7683..b3d24e59db7d8d9bd102ff42ce3ca66874380873 100644 (file)
@@ -1241,10 +1241,11 @@ vector Scoreboard_AccuracyStats_Draw(vector pos, vector rgb, vector bg_size)
        int rows = 1;
        if (autocvar_hud_panel_scoreboard_accuracy_doublerows && weapon_cnt >= floor((REGISTRY_COUNT(Weapons) - nHidden - 1) * 0.5))
                rows = 2;
-       int columnns = ceil(weapon_cnt / rows);
+       int columns = ceil(weapon_cnt / rows);
 
-       float weapon_height = 29;
-       float height = hud_fontsize.y + weapon_height;
+       float aspect = max(0.001, autocvar_hud_panel_weapons_aspect);
+       float weapon_height = hud_fontsize.y * 2.3 / aspect;
+       float height = weapon_height + hud_fontsize.y;
 
        drawstring(pos + eX * panel_bg_padding, sprintf(_("Accuracy stats (average %d%%)"), average_accuracy), hud_fontsize, '1 1 1', panel_fg_alpha * scoreboard_acc_fade_alpha, DRAWFLAG_NORMAL);
        pos.y += 1.25 * hud_fontsize.y;
@@ -1273,7 +1274,7 @@ vector Scoreboard_AccuracyStats_Draw(vector pos, vector rgb, vector bg_size)
        pos = panel_pos;
        vector tmp = panel_size;
 
-       float weapon_width = tmp.x / columnns / rows;
+       float weapon_width = tmp.x / columns / rows;
 
        if (sbt_bg_alpha)
                drawpic_tiled(pos, "gfx/scoreboard/scoreboard_bg", bg_size, tmp, rgb, sbt_bg_alpha * scoreboard_acc_fade_alpha, DRAWFLAG_NORMAL);
@@ -1281,7 +1282,7 @@ vector Scoreboard_AccuracyStats_Draw(vector pos, vector rgb, vector bg_size)
        if(sbt_highlight)
        {
                // column highlighting
-               for (int i = 0; i < columnns; ++i)
+               for (int i = 0; i < columns; ++i)
                        if ((i % 2) == 0)
                                drawfill(pos + eX * weapon_width * rows * i, vec2(weapon_width * rows, height * rows), '0 0 0', sbt_highlight_alpha * scoreboard_acc_fade_alpha, DRAWFLAG_NORMAL);
 
@@ -1326,11 +1327,8 @@ vector Scoreboard_AccuracyStats_Draw(vector pos, vector rgb, vector bg_size)
                        weapons_with_stats += 1;
                        average_accuracy += weapon_stats; // store sum of all accuracies in average_accuracy
 
-                       string s;
-                       s = sprintf("%d%%", weapon_stats * 100);
-
-                       float padding;
-                       padding = (weapon_width - stringwidth(s, false, hud_fontsize)) / 2; // center the accuracy value
+                       string s = sprintf("%d%%", weapon_stats * 100);
+                       float padding = (weapon_width - stringwidth(s, false, hud_fontsize)) / 2;
 
                        if(!autocvar_hud_panel_scoreboard_accuracy_nocolors)
                                rgb = Accuracy_GetColor(weapon_stats);
@@ -1339,7 +1337,7 @@ vector Scoreboard_AccuracyStats_Draw(vector pos, vector rgb, vector bg_size)
                }
                tmpos.x += weapon_width * rows;
                pos.x += weapon_width * rows;
-               if (rows == 2 && column == columnns - 1) {
+               if (rows == 2 && column == columns - 1) {
                        tmpos.x = oldposx;
                        tmpos.y += height;
                        pos.y += height;
@@ -1401,11 +1399,10 @@ vector Scoreboard_ItemStats_Draw(vector pos, vector rgb, vector bg_size)
        if (n <= 0) return pos;
 
        int rows = (autocvar_hud_panel_scoreboard_itemstats_doublerows && n >= floor(REGISTRY_COUNT(Items) / 2)) ? 2 : 1;
-       int columnns = max(6, ceil(n / rows));
+       int columns = max(6, ceil(n / rows));
 
-       float height = 40;
-       float fontsize = height * 1/3;
-       float item_height = height * 2/3;
+       float item_height = hud_fontsize.y * 2.3;
+       float height = item_height + hud_fontsize.y;
 
        drawstring(pos + eX * panel_bg_padding, _("Item stats"), hud_fontsize, '1 1 1', panel_fg_alpha * scoreboard_itemstats_fade_alpha, DRAWFLAG_NORMAL);
        pos.y += 1.25 * hud_fontsize.y;
@@ -1434,7 +1431,7 @@ vector Scoreboard_ItemStats_Draw(vector pos, vector rgb, vector bg_size)
        pos = panel_pos;
        vector tmp = panel_size;
 
-       float item_width = tmp.x / columnns / rows;
+       float item_width = tmp.x / columns / rows;
 
        if (sbt_bg_alpha)
                drawpic_tiled(pos, "gfx/scoreboard/scoreboard_bg", bg_size, tmp, rgb, sbt_bg_alpha * scoreboard_itemstats_fade_alpha, DRAWFLAG_NORMAL);
@@ -1442,13 +1439,13 @@ vector Scoreboard_ItemStats_Draw(vector pos, vector rgb, vector bg_size)
        if(sbt_highlight)
        {
                // column highlighting
-               for (int i = 0; i < columnns; ++i)
+               for (int i = 0; i < columns; ++i)
                        if ((i % 2) == 0)
-                               drawfill(pos + '1 0 0' * item_width * rows * i, '0 1 0' * height * rows + '1 0 0' * item_width * rows, '0 0 0', sbt_highlight_alpha * scoreboard_itemstats_fade_alpha, DRAWFLAG_NORMAL);
+                               drawfill(pos + eX * item_width * rows * i, vec2(item_width * rows, height * rows), '0 0 0', sbt_highlight_alpha * scoreboard_itemstats_fade_alpha, DRAWFLAG_NORMAL);
 
                // row highlighting
                for (int i = 0; i < rows; ++i)
-                       drawfill(pos + '0 1 0' * item_height + '0 1 0' * height * i, '1 0 0' * panel_size.x + '0 1 0' * fontsize, rgb, sbt_highlight_alpha * scoreboard_itemstats_fade_alpha, DRAWFLAG_NORMAL);
+                       drawfill(pos + eY * (item_height + height * i), vec2(panel_size.x, hud_fontsize.y), rgb, sbt_highlight_alpha * scoreboard_itemstats_fade_alpha, DRAWFLAG_NORMAL);
        }
 
        if (rows == 2)
@@ -1462,13 +1459,13 @@ vector Scoreboard_ItemStats_Draw(vector pos, vector rgb, vector bg_size)
                int n = g_inventory.inv_items[it.m_id];
                //n = 1 + floor(i * 3 + 4.8) % 7; // debug: display a value for each item
                if (n <= 0) continue;
-               drawpic_aspect_skin(tmpos, it.m_icon, '1 0 0' * item_width + '0 1 0' * item_height, '1 1 1', panel_fg_alpha * scoreboard_itemstats_fade_alpha, DRAWFLAG_NORMAL);
+               drawpic_aspect_skin(tmpos, it.m_icon, eX * item_width + eY * item_height, '1 1 1', panel_fg_alpha * scoreboard_itemstats_fade_alpha, DRAWFLAG_NORMAL);
                string s = ftos(n);
-               float padding = (item_width - stringwidth(s, false, '1 0 0' * fontsize)) / 2; // center
-               drawstring(tmpos + '1 0 0' * padding + '0 1 0' * item_height, s, '1 1 0' * fontsize, '1 1 1', panel_fg_alpha * scoreboard_itemstats_fade_alpha, DRAWFLAG_NORMAL);
+               float padding = (item_width - stringwidth(s, false, hud_fontsize)) / 2;
+               drawstring(tmpos + vec2(padding, item_height), s, hud_fontsize, '1 1 1', panel_fg_alpha * scoreboard_itemstats_fade_alpha, DRAWFLAG_NORMAL);
                tmpos.x += item_width * rows;
                pos.x += item_width * rows;
-               if (rows == 2 && column == columnns - 1) {
+               if (rows == 2 && column == columns - 1) {
                        tmpos.x = oldposx;
                        tmpos.y += height;
                        pos.y += height;
index 7ac8b8dae6bf20cc8da807fbba6ef7733dff874d..a79b64c4073cee7816c8f74f8adde3bcea9a4145 100644 (file)
@@ -127,7 +127,7 @@ void HUD_Weapons()
        int weapon_count, weapon_id;
        int row, column, rows = 0, columns = 0;
        bool vertical_order = true;
-       float aspect = autocvar_hud_panel_weapons_aspect;
+       float aspect = max(0.001, autocvar_hud_panel_weapons_aspect);
 
        float timeout = autocvar_hud_panel_weapons_timeout;
        float timein_effect_length = autocvar_hud_panel_weapons_timeout_speed_in; //? 0.375 : 0);
index 064be587e78fc46087e2d4eabad563d84f25885c..f94d36cf6712f2b1022f1940de5ec41d6d60930f 100644 (file)
@@ -229,6 +229,8 @@ NET_HANDLE(ENT_CLIENT_ITEM, bool isnew)
         precache_model(this.mdl);
         _setmodel(this, this.mdl);
 
+       this.skin = ReadByte();
+
         setsize(this, '-16 -16 0', '16 16 48');
     }
 
index 7e31994075c244277201a4d02799825c89346f44..d21923e258dc196ef15e80209e3fbfb230b9de63 100644 (file)
@@ -22,6 +22,8 @@ PROPERTY(float, g_pickup_respawntimejitter_powerup)
 CLASS(Pickup, GameItem)
 #ifdef GAMEQC
     ATTRIB(Pickup, m_model, Model);
+    ATTRIB(Pickup, m_skin, int);
+    ATTRIB(Pickup, m_color, vector);
     ATTRIB(Pickup, m_sound, Sound, SND_ITEMPICKUP);
 #endif
     ATTRIB(Pickup, netname, string);
index f4e59b58cf2e9be7314f7e23b62ac448474be554..d920aab9f22ed3cf8710e67501e19c054a01b5d2 100644 (file)
@@ -9,26 +9,36 @@
 #endif
 
 #ifdef GAMEQC
-MODEL(Invisibility_ITEM, Item_Model("g_strength.md3"));
+//MODEL(Invisibility_ITEM, Item_Model("g_strength.md3")); // TODO: new model required
 SOUND(Invisibility, Item_Sound("powerup"));
 #endif
 
 #ifdef SVQC
 .float invisibility_finished;
 
+bool autocvar_g_powerups_invisibility = 1;
 float autocvar_g_balance_powerup_invisibility_alpha = 0.15;
 float autocvar_g_balance_powerup_invisibility_time = 30;
 void powerup_invisibility_init(Pickup this, entity item)
 {
     if(!item.invisibility_finished)
-        item.invisibility_finished = autocvar_g_balance_powerup_invisibility_time;
+        item.invisibility_finished = (item.count) ? item.count : autocvar_g_balance_powerup_invisibility_time;
 }
 #endif
 REGISTER_ITEM(Invisibility, Powerup) {
     this.m_canonical_spawnfunc = "item_invisibility";
+#ifdef SVQC
+    if(autocvar_g_powerups_invisibility)
+        this.spawnflags = ITEM_FLAG_NORMAL;
+    else
+        this.spawnflags = ITEM_FLAG_MUTATORBLOCKED;
+
+    this.m_iteminit         =   powerup_invisibility_init;
+#endif
 #ifdef GAMEQC
-       this.spawnflags = ITEM_FLAG_MUTATORBLOCKED; // TODO: ITEM_FLAG_NORMAL (once it has a model!)
-    this.m_model            =   MDL_Invisibility_ITEM;
+    this.m_itemid           =   IT_INVISIBILITY;
+    this.m_model            =   MDL_BUFF; // TODO: MDL_Invisibility_ITEM when new model available
+    this.m_skin             =   12;
     this.m_sound            =   SND_Invisibility;
     this.m_glow             =   true;
     this.m_respawnsound     =   SND_STRENGTH_RESPAWN;
@@ -39,12 +49,6 @@ REGISTER_ITEM(Invisibility, Powerup) {
     this.m_color            =   '0.5 0.5 1';
     this.m_waypoint         =   _("Invisibility");
     this.m_waypointblink    =   2;
-#ifdef GAMEQC
-    this.m_itemid           =   IT_INVISIBILITY;
-#endif
-#ifdef SVQC
-    this.m_iteminit         =   powerup_invisibility_init;
-#endif
 }
 
 SPAWNFUNC_ITEM(item_invisibility, ITEM_Invisibility)
index 854c802769fb83f38c062759d024a738956a1b85..10900e86a89c7ec5f95dfb55693c24543b5cf6a6 100644 (file)
@@ -14,19 +14,28 @@ SOUND(Shield, Item_Sound("powerup_shield"));
 #endif
 
 #ifdef SVQC
+bool autocvar_g_powerups_shield = 1;
 float autocvar_g_balance_powerup_invincible_takedamage;
 float autocvar_g_balance_powerup_invincible_takeforce = 0.33;
 float autocvar_g_balance_powerup_invincible_time;
 void powerup_shield_init(Pickup this, entity item)
 {
     if(!item.invincible_finished)
-        item.invincible_finished = autocvar_g_balance_powerup_invincible_time;
+        item.invincible_finished = (item.count) ? item.count : autocvar_g_balance_powerup_invincible_time;
 }
 #endif
 REGISTER_ITEM(Shield, Powerup) {
     this.m_canonical_spawnfunc = "item_shield";
+#ifdef SVQC
+    if(autocvar_g_powerups_shield)
+        this.spawnflags = ITEM_FLAG_NORMAL;
+    else
+        this.spawnflags = ITEM_FLAG_MUTATORBLOCKED;
+
+    this.m_iteminit         =   powerup_shield_init;
+#endif
 #ifdef GAMEQC
-    this.spawnflags = ITEM_FLAG_NORMAL;
+    this.m_itemid           =   IT_INVINCIBLE;
     this.m_model            =   MDL_Shield_ITEM;
     this.m_sound            =   SND_Shield;
     this.m_glow             =   true;
@@ -38,12 +47,6 @@ REGISTER_ITEM(Shield, Powerup) {
     this.m_color            =   '1 0 1';
     this.m_waypoint         =   _("Shield");
     this.m_waypointblink    =   2;
-#ifdef GAMEQC
-    this.m_itemid           =   IT_INVINCIBLE;
-#endif
-#ifdef SVQC
-    this.m_iteminit         =   powerup_shield_init;
-#endif
 }
 
 SPAWNFUNC_ITEM(item_shield, ITEM_Shield)
index fff1fd9b8c5a8ba34d6a8879fc36bfa7179260bf..5b71df8083bd88e45e698fb5b88d6c526280d984 100644 (file)
@@ -9,27 +9,37 @@
 #endif
 
 #ifdef GAMEQC
-MODEL(Speed_ITEM, Item_Model("g_invincible.md3"));
+//MODEL(Speed_ITEM, Item_Model("g_invincible.md3")); // TODO: new model required
 SOUND(Speed, Item_Sound("powerup_shield"));
 #endif
 
 #ifdef SVQC
 .float speed_finished;
 
+bool autocvar_g_powerups_speed = 1;
 float autocvar_g_balance_powerup_speed_attackrate = 0.8;
 float autocvar_g_balance_powerup_speed_highspeed = 1.5;
 float autocvar_g_balance_powerup_speed_time = 30;
 void powerup_speed_init(Pickup this, entity item)
 {
     if(!item.speed_finished)
-        item.speed_finished = autocvar_g_balance_powerup_speed_time;
+        item.speed_finished = (item.count) ? item.count : autocvar_g_balance_powerup_speed_time;
 }
 #endif
 REGISTER_ITEM(Speed, Powerup) {
     this.m_canonical_spawnfunc = "item_speed";
+#ifdef SVQC
+    if(autocvar_g_powerups_speed)
+        this.spawnflags = ITEM_FLAG_NORMAL;
+    else
+        this.spawnflags = ITEM_FLAG_MUTATORBLOCKED;
+
+    this.m_iteminit         =   powerup_speed_init;
+#endif
 #ifdef GAMEQC
-       this.spawnflags = ITEM_FLAG_MUTATORBLOCKED; // TODO: ITEM_FLAG_NORMAL (once it has a model!)
-    this.m_model            =   MDL_Speed_ITEM;
+    this.m_itemid           =   IT_SPEED;
+    this.m_model            =   MDL_BUFF; // TODO: MDL_Speed_ITEM when new model available
+    this.m_skin             =   9;
     this.m_sound            =   SND_Speed;
     this.m_glow             =   true;
     this.m_respawnsound     =   SND_SHIELD_RESPAWN;
@@ -40,12 +50,6 @@ REGISTER_ITEM(Speed, Powerup) {
     this.m_color            =   '0.1 1 0.84';
     this.m_waypoint         =   _("Speed");
     this.m_waypointblink    =   2;
-#ifdef GAMEQC
-    this.m_itemid           =   IT_SPEED;
-#endif
-#ifdef SVQC
-    this.m_iteminit         =   powerup_speed_init;
-#endif
 }
 
 SPAWNFUNC_ITEM(item_speed, ITEM_Speed)
index ce1914966bd7f15ae0a2878301199a1abe22e314..9392a6a2d7c9755147633758befbe9252b5405f5 100644 (file)
@@ -14,6 +14,7 @@ SOUND(Strength, Item_Sound("powerup"));
 #endif
 
 #ifdef SVQC
+bool autocvar_g_powerups_strength = 1;
 float autocvar_g_balance_powerup_strength_damage;
 float autocvar_g_balance_powerup_strength_force;
 float autocvar_g_balance_powerup_strength_selfdamage;
@@ -22,13 +23,21 @@ float autocvar_g_balance_powerup_strength_time;
 void powerup_strength_init(Pickup this, entity item)
 {
     if(!item.strength_finished)
-        item.strength_finished = autocvar_g_balance_powerup_strength_time;
+        item.strength_finished = (item.count) ? item.count : autocvar_g_balance_powerup_strength_time;
 }
 #endif
 REGISTER_ITEM(Strength, Powerup) {
     this.m_canonical_spawnfunc = "item_strength";
+#ifdef SVQC
+    if(autocvar_g_powerups_strength)
+        this.spawnflags = ITEM_FLAG_NORMAL;
+    else
+        this.spawnflags = ITEM_FLAG_MUTATORBLOCKED;
+
+    this.m_iteminit         =   powerup_strength_init;
+#endif
 #ifdef GAMEQC
-       this.spawnflags = ITEM_FLAG_NORMAL;
+    this.m_itemid           =   IT_STRENGTH;
     this.m_model            =   MDL_Strength_ITEM;
     this.m_sound            =   SND_Strength;
     this.m_glow             =   true;
@@ -40,12 +49,6 @@ REGISTER_ITEM(Strength, Powerup) {
     this.m_color            =   '0 0 1';
     this.m_waypoint         =   _("Strength");
     this.m_waypointblink    =   2;
-#ifdef GAMEQC
-    this.m_itemid           =   IT_STRENGTH;
-#endif
-#ifdef SVQC
-    this.m_iteminit         =   powerup_strength_init;
-#endif
 }
 
 SPAWNFUNC_ITEM(item_strength, ITEM_Strength)
index f71025959c67d2c7eaa2a36708b2d6969d6f85b0..b514385381c8a8bfb38d274dcf1c6f9dc36596be 100644 (file)
@@ -5,8 +5,12 @@
 #include "powerups.qh"
 
 int autocvar_g_powerups;
+bool autocvar_g_powerups_stack;
 
 REGISTER_MUTATOR(powerups, true);
 
 .float prevstrengthsound;
 .float prevstrengthsoundattempt;
+
+// q3compat
+.float count;
index 915bb8aca12ffa381dad33f21b7b99b6c261e841..f4707163aef8fe16b76194092a140f2bf00450b0 100644 (file)
@@ -1,5 +1,12 @@
 #include "superweapons.qh"
 
+#ifdef SVQC
+METHOD(Superweapons, m_persistent, bool(StatusEffects this, entity actor))
+{
+    return (actor.items & IT_UNLIMITED_SUPERWEAPONS);
+}
+#endif
+
 #ifdef CSQC
 METHOD(Superweapons, m_active, bool(StatusEffects this, entity actor))
 {
index 0ec5d4d5c5760ac87fbc44b70b81637bb26a068f..90fda09cb47a52f7fe0c767c2072bc41d43be305 100644 (file)
@@ -39,12 +39,14 @@ METHOD(StatusEffects, m_apply, void(StatusEffects this, entity actor, float eff_
 
 METHOD(StatusEffects, m_remove, void(StatusEffects this, entity actor, int removal_type))
 {
-       if(!actor.statuseffects)
+       StatusEffects data = actor.statuseffects;
+       if(!data)
                return;
-       if(removal_type == STATUSEFFECT_REMOVE_NORMAL && this.m_active(this, actor))
+       // NOTE: persistent effects do not make a sound on removal, this is intended as a workaround for #2620
+       if(removal_type == STATUSEFFECT_REMOVE_NORMAL && !(data.statuseffect_flags[this.m_id] & STATUSEFFECT_FLAG_PERSISTENT) && this.m_active(this, actor))
                sound(actor, CH_TRIGGER, this.m_sound_rm, VOL_BASE, ATTEN_NORM);
-       actor.statuseffects.statuseffect_time[this.m_id] = 0;
-       actor.statuseffects.statuseffect_flags[this.m_id] = 0;
+       data.statuseffect_time[this.m_id] = 0;
+       data.statuseffect_flags[this.m_id] = 0;
        StatusEffects_update(actor);
 }
 
index 514440dbbd356cd584603607ef934f9f14e8ada9..f1b2af8e600164799b48c0922cd20db778d36fcb 100644 (file)
@@ -402,10 +402,10 @@ string multiteam_info_sprintf(string input, string teamname) { return ((input !=
     MULTITEAM_INFO(ONSLAUGHT_GENDESTROYED,                  N_CONSOLE,  0, 0, "", "",           "",     _("^TC^TT^BG generator has been destroyed"), "", GENERATOR)
     MULTITEAM_INFO(ONSLAUGHT_GENDESTROYED_OVERTIME,         N_CONSOLE,  0, 0, "", "",           "",     _("^TC^TT^BG generator spontaneously combusted due to overtime!"), "", GENERATOR)
 
-    MSG_INFO_NOTIF(POWERUP_INVISIBILITY,                    N_CONSOLE,  1, 0, "s1", "s1",       "strength",     _("^BG%s^K1 picked up Invisibility"), "")
-    MSG_INFO_NOTIF(POWERUP_SHIELD,                          N_CONSOLE,  1, 0, "s1", "s1",       "shield",       _("^BG%s^K1 picked up Shield"), "")
-    MSG_INFO_NOTIF(POWERUP_SPEED,                           N_CONSOLE,  1, 0, "s1", "s1",       "shield",       _("^BG%s^K1 picked up Speed"), "")
-    MSG_INFO_NOTIF(POWERUP_STRENGTH,                        N_CONSOLE,  1, 0, "s1", "s1",       "strength",     _("^BG%s^K1 picked up Strength"), "")
+    MSG_INFO_NOTIF(POWERUP_INVISIBILITY,                    N_CONSOLE,  1, 0, "s1", "s1",       "buff_invisible", _("^BG%s^K1 picked up Invisibility"), "")
+    MSG_INFO_NOTIF(POWERUP_SHIELD,                          N_CONSOLE,  1, 0, "s1", "s1",       "shield",         _("^BG%s^K1 picked up Shield"), "")
+    MSG_INFO_NOTIF(POWERUP_SPEED,                           N_CONSOLE,  1, 0, "s1", "s1",       "buff_speed",     _("^BG%s^K1 picked up Speed"), "")
+    MSG_INFO_NOTIF(POWERUP_STRENGTH,                        N_CONSOLE,  1, 0, "s1", "s1",       "strength",       _("^BG%s^K1 picked up Strength"), "")
 
     MSG_INFO_NOTIF(QUIT_DISCONNECT,                         N_CHATCON,  1, 0, "s1", "",         "",             _("^BG%s^F3 disconnected"), "")
     MSG_INFO_NOTIF(QUIT_KICK_IDLING,                        N_CHATCON,  1, 1, "s1 f1", "",      "",             _("^BG%s^F3 was kicked after idling for %s seconds"), "")
index 48216f39297d7fd8178b41f3982f02f2d0cc291d..1bd0eb7aeb5bb54bc9ba30a69d3cb32b6ac12ad9 100644 (file)
@@ -414,11 +414,40 @@ void _Movetype_Impact(entity this, entity oth)  // SV_Impact
        if(!this && !oth)
                return;
 
+       // due to a lack of pointers in QC, we must save the trace values and restore them for other functions
+       bool save_trace_allsolid = trace_allsolid;
+       bool save_trace_startsolid = trace_startsolid;
+       float save_trace_fraction = trace_fraction;
+       bool save_trace_inwater = trace_inwater;
+       bool save_trace_inopen = trace_inopen;
+       vector save_trace_endpos = trace_endpos;
+       vector save_trace_plane_normal = trace_plane_normal;
+       float save_trace_plane_dist = trace_plane_dist;
+       entity save_trace_ent = trace_ent;
+       int save_trace_dpstartcontents = trace_dpstartcontents;
+       int save_trace_dphitcontents = trace_dphitcontents;
+       int save_trace_dphitq3surfaceflags = trace_dphitq3surfaceflags;
+       string save_trace_dphittexturename = trace_dphittexturename;
+
        if(this.solid != SOLID_NOT && gettouch(this))
                gettouch(this)(this, oth);
 
        if(oth.solid != SOLID_NOT && gettouch(oth))
                gettouch(oth)(oth, this);
+
+       trace_allsolid = save_trace_allsolid;
+       trace_startsolid = save_trace_startsolid;
+       trace_fraction = save_trace_fraction;
+       trace_inwater = save_trace_inwater;
+       trace_inopen = save_trace_inopen;
+       trace_endpos = save_trace_endpos;
+       trace_plane_normal = save_trace_plane_normal;
+       trace_plane_dist = save_trace_plane_dist;
+       trace_ent = save_trace_ent;
+       trace_dpstartcontents = save_trace_dpstartcontents;
+       trace_dphitcontents = save_trace_dphitcontents;
+       trace_dphitq3surfaceflags = save_trace_dphitq3surfaceflags;
+       trace_dphittexturename = save_trace_dphittexturename;
 }
 
 void _Movetype_LinkEdict_TouchAreaGrid(entity this)  // SV_LinkEdict_TouchAreaGrid
@@ -636,7 +665,7 @@ void _Movetype_CheckStuck(entity this)  // SV_CheckStuck
        }
 }
 
-vector _Movetype_ClipVelocity(vector vel, vector norm, float f)  // SV_ClipVelocity
+vector _Movetype_ClipVelocity(vector vel, vector norm, float f)  // ClipVelocity
 {
        vel -= ((vel * norm) * norm) * f;
 
@@ -725,9 +754,6 @@ void _Movetype_Physics_Frame(entity this, float movedt)
                case MOVETYPE_FLY:
                case MOVETYPE_FLY_WORLDONLY:
                        _Movetype_Physics_Toss(this, movedt);
-                       if(wasfreed(this))
-                               return;
-                       _Movetype_LinkEdict(this, true);
                        break;
                case MOVETYPE_PHYSICS:
                        break;
index 772eb1b070c59a2be0df4aa72df5bc904e115838..67405a636498d0f0aef004f2b5236750e42dda4d 100644 (file)
@@ -56,9 +56,17 @@ void _Movetype_Physics_Toss(entity this, float dt)  // SV_Physics_Toss
                if (wasfreed(this))
                        return;
 
-               if (trace_startsolid)
+               // NOTE: this is bmodelstartsolid in the engine
+               if (trace_startsolid && trace_ent.solid == SOLID_BSP)
                {
+                       // QC lacks pointers so we must save the old trace values
+                       float oldtrace_fraction = trace_fraction;
+                       vector oldtrace_plane_normal = trace_plane_normal;
+                       entity oldtrace_ent = trace_ent;
                        _Movetype_UnstickEntity(this);
+                       trace_fraction = oldtrace_fraction;
+                       trace_plane_normal = oldtrace_plane_normal;
+                       trace_ent = oldtrace_ent;
                        if(!_Movetype_PushEntity(this, move, true, true))
                                return;
                        if (wasfreed(this))
index 9409819e9c15b8569fa5623ede91e841984224dc..4a6ee87d5cc16ac5bb008897ba88007994da9813 100644 (file)
@@ -130,7 +130,7 @@ void W_Electro_TouchExplode(entity this, entity toucher)
 }
 
 
-void sys_phys_update_single(entity this);
+//void sys_phys_update_single(entity this);
 
 void W_Electro_Bolt_Think(entity this)
 {
@@ -295,6 +295,7 @@ void W_Electro_Orb_Stick(entity this, entity to)
        setmodel(newproj, MDL_PROJECTILE_ELECTRO);
        setsize(newproj, this.mins, this.maxs);
        newproj.angles = vectoangles(-trace_plane_normal); // face against the surface
+       newproj.traileffectnum = _particleeffectnum(EFFECT_TR_NEXUIZPLASMA.eent_eff_name);
 
        newproj.movedir = -trace_plane_normal;
 
index 69e416826174e1bd04397cfac2b4c1d8033e2f52..804025ace1e5efab8a88d140ff2db5808a72b2eb 100644 (file)
@@ -2642,14 +2642,30 @@ void PlayerPostThink (entity this)
                int totalClients = 0;
                if(autocvar_sv_maxidle > 0 && autocvar_sv_maxidle_slots > 0)
                {
-                       FOREACH_CLIENT(IS_REAL_CLIENT(it) || autocvar_sv_maxidle_slots_countbots,
+                       // maxidle disabled in local matches by not counting clients (totalClients 0)
+                       if (server_is_dedicated)
+                       {
+                               FOREACH_CLIENT(IS_REAL_CLIENT(it) || autocvar_sv_maxidle_slots_countbots,
+                               {
+                                       ++totalClients;
+                               });
+                               if (maxclients - totalClients > autocvar_sv_maxidle_slots)
+                                       totalClients = 0;
+                       }
+               }
+               else if (IS_PLAYER(this) && autocvar_sv_maxidle_playertospectator > 0)
+               {
+                       FOREACH_CLIENT(IS_REAL_CLIENT(it),
                        {
                                ++totalClients;
                        });
                }
 
-               if (autocvar_sv_maxidle > 0 && autocvar_sv_maxidle_slots > 0 && (maxclients - totalClients) > autocvar_sv_maxidle_slots)
-               { /* do nothing */ }
+               if (totalClients < autocvar_sv_maxidle_minplayers)
+               {
+                       // idle kick disabled
+                       CS(this).parm_idlesince = time;
+               }
                else if (time - CS(this).parm_idlesince < 1) // instead of (time == this.parm_idlesince) to support sv_maxidle <= 10
                {
                        if (CS(this).idlekick_lasttimeleft)
index 3199d155a9c853c17d82cf67b5c26c3d7b467fe1..b7166609bd2f79f4c74010962c7aeb7c8dfbc7fc 100644 (file)
@@ -33,6 +33,7 @@ bool autocvar_g_nodepthtestplayers;
 string autocvar_g_mutatormsg;
 float autocvar_sv_foginterval;
 float autocvar_sv_maxidle;
+int autocvar_sv_maxidle_minplayers = 2;
 float autocvar_sv_maxidle_playertospectator = 60;
 bool autocvar_sv_maxidle_alsokickspectators;
 int autocvar_sv_maxidle_slots;
index 7408b4de8f7ab7dadbd6aa9e557a9e7a78a85bd4..932db7a553dd2f663c7a1549d15cfa52f54d160c 100644 (file)
@@ -63,9 +63,9 @@ bool ItemSend(entity this, entity to, int sf)
                        LOG_TRACE("^1WARNING!^7 this.mdl is unset for item ", this.classname, "expect a crash just about now");
 
                WriteString(MSG_ENTITY, this.mdl);
+               WriteByte(MSG_ENTITY, bound(0, this.skin, 255));
        }
 
-
        if(sf & ISF_COLORMAP)
        {
                WriteShort(MSG_ENTITY, this.colormap);
@@ -551,22 +551,42 @@ bool Item_GiveTo(entity item, entity player)
        if (item.strength_finished)
        {
                pickedup = true;
-               StatusEffects_apply(STATUSEFFECT_Strength, player, max(StatusEffects_gettime(STATUSEFFECT_Strength, player), time) + item.strength_finished, 0);
+               float t = max(StatusEffects_gettime(STATUSEFFECT_Strength, player), time);
+               if (autocvar_g_powerups_stack)
+                       t += item.strength_finished;
+               else
+                       t = max(t, time + item.strength_finished);
+               StatusEffects_apply(STATUSEFFECT_Strength, player, t, 0);
        }
        if (item.invincible_finished)
        {
                pickedup = true;
-               StatusEffects_apply(STATUSEFFECT_Shield, player, max(StatusEffects_gettime(STATUSEFFECT_Shield, player), time) + item.invincible_finished, 0);
+               float t = max(StatusEffects_gettime(STATUSEFFECT_Shield, player), time);
+               if (autocvar_g_powerups_stack)
+                       t += item.invincible_finished;
+               else
+                       t = max(t, time + item.invincible_finished);
+               StatusEffects_apply(STATUSEFFECT_Shield, player, t, 0);
        }
        if (item.speed_finished)
        {
                pickedup = true;
-               StatusEffects_apply(STATUSEFFECT_Speed, player, max(StatusEffects_gettime(STATUSEFFECT_Speed, player), time) + item.speed_finished, 0);
+               float t = max(StatusEffects_gettime(STATUSEFFECT_Speed, player), time);
+               if (autocvar_g_powerups_stack)
+                       t += item.speed_finished;
+               else
+                       t = max(t, time + item.speed_finished);
+               StatusEffects_apply(STATUSEFFECT_Speed, player, t, 0);
        }
        if (item.invisibility_finished)
        {
                pickedup = true;
-               StatusEffects_apply(STATUSEFFECT_Invisibility, player, max(StatusEffects_gettime(STATUSEFFECT_Invisibility, player), time) + item.invisibility_finished, 0);
+               float t = max(StatusEffects_gettime(STATUSEFFECT_Invisibility, player), time);
+               if (autocvar_g_powerups_stack)
+                       t += item.invisibility_finished;
+               else
+                       t = max(t, time + item.invisibility_finished);
+               StatusEffects_apply(STATUSEFFECT_Invisibility, player, t, 0);
        }
        if (item.superweapons_finished)
        {
@@ -1071,6 +1091,10 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default
        setmodel(this, MDL_Null); // precision set below
        //this.effects |= EF_LOWPRECISION;
 
+       // support skinned models for powerups
+       this.skin = def.m_skin;
+       this.glowmod = def.m_color;
+
        setsize (this, this.pos1 =  def.m_mins, this.pos2 = def.m_maxs);
 
        this.SendFlags |= ISF_SIZE;
index fccb89576e053b5945ffbfbe0030980e902cca62..7e7d308a09e26b2754aa7c02ec954f6b72e9fdff 100644 (file)
@@ -12,38 +12,23 @@ g_shootfromcenter 1 // hit where you point at with the crosshair (almost so, no
 g_balance_kill_antispam 0
 g_forced_respawn 1
 // g_playerclip_collisions 0 // do not check playerclips
-g_powerups 0 // no powerups until the speed powerup has its own model
+// Powerups including speed enabled by default.
+g_powerups_strength 0
+g_powerups_shield 0
+g_powerups_invisibility 0
+g_buffs 0
 g_start_delay 3
 g_use_ammunition 0
 g_weapon_stay 1
 teamplay_mode 2 // friendly fire and self damage
 sv_vote_nospectators 1
 timelimit_override 20
-
-// general buff settings
-g_buffs_cooldown_activate 0
-g_buffs_cooldown_respawn 0
-g_buffs_randomize 0
-
-// disabled buffs
-g_buffs_ammo 0
-g_buffs_resistance 0
-g_buffs_medic 0
-g_buffs_vengeance 0
-g_buffs_bash 0
-g_buffs_disability 0
-g_buffs_vampire 0
-g_buffs_jump 0
-g_buffs_inferno 0
-g_buffs_swapper 0
-g_buffs_magnet 0
-g_buffs_luck 0
-g_buffs_flight 0
+sv_maxidle_playertospectator 0
 
 // speed powerup (q3 haste replacement)
 g_movement_highspeed_q3_compat 1
-g_balance_powerup_speed_time 30
-g_balance_powerup_speed_highspeed 1.3  // q3 haste lasts 30 seconds
+g_balance_powerup_speed_time 30 // q3 haste lasts 30 seconds unless count field set otherwise
+g_balance_powerup_speed_highspeed 1.3
 g_balance_powerup_speed_attackrate 0.7692307692   // 1/1.3
 
 // game mode settings
index 817b9f1eafa092c450177aefe8b55b7879da74d0..0a89a01de5b125c024b66edc1cefaf09a83da091 100644 (file)
@@ -26,3 +26,4 @@ g_turrets 0
 g_vehicles 0
 sv_showspectators 0
 sv_taunt 0
+sv_maxidle_playertospectator 0
index cb72feb5955d80eda60971e5a4db3a82326aa73f..c2e1d7be9d586d44693ec3f72f04a5ced994b121 100644 (file)
Binary files a/sound/weapons/shotgun_melee.ogg and b/sound/weapons/shotgun_melee.ogg differ
index 5ccf96968d677c25ab8da2c774280b2e240cf1b4..1f9bb1e5b05c41f406a006da3b0e302de9d89e81 100644 (file)
@@ -753,7 +753,8 @@ set cl_accuracy_data_receive 0 "1 receive weapon accuracy data statistics at the
 set developer_csqcentities 0 "csqc entity spam"
 
 seta cl_forceplayermodels 0 "make everyone look like your own model (requires server to have sv_defaultcharacter 0)"
-seta cl_forceplayercolors 0 "make enemies look like your own color (requires server to have sv_defaultcharacter 0); 1: in all game modes without teams, 2: even in game modes with 2 teams, 3: only in Duel"
+seta cl_forceplayercolors 0 "make enemies look like your own color (requires server to have sv_defaultcharacter 0); 1: in all game modes without teams (if cl_forceplayercolors_unique is 0), 2: even in game modes with 2 teams, 3: only in Duel"
+seta cl_forceuniqueplayercolors 0 "assign each enemy unique colors in all game modes without teams except duel (requires server to have sv_defaultcharacter 0)"
 seta cl_forcemyplayermodel "" "set to the model file name you want to show yourself as (does not affect how enemies look with cl_forceplayermodels)"
 seta cl_forcemyplayerskin 0 "set to the skin number you want to show yourself as (does not affect how enemies look with cl_forceplayermodels)"
 seta cl_forcemyplayercolors 0 "set to the color value (encoding is same as _cl_color) for your own player model (ignored in teamplay; does not affect how enemies look with cl_forceplayermodels)"
index 61ba473dd024870b85b43ed2fd773be7b2f6bd66..1634c256cca1102ea23f05da17e097a0b37bc016 100644 (file)
@@ -197,7 +197,12 @@ set g_shootfromcenter 0 "weapon gets moved to the center, shots still come from
 set g_shootfromfixedorigin "" "if set to a string like 0 y z, the gun is moved to the given y and z coordinates. If set to a string like x y z, the whole shot origin is used"
 set g_weapon_stay 0 "1: ghost weapons can be picked up but give no ammo, thrown guns have ammo 2: ghost weapons can be picked up and refill ammo to one pickup size, thrown guns have no ammo (to prevent infinite ammo abuse)"
 set g_weapon_throwable 1 "if set to 1, weapons can be dropped"
-set g_powerups -1 "if set to 0 the strength and shield (invincibility) will not spawn on the map, if 1 they will spawn in all game modes, -1 is game mode default"
+set g_powerups -1 "if set to 0 no powerups will spawn, if 1 they will spawn in all game modes, -1 is game mode default"
+set g_powerups_stack 0 "enables stacking of powerup timers when picking up a powerup you already have; otherwise timer is reset to the time granted by the item, if greater than the time you currently have"
+set g_powerups_strength 1 "allow strength powerups to spawn"
+set g_powerups_shield 1 "allow shield powerups to spawn"
+set g_powerups_speed 1 "allow speed powerups to spawn"
+set g_powerups_invisibility 1 "allow invisibility powerups to spawn"
 set g_use_ammunition 1 "if set to 0 all weapons have unlimited ammo"
 set g_pickup_items -1 "if set to 0 all items (health, armor, ammo, weapons...) are removed from the map, if 1 they are forced to spawn"
 set g_pickup_respawntime_scaling_reciprocal 0 "Multiply respawn time by `reciprocal / (p + offset) + linear` where `p` is the current number of players, takes effect with 2 or more players present, `reciprocal` (with `offset` and `linear` set to 0) can be used to achieve a constant number of items spawned *per player*"
@@ -413,7 +418,7 @@ set sv_maxidle 0 "kick players idle for more than this amount of time in seconds
 set sv_maxidle_alsokickspectators 1 "when sv_maxidle is > 0, kick idle spectators as well as players"
 set sv_maxidle_slots 0 "when not 0, only kick idlers when this many or less player slots are available"
 set sv_maxidle_slots_countbots 1 "count bots as player slots"
-
+set sv_maxidle_minplayers 2 "check for idlers only when there are at least this many players (only in dedicated servers)"
 set sv_maxidle_playertospectator 60 "move players idle for more than this amount of time in seconds to spectators (sv_maxidle timer starts again after sv_maxidle_playertospectator has moved a player to spectators)"
 
 sv_allowdownloads_inarchive 1 // for csprogs.dat