-Fri Jul 16 07:23:25 CEST 2021
+Fri Aug 27 07:23:20 CEST 2021
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
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
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
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
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
+// }}}
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
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
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
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
"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"
#: 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
#: 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"
# 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 ""
"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"
#: 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
#: qcsrc/menu/xonotic/util.qc:780
msgid "Use default"
-msgstr ""
+msgstr "Cleachd a’ bhun-roghainn"
#: qcsrc/menu/xonotic/util.qc:800
msgid "Team Color:"
# 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 ""
"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"
#: 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
#: 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"
#: 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 ""
#: 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
#: 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!"
#: 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!"
#: 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 ""
"^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
#: qcsrc/menu/xonotic/credits.qc:227
msgid "Japanese"
-msgstr ""
+msgstr "Giapponese"
#: qcsrc/menu/xonotic/credits.qc:230
msgid "Kazakh"
# 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"
#: 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
#: 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
#: 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
#: 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
#: 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
#: 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
#: 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..."
#: 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!"
#: 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"
#: 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"
#: 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"
#: 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!"
#: 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
#: qcsrc/common/mutators/mutator/buffs/all.inc:83
msgid "Disabled"
-msgstr ""
+msgstr "無効"
#: qcsrc/common/mutators/mutator/buffs/all.inc:94
msgid "Vengeance"
#: 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"
#: 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"
#: 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"
#: qcsrc/menu/xonotic/dialog_monstertools.qh:6
msgid "Monster Tools"
-msgstr "モンスター用具"
+msgstr "モンスターツール"
#: qcsrc/menu/xonotic/dialog_multiplayer.qc:14
msgid "Servers"
#: 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
#: 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"
#: 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"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:137
msgid "Assassin"
-msgstr "暗殺者"
+msgstr "アサシン"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:138
msgid "Unhuman"
#: 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:"
#: 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 ""
msgstr ""
"選手は武器を受け取り、一発で敵を即座に殺すことができます。選手が弾薬を使い果"
"たした場合、弾薬を見つけるまで10秒かかりますが、弾薬を見つけられない場合は死"
-"にます。二次射撃モードはダメージを与えませんが、ジャンプに適しています。"
+"にます。サブ射撃モードはダメージを与えませんが、ジャンプに適しています。"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:289
msgid ""
#: 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:"
#: 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"
#: 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"
#: 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
#: 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?"
#: 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:"
#: 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"
"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"
#: 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:"
#: 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"
#: 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:"
#: 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
#: 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"
#: 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"
#: 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"
#: 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"
#: 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"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:40
msgid "SZ^Tiny"
-msgstr "小っぽけ"
+msgstr "ちっこい"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:41
msgid "SZ^Little"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:59
msgid "Full screen"
-msgstr "フルスケ"
+msgstr "全画面"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:61
msgid "Vertical Synchronization"
"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"
"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"
"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"
"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:"
#: 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)"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:165
msgid "Campaign Difficulty:"
-msgstr "キャンペーンの難しさ:"
+msgstr "キャンペーンの難易度:"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:166
msgid "CSKL^Easy"
#: 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"
#: 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"
#: 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"
#: qcsrc/menu/xonotic/keybinder.qc:121
msgid "suicide / respawn"
-msgstr "自殺する / 再び現れる"
+msgstr "自殺/リスポーン"
#: qcsrc/menu/xonotic/keybinder.qc:122
msgid "quick menu"
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 "%sのXONOTICサーバー"
#: 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"
#: qcsrc/menu/xonotic/serverlist.qh:156
msgid "SLCAT^Favorites"
-msgstr "好き"
+msgstr "お気に入り"
#: qcsrc/menu/xonotic/serverlist.qh:157
msgid "SLCAT^Recommended"
#: 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>"
# 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"
#: 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
#: qcsrc/common/mutators/mutator/buffs/all.inc:83
msgid "Disabled"
-msgstr ""
+msgstr "Desabilitado"
#: qcsrc/common/mutators/mutator/buffs/all.inc:94
msgid "Vengeance"
#: 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"
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"
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%
uk "Ukrainian" "Українська" 49%
zh_CN "Chinese (China)" "中文" 60%
zh_TW "Chinese (Taiwan)" "國語" 59%
-ja_JP "Japanese" "日本語" 99%
+ja_JP "Japanese" "日本語" 100%
ko "Korean" "한국의" 28%
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;
}
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;
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;
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);
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);
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);
}
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;
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;
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);
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)
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;
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);
precache_model(this.mdl);
_setmodel(this, this.mdl);
+ this.skin = ReadByte();
+
setsize(this, '-16 -16 0', '16 16 48');
}
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);
#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;
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)
#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;
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)
#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;
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)
#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;
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;
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)
#include "powerups.qh"
int autocvar_g_powerups;
+bool autocvar_g_powerups_stack;
REGISTER_MUTATOR(powerups, true);
.float prevstrengthsound;
.float prevstrengthsoundattempt;
+
+// q3compat
+.float count;
#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))
{
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);
}
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"), "")
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
}
}
-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;
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;
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))
}
-void sys_phys_update_single(entity this);
+//void sys_phys_update_single(entity this);
void W_Electro_Bolt_Think(entity this)
{
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;
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)
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;
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);
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)
{
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;
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
g_vehicles 0
sv_showspectators 0
sv_taunt 0
+sv_maxidle_playertospectator 0
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)"
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*"
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