Merge branch 'Mario/monsters' into 'develop'
authorbones_was_here <bones_was_here@xa.org.au>
Sat, 4 Jun 2022 12:43:50 +0000 (12:43 +0000)
committerbones_was_here <bones_was_here@xa.org.au>
Sat, 4 Jun 2022 12:43:50 +0000 (12:43 +0000)
Merge branch Mario/monsters (L merge request)

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

152 files changed:
.gitlab-ci.yml
.tx/merge-base
common.cs.po
common.es.po
common.es_MX.po
common.fr.po
common.it.po
common.kw.po
common.pt.po
common.pt_BR.po
common.tr.po
gamemodes-client.cfg
gamemodes-server.cfg
models/player/erebus.iqm_0.skin
models/player/erebus.iqm_1.skin
models/player/erebus_lod1.iqm_0.skin
models/player/erebus_lod1.iqm_1.skin
models/player/erebus_lod2.iqm_0.skin
models/player/erebus_lod2.iqm_1.skin
models/player/gak.iqm_0.skin
models/player/gak.iqm_1.skin
models/player/gak_lod1.iqm_0.skin
models/player/gak_lod1.iqm_1.skin
models/player/gak_lod2.iqm_0.skin
models/player/gak_lod2.iqm_1.skin
models/player/gakmasked.iqm_0.skin
models/player/gakmasked.iqm_1.skin
models/player/gakmasked_lod1.iqm_0.skin
models/player/gakmasked_lod1.iqm_1.skin
models/player/gakmasked_lod2.iqm_0.skin
models/player/gakmasked_lod2.iqm_1.skin
models/player/ignis.iqm_0.skin
models/player/ignis.iqm_1.skin
models/player/ignis_lod1.iqm_0.skin
models/player/ignis_lod1.iqm_1.skin
models/player/ignis_lod2.iqm_0.skin
models/player/ignis_lod2.iqm_1.skin
models/player/ignismasked.iqm_0.skin
models/player/ignismasked.iqm_1.skin
models/player/ignismasked_lod1.iqm_0.skin
models/player/ignismasked_lod1.iqm_1.skin
models/player/ignismasked_lod2.iqm_0.skin
models/player/ignismasked_lod2.iqm_1.skin
models/player/megaerebus.iqm_0.skin
models/player/megaerebus_lod1.iqm_0.skin
models/player/megaerebus_lod2.iqm_0.skin
models/player/nyx.iqm_0.skin
models/player/nyx.iqm_1.skin
models/player/nyx_lod1.iqm_0.skin
models/player/nyx_lod1.iqm_1.skin
models/player/nyx_lod2.iqm_0.skin
models/player/nyx_lod2.iqm_1.skin
models/player/pyria.iqm_0.skin
models/player/pyria.iqm_1.skin
models/player/pyria_lod1.iqm_0.skin
models/player/pyria_lod1.iqm_1.skin
models/player/pyria_lod2.iqm_0.skin
models/player/pyria_lod2.iqm_1.skin
models/player/seraphina.iqm_0.skin
models/player/seraphina.iqm_1.skin
models/player/seraphina_lod1.iqm_0.skin
models/player/seraphina_lod1.iqm_1.skin
models/player/seraphina_lod2.iqm_0.skin
models/player/seraphina_lod2.iqm_1.skin
models/player/seraphinamasked.iqm_0.skin
models/player/seraphinamasked.iqm_1.skin
models/player/seraphinamasked_lod1.iqm_0.skin
models/player/seraphinamasked_lod1.iqm_1.skin
models/player/seraphinamasked_lod2.iqm_0.skin
models/player/seraphinamasked_lod2.iqm_1.skin
models/player/umbra.iqm_0.skin
models/player/umbra.iqm_1.skin
models/player/umbra_lod1.iqm_0.skin
models/player/umbra_lod1.iqm_1.skin
models/player/umbra_lod2.iqm_0.skin
models/player/umbra_lod2.iqm_1.skin
qcsrc/client/announcer.qc
qcsrc/client/csqcmodel_hooks.qc
qcsrc/client/csqcmodel_hooks.qh
qcsrc/client/hud/crosshair.qc
qcsrc/client/hud/panel/centerprint.qc
qcsrc/client/hud/panel/scoreboard.qc
qcsrc/client/main.qc
qcsrc/client/view.qc
qcsrc/client/weapons/projectile.qc
qcsrc/common/gamemodes/gamemode/assault/sv_assault.qc
qcsrc/common/gamemodes/gamemode/clanarena/sv_clanarena.qc
qcsrc/common/playerstats.qc
qcsrc/common/turrets/cl_turrets.qc
qcsrc/common/weapons/all.qh
qcsrc/common/weapons/weapon/minelayer.qc
qcsrc/menu/xonotic/dialog_welcome.qc
qcsrc/server/bot/default/bot.qc
qcsrc/server/client.qc
qcsrc/server/command/vote.qc
qcsrc/server/gamelog.qc
qcsrc/server/gamelog.qh
qcsrc/server/items/items.qc
qcsrc/server/mutators/events.qh
qcsrc/server/race.qc
qcsrc/server/scores.qh
qcsrc/server/weapons/spawning.qc
qcsrc/server/weapons/throwing.qc
qcsrc/server/world.qc
scripts/player_erebus.shader
scripts/player_ignis.shader
textures/erebusfullbright_glow.tga
textures/erebusfullbright_shirt.tga
textures/gakarmor_glow.tga
textures/gakarmor_shirt.tga [deleted file]
textures/gakarmorfb_glow.tga
textures/gakarmorfb_shirt.tga [deleted file]
textures/gakfullbright_glow.tga
textures/gakfullbright_shirt.tga
textures/ignis.tga
textures/ignis_glow.tga
textures/ignisfullbright.tga
textures/ignisfullbright_glow.tga
textures/ignisfullbright_shirt.tga
textures/ignishead.tga
textures/ignishead_glow.tga
textures/ignisheadfb.tga [new file with mode: 0644]
textures/ignisheadfb_gloss.tga [new file with mode: 0644]
textures/ignisheadfb_glow.tga [new file with mode: 0644]
textures/ignisheadfb_norm.tga [new file with mode: 0644]
textures/ignisheadfb_reflect.tga [new file with mode: 0644]
textures/ignisheadfb_shirt.tga [new file with mode: 0644]
textures/megaerebus.tga [new file with mode: 0644]
textures/megaerebus_gloss.tga [new file with mode: 0644]
textures/megaerebus_glow.tga [new file with mode: 0644]
textures/megaerebus_norm.tga [new file with mode: 0644]
textures/megaerebus_reflect.tga [new file with mode: 0644]
textures/nyxfullbright_glow.tga
textures/nyxfullbright_shirt.tga
textures/pyria_glow.tga
textures/pyria_shirt.tga
textures/pyriafullbright_glow.tga
textures/pyriafullbright_shirt.tga
textures/shadowhead_shirt.tga
textures/shadowheadfb.tga [new file with mode: 0644]
textures/shadowheadfb_gloss.tga [new file with mode: 0644]
textures/shadowheadfb_glow.tga [new file with mode: 0644]
textures/shadowheadfb_norm.tga [new file with mode: 0644]
textures/shadowheadfb_reflect.tga [new file with mode: 0644]
textures/shadowheadfb_shirt.tga [new file with mode: 0644]
textures/umbra_glow.tga
textures/umbra_shirt.tga
textures/umbrafullbright_glow.tga
textures/umbrafullbright_shirt.tga
weapons.cfg [deleted file]
weapons.cfg.sh [deleted file]
xonotic-client.cfg

index caf20d12527ad3a08a93669ec63e052c9f305392..8b56b81ff39f4e9dda7e29a01cca19b8d679fd06 100644 (file)
@@ -55,7 +55,7 @@ test_sv_game:
     - wget -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints\r
     - wget -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache\r
 \r
-    - EXPECT=a728d38448ae86459582804aa10320c0\r
+    - EXPECT=8e36763a3b4590356bcc449b2452d0ea\r
     - HASH=$(${ENGINE} +timestamps 1 +exec serverbench.cfg\r
       | tee /dev/stderr\r
       | sed -e 's,^\[[^]]*\] ,,'\r
index 5ef01d8a33ff2852c379b282a9adb5baf37317d9..41063ec71c4bb5c14c311f3b208ad893afd82c0d 100644 (file)
@@ -1 +1 @@
-Tue Apr 26 07:23:12 CEST 2022
+Sat May 28 07:23:08 CEST 2022
index f3b1672ff39ef3fc6dd0fd3e7e219aad83800480..ad3aef2178c0d5b10921796186cffec537237f09 100644 (file)
@@ -7,8 +7,8 @@
 # Adam Říha, 2021
 # Adam Říha, 2021
 # fasdasd sdasd <transifexalternativeaccount@yopmail.com>, 2021
-# gamingforyou875 <gamingforyou875@gmail.com>, 2019
-# gamingforyou875 <gamingforyou875@gmail.com>, 2019
+# GamingasCZ <gamingforyou875@gmail.com>, 2019
+# GamingasCZ <gamingforyou875@gmail.com>, 2019
 # Jan Kocka <kockahonza@gmail.com>, 2019
 # Jiří Vrána <jirkacz199@gmail.com>, 2020-2021
 # Martin Taibr <taibr.martin@gmail.com>, 2017
index 37c0666223f456e6bbd21fe076db243911935134..bc5b944904c7c25a0ed49b23ede8feb298818398 100644 (file)
@@ -40,7 +40,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
+"1 : 2;\n"
 
 #: qcsrc/client/announcer.qc:45
 msgid "vs"
index 5254cde9ec127bbe27dd7fed7f3ba0494ad20049..1b96f5e140545af42efbac54df47b4ff204b3e69 100644 (file)
@@ -16,7 +16,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
+"1 : 2;\n"
 
 #: qcsrc/client/announcer.qc:45
 msgid "vs"
index 5c1fce96b5bd1a5f305892e2cc1a647b77497343..a291ce9c8dc13c19cdb1d0f42a15b051403b44b7 100644 (file)
@@ -30,7 +30,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % "
+"1000000 == 0 ? 1 : 2;\n"
 
 #: qcsrc/client/announcer.qc:45
 msgid "vs"
@@ -1227,7 +1228,7 @@ msgstr "Ceci est %s"
 
 #: qcsrc/client/main.qc:1358
 msgid "Your client version is outdated."
-msgstr "Votre version de client est obsolète."
+msgstr "La version de votre client est obsolète."
 
 #: qcsrc/client/main.qc:1359
 msgid "### YOU WON'T BE ABLE TO PLAY ON THIS SERVER ###"
@@ -9674,7 +9675,7 @@ msgid ""
 "help slow GPUs"
 msgstr ""
 "Multiplicateur de taille d'écran ou de fenêtre, permet l'anticrénelage au-"
-"dessus de 1x, peut aider à ralentir les GPUs en-dessous de 1x"
+"dessus de 1x, en-dessous de 1x cela peut aider les petits GPUs"
 
 #: qcsrc/menu/xonotic/dialog_settings_video.qc:90
 msgid "Anisotropy:"
index e9cb1afa4ae3e32a36df52c3a24bbc28c42e5fcc..962f1a75b55d7c41323de632a3ac7b9eaa3c6509 100644 (file)
@@ -23,7 +23,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
+"1 : 2;\n"
 
 #: qcsrc/client/announcer.qc:45
 msgid "vs"
index dc32fd24b65e5592c98f4834492176656a8d4138..679a6c1db416b452510b5124a0becfef92c89bfe 100644 (file)
@@ -19,7 +19,13 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n == 1 ? 0 : n == 2 ? 1 : 2);\n"
+"Plural-Forms: nplurals=6; plural=n == 0 ? 0 : n == 1 ? 1 : (n % 100 == 2 || "
+"n % 100 == 22 || n % 100 == 42 || n % 100 == 62 || n % 100 == 82) || n % "
+"1000 == 0 && (n % 100000 >= 1000 && n % 100000 <= 20000 || n % 100000 == "
+"40000 || n % 100000 == 60000 || n % 100000 == 80000) || n != 0 && n % "
+"1000000 == 100000 ? 2 : (n % 100 == 3 || n % 100 == 23 || n % 100 == 43 || n "
+"% 100 == 63 || n % 100 == 83) ? 3 : n != 1 && (n % 100 == 1 || n % 100 == 21 "
+"|| n % 100 == 41 || n % 100 == 61 || n % 100 == 81) ? 4 : 5;\n"
 
 #: qcsrc/client/announcer.qc:45
 msgid "vs"
