]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'terencehill/maxidle_fix' into 'master'
authorMario <mario.mario@y7mail.com>
Mon, 6 Sep 2021 10:43:50 +0000 (10:43 +0000)
committerMario <mario.mario@y7mail.com>
Mon, 6 Sep 2021 10:43:50 +0000 (10:43 +0000)
Maxidle fix

Closes #2615

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

23 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.gd.po
common.it.po
common.pt_BR.po
gamemodes-server.cfg
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/common/mutators/mutator/status_effects/status_effect/superweapons.qc
qcsrc/common/mutators/mutator/status_effects/sv_status_effects.qc
qcsrc/common/weapons/weapon/electro.qc
sound/weapons/shotgun_melee.ogg
xonotic-client.cfg

index 0661ec53f862a7c199ed5957d949df043f2c9459..05ada6be4cd19f6c7375fe650c43dda3fb54f03b 100644 (file)
@@ -1 +1 @@
-Mon Aug  9 07:23:33 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 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 c7f106dd559b64c801d9e6126dc19d951fc10068..ce12414c45a1062b40d01fa8a748bb001a28d3e7 100644 (file)
@@ -15,7 +15,7 @@ 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-08-09 00:33+0000\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"
@@ -1786,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
@@ -1984,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"
@@ -3065,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 ""
@@ -3089,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
@@ -3848,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!"
@@ -3885,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!"
@@ -4035,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 ""
@@ -4065,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
index 348e5e9541139ae74dbcf3ce08507d424d0f95a3..e81bb9b22b1f16a2ba5f6c0edc53c65cf6f48a4a 100644 (file)
@@ -15,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-08-01 04:05+0000\n"
-"Last-Translator: zerowhy . <anymailz@tutanota.com>\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"
@@ -1790,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
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"
index 96d66d1f547a9ef04cf477dcce045ff8f79d2e29..4c90ac196046ae1d3e1c673da3d47661e8487517 100644 (file)
@@ -6,12 +6,12 @@ en_AU "English (Australia)" "English (Australia)" 74%
 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%
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 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 1142bff9d287bc0e864b203051a146227efbd0cf..4a6ee87d5cc16ac5bb008897ba88007994da9813 100644 (file)
@@ -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 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)"