index e3c8ef10646b9906c91d72451e98ef3d7bdc8fe0..83aaff5e8466b9e92ee9cb3d18a7ed0eb4b31d26 100644 (file)
@@ -24,7 +24,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % "
+"1000000 == 0 ? 1 : 2;\n"
 
 #: qcsrc/client/announcer.qc:45
 msgid "vs"
index f99dbd8b78e8050722eb205de262b872c5ba85a7..65f14f8d39bd5eeccab10d5b2db96f67e4301a47 100644 (file)
@@ -25,7 +25,8 @@ msgstr ""
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % "
+"1000000 == 0 ? 1 : 2;\n"
 
 #: qcsrc/client/announcer.qc:45
 msgid "vs"
@@ -4356,7 +4357,7 @@ msgid ""
 "^F2^COUNT^BG until weapon change...\n"
 "Next weapon: ^F1%s"
 msgstr ""
-"^F2^CONTAGEM^BG até a mudança de arma...\n"
+"^F2^COUNT^BG até a mudança de arma...\n"
 "Próxima arma: ^F1%s"
 
 #: qcsrc/common/notifications/all.inc:719
index 187b3ea3de698d635eef120d07ddadcff3ace0e9..2f8e2c97b4e8cb8451b461d616c46f94ee95dcd8 100644 (file)
@@ -6,21 +6,21 @@
 # Abdurrahman AKKUŞ <a.rahmanakkus@hotmail.com>, 2019
 # Ahmet, 2022
 # Ahmet, 2022
-# Big Brother <tanakinci2002@gmail.com>, 2021
+# Tan Siret Akıncı <tanakinci2002@gmail.com>, 2021
 # Çağlar Turalı <caglarturali@gmail.com>, 2018
 # Demiray Muhterem <mdemiray@msn.com>, 2018
-# Big Brother <tanakinci2002@gmail.com>, 2021
+# Tan Siret Akıncı <tanakinci2002@gmail.com>, 2021
 # Gokdeniz.Kucukali, 2021
 # Gokdeniz.Kucukali, 2021
 # ibra kap <ibrakap@gmail.com>, 2019
-# Big Brother <tanakinci2002@gmail.com>, 2021
+# Tan Siret Akıncı <tanakinci2002@gmail.com>, 2021
 msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2022-04-17 07:22+0200\n"
 "PO-Revision-Date: 2013-09-12 16:53+0000\n"
-"Last-Translator: Big Brother <tanakinci2002@gmail.com>, 2021\n"
+"Last-Translator: Tan Siret Akıncı <tanakinci2002@gmail.com>, 2021\n"
 "Language-Team: Turkish (http://www.transifex.com/team-xonotic/xonotic/"
 "language/tr/)\n"
 "Language: tr\n"
index c43b9d1d3f2e6fe73fddbb33e8489670350edc4d..71d272a174e7c50dcb868fa34e472d043668a250 100644 (file)
@@ -32,6 +32,6 @@ alias cl_hook_gamestart_ka
 alias cl_hook_gamestart_ft
 alias cl_hook_gamestart_inv
 alias cl_hook_gamestart_duel
-alias cl_hook_gameend "rpn /cl_matchcount dup load 1 + =" // increase match count every time a game ends
+alias cl_hook_gameend
 alias cl_hook_shutdown
 alias cl_hook_activeweapon
index bdac1a2343a0c8f26e2c6f4dd104da313401ad30..318749021fe8d329ae55e6cbb58de4eafb3486ef 100644 (file)
@@ -322,7 +322,7 @@ exec ctfscoring-samual.cfg
 // ====================
 set g_cts 0 "CTS: complete the stage"
 set g_cts_selfdamage 1 "0 = disable all selfdamage and falldamage in cts"
-set g_cts_finish_kill_delay 10 "prevent cheating by running back to the start line, and starting out with more speed than otherwise possible"
+set g_cts_finish_kill_delay 2 "kill player this many seconds after stage completion to prevent cheating by starting out with more speed than otherwise possible; set it to 0 to not kill or to -1 to kill instantly"
 set g_cts_send_rankings_cnt 15 "send this number of map records to clients"
 set g_cts_removeprojectiles 0 "remove projectiles when the player dies, to prevent using weapons earlier in the stage than intended"
 
index 81c4f3bae7e96d8961eba00957c5e322fb2515ae..9f5f7b7dc3c00399f1cdede129aa0a2abd775097 100644 (file)
@@ -1,2 +1,2 @@
-erebus,erebus
-erebus.001,shadowhead
+erebus,erebusfullbright
+erebus.001,shadowheadfb
index 4597ceff1e90809a4e999ac1302734e1ef751b9c..81c4f3bae7e96d8961eba00957c5e322fb2515ae 100644 (file)
@@ -1,2 +1,2 @@
-erebus,erebusfullbright
+erebus,erebus
 erebus.001,shadowhead
index 81c4f3bae7e96d8961eba00957c5e322fb2515ae..9f5f7b7dc3c00399f1cdede129aa0a2abd775097 100644 (file)
@@ -1,2 +1,2 @@
-erebus,erebus
-erebus.001,shadowhead
+erebus,erebusfullbright
+erebus.001,shadowheadfb
index 4597ceff1e90809a4e999ac1302734e1ef751b9c..81c4f3bae7e96d8961eba00957c5e322fb2515ae 100644 (file)
@@ -1,2 +1,2 @@
-erebus,erebusfullbright
+erebus,erebus
 erebus.001,shadowhead
index 81c4f3bae7e96d8961eba00957c5e322fb2515ae..9f5f7b7dc3c00399f1cdede129aa0a2abd775097 100644 (file)
@@ -1,2 +1,2 @@
-erebus,erebus
-erebus.001,shadowhead
+erebus,erebusfullbright
+erebus.001,shadowheadfb
index 4597ceff1e90809a4e999ac1302734e1ef751b9c..81c4f3bae7e96d8961eba00957c5e322fb2515ae 100644 (file)
@@ -1,2 +1,2 @@
-erebus,erebusfullbright
+erebus,erebus
 erebus.001,shadowhead
index f2da16714c50ab517650bc3f54bd3f01d504ee92..3844f6ceb72c7a255ee43970f78dd74c6c05e15a 100644 (file)
@@ -1,2 +1,2 @@
-gak2.001,gakarmor
-gak2,gak
+gak2.001,gakarmorfb
+gak2,gakfullbright
index 3844f6ceb72c7a255ee43970f78dd74c6c05e15a..f2da16714c50ab517650bc3f54bd3f01d504ee92 100644 (file)
@@ -1,2 +1,2 @@
-gak2.001,gakarmorfb
-gak2,gakfullbright
+gak2.001,gakarmor
+gak2,gak
index f2da16714c50ab517650bc3f54bd3f01d504ee92..3844f6ceb72c7a255ee43970f78dd74c6c05e15a 100644 (file)
@@ -1,2 +1,2 @@
-gak2.001,gakarmor
-gak2,gak
+gak2.001,gakarmorfb
+gak2,gakfullbright
index 3844f6ceb72c7a255ee43970f78dd74c6c05e15a..f2da16714c50ab517650bc3f54bd3f01d504ee92 100644 (file)
@@ -1,2 +1,2 @@
-gak2.001,gakarmorfb
-gak2,gakfullbright
+gak2.001,gakarmor
+gak2,gak
index f2da16714c50ab517650bc3f54bd3f01d504ee92..3844f6ceb72c7a255ee43970f78dd74c6c05e15a 100644 (file)
@@ -1,2 +1,2 @@
-gak2.001,gakarmor
-gak2,gak
+gak2.001,gakarmorfb
+gak2,gakfullbright
index 3844f6ceb72c7a255ee43970f78dd74c6c05e15a..f2da16714c50ab517650bc3f54bd3f01d504ee92 100644 (file)
@@ -1,2 +1,2 @@
-gak2.001,gakarmorfb
-gak2,gakfullbright
+gak2.001,gakarmor
+gak2,gak
index 2df68ec5aad706cf7859cef9d332daa3cb54bed6..802db3e155a94101dbe15f65f242d5f15b42f37d 100644 (file)
@@ -1,2 +1,2 @@
-gak3,gak
-gak3.001,gakarmor
+gak3,gakfullbright
+gak3.001,gakarmorfb
index 802db3e155a94101dbe15f65f242d5f15b42f37d..2df68ec5aad706cf7859cef9d332daa3cb54bed6 100644 (file)
@@ -1,2 +1,2 @@
-gak3,gakfullbright
-gak3.001,gakarmorfb
+gak3,gak
+gak3.001,gakarmor
index 2df68ec5aad706cf7859cef9d332daa3cb54bed6..802db3e155a94101dbe15f65f242d5f15b42f37d 100644 (file)
@@ -1,2 +1,2 @@
-gak3,gak
-gak3.001,gakarmor
+gak3,gakfullbright
+gak3.001,gakarmorfb
index 802db3e155a94101dbe15f65f242d5f15b42f37d..2df68ec5aad706cf7859cef9d332daa3cb54bed6 100644 (file)
@@ -1,2 +1,2 @@
-gak3,gakfullbright
-gak3.001,gakarmorfb
+gak3,gak
+gak3.001,gakarmor
index 2df68ec5aad706cf7859cef9d332daa3cb54bed6..802db3e155a94101dbe15f65f242d5f15b42f37d 100644 (file)
@@ -1,2 +1,2 @@
-gak3,gak
-gak3.001,gakarmor
+gak3,gakfullbright
+gak3.001,gakarmorfb
index 802db3e155a94101dbe15f65f242d5f15b42f37d..2df68ec5aad706cf7859cef9d332daa3cb54bed6 100644 (file)
@@ -1,2 +1,2 @@
-gak3,gakfullbright
-gak3.001,gakarmorfb
+gak3,gak
+gak3.001,gakarmor
index a0e69e9fc730a9a7773bea4cc2bca52c680e5e31..f31cd8df5c8edad2ea9172723db013f435a383f0 100644 (file)
@@ -1,2 +1,2 @@
-ignis1,ignis
-ignis1.001,ignishead
+ignis1,ignisfullbright
+ignis1.001,ignisheadfb
index 2c93e982f5c75564477526e1c36af0b4190d3f25..a0e69e9fc730a9a7773bea4cc2bca52c680e5e31 100644 (file)
@@ -1,2 +1,2 @@
-ignis1,ignisfullbright
+ignis1,ignis
 ignis1.001,ignishead
index a0e69e9fc730a9a7773bea4cc2bca52c680e5e31..f31cd8df5c8edad2ea9172723db013f435a383f0 100644 (file)
@@ -1,2 +1,2 @@
-ignis1,ignis
-ignis1.001,ignishead
+ignis1,ignisfullbright
+ignis1.001,ignisheadfb
index 2c93e982f5c75564477526e1c36af0b4190d3f25..a0e69e9fc730a9a7773bea4cc2bca52c680e5e31 100644 (file)
@@ -1,2 +1,2 @@
-ignis1,ignisfullbright
+ignis1,ignis
 ignis1.001,ignishead
index a0e69e9fc730a9a7773bea4cc2bca52c680e5e31..f31cd8df5c8edad2ea9172723db013f435a383f0 100644 (file)
@@ -1,2 +1,2 @@
-ignis1,ignis
-ignis1.001,ignishead
+ignis1,ignisfullbright
+ignis1.001,ignisheadfb
index 2c93e982f5c75564477526e1c36af0b4190d3f25..a0e69e9fc730a9a7773bea4cc2bca52c680e5e31 100644 (file)
@@ -1,2 +1,2 @@
-ignis1,ignisfullbright
+ignis1,ignis
 ignis1.001,ignishead
index d46d1576ac3b5303c04e57a43b0b6afeeac9d944..a02196161086c9ff3b813ecb5261f0118c31d4cc 100644 (file)
@@ -1,2 +1,2 @@
-ignis1,ignis
-ignis3,ignishead
+ignis1,ignisfullbright
+ignis3,ignisheadfb
index eb257cc1d619d04464532624c435455cf4ee04e9..d46d1576ac3b5303c04e57a43b0b6afeeac9d944 100644 (file)
@@ -1,2 +1,2 @@
-ignis1,ignisfullbright
+ignis1,ignis
 ignis3,ignishead
index d46d1576ac3b5303c04e57a43b0b6afeeac9d944..a02196161086c9ff3b813ecb5261f0118c31d4cc 100644 (file)
@@ -1,2 +1,2 @@
-ignis1,ignis
-ignis3,ignishead
+ignis1,ignisfullbright
+ignis3,ignisheadfb
index eb257cc1d619d04464532624c435455cf4ee04e9..d46d1576ac3b5303c04e57a43b0b6afeeac9d944 100644 (file)
@@ -1,2 +1,2 @@
-ignis1,ignisfullbright
+ignis1,ignis
 ignis3,ignishead
index d46d1576ac3b5303c04e57a43b0b6afeeac9d944..a02196161086c9ff3b813ecb5261f0118c31d4cc 100644 (file)
@@ -1,2 +1,2 @@
-ignis1,ignis
-ignis3,ignishead
+ignis1,ignisfullbright
+ignis3,ignisheadfb
index eb257cc1d619d04464532624c435455cf4ee04e9..d46d1576ac3b5303c04e57a43b0b6afeeac9d944 100644 (file)
@@ -1,2 +1,2 @@
-ignis1,ignisfullbright
+ignis1,ignis
 ignis3,ignishead
index 4597ceff1e90809a4e999ac1302734e1ef751b9c..977140f6bd996c62d6e85d7729ac2c0757dac9dd 100644 (file)
@@ -1,2 +1,2 @@
-erebus,erebusfullbright
-erebus.001,shadowhead
+erebus,megaerebus
+erebus.001,shadowheadfb
index 4597ceff1e90809a4e999ac1302734e1ef751b9c..977140f6bd996c62d6e85d7729ac2c0757dac9dd 100644 (file)
@@ -1,2 +1,2 @@
-erebus,erebusfullbright
-erebus.001,shadowhead
+erebus,megaerebus
+erebus.001,shadowheadfb
index 4597ceff1e90809a4e999ac1302734e1ef751b9c..977140f6bd996c62d6e85d7729ac2c0757dac9dd 100644 (file)
@@ -1,2 +1,2 @@
-erebus,erebusfullbright
-erebus.001,shadowhead
+erebus,megaerebus
+erebus.001,shadowheadfb
index 383252cb85732d565c5b24abe2c445c1fcd22378..2d1096323d0029a08276fee90318e648f626ea90 100644 (file)
@@ -1,2 +1,2 @@
-nyx,nyx
-nyx.001,shadowhead
+nyx,nyxfullbright
+nyx.001,shadowheadfb
index 19b5fd59b1380c68a3369bdfdb18ad41d77588b4..383252cb85732d565c5b24abe2c445c1fcd22378 100644 (file)
@@ -1,2 +1,2 @@
-nyx,nyxfullbright
+nyx,nyx
 nyx.001,shadowhead
index 383252cb85732d565c5b24abe2c445c1fcd22378..2d1096323d0029a08276fee90318e648f626ea90 100644 (file)
@@ -1,2 +1,2 @@
-nyx,nyx
-nyx.001,shadowhead
+nyx,nyxfullbright
+nyx.001,shadowheadfb
index 19b5fd59b1380c68a3369bdfdb18ad41d77588b4..383252cb85732d565c5b24abe2c445c1fcd22378 100644 (file)
@@ -1,2 +1,2 @@
-nyx,nyxfullbright
+nyx,nyx
 nyx.001,shadowhead
index 383252cb85732d565c5b24abe2c445c1fcd22378..2d1096323d0029a08276fee90318e648f626ea90 100644 (file)
@@ -1,2 +1,2 @@
-nyx,nyx
-nyx.001,shadowhead
+nyx,nyxfullbright
+nyx.001,shadowheadfb
index 19b5fd59b1380c68a3369bdfdb18ad41d77588b4..383252cb85732d565c5b24abe2c445c1fcd22378 100644 (file)
@@ -1,2 +1,2 @@
-nyx,nyxfullbright
+nyx,nyx
 nyx.001,shadowhead
index 7533a4c53adab086fe9866c766df919d631666f7..1932354e8078c3f24947504da7bbb93390c5a51a 100644 (file)
@@ -1,2 +1,2 @@
 pyria_obj.001,pyriahair
-pyria_obj,pyria
+pyria_obj,pyriafullbright
index 1932354e8078c3f24947504da7bbb93390c5a51a..7533a4c53adab086fe9866c766df919d631666f7 100644 (file)
@@ -1,2 +1,2 @@
 pyria_obj.001,pyriahair
-pyria_obj,pyriafullbright
+pyria_obj,pyria
index 7533a4c53adab086fe9866c766df919d631666f7..1932354e8078c3f24947504da7bbb93390c5a51a 100644 (file)
@@ -1,2 +1,2 @@
 pyria_obj.001,pyriahair
-pyria_obj,pyria
+pyria_obj,pyriafullbright
index 1932354e8078c3f24947504da7bbb93390c5a51a..7533a4c53adab086fe9866c766df919d631666f7 100644 (file)
@@ -1,2 +1,2 @@
 pyria_obj.001,pyriahair
-pyria_obj,pyriafullbright
+pyria_obj,pyria
index 7533a4c53adab086fe9866c766df919d631666f7..1932354e8078c3f24947504da7bbb93390c5a51a 100644 (file)
@@ -1,2 +1,2 @@
 pyria_obj.001,pyriahair
-pyria_obj,pyria
+pyria_obj,pyriafullbright
index 1932354e8078c3f24947504da7bbb93390c5a51a..7533a4c53adab086fe9866c766df919d631666f7 100644 (file)
@@ -1,2 +1,2 @@
 pyria_obj.001,pyriahair
-pyria_obj,pyriafullbright
+pyria_obj,pyria
index a8ea4ee62784799220586f63c1b4f3b8bc4be9ef..cf702a3c2a0d7f9aec42f3148bf71d9be608c66f 100644 (file)
@@ -1,2 +1,2 @@
 ignis42.001,seraphina
-ignis42,ignis
+ignis42,ignisfullbright
index cf702a3c2a0d7f9aec42f3148bf71d9be608c66f..a8ea4ee62784799220586f63c1b4f3b8bc4be9ef 100644 (file)
@@ -1,2 +1,2 @@
 ignis42.001,seraphina
-ignis42,ignisfullbright
+ignis42,ignis
index a8ea4ee62784799220586f63c1b4f3b8bc4be9ef..cf702a3c2a0d7f9aec42f3148bf71d9be608c66f 100644 (file)
@@ -1,2 +1,2 @@
 ignis42.001,seraphina
-ignis42,ignis
+ignis42,ignisfullbright
index cf702a3c2a0d7f9aec42f3148bf71d9be608c66f..a8ea4ee62784799220586f63c1b4f3b8bc4be9ef 100644 (file)
@@ -1,2 +1,2 @@
 ignis42.001,seraphina
-ignis42,ignisfullbright
+ignis42,ignis
index a8ea4ee62784799220586f63c1b4f3b8bc4be9ef..cf702a3c2a0d7f9aec42f3148bf71d9be608c66f 100644 (file)
@@ -1,2 +1,2 @@
 ignis42.001,seraphina
-ignis42,ignis
+ignis42,ignisfullbright
index cf702a3c2a0d7f9aec42f3148bf71d9be608c66f..a8ea4ee62784799220586f63c1b4f3b8bc4be9ef 100644 (file)
@@ -1,2 +1,2 @@
 ignis42.001,seraphina
-ignis42,ignisfullbright
+ignis42,ignis
index 7138ad587e31e81451b941144041fa5ffec81ec0..1e69498f9f182535a562647f447e95bab549d14a 100644 (file)
@@ -1,2 +1,2 @@
-ignis42,ignis
-ignis42.002,ignishead
+ignis42,ignisfullbright
+ignis42.002,ignisheadfb
index 7b94ebe4a4e61e1d7e0803fb86a91a60fb3ecf4e..7138ad587e31e81451b941144041fa5ffec81ec0 100644 (file)
@@ -1,2 +1,2 @@
-ignis42,ignisfullbright
+ignis42,ignis
 ignis42.002,ignishead
index 7138ad587e31e81451b941144041fa5ffec81ec0..1e69498f9f182535a562647f447e95bab549d14a 100644 (file)
@@ -1,2 +1,2 @@
-ignis42,ignis
-ignis42.002,ignishead
+ignis42,ignisfullbright
+ignis42.002,ignisheadfb
index 7b94ebe4a4e61e1d7e0803fb86a91a60fb3ecf4e..7138ad587e31e81451b941144041fa5ffec81ec0 100644 (file)
@@ -1,2 +1,2 @@
-ignis42,ignisfullbright
+ignis42,ignis
 ignis42.002,ignishead
index 7138ad587e31e81451b941144041fa5ffec81ec0..1e69498f9f182535a562647f447e95bab549d14a 100644 (file)
@@ -1,2 +1,2 @@
-ignis42,ignis
-ignis42.002,ignishead
+ignis42,ignisfullbright
+ignis42.002,ignisheadfb
index 7b94ebe4a4e61e1d7e0803fb86a91a60fb3ecf4e..7138ad587e31e81451b941144041fa5ffec81ec0 100644 (file)
@@ -1,2 +1,2 @@
-ignis42,ignisfullbright
+ignis42,ignis
 ignis42.002,ignishead
index 447eeadfc469438ba7ce79de9414f258c51bac10..cb9c3d051749bd9c6ff3ec919fc1f2e487df1993 100644 (file)
@@ -1 +1 @@
-umbra,umbra
+umbra,umbrafullbright
index cb9c3d051749bd9c6ff3ec919fc1f2e487df1993..447eeadfc469438ba7ce79de9414f258c51bac10 100644 (file)
@@ -1 +1 @@
-umbra,umbrafullbright
+umbra,umbra
index 447eeadfc469438ba7ce79de9414f258c51bac10..cb9c3d051749bd9c6ff3ec919fc1f2e487df1993 100644 (file)
@@ -1 +1 @@
-umbra,umbra
+umbra,umbrafullbright
index cb9c3d051749bd9c6ff3ec919fc1f2e487df1993..447eeadfc469438ba7ce79de9414f258c51bac10 100644 (file)
@@ -1 +1 @@
-umbra,umbrafullbright
+umbra,umbra
index 447eeadfc469438ba7ce79de9414f258c51bac10..cb9c3d051749bd9c6ff3ec919fc1f2e487df1993 100644 (file)
@@ -1 +1 @@
-umbra,umbra
+umbra,umbrafullbright
index cb9c3d051749bd9c6ff3ec919fc1f2e487df1993..447eeadfc469438ba7ce79de9414f258c51bac10 100644 (file)
@@ -1 +1 @@
-umbra,umbrafullbright
+umbra,umbra
index e86702afa086a8314ee12ba92540f605929a6b7d..d46595e8718bde0a2007fb276a6e54ab6b49d7ca 100644 (file)
@@ -53,6 +53,8 @@ void Announcer_ClearTitle()
 }
 
 bool prev_inround;
+float prev_starttime;
+float prev_roundstarttime;
 void Announcer_Countdown(entity this)
 {
        float starttime = STAT(GAMESTARTTIME);
@@ -70,6 +72,9 @@ void Announcer_Countdown(entity this)
        float countdown = (inround ? roundstarttime - time : starttime - time);
        float countdown_rounded = floor(0.5 + countdown);
 
+       if (starttime != prev_starttime || roundstarttime != prev_roundstarttime || prev_inround != inround)
+               this.skin = 0; // restart centerprint countdown
+
        if(countdown <= 0) // countdown has finished, starttime is now
        {
                Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_BEGIN);
@@ -84,7 +89,8 @@ void Announcer_Countdown(entity this)
                if(inround)
                {
                        if(!prev_inround) Announcer_ClearTitle(); // clear title if we just started the match
-                       Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_ROUNDSTART, STAT(ROUNDS_PLAYED) + 1, countdown_rounded);
+                       if (!this.skin) // first tic
+                               Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_ROUNDSTART, STAT(ROUNDS_PLAYED) + 1, countdown_rounded);
                        Notification annce_num = Announcer_PickNumber(CNT_ROUNDSTART, countdown_rounded);
                        if(annce_num != NULL)
                                Local_Notification(MSG_ANNCE, annce_num);
@@ -92,15 +98,22 @@ void Announcer_Countdown(entity this)
                }
                else
                {
-                       Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_GAMESTART, countdown_rounded);
+                       if (!this.skin) // first tic
+                               Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_GAMESTART, countdown_rounded);
                        Notification annce_num = Announcer_PickNumber(CNT_GAMESTART, countdown_rounded);
                        if(!roundstarttime && annce_num != NULL) // Don't announce game start in round based modes
                                Local_Notification(MSG_ANNCE, annce_num);
                        this.nextthink = (starttime - (countdown - 1));
                }
+               // Don't call centerprint countdown in the remaining tics, it will continue automatically.
+               // It's an optimization but also fixes ^COUNT shown in the last tic because of high slowmo values (15+).
+               // Hopefully it fixes ^COUNT occasionally shown in online servers, probably due to lags.
+               this.skin = 1; // recycled field
        }
 
        prev_inround = inround;
+       prev_starttime = starttime;
+       prev_roundstarttime = roundstarttime;
 }
 
 /**
@@ -119,6 +132,7 @@ void Announcer_Gamestart()
                startTime = roundstarttime;
        if(intermission)
        {
+               Announcer_ClearTitle();
                if(announcer_countdown)
                {
                        centerprint_Kill(ORDINAL(CPID_ROUND));
@@ -216,6 +230,9 @@ void Announcer_Time()
 
 void Announcer()
 {
+       // announcer code sets gametype name as centerprint title
+       if(!gametype)
+               return;
        Announcer_Gamestart();
        Announcer_Time();
 }
index 06cf44bdbd1bf9b30422a59983a6de93919e386d..121af1947a9b256ae2b4e0e7013ea4865db10898 100644 (file)
@@ -330,7 +330,7 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer)
 
        // GLOWMOD AND DEATH FADING
        if(this.colormap > 0)
-               this.glowmod = colormapPaletteColor(((this.colormap >= 1024) ? this.colormap : entcs_GetClientColors(this.colormap - 1)) & 0x0F, true) * 2;
+               this.glowmod = colormapPaletteColor(((this.colormap >= 1024) ? this.colormap : entcs_GetClientColors(this.colormap - 1)) & 0x0F, true);
        else
                this.glowmod = '1 1 1';
 
@@ -348,6 +348,10 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer)
                }
        }
 
+       // don't let the engine increase player's glowmod
+       if (autocvar_r_hdr_glowintensity > 1)
+               this.glowmod /= autocvar_r_hdr_glowintensity;
+
        //printf("CSQCPlayer_ModelAppearance_Apply(): state = %s, colormap = %f, glowmod = %s\n", (this.csqcmodel_isdead ? "DEAD" : "ALIVE"), this.colormap, vtos(this.glowmod));
 }
 
index 16cc29a0b06b10da56bb51174145dde8cd95df79..165008ee940e76de7fd51ba1956c6057e566129f 100644 (file)
@@ -17,6 +17,7 @@ string autocvar__cl_playermodel;
 float autocvar_cl_deathglow;
 float autocvar_cl_deathglow_min = 0.5;
 float autocvar_cl_jetpack_attenuation = 2;
+float autocvar_r_hdr_glowintensity;
 
 // FEATURE: EF_NODRAW workalike
 const int EF_BRIGHTFIELD       = BIT(0);
index cf2c01d971f134ec41ca51d1e04e175c83c9cf00..229a6024084df01cbabefa97a02de385a558a86a 100644 (file)
@@ -63,9 +63,8 @@ float EnemyHitCheck()
        if(n > maxclients)
                return SHOTTYPE_HITWORLD;
        t = entcs_GetTeam(n - 1);
-       if(teamplay)
-               if(t == myteam)
-                       return SHOTTYPE_HITTEAM;
+       if(teamplay && t == myteam)
+               return SHOTTYPE_HITTEAM;
        if(t == NUM_SPECTATOR)
                return SHOTTYPE_HITWORLD;
        return SHOTTYPE_HITENEMY;
index 1436f2ef6a9d48e8675976e190ee76c542847329..1af0e330147c68176e7a4af911c2037fd18e5adb 100644 (file)
@@ -278,14 +278,14 @@ void HUD_CenterPrint()
                if (centerprint_title_left != "" && align == 0.5) // Center line at the main word (for duels)
                        pos.x += (stringwidth(centerprint_title_right, true, fontsize) - stringwidth(centerprint_title_left, true, fontsize)) / 2;
 
-               drawcolorcodedstring(pos, centerprint_title, fontsize, 1, DRAWFLAG_NORMAL);
+               drawcolorcodedstring(pos, centerprint_title, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL);
 
                if (autocvar_hud_panel_centerprint_flip)
                        pos.y -= cp_fontsize.y * CENTERPRINT_TITLE_SPACING;
                else
                        pos.y += fontsize.y + (hud_fontsize.y * CENTERPRINT_TITLE_SPACING);
 
-               drawfill(pos, vec2(width, 1), '1 1 1', 1, DRAWFLAG_NORMAL);
+               drawfill(pos, vec2(width, 1), '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
 
                if (autocvar_hud_panel_centerprint_flip)
                        pos.y -= cp_fontsize.y * CENTERPRINT_TITLE_SPACING;
index ed8715e022909cd1545784a29c222d3d1d130c92..0d0a44b6a295f839a7516ac210f96a685edee8bc 100644 (file)
@@ -2110,8 +2110,7 @@ void Scoreboard_Draw()
 
        // print information about respawn status
        float respawn_time = STAT(RESPAWN_TIME);
-       if(!intermission)
-       if(respawn_time)
+       if(!intermission && respawn_time)
        {
                if(respawn_time < 0)
                {
index 8bd5d78638c1fc607fd379d7d1b20d82d0b52ca9..40d6cbbc2b6c2d4a93727927645993e04ed7b524 100644 (file)
@@ -178,7 +178,14 @@ void Shutdown()
                if (!(calledhooks & HOOK_START))
                        localcmd("\n_cl_hook_gamestart nop\n");
                if (!(calledhooks & HOOK_END))
+               {
+                       int gamecount = cvar("cl_matchcount");
                        localcmd("\ncl_hook_gameend\n");
+                       // NOTE: using localcmd here to ensure it's executed AFTER cl_hook_gameend
+                       // earlier versions of the game abuse the hook to set this cvar
+                       localcmd(strcat("cl_matchcount ", itos(gamecount + 1), "\n"));
+                       //cvar_set("cl_matchcount", itos(gamecount + 1));
+               }
        }
 
        localcmd("\ncl_hook_shutdown\n");
@@ -1438,6 +1445,8 @@ void Welcome_Message_Show_Try()
                        string msg = MakeConsoleSafe(strreplace("\n", "\\n", welcome_msg));
                        welcomedialog_args = strcat(welcomedialog_args, " WELCOME \"", msg, "\"");
                        localcmd("\nmenu_cmd directmenu Welcome ", welcomedialog_args, "\n");
+                       if (intermission) // close it after it's been initialized so it can still be opened manually
+                               localcmd("\ntogglemenu 0\n");
                }
                else
                        centerprint_Add(ORDINAL(CPID_MOTD), strcat(hostname, "\n\n\n", welcome_msg), -1, 0);
index 855d20f818fbf7d04028cd255ec5067f42ab25f8..530324656373d1346762879984b5473795df5af5 100644 (file)
@@ -868,41 +868,46 @@ void HUD_Draw(entity this)
        Hud_Dynamic_Frame();
 
        if(!intermission)
-       if (MUTATOR_CALLHOOK(HUD_Draw_overlay))
        {
-               drawfill('0 0 0', vec2(vid_conwidth, vid_conheight), M_ARGV(0, vector), autocvar_hud_colorflash_alpha * M_ARGV(1, float), DRAWFLAG_ADDITIVE);
-       }
-       else if(STAT(FROZEN))
-       {
-               vector col = '0.25 0.90 1';
-               float col_fade = max(0, STAT(REVIVE_PROGRESS) * 2 - 1);
-               float alpha_fade = 0.3 + 0.7 * (1 - max(0, STAT(REVIVE_PROGRESS) * 4 - 3));
-               if(col_fade)
-                       col += vec3(col_fade, -col_fade, -col_fade);
-               drawfill('0 0 0', vec2(vid_conwidth, vid_conheight), col, autocvar_hud_colorflash_alpha * alpha_fade, DRAWFLAG_ADDITIVE);
+               if (MUTATOR_CALLHOOK(HUD_Draw_overlay))
+               {
+                       drawfill('0 0 0', vec2(vid_conwidth, vid_conheight), M_ARGV(0, vector), autocvar_hud_colorflash_alpha * M_ARGV(1, float), DRAWFLAG_ADDITIVE);
+               }
+               else if(STAT(FROZEN))
+               {
+                       vector col = '0.25 0.90 1';
+                       float col_fade = max(0, STAT(REVIVE_PROGRESS) * 2 - 1);
+                       float alpha_fade = 0.3 + 0.7 * (1 - max(0, STAT(REVIVE_PROGRESS) * 4 - 3));
+                       if(col_fade)
+                               col += vec3(col_fade, -col_fade, -col_fade);
+                       drawfill('0 0 0', vec2(vid_conwidth, vid_conheight), col, autocvar_hud_colorflash_alpha * alpha_fade, DRAWFLAG_ADDITIVE);
+               }
        }
 
        HUD_Scale_Enable();
        if(!intermission)
-       if(STAT(NADE_TIMER) && autocvar_cl_nade_timer) // give nade top priority, as it's a matter of life and death
-       {
-               vector col = '0.25 0.90 1' + vec3(STAT(NADE_TIMER), -STAT(NADE_TIMER), -STAT(NADE_TIMER));
-               DrawCircleClippedPic(vec2(0.5 * vid_conwidth, 0.6 * vid_conheight), 0.1 * vid_conheight, "gfx/crosshair_ring", STAT(NADE_TIMER), col, autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE);
-               drawstring_aspect(eY * 0.64 * vid_conheight, ((autocvar_cl_nade_timer == 2) ? _("Nade timer") : ""), vec2(vid_conwidth, 0.025 * vid_conheight), '1 1 1', 1, DRAWFLAG_NORMAL);
-       }
-       else if(STAT(CAPTURE_PROGRESS))
-       {
-               DrawCircleClippedPic(vec2(0.5 * vid_conwidth, 0.6 * vid_conheight), 0.1 * vid_conheight, "gfx/crosshair_ring", STAT(CAPTURE_PROGRESS), '0.25 0.90 1', autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE);
-               drawstring_aspect(eY * 0.64 * vid_conheight, _("Capture progress"), vec2(vid_conwidth, 0.025 * vid_conheight), '1 1 1', 1, DRAWFLAG_NORMAL);
-       }
-       else if(STAT(REVIVE_PROGRESS))
        {
-               DrawCircleClippedPic(vec2(0.5 * vid_conwidth, 0.6 * vid_conheight), 0.1 * vid_conheight, "gfx/crosshair_ring", STAT(REVIVE_PROGRESS), '0.25 0.90 1', autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE);
-               drawstring_aspect(eY * 0.64 * vid_conheight, _("Revival progress"), vec2(vid_conwidth, 0.025 * vid_conheight), '1 1 1', 1, DRAWFLAG_NORMAL);
+               if(STAT(NADE_TIMER) && autocvar_cl_nade_timer) // give nade top priority, as it's a matter of life and death
+               {
+                       vector col = '0.25 0.90 1' + vec3(STAT(NADE_TIMER), -STAT(NADE_TIMER), -STAT(NADE_TIMER));
+                       DrawCircleClippedPic(vec2(0.5 * vid_conwidth, 0.6 * vid_conheight), 0.1 * vid_conheight, "gfx/crosshair_ring", STAT(NADE_TIMER), col, autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE);
+                       drawstring_aspect(eY * 0.64 * vid_conheight, ((autocvar_cl_nade_timer == 2) ? _("Nade timer") : ""), vec2(vid_conwidth, 0.025 * vid_conheight), '1 1 1', 1, DRAWFLAG_NORMAL);
+               }
+               else if(STAT(CAPTURE_PROGRESS))
+               {
+                       DrawCircleClippedPic(vec2(0.5 * vid_conwidth, 0.6 * vid_conheight), 0.1 * vid_conheight, "gfx/crosshair_ring", STAT(CAPTURE_PROGRESS), '0.25 0.90 1', autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE);
+                       drawstring_aspect(eY * 0.64 * vid_conheight, _("Capture progress"), vec2(vid_conwidth, 0.025 * vid_conheight), '1 1 1', 1, DRAWFLAG_NORMAL);
+               }
+               else if(STAT(REVIVE_PROGRESS))
+               {
+                       DrawCircleClippedPic(vec2(0.5 * vid_conwidth, 0.6 * vid_conheight), 0.1 * vid_conheight, "gfx/crosshair_ring", STAT(REVIVE_PROGRESS), '0.25 0.90 1', autocvar_hud_colorflash_alpha, DRAWFLAG_ADDITIVE);
+                       drawstring_aspect(eY * 0.64 * vid_conheight, _("Revival progress"), vec2(vid_conwidth, 0.025 * vid_conheight), '1 1 1', 1, DRAWFLAG_NORMAL);
+               }
        }
        HUD_Scale_Disable();
 
        if(autocvar_r_letterbox == 0)
+       {
                if(autocvar_viewsize < 120)
                {
                        if(!MUTATOR_CALLHOOK(DrawScoreboardAccuracy))
@@ -911,6 +916,7 @@ void HUD_Draw(entity this)
                        HUD_Main();
                        HUD_Scale_Disable();
                }
+       }
 
        // crosshair goes VERY LAST
        UpdateDamage();
@@ -1647,7 +1653,12 @@ void CSQC_UpdateView(entity this, float w, float h)
        {
                if(calledhooks & HOOK_START)
                {
+                       int gamecount = cvar("cl_matchcount");
                        localcmd("\ncl_hook_gameend\n");
+                       // NOTE: using localcmd here to ensure it's executed AFTER cl_hook_gameend
+                       // earlier versions of the game abuse the hook to set this cvar
+                       localcmd(strcat("cl_matchcount ", itos(gamecount + 1), "\n"));
+                       //cvar_set("cl_matchcount", itos(gamecount + 1));
                        calledhooks |= HOOK_END;
                }
        }
index b4c9f86b2c5f75419196370653e728a59ad9f981..1df65036ec59a83b10feeba19544c818ee939e9a 100644 (file)
@@ -276,7 +276,7 @@ NET_HANDLE(ENT_CLIENT_PROJECTILE, bool isnew)
                // TODO: projectiles use glowmaps for their color, not teams
                #if 0
                if(this.colormap > 0)
-                       this.glowmod = colormapPaletteColor(this.colormap & 0x0F, true) * 2;
+                       this.glowmod = colormapPaletteColor(this.colormap & 0x0F, true);
                else
                        this.glowmod = '1 1 1';
                #endif
index 5edfd5ff1863362ecaf53354431793598c11e228..e9fb0a48dea9b2988e4bf22135d457b143a65d22 100644 (file)
@@ -255,7 +255,7 @@ int WinningCondition_Assault()
 
                        TeamScore_AddToTeam(assault_attacker_team, ST_ASSAULT_OBJECTIVES, 666 - TeamScore_AddToTeam(assault_attacker_team, ST_ASSAULT_OBJECTIVES, 0));
 
-                       if(ent.cnt == 1 || autocvar_g_campaign) // this was the second round
+                       if(ent.cnt == 1 || autocvar_g_campaign) // this was the second round or the only round in campaign
                        {
                                status = WINNING_YES;
                        }
@@ -630,5 +630,8 @@ MUTATOR_HOOKFUNCTION(as, OnEntityPreSpawn)
 MUTATOR_HOOKFUNCTION(as, ReadyRestart_Deny)
 {
        // readyrestart not supported (yet)
+       // it's supported only in campaign mode (single round mode), since campaign requires it
+       if (autocvar_g_campaign)
+               return false;
        return true;
 }
index 3b823dfdf14c8142fb041c16b27f40cd6cc481fe..7803108c6c00010cb896fce7fde81da0fbfebc00 100644 (file)
@@ -194,12 +194,7 @@ MUTATOR_HOOKFUNCTION(ca, reset_map_players)
 {
        FOREACH_CLIENT(true, {
                CS(it).killcount = 0;
-               if (!INGAME(it) && IS_BOT_CLIENT(it))
-               {
-                       it.team = -1;
-                       INGAME_STATUS_SET(it, INGAME_STATUS_JOINED);
-               }
-               if (INGAME(it))
+               if (INGAME(it) || IS_BOT_CLIENT(it))
                {
                        TRANSMUTE(Player, it);
                        INGAME_STATUS_SET(it, INGAME_STATUS_JOINED);
index 3e1444a35f9f28fcc98a16ed8553e042a1777d82..e83305886cee1522ddbb5b8db4c11388ee59e0e7 100644 (file)
@@ -207,7 +207,13 @@ void PlayerStats_GameReport_FinalizePlayer(entity p)
                {
                        float latency = max(0, CS(p).latency_sum / CS(p).latency_cnt);
                        if(latency)
-                               PlayerStats_GameReport_Event_Player(p, PLAYERSTATS_AVGLATENCY, latency);
+                       {
+                               // if previous average latency exists (player disconnected and reconnected)
+                               // make the average of previous and current average latency
+                               float prev_latency = PlayerStats_GameReport_Event_Player(p, PLAYERSTATS_AVGLATENCY, 0);
+                               float new_latency = !prev_latency ? latency : (prev_latency + latency) / 2;
+                               PlayerStats_GameReport_Event_Player(p, PLAYERSTATS_AVGLATENCY, -prev_latency + new_latency);
+                       }
                }
 
                db_put(PS_GR_OUT_DB, sprintf("%s:_ranked", p.playerstats_id), ftos(CS_CVAR(p).cvar_cl_allow_uidranking));
@@ -366,6 +372,7 @@ void PlayerStats_GameReport_Handler(entity fh, entity pass, float status)
                 * i: player index
                 * n: nickname of the player (optional)
                 * t: team ID
+                * r: player ranking enabled / disabled
                 * e: followed by an event name, a space, and the event count/score
                 *  event names can be:
                 *   alivetime: total playing time of the player
index 2157062b2a7f5f3806c62055bded9a971fda7957..aff0f764c7759c2955a527f55960725dca8526e6 100644 (file)
@@ -10,7 +10,7 @@ void turret_remove(entity this)
 .vector glowmod;
 void turret_changeteam(entity this)
 {
-       this.glowmod = Team_ColorRGB(this.team - 1) * 2;
+       this.glowmod = Team_ColorRGB(this.team - 1);
        this.teamradar_color = Team_ColorRGB(this.team - 1);
 
        if(this.team)
index 6824680436fe3c5f320649053c2e697aa84d8ff6..356c3882a920d84537261cbc8b9acb9ba7b26be2 100644 (file)
@@ -308,14 +308,11 @@ WepSet WEPSET_SUPERWEAPONS;
 
 #include "all.inc"
 
-// TODO: remove after 0.8.2. Retains impulse number compatibility because 0.8.1 clients don't reload the weapons.cfg
-#define WEP_HARDCODED_IMPULSES 20
-
 // TODO: invert after 0.8.2. Will require moving 'best weapon' impulses
 #define WEP_IMPULSE_BEGIN 230
 #define WEP_IMPULSE_END bound(WEP_IMPULSE_BEGIN, WEP_IMPULSE_BEGIN + (REGISTRY_COUNT(Weapons) - 1) - 1, 253)
 
-REGISTRY_SORT(Weapons, WEP_HARDCODED_IMPULSES + 1)
+REGISTRY_SORT(Weapons, 1)
 REGISTRY_CHECK(Weapons)
 
 STATIC_INIT(register_weapons_done)
@@ -350,7 +347,7 @@ STATIC_INIT(register_weapons_done)
 vector weaponentity_glowmod(Weapon wep, entity actor, int c, entity wepent)
 {
     vector g;
-    if (!(g = wep.wr_glow(wep, actor, wepent))) g = colormapPaletteColor(c & 0x0F, true) * 2;
+    if (!(g = wep.wr_glow(wep, actor, wepent))) g = colormapPaletteColor(c & 0x0F, true);
     return g;
 }
 
index f25859e0532983b1b1fbf7c9605f8f902fcde27d..8a8d4839cd4c307a6f62a418884abf551569fc92 100644 (file)
@@ -192,7 +192,7 @@ void W_MineLayer_Think(entity this)
        head = findradius(this.origin, WEP_CVAR(minelayer, proximityradius));
        while(head)
        {
-               if(IS_PLAYER(head) && !IS_DEAD(head) && !STAT(FROZEN, head))
+               if(IS_PLAYER(head) && !IS_DEAD(head) && !STAT(FROZEN, head) && !IS_INDEPENDENT_PLAYER(head))
                if(head != this.realowner && DIFF_TEAM(head, this.realowner)) // don't trigger for team mates
                if(!this.mine_time)
                {
index ca80ef4dd780241e2c971810972628fd7a60a979..5da6f8b1ea9a0bb30aba0786c0bba645f59f2d3b 100644 (file)
@@ -71,6 +71,10 @@ void XonoticWelcomeDialog_readInputArgs(entity me, int argsbuf)
 void XonoticWelcomeDialog_draw(entity me)
 {
        SUPER(XonoticWelcomeDialog).draw(me);
+
+       if (!(gamestatus & (GAME_ISSERVER | GAME_CONNECTED)))
+               me.close(me);
+
        if(me.serverinfo_MOTD == "" && gamestatus & (GAME_CONNECTED | GAME_ISSERVER))
        {
                // if serverinfo_MOTD is empty while connected it means we are connected to an old server
index d9585768d9fc2f7a606582d4566f67e642d119ce..79b3a96924754bf066ef762b7d602c03faa9ca8b 100644 (file)
@@ -243,7 +243,11 @@ void bot_setnameandstuff(entity this)
        else bot_pants = ftos(floor(random() * 15));
 
        if (teamplay && !(autocvar_bot_vs_human && AvailableTeams() == 2))
+       {
                this.bot_forced_team = stof(argv(5));
+               if (!Team_IsValidIndex(this.bot_forced_team))
+                       this.bot_forced_team = 0;
+       }
        else
                this.bot_forced_team = 0;
 
@@ -448,16 +452,6 @@ void bot_clientconnect(entity this)
                bot_setclientfields(this);
        }
 
-       if (teamplay && Team_IsValidIndex(this.bot_forced_team))
-       {
-               SetPlayerTeam(this, this.bot_forced_team, TEAM_CHANGE_MANUAL);
-       }
-       else
-       {
-               this.bot_forced_team = 0;
-               TeamBalance_JoinBestTeam(this);
-       }
-
        havocbot_setupbot(this);
 }
 
@@ -687,6 +681,7 @@ void bot_serverframe()
        // spectators in the scoreboard and never go away. This issue happens at time 2 if map is changed
        // with the gotomap command, minplayers is > 1 and human clients join as players very soon
        // either intentionally or automatically (sv_spectate 0)
+       // A working workaround for this bug was implemented in commit fbd145044, see entcs_attach
        if (time < 2.5)
        {
                currentbots = -1;
index cab642e67fd9b0f8e65a3eafedb54800e8cc3927..2e6e9e6b852c84a6b6ffe5bec87524fb59e6a260 100644 (file)
@@ -540,6 +540,9 @@ void PutPlayerInServer(entity this)
        PlayerState_attach(this);
        accuracy_resend(this);
 
+       if (teamplay && this.bot_forced_team)
+               SetPlayerTeam(this, this.bot_forced_team, TEAM_CHANGE_MANUAL);
+
        if (this.team < 0)
                TeamBalance_JoinBestTeam(this);
 
@@ -810,9 +813,7 @@ void PutPlayerInServer(entity this)
 /** Called when a client spawns in the server */
 void PutClientInServer(entity this)
 {
-       if (IS_BOT_CLIENT(this)) {
-               TRANSMUTE(Player, this);
-       } else if (IS_REAL_CLIENT(this)) {
+       if (IS_REAL_CLIENT(this)) {
                msg_entity = this;
                WriteByte(MSG_ONE, SVC_SETVIEW);
                WriteEntity(MSG_ONE, this);
@@ -2269,6 +2270,14 @@ void ObserverOrSpectatorThink(entity this)
                }
        }
 
+       if (IS_BOT_CLIENT(this) && !CS(this).autojoin_checked)
+       {
+               CS(this).autojoin_checked = true;
+               TRANSMUTE(Player, this);
+               PutClientInServer(this);
+               return;
+       }
+
        if (this.flags & FL_JUMPRELEASED) {
                if (PHYS_INPUT_BUTTON_JUMP(this) && (joinAllowed(this) || time < CS(this).jointime + MIN_SPEC_TIME)) {
                        this.flags &= ~FL_JUMPRELEASED;
index 01758efe5e4630e357962b9e9b65b330cb740480..12e130c9e80ddf25aa17ba4da4583762ddcb95bd 100644 (file)
@@ -486,7 +486,13 @@ void ReadyRestart_force(bool is_fake_round_start)
 
 void ReadyRestart(bool forceWarmupEnd)
 {
-       if (MUTATOR_CALLHOOK(ReadyRestart_Deny) || intermission_running || race_completing) localcmd("restart\n");
+       if (MUTATOR_CALLHOOK(ReadyRestart_Deny) || intermission_running || race_completing)
+       {
+               // NOTE: ReadyRestart support is mandatory in campaign
+               if (autocvar_g_campaign)
+                       error("ReadyRestart must be supported in campaign mode!");
+               localcmd("restart\n"); // if ReadyRestart is denied, restart the server
+       }
        else localcmd("\nsv_hook_readyrestart\n");
 
        if(forceWarmupEnd || autocvar_g_campaign)
index f89cf18a0335c284f531de6a385e0bc5ca346a59..1b308d0940de2bcbcfb0ab9a79bcd4c76d06f5e6 100644 (file)
@@ -1,5 +1,7 @@
 #include "gamelog.qh"
-
+#include <server/intermission.qh>    // GetGametype(), GetMapname()
+#include <server/weapons/tracing.qh> // autocvar_g_norecoil
+#include <server/world.qh>           // matchid
 #include <server/main.qh>
 
 string GameLog_ProcessIP(string s)
@@ -41,8 +43,32 @@ void GameLogEcho(string s)
 
 void GameLogInit()
 {
-       logfile_open = false;
-       // will be opened later
+       GameLogEcho(strcat(":gamestart:", GetGametype(), "_", GetMapname(), ":", matchid));
+       string s = ":gameinfo:mutators:LIST";
+
+       MUTATOR_CALLHOOK(BuildMutatorsString, s);
+       s = M_ARGV(0, string);
+
+       // initialiation stuff, not good in the mutator system
+       if(!autocvar_g_use_ammunition)
+               s = strcat(s, ":no_use_ammunition");
+
+       // initialiation stuff, not good in the mutator system
+       if(autocvar_g_pickup_items == 0)
+               s = strcat(s, ":no_pickup_items");
+       if(autocvar_g_pickup_items > 0)
+               s = strcat(s, ":pickup_items");
+
+       // initialiation stuff, not good in the mutator system
+       if(autocvar_g_weaponarena != "0")
+               s = strcat(s, ":", autocvar_g_weaponarena, " arena");
+
+       // TODO to mutator system
+       if(autocvar_g_norecoil)
+               s = strcat(s, ":norecoil");
+
+       GameLogEcho(s);
+       GameLogEcho(":gameinfo:end");
 }
 
 void GameLogClose()
index f96679b819d62eb36629bbaf9e4f9916320205cc..99ac37c3c762e8803b32634363f321db5da7af69 100644 (file)
@@ -9,7 +9,7 @@ string autocvar_sv_eventlog_files_namesuffix;
 bool autocvar_sv_eventlog_files_timestamps;
 bool autocvar_sv_eventlog_ipv6_delimiter = false;
 
-bool logfile_open;
+bool logfile_open = false;
 float logfile;
 
 string GameLog_ProcessIP(string s);
index ed39c7bca91e11fcb3d11d32f590c737379e0355..99c0165fd3a1b51061979bf4ff3fb384ab3bcdd2 100644 (file)
@@ -1094,7 +1094,6 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default
 
        // 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);
 
@@ -1110,6 +1109,8 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default
 
        if(Item_IsLoot(this))
                this.gravity = 1;
+       else
+               this.glowmod = def.m_color;
 
        if(def.instanceOfWeaponPickup)
        {
index 6feb8113233dd0280b964a3b7f7e0687a324b89a..e7f9f897b0fdce206ccae04312aad6bbe17092b1 100644 (file)
@@ -1153,7 +1153,10 @@ MUTATOR_HOOKABLE(ChatMessage, EV_ChatMessage);
     /**/
 MUTATOR_HOOKABLE(ChatMessageTo, EV_ChatMessageTo);
 
-/** return true to just restart the match, for modes that don't support readyrestart */
+/**
+ * return true to restart the server instead of restarting the match, for modes that don't support readyrestart.
+ * NOTE: ReadyRestart support is mandatory in campaign
+ */
 MUTATOR_HOOKABLE(ReadyRestart_Deny, EV_NO_ARGS);
 
 /** called when a fusion reactor is validating its target */
index 4ecda0a9a09732b0411f164b1d4e3c175a729005..545bdad27be16a5595e74692fd9fa750cc3fad26 100644 (file)
@@ -502,6 +502,9 @@ void race_SendTime(entity e, float cp, float t, float tvalid)
                        {
                                CS(e).race_completed = 1;
                                MAKE_INDEPENDENT_PLAYER(e);
+                               if(e.bot_attack)
+                                       IL_REMOVE(g_bot_targets, e);
+                               e.bot_attack = false;
                                Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_RACE_FINISHED, e.netname);
                                ClientData_Touch(e);
                        }
index 178181cbada248a0ee7e55f5da55b8583d09d6ea..2b6ea4881045808340260607aaabd596032a6a5f 100644 (file)
@@ -88,7 +88,7 @@ void ScoreInfo_SetLabel_PlayerScore(PlayerScoreField i, string label, float scor
  * Initialize the scores info for the given number of teams.
  * Set all labels right before this call.
  */
-void ScoreInfo_Init(float teams);
+void ScoreInfo_Init(int teams);
 
 /**
  * Clear ALL scores (for ready-restart).
index 30a2869f399f42b1887a4d7e626364a3f7b81b4e..6a2d65db2075b19a02a74cbba26adf4f47c8d17b 100644 (file)
@@ -152,6 +152,8 @@ void weapon_defaultspawnfunc(entity this, Weapon wpn)
 
        if(!this.owner)
                this.glowmod = wpn.wpcolor;
+       else
+               this.glowmod = colormapPaletteColor(this.owner.clientcolors & 0x0F, true) * 2;
 
        GameItem def = wpn.m_pickup;
        _StartItem(
index 719b5993590891173a572c25584398b7882de4f5..01c6ac0d200634347c27d88ba2631322b8fb7c66 100644 (file)
@@ -49,7 +49,7 @@ float W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vector
        wep.owner = wep.enemy = own;
        wep.flags |= FL_TOSSED;
        wep.colormap = own.colormap;
-       wep.glowmod = weaponentity_glowmod(info, own, own.clientcolors, own.(weaponentity));
+       // wep.glowmod will be set in weapon_defaultspawnfunc
        navigation_dynamicgoal_init(wep, false);
 
        W_DropEvent(wr_drop,own,wpn,wep,weaponentity);
index 7e1333eb875a87002ecafca1edcbb85f5df74106..55195217250186bf498db837ac07b236503f3d1b 100644 (file)
@@ -35,7 +35,6 @@
 #include <server/damage.qh>
 #include <server/gamelog.qh>
 #include <server/hook.qh>
-#include <server/intermission.qh>
 #include <server/ipban.qh>
 #include <server/items/items.qh>
 #include <server/main.qh>
@@ -46,7 +45,6 @@
 #include <server/scores_rules.qh>
 #include <server/spawnpoints.qh>
 #include <server/teamplay.qh>
-#include <server/weapons/common.qh>
 #include <server/weapons/weaponstats.qh>
 
 const float LATENCY_THINKRATE = 10;
@@ -843,46 +841,15 @@ spawnfunc(worldspawn)
 
        WaypointSprite_Init();
 
-       GameLogInit(); // prepare everything
        // NOTE for matchid:
        // changing the logic generating it is okay. But:
        // it HAS to stay <= 64 chars
        // character set: ASCII 33-126 without the following characters: : ; ' " \ $
-       if(autocvar_sv_eventlog)
-       {
-               string num = strftime_s(); // strftime(false, "%s") isn't reliable, see strftime_s description
-               string s = sprintf("%s.%s.%06d", itos(autocvar_sv_eventlog_files_counter), num, floor(random() * 1000000));
-               matchid = strzone(s);
-
-               GameLogEcho(strcat(":gamestart:", GetGametype(), "_", GetMapname(), ":", s));
-               s = ":gameinfo:mutators:LIST";
-
-               MUTATOR_CALLHOOK(BuildMutatorsString, s);
-               s = M_ARGV(0, string);
-
-               // initialiation stuff, not good in the mutator system
-               if(!autocvar_g_use_ammunition)
-                       s = strcat(s, ":no_use_ammunition");
-
-               // initialiation stuff, not good in the mutator system
-               if(autocvar_g_pickup_items == 0)
-                       s = strcat(s, ":no_pickup_items");
-               if(autocvar_g_pickup_items > 0)
-                       s = strcat(s, ":pickup_items");
+       // strftime(false, "%s") isn't reliable, see strftime_s description
+       matchid = strzone(sprintf("%d.%s.%06d", autocvar_sv_eventlog_files_counter, strftime_s(), random() * 1000000));
 
-               // initialiation stuff, not good in the mutator system
-               if(autocvar_g_weaponarena != "0")
-                       s = strcat(s, ":", autocvar_g_weaponarena, " arena");
-
-               // TODO to mutator system
-               if(autocvar_g_norecoil)
-                       s = strcat(s, ":norecoil");
-
-               GameLogEcho(s);
-               GameLogEcho(":gameinfo:end");
-       }
-       else
-               matchid = strzone(ftos(random()));
+       if(autocvar_sv_eventlog)
+               GameLogInit(); // requires matchid to be set
 
        cvar_set("nextmap", "");
 
index 01c3e7450acb74f31d6ba0d6b7012ebf18bd9952..086d9c449fa1d4c5b1251ed2973ccde71ea8bdfc 100644 (file)
@@ -16,6 +16,15 @@ erebusfullbright
        }
 }
 
+megaerebus
+{
+       dpreflectcube cubemaps/default/sky
+       {
+               map textures/megaerebus.tga
+               rgbgen lightingDiffuse
+       }
+}
+
 shadowhead
 {
        dpreflectcube cubemaps/default/sky
@@ -24,3 +33,12 @@ shadowhead
                rgbgen lightingDiffuse
        }
 }
+
+shadowheadfb
+{
+       dpreflectcube cubemaps/default/sky
+       {
+               map textures/shadowheadfb.tga
+               rgbgen lightingDiffuse
+       }
+}
index 81fc6fc58afefcc0f2edc236cded4af6f98339fb..322463a2d663aee1b3b40754f7c8816d3ed9e7e5 100644 (file)
@@ -6,6 +6,7 @@ ignis
                rgbgen lightingDiffuse
        }
 }
+
 ignisfullbright
 {
        dpreflectcube cubemaps/default/sky
@@ -23,3 +24,12 @@ ignishead
                rgbgen lightingDiffuse
        }
 }
+
+ignisheadfb
+{
+       dpreflectcube cubemaps/default/sky
+       {
+               map textures/ignisheadfb.tga
+               rgbgen lightingDiffuse
+       }
+}
index a91959d3663f7d20ae2a3d6c6bdccc43ea360eff..f4f00c6f97409ba06d9f755436aa1208fa5642a2 100644 (file)
Binary files a/textures/erebusfullbright_glow.tga and b/textures/erebusfullbright_glow.tga differ
index 9aee3c18ac244bb629958d4c4e6d988606c2533a..2c54e978312bb292a913f4f738529fa8c73ad944 100644 (file)
Binary files a/textures/erebusfullbright_shirt.tga and b/textures/erebusfullbright_shirt.tga differ
index 946e6b555736fecf36484571862f9444c79dbeae..c956996a8a6a5d3c3afb85bc4b119bf84a697576 100644 (file)
Binary files a/textures/gakarmor_glow.tga and b/textures/gakarmor_glow.tga differ
diff --git a/textures/gakarmor_shirt.tga b/textures/gakarmor_shirt.tga
deleted file mode 100644 (file)
index ce4b6d6..0000000
Binary files a/textures/gakarmor_shirt.tga and /dev/null differ
index e506ce05fd994bbf6242ced5a9fb56485eff5a46..3e519002304f879ec6842eb8cd6d792370478c6d 100644 (file)
Binary files a/textures/gakarmorfb_glow.tga and b/textures/gakarmorfb_glow.tga differ
diff --git a/textures/gakarmorfb_shirt.tga b/textures/gakarmorfb_shirt.tga
deleted file mode 100644 (file)
index ce4b6d6..0000000
Binary files a/textures/gakarmorfb_shirt.tga and /dev/null differ
index edd50b1be4b457e77423f288cb0c2eaf340df376..9aee3c18ac244bb629958d4c4e6d988606c2533a 100644 (file)
Binary files a/textures/gakfullbright_glow.tga and b/textures/gakfullbright_glow.tga differ
index 4f9d05336f56564c68ea9dbdd9fc81851589a681..71b570f168e7ce0dcb57b6f427ad3c38e10887b6 100644 (file)
Binary files a/textures/gakfullbright_shirt.tga and b/textures/gakfullbright_shirt.tga differ
index 768ac8896785298506a16740b2f4eaae7f06893c..bcd9f66eb907a98c80a9b516be5e3c5bbfee1234 100644 (file)
Binary files a/textures/ignis.tga and b/textures/ignis.tga differ
index c9eee49600fb3e8a403aa773ab9675f1ca2efe6e..7bcace5b80249d7e4f6fe4d740ed6c6db8ef64ff 100644 (file)
Binary files a/textures/ignis_glow.tga and b/textures/ignis_glow.tga differ
index 768ac8896785298506a16740b2f4eaae7f06893c..bcd9f66eb907a98c80a9b516be5e3c5bbfee1234 100644 (file)
Binary files a/textures/ignisfullbright.tga and b/textures/ignisfullbright.tga differ
index a010bdf3e9e855f320b8703d909b0b104155eb79..7bcace5b80249d7e4f6fe4d740ed6c6db8ef64ff 100644 (file)
Binary files a/textures/ignisfullbright_glow.tga and b/textures/ignisfullbright_glow.tga differ
index 0a2f7fac551e42f2556242104537618e7191b8bd..f7fbf008171a2bc8a2139622aa8269cf783b4f19 100644 (file)
Binary files a/textures/ignisfullbright_shirt.tga and b/textures/ignisfullbright_shirt.tga differ
index 096b943f39d32f5c415f9d0e7759e9ec8e72469c..c95d1635a2b6206c8ba977b967f3ef4e5d0947d9 100644 (file)
Binary files a/textures/ignishead.tga and b/textures/ignishead.tga differ
index d23f7315bb107dc69a7c90f9ccbb045c08dea950..27aec27140a1fa4db45660b87cbff7695f79b072 100644 (file)
Binary files a/textures/ignishead_glow.tga and b/textures/ignishead_glow.tga differ
diff --git a/textures/ignisheadfb.tga b/textures/ignisheadfb.tga
new file mode 100644 (file)
index 0000000..5cb7c56
Binary files /dev/null and b/textures/ignisheadfb.tga differ
diff --git a/textures/ignisheadfb_gloss.tga b/textures/ignisheadfb_gloss.tga
new file mode 100644 (file)
index 0000000..37bf376
Binary files /dev/null and b/textures/ignisheadfb_gloss.tga differ
diff --git a/textures/ignisheadfb_glow.tga b/textures/ignisheadfb_glow.tga
new file mode 100644 (file)
index 0000000..27aec27
Binary files /dev/null and b/textures/ignisheadfb_glow.tga differ
diff --git a/textures/ignisheadfb_norm.tga b/textures/ignisheadfb_norm.tga
new file mode 100644 (file)
index 0000000..ec4b095
Binary files /dev/null and b/textures/ignisheadfb_norm.tga differ
diff --git a/textures/ignisheadfb_reflect.tga b/textures/ignisheadfb_reflect.tga
new file mode 100644 (file)
index 0000000..2f3fa94
Binary files /dev/null and b/textures/ignisheadfb_reflect.tga differ
diff --git a/textures/ignisheadfb_shirt.tga b/textures/ignisheadfb_shirt.tga
new file mode 100644 (file)
index 0000000..de4034f
Binary files /dev/null and b/textures/ignisheadfb_shirt.tga differ
diff --git a/textures/megaerebus.tga b/textures/megaerebus.tga
new file mode 100644 (file)
index 0000000..2ef8341
Binary files /dev/null and b/textures/megaerebus.tga differ
diff --git a/textures/megaerebus_gloss.tga b/textures/megaerebus_gloss.tga
new file mode 100644 (file)
index 0000000..5004a75
Binary files /dev/null and b/textures/megaerebus_gloss.tga differ
diff --git a/textures/megaerebus_glow.tga b/textures/megaerebus_glow.tga
new file mode 100644 (file)
index 0000000..a91959d
Binary files /dev/null and b/textures/megaerebus_glow.tga differ
diff --git a/textures/megaerebus_norm.tga b/textures/megaerebus_norm.tga
new file mode 100644 (file)
index 0000000..007228b
Binary files /dev/null and b/textures/megaerebus_norm.tga differ
diff --git a/textures/megaerebus_reflect.tga b/textures/megaerebus_reflect.tga
new file mode 100644 (file)
index 0000000..a99f2d6
Binary files /dev/null and b/textures/megaerebus_reflect.tga differ
index ec01e22847e408a3db8cefe5abc7d45eca128010..f4f00c6f97409ba06d9f755436aa1208fa5642a2 100644 (file)
Binary files a/textures/nyxfullbright_glow.tga and b/textures/nyxfullbright_glow.tga differ
index 9aee3c18ac244bb629958d4c4e6d988606c2533a..2c54e978312bb292a913f4f738529fa8c73ad944 100644 (file)
Binary files a/textures/nyxfullbright_shirt.tga and b/textures/nyxfullbright_shirt.tga differ
index 53a46f3a807f13aa61450a36161a6b68b243ccb9..d1073950277c4a18a6a4fdfb68ed805be320ae3a 100644 (file)
Binary files a/textures/pyria_glow.tga and b/textures/pyria_glow.tga differ
index 62ca44604f4d9736719c222be9223426f44df80c..e8e6a47acc29e2b7fdec84e4ddf79d417782fb4e 100644 (file)
Binary files a/textures/pyria_shirt.tga and b/textures/pyria_shirt.tga differ
index ef6f686c6c15fc3250370ecee4e60a719a14906c..a4611f2859127d8a7a8e34d43a0bb7883bebc957 100644 (file)
Binary files a/textures/pyriafullbright_glow.tga and b/textures/pyriafullbright_glow.tga differ
index 62ca44604f4d9736719c222be9223426f44df80c..0e934d6464731b7c0804c414e167bcb9c66ae9a3 100644 (file)
Binary files a/textures/pyriafullbright_shirt.tga and b/textures/pyriafullbright_shirt.tga differ
index aa1f645787227e6815ae01062a259a267a4f4d8f..648d9007641d56f3590404cb7d8daf46ce3e76c0 100644 (file)
Binary files a/textures/shadowhead_shirt.tga and b/textures/shadowhead_shirt.tga differ
diff --git a/textures/shadowheadfb.tga b/textures/shadowheadfb.tga
new file mode 100644 (file)
index 0000000..29893e2
Binary files /dev/null and b/textures/shadowheadfb.tga differ
diff --git a/textures/shadowheadfb_gloss.tga b/textures/shadowheadfb_gloss.tga
new file mode 100644 (file)
index 0000000..2abb3f0
Binary files /dev/null and b/textures/shadowheadfb_gloss.tga differ
diff --git a/textures/shadowheadfb_glow.tga b/textures/shadowheadfb_glow.tga
new file mode 100644 (file)
index 0000000..1e69d82
Binary files /dev/null and b/textures/shadowheadfb_glow.tga differ
diff --git a/textures/shadowheadfb_norm.tga b/textures/shadowheadfb_norm.tga
new file mode 100644 (file)
index 0000000..19dd82c
Binary files /dev/null and b/textures/shadowheadfb_norm.tga differ
diff --git a/textures/shadowheadfb_reflect.tga b/textures/shadowheadfb_reflect.tga
new file mode 100644 (file)
index 0000000..f22a578
Binary files /dev/null and b/textures/shadowheadfb_reflect.tga differ
diff --git a/textures/shadowheadfb_shirt.tga b/textures/shadowheadfb_shirt.tga
new file mode 100644 (file)
index 0000000..f49ef02
Binary files /dev/null and b/textures/shadowheadfb_shirt.tga differ
index ee222f67a02bb8c47d95945abce97afe51782947..aeef8deaf4af0275ca706a5bc2f6514e876c97a2 100644 (file)
Binary files a/textures/umbra_glow.tga and b/textures/umbra_glow.tga differ
index 8d04c364cc12551c79bb65cbf9d313e6150eeae1..2898c6917ed0b681d2d531337bbb9c457719d72d 100644 (file)
Binary files a/textures/umbra_shirt.tga and b/textures/umbra_shirt.tga differ
index 4924c2a988ecf3e60d0f3d0d6df80f5c003e069d..1d32c01e51f2b01e3819feb75d019c0fe58b4004 100644 (file)
Binary files a/textures/umbrafullbright_glow.tga and b/textures/umbrafullbright_glow.tga differ
index 8d04c364cc12551c79bb65cbf9d313e6150eeae1..7555385145b0c80e3d0769034d2efcc253d11baf 100644 (file)
Binary files a/textures/umbrafullbright_shirt.tga and b/textures/umbrafullbright_shirt.tga differ
diff --git a/weapons.cfg b/weapons.cfg
deleted file mode 100644 (file)
index 760337d..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-// TODO: remove after 0.8.2. Default impulse commands for 0.8.1 servers
-alias weapon_blaster "impulse 230"
-alias weapon_shotgun "impulse 231"
-alias weapon_machinegun "impulse 232"
-alias weapon_mortar "impulse 233"
-alias weapon_minelayer "impulse 234"
-alias weapon_electro "impulse 235"
-alias weapon_crylink "impulse 236"
-alias weapon_vortex "impulse 237"
-alias weapon_hagar "impulse 238"
-alias weapon_devastator "impulse 239"
-alias weapon_porto "impulse 240"
-alias weapon_vaporizer "impulse 241"
-alias weapon_hook "impulse 242"
-alias weapon_hlac "impulse 243"
-alias weapon_tuba "impulse 244"
-alias weapon_rifle "impulse 245"
-alias weapon_fireball "impulse 246"
-alias weapon_seeker "impulse 247"
-alias weapon_shockwave "impulse 248"
-alias weapon_arc "impulse 249"
diff --git a/weapons.cfg.sh b/weapons.cfg.sh
deleted file mode 100755 (executable)
index f02d43c..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-<qcsrc/server/w_all.qc perl -ne 'BEGIN{$i=230}/w_(.*?)\./ or+next;printf qq{alias weapon_%s "impulse %d"\n},$1,$i++;'
index 5fc0578874743dc48e3e9009263d10f6b16e385c..7a0dec6890d33f858326018b9a0c59976989ce15 100644 (file)
@@ -386,8 +386,6 @@ alias weapon_group_7 "impulse 7"
 alias weapon_group_8 "impulse 8"
 alias weapon_group_9 "impulse 9"
 alias weapon_group_0 "impulse 14" // cycles the superweapons
-// TODO: remove after 0.8.2. Default impulse commands for 0.8.1 servers
-exec weapons.cfg
 
 cl_curl_enabled 1
 cl_curl_maxdownloads 3