]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into Mario/pure_entity_fix 820/head
authorMario <mario.mario@y7mail.com>
Tue, 26 May 2020 14:04:38 +0000 (00:04 +1000)
committerMario <mario.mario@y7mail.com>
Tue, 26 May 2020 14:04:38 +0000 (00:04 +1000)
104 files changed:
.gitlab-ci.yml
Makefile
physics.cfg
physicsCPMA.cfg
physicsFruit.cfg
physicsHavoc.cfg
physicsLeeStricklin-ModdedFruit.cfg
physicsLeeStricklin.cfg
physicsLeeStricklinOld.cfg
physicsLzd.cfg
physicsNexuiz10.cfg
physicsNexuiz11.cfg
physicsNexuiz151.cfg
physicsNexuiz151b.cfg
physicsNexuiz16rc1.cfg
physicsNexuiz20.cfg
physicsNexuiz25.cfg
physicsNexuiz26.cfg
physicsNoQWBunny-nexbased.cfg
physicsOverkill.cfg
physicsQ.cfg
physicsQ2.cfg
physicsQ2a.cfg
physicsQ3.cfg
physicsQBF.cfg
physicsQBFplus.cfg
physicsSamual.cfg
physicsWarsow.cfg
physicsWarsowClassicBunny.cfg
physicsWarsowDev.cfg
physicsX.cfg
physicsX010.cfg
physicsX07.cfg
physicsXDF.cfg
physicsXDFLight.cfg
qcsrc/client/autocvars.qh
qcsrc/client/csqcmodel_hooks.qc
qcsrc/client/hud/hud.qh
qcsrc/client/hud/hud_config.qc
qcsrc/client/hud/hud_config.qh
qcsrc/client/hud/panel/ammo.qc
qcsrc/client/hud/panel/centerprint.qc
qcsrc/client/hud/panel/chat.qc
qcsrc/client/hud/panel/engineinfo.qc
qcsrc/client/hud/panel/healtharmor.qc
qcsrc/client/hud/panel/infomessages.qc
qcsrc/client/hud/panel/modicons.qc
qcsrc/client/hud/panel/notify.qc
qcsrc/client/hud/panel/physics.qc
qcsrc/client/hud/panel/powerups.qc
qcsrc/client/hud/panel/pressedkeys.qc
qcsrc/client/hud/panel/quickmenu.qc
qcsrc/client/hud/panel/racetimer.qc
qcsrc/client/hud/panel/radar.qc
qcsrc/client/hud/panel/score.qc
qcsrc/client/hud/panel/scoreboard.qc
qcsrc/client/hud/panel/timer.qc
qcsrc/client/hud/panel/vote.qc
qcsrc/client/hud/panel/weapons.qc
qcsrc/client/main.qc
qcsrc/client/mapvoting.qc
qcsrc/client/mutators/events.qh
qcsrc/common/effects/qc/casings.qc
qcsrc/common/gamemodes/gamemode/clanarena/sv_clanarena.qc
qcsrc/common/mapinfo.qc
qcsrc/common/mapobjects/teleporters.qc
qcsrc/common/minigames/cl_minigames_hud.qc
qcsrc/common/mutators/mutator/buffs/all.inc
qcsrc/common/mutators/mutator/dodging/sv_dodging.qc
qcsrc/common/mutators/mutator/itemstime/itemstime.qc
qcsrc/common/mutators/mutator/nades/nades.qc
qcsrc/common/physics/movetypes/movetypes.qc
qcsrc/common/physics/player.qc
qcsrc/common/physics/player.qh
qcsrc/ecs/systems/cl_physics.qc
qcsrc/ecs/systems/physics.qc
qcsrc/lib/csqcmodel/cl_player.qc
qcsrc/lib/spawnfunc.qh
qcsrc/menu/xonotic/serverlist.qc
qcsrc/server/autocvars.qh
qcsrc/server/campaign.qc
qcsrc/server/client.qc
qcsrc/server/g_world.qc
qcsrc/server/mapvoting.qc
qcsrc/server/race.qc
qcsrc/server/scores.qc
qcsrc/server/spawnpoints.qc
qcsrc/server/spawnpoints.qh
ruleset-XDF.cfg
server.cfg
textures/erebusfullbright_gloss.tga
textures/erebusfullbright_reflect.tga
textures/gib2_gloss.tga [new file with mode: 0644]
textures/gib2_spec.tga [deleted file]
textures/gib3_gloss.tga [new file with mode: 0644]
textures/gib3_spec.tga [deleted file]
textures/gib4_gloss.tga [new file with mode: 0644]
textures/gib4_spec.tga [deleted file]
textures/hagar_gloss.tga [new file with mode: 0644]
textures/hagar_spec.tga [deleted file]
textures/nyxfullbright_gloss.tga
textures/nyxfullbright_reflect.tga
xonotic-client.cfg
xonotic-server.cfg

index 40d5b0b4072e8ea4a690f6060d9cf528c703ca5c..ce1a4192dd6614180a52e3ab8dbb3c8354482609 100644 (file)
@@ -29,7 +29,7 @@ test_sv_game:
     - wget -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints
     - wget -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache
     - make
-    - EXPECT=62fd4d2a4124374b7e0cc1aff445cd88
+    - EXPECT=b06a71529b1664383cc6567fbb3f1257
     - HASH=$(${ENGINE} -noconfig -nohome +exec serverbench.cfg
       | tee /dev/stderr
       | grep '^:'
index bdac716b79444e302668067c6f62c5b8b8b86c71..7507a223cd4c8829b510ecfa476dae8d36c62117 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,9 @@ DIFF ?= diff
 # xonotic build system overrides this by command line argument to turn off the check-cvars step
 XON_BUILDSYSTEM =
 
-all: qc
+.PHONY: all
+all: check-cvars
+       $(MAKE) -C qcsrc all
 
 .PHONY: check-cvars
 check-cvars:
@@ -16,7 +18,7 @@ check-cvars:
 
 .PHONY: qc
 qc: check-cvars
-       $(MAKE) -C qcsrc
+       $(MAKE) -C qcsrc qc
 
 .PHONY: skin
 skin: gfx/menu/default/skinvalues.txt
index 823e85bce3c237bae128e9840a882762f4a6ab88..b74f68b3db4d1c3c341c70216e80765f7c28f8cc 100644 (file)
@@ -7,7 +7,7 @@
 //  Main options
 // ==============
 set g_physics_clientselect 0 "allow clients to select their physics set"
-set g_physics_clientselect_options "xonotic nexuiz quake warsow defrag quake3 vecxis quake2 bones overkill"
+set g_physics_clientselect_options "xonotic nexuiz quake warsow defrag quake3 vecxis quake2 bones"
 set g_physics_clientselect_default "" "override default physics"
 
 // =========
index ca688cd695136b13fb078f1d49325690ded5c2b9..7653219633599d30c41a59530ddcf616bbbc89d9 100644 (file)
@@ -39,3 +39,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 400
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 8c034b8a9010faf99eab9bab51d2f1cd7a662bb5..4fcdcce0fcf66e0211058920a72629d317d58e76 100644 (file)
@@ -37,3 +37,4 @@ sv_jumpspeedcap_max 0.35
 sv_jumpspeedcap_max_disable_on_ramps 1
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index f45a73f14ca2eb09447feb72868eb1abd3861b91..a6598de9988b17d71596e22d2af8b1b544ca65c1 100644 (file)
@@ -1,5 +1,5 @@
 g_mod_physics Havoc
-// Xonotic Havoc physics (work in progress)
+// Nexuiz Havoc physics (work in progress)
 
 sv_gravity 800
 sv_maxspeed 400
@@ -38,3 +38,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index b2c35d086b6cd2241877cf61c879659f35e0a098..9bf0e03abfe9408216ae241d462ae19ccd264981 100644 (file)
@@ -46,3 +46,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index f529ed66dcc993101481bcca323b95948dc40d12..c6ecfd9274acaa863dbfcb02606c83ce24383ee6 100644 (file)
@@ -46,3 +46,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 522c30197186f99c6fa06c6d3164f93e87ec3382..8b48b003c5f140a145d438d38069da626848e070 100644 (file)
@@ -41,3 +41,4 @@ sv_jumpspeedcap_max 0.38
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 0c32adb2ef49436e331559d07bfb793b5a747c43..25a3b704e2b8996684209c333f9f1f18b457d466 100644 (file)
@@ -39,3 +39,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 1f0b8bde150e79bab98a249c31669c6689a57af5..021ba773818d78edc64769d6742c9413e5b73142 100644 (file)
@@ -39,3 +39,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 51ef497e7fcdc61d47f6041898805bca772c743f..7365d1840958052ec5fc7f04aafafc76e6d681dc 100644 (file)
@@ -38,3 +38,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 0dd5b0da2948dcbc8ebb9b32d97c6d80c2b21818..c8503dbedd7ce9522d9a9ddd59e5723c68c20113 100644 (file)
@@ -38,3 +38,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 5b9b21bf6717c88494704ddc4000065130da157d..656df926bbcf7a6695157b1399e740037fa8ab67 100644 (file)
@@ -38,3 +38,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 4bad86850de9b29cab187f76d94296855f8995e5..9519444327291b3248ae13efe53c4a0e76781773 100644 (file)
@@ -38,3 +38,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 531952a36533c992e390871454a511b7cafb0a96..a3aff85db63d0e8ddeef0ee45d0acf5fac6f8fce 100644 (file)
@@ -38,3 +38,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 4de91d19a812122e2659726b1214597770626b38..51811f9c324500134a304399c376f78e22131b54 100644 (file)
@@ -38,3 +38,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 151d360cb6179aac640729e144bfd9e1d9337406..f079f2825a00800fe0e831a94f96fcc65ba50a5e 100644 (file)
@@ -38,3 +38,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 7acc35544a1c4211a6859383d45f37debfaa05a5..063d2e365fb5145bbbbb39d89e680ca2ece86f52 100644 (file)
@@ -47,3 +47,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 67d02a776690aa79e608a8e0680ae32440878412..b40b5a54f7e93292cb2743c1febc55b110a21c06 100644 (file)
@@ -52,3 +52,4 @@ sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
 g_teleport_maxspeed 0
+sv_gameplayfix_stepdown_maxspeed 400
index 4f880c90fc128acd897c7007fb9e60769c81ee31..d0adac13e71e2c94b7b08e6cc2b2c8ea8f90593d 100644 (file)
@@ -39,3 +39,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 4507cc8c86be91d5301ddf55d058135cfc3da87b..7e6e2d6620e5173dc181b524e308002d77fd7c98 100644 (file)
@@ -39,3 +39,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index a515e9be773b5c6d8d21a2cc2a176c1a4c7688dc..55e31256419cfc2fc70322f4a5555143d92a88c1 100644 (file)
@@ -40,3 +40,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 7b650da38e315d166977fc888f52a2937a1d7367..be6c7dd8c2b5ed67a0a71c85ab75a68b6248c1ee 100644 (file)
@@ -39,3 +39,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 320
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 6b210f55b92e61f893298fc23c2dffb35acd79b1..4d7bdfeb5c88a51fb9d02fb40e9aa1433be73ad5 100644 (file)
@@ -38,3 +38,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index e8772b3f3f48037726fb5cfe2397f8a4d8561cff..5ae5720c70fc5e81a1d37ef8d88b23de9b0ab7e1 100644 (file)
@@ -38,3 +38,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 4f22085f9a11d8c1829e2024b4f880f11ceb0347..8c85486045a59c0991aff5a661f97ce81550aa7f 100644 (file)
@@ -38,3 +38,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index c59b8e99e6e4dfc7a7c32fa850a9961368b7d3ff..a89ff6a80f16ae1cb806314306fa04bc7c8a8562 100644 (file)
@@ -39,3 +39,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 05ece9bea6e97d557c8917a05d793aefe939c811..71506511527a73947c552dd867c036b97f3171d7 100644 (file)
@@ -39,3 +39,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 4a272261fe173802e4880874a24975a214475208..bc75e8c6220b820a1d59f084d7247c0c5cbfbdb8 100644 (file)
@@ -39,3 +39,4 @@ sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 0
 g_teleport_maxspeed 0
 sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
index 6076dd73d19702226a4fe2efe3a842c4582a843f..dfe22345c5e4dc6d3157719b006d8256defe3cbd 100644 (file)
@@ -53,3 +53,4 @@ sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
 g_teleport_maxspeed 0
+sv_gameplayfix_stepdown_maxspeed 400
index a5349c98fdfbd4212256335b808f8df22325e2c1..72285355326fb32d76efd5638fdd45adbeb3920d 100644 (file)
@@ -46,3 +46,4 @@ sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
 g_teleport_maxspeed 0
+sv_gameplayfix_stepdown_maxspeed 400
index 61354633d517a6b9d04acc7a0ec66f0fc0ef199f..9fcdb9918bc4becd9bac351f9c8915a3ece8434f 100644 (file)
@@ -52,3 +52,4 @@ sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
 g_teleport_maxspeed 0
+sv_gameplayfix_stepdown_maxspeed 400
index e0bea6a0ea560a17c0c442a280c7293417b84505..d7dd0a50e5f2eb5eeaea9481edb2eb86cf25caec 100644 (file)
@@ -44,3 +44,4 @@ sv_jumpspeedcap_min 0
 sv_jumpspeedcap_max 0.5
 sv_jumpspeedcap_max_disable_on_ramps 1
 g_teleport_maxspeed 600
+sv_gameplayfix_stepdown_maxspeed 400
index f9bed43f6e65096b7edcfa4309e7e969237b2168..3a80e0858eb204c736b4c8ade724a0be121653f9 100644 (file)
@@ -44,3 +44,4 @@ sv_jumpspeedcap_min ""
 sv_jumpspeedcap_max ""
 sv_jumpspeedcap_max_disable_on_ramps 1
 g_teleport_maxspeed 0
+sv_gameplayfix_stepdown_maxspeed 400
index 4c6696cde139325c341095c9f5a612aee0850d60..90bf6fb91ffa0cccbb9ef81320af6047ed59e7ba 100644 (file)
@@ -446,6 +446,7 @@ int autocvar__cl_color;
 int autocvar__cl_playerskin;
 string autocvar__cl_playermodel;
 float autocvar_cl_deathglow;
+float autocvar_cl_deathglow_min = 0.5;
 bool autocvar_developer_csqcentities;
 float autocvar_cl_jetpack_attenuation = 2;
 bool autocvar_cl_showspectators;
index 1272758f76cee3de642322d9ce6ffb2419660e7a..624d997fecd7cc5bb5b51cc83fb106c72755a079 100644 (file)
@@ -1,6 +1,5 @@
 #include "csqcmodel_hooks.qh"
 #include "autocvars.qh"
-#include "csqcmodel_hooks.qh"
 #include "miscfunctions.qh"
 #include <client/mutators/_mod.qh>
 #include "player_skeleton.qh"
@@ -109,7 +108,6 @@ string forceplayermodels_goodmodel;
 int forceplayermodels_goodmodelindex;
 
 .vector glowmod;
-.vector old_glowmod;
 
 void CSQCPlayer_ModelAppearance_PreUpdate(entity this)
 {
@@ -294,16 +292,14 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer)
        {
                if(this.csqcmodel_isdead)
                {
-                       // Fade out to black now...
-                       if(this.old_glowmod == '0 0 0') { this.old_glowmod = this.glowmod; }
-                       this.colormap = 0;
-
-                       this.glowmod = this.old_glowmod * bound(0, 1 - (time - this.death_time) / autocvar_cl_deathglow, 1);
-                       this.glowmod_x = max(this.glowmod.x, 0.0001);
-                       this.glowmod_y = max(this.glowmod.y, 0.0001);
-                       this.glowmod_z = max(this.glowmod.z, 0.0001);
+                       float min_factor = bound(0, autocvar_cl_deathglow_min, 1);
+                       if(this.colormap > 0)
+                               min_factor /= 2;
+                       float glow_fade = bound(0, 1 - (time - this.death_time) / autocvar_cl_deathglow, 1);
+                       this.glowmod *= (min_factor + glow_fade * (1 - min_factor));
+                       if (this.glowmod == '0 0 0')
+                               this.glowmod.x = 0.000001;
                }
-               else if(this.old_glowmod != '0 0 0') { this.old_glowmod = '0 0 0'; }
        }
 
        //printf("CSQCPlayer_ModelAppearance_Apply(): state = %s, colormap = %f, glowmod = %s\n", (this.csqcmodel_isdead ? "DEAD" : "ALIVE"), this.colormap, vtos(this.glowmod));
index d05b04090018a3432bf9b7821bb7077c31d8e9e3..2c12a6150ee560b528fdabb787029b209c80091f 100644 (file)
@@ -14,16 +14,21 @@ REGISTRY(hud_panels, BITS(6))
 #define hud_panels_from(i) _hud_panels_from(i, NULL)
 REGISTER_REGISTRY(hud_panels)
 
-#define REGISTER_HUD_PANEL(id, draw_func, configflags, showflags) \
+#define _REGISTER_HUD_PANEL(id, draw_func, export_func, configflags, showflags) \
        void draw_func(); \
+       void export_func(int fh); \
        REGISTER(hud_panels, HUD_PANEL, id, m_id, new_pure(hud_panel)) { \
                this.panel_id = this.m_id; \
                this.panel_draw = draw_func; \
+               this.panel_export = export_func; \
                this.panel_name = strzone(strtolower(#id)); \
                this.panel_configflags = configflags; \
                this.panel_showflags = showflags; \
        }
 
+#define REGISTER_HUD_PANEL(id, draw_func, configflags, showflags) \
+       _REGISTER_HUD_PANEL(id, draw_func, draw_func##_Export, configflags, showflags)
+
 #define HUD_PANEL(NAME) HUD_PANEL_##NAME
 
 // draw the background/borders
@@ -149,6 +154,7 @@ float panel_bg_padding;
 string panel_bg_padding_str;
 
 classfield(HUDPanel) .void() panel_draw;
+classfield(HUDPanel) .void(int fh) panel_export;
 
 // chat panel can be reduced / moved while the mapvote is active
 // let know the mapvote panel about chat pos and size
index 4b5963cc47f042f7741c6dc42e0c71970fcc3dd6..c4ae095ac3c559c7c3fd67a06084f990f0246e0a 100644 (file)
@@ -7,9 +7,6 @@
 #include <client/miscfunctions.qh>
 #include <client/view.qh>
 
-#define HUD_Write(s) fputs(fh, s)
-#define HUD_Write_Cvar(cvar) HUD_Write(strcat("seta ", cvar, " \"", cvar_string(cvar), "\"\n"))
-#define HUD_Write_PanelCvar(cvar_suf) str = strcat("hud_panel_", panel.panel_name, cvar_suf), HUD_Write_Cvar(str)
 // Save the config
 void HUD_Panel_ExportCfg(string cfgname)
 {
@@ -75,171 +72,9 @@ void HUD_Panel_ExportCfg(string cfgname)
                        HUD_Write_PanelCvar("_bg_alpha");
                        HUD_Write_PanelCvar("_bg_border");
                        HUD_Write_PanelCvar("_bg_padding");
-                       switch(panel) {
-                               case HUD_PANEL_WEAPONS:
-                                       HUD_Write_Cvar("hud_panel_weapons_accuracy");
-                                       HUD_Write_Cvar("hud_panel_weapons_label");
-                                       HUD_Write_Cvar("hud_panel_weapons_label_scale");
-                                       HUD_Write_Cvar("hud_panel_weapons_complainbubble");
-                                       HUD_Write_Cvar("hud_panel_weapons_complainbubble_padding");
-                                       HUD_Write_Cvar("hud_panel_weapons_complainbubble_time");
-                                       HUD_Write_Cvar("hud_panel_weapons_complainbubble_fadetime");
-                                       HUD_Write_Cvar("hud_panel_weapons_complainbubble_color_outofammo");
-                                       HUD_Write_Cvar("hud_panel_weapons_complainbubble_color_donthave");
-                                       HUD_Write_Cvar("hud_panel_weapons_complainbubble_color_unavailable");
-                                       HUD_Write_Cvar("hud_panel_weapons_ammo");
-                                       HUD_Write_Cvar("hud_panel_weapons_ammo_color");
-                                       HUD_Write_Cvar("hud_panel_weapons_ammo_alpha");
-                                       HUD_Write_Cvar("hud_panel_weapons_aspect");
-                                       HUD_Write_Cvar("hud_panel_weapons_timeout");
-                                       HUD_Write_Cvar("hud_panel_weapons_timeout_effect");
-                                       HUD_Write_Cvar("hud_panel_weapons_timeout_fadebgmin");
-                                       HUD_Write_Cvar("hud_panel_weapons_timeout_fadefgmin");
-                                       HUD_Write_Cvar("hud_panel_weapons_timeout_speed_in");
-                                       HUD_Write_Cvar("hud_panel_weapons_timeout_speed_out");
-                                       HUD_Write_Cvar("hud_panel_weapons_onlyowned");
-                                       HUD_Write_Cvar("hud_panel_weapons_orderbyimpulse");
-                                       HUD_Write_Cvar("hud_panel_weapons_noncurrent_alpha");
-                                       HUD_Write_Cvar("hud_panel_weapons_noncurrent_scale");
-                                       HUD_Write_Cvar("hud_panel_weapons_selection_radius");
-                                       HUD_Write_Cvar("hud_panel_weapons_selection_speed");
-                                       break;
-                               case HUD_PANEL_AMMO:
-                                       HUD_Write_Cvar("hud_panel_ammo_onlycurrent");
-                                       HUD_Write_Cvar("hud_panel_ammo_noncurrent_alpha");
-                                       HUD_Write_Cvar("hud_panel_ammo_noncurrent_scale");
-                                       HUD_Write_Cvar("hud_panel_ammo_iconalign");
-                                       HUD_Write_Cvar("hud_panel_ammo_progressbar");
-                                       HUD_Write_Cvar("hud_panel_ammo_progressbar_name");
-                                       HUD_Write_Cvar("hud_panel_ammo_progressbar_xoffset");
-                                       HUD_Write_Cvar("hud_panel_ammo_text");
-                                       break;
-                               case HUD_PANEL_POWERUPS:
-                                       HUD_Write_Cvar("hud_panel_powerups_iconalign");
-                                       HUD_Write_Cvar("hud_panel_powerups_baralign");
-                                       HUD_Write_Cvar("hud_panel_powerups_progressbar");
-                                       HUD_Write_Cvar("hud_panel_powerups_text");
-                                       break;
-                               case HUD_PANEL_HEALTHARMOR:
-                                       HUD_Write_Cvar("hud_panel_healtharmor_combined");
-                                       HUD_Write_Cvar("hud_panel_healtharmor_flip");
-                                       HUD_Write_Cvar("hud_panel_healtharmor_iconalign");
-                                       HUD_Write_Cvar("hud_panel_healtharmor_baralign");
-                                       HUD_Write_Cvar("hud_panel_healtharmor_progressbar");
-                                       HUD_Write_Cvar("hud_panel_healtharmor_progressbar_health");
-                                       HUD_Write_Cvar("hud_panel_healtharmor_progressbar_armor");
-                                       HUD_Write_Cvar("hud_panel_healtharmor_progressbar_gfx");
-                                       HUD_Write_Cvar("hud_panel_healtharmor_progressbar_gfx_smooth");
-                                       HUD_Write_Cvar("hud_panel_healtharmor_text");
-                                       break;
-                               case HUD_PANEL_NOTIFY:
-                                       HUD_Write_Cvar("hud_panel_notify_flip");
-                                       HUD_Write_Cvar("hud_panel_notify_fontsize");
-                                       HUD_Write_Cvar("hud_panel_notify_time");
-                                       HUD_Write_Cvar("hud_panel_notify_fadetime");
-                                       HUD_Write_Cvar("hud_panel_notify_icon_aspect");
-                                       break;
-                               case HUD_PANEL_TIMER:
-                                       break;
-                               case HUD_PANEL_RADAR:
-                                       HUD_Write_Cvar("hud_panel_radar_foreground_alpha");
-                                       HUD_Write_Cvar("hud_panel_radar_rotation");
-                                       HUD_Write_Cvar("hud_panel_radar_zoommode");
-                                       HUD_Write_Cvar("hud_panel_radar_scale");
-                                       HUD_Write_Cvar("hud_panel_radar_maximized_scale");
-                                       HUD_Write_Cvar("hud_panel_radar_maximized_size");
-                                       HUD_Write_Cvar("hud_panel_radar_maximized_rotation");
-                                       HUD_Write_Cvar("hud_panel_radar_maximized_zoommode");
-                                       break;
-                               case HUD_PANEL_SCORE:
-                                       HUD_Write_Cvar("hud_panel_score_rankings");
-                                       break;
-                               case HUD_PANEL_VOTE:
-                                       HUD_Write_Cvar("hud_panel_vote_alreadyvoted_alpha");
-                                       break;
-                               case HUD_PANEL_MODICONS:
-                                       HUD_Write_Cvar("hud_panel_modicons_ca_layout");
-                                       HUD_Write_Cvar("hud_panel_modicons_dom_layout");
-                                       HUD_Write_Cvar("hud_panel_modicons_freezetag_layout");
-                                       break;
-                               case HUD_PANEL_PRESSEDKEYS:
-                                       HUD_Write_Cvar("hud_panel_pressedkeys_aspect");
-                                       HUD_Write_Cvar("hud_panel_pressedkeys_attack");
-                                       break;
-                               case HUD_PANEL_ENGINEINFO:
-                                       HUD_Write_Cvar("hud_panel_engineinfo_framecounter_time");
-                                       HUD_Write_Cvar("hud_panel_engineinfo_framecounter_decimals");
-                                       break;
-                               case HUD_PANEL_INFOMESSAGES:
-                                       HUD_Write_Cvar("hud_panel_infomessages_flip");
-                                       break;
-                               case HUD_PANEL_PHYSICS:
-                                       HUD_Write_Cvar("hud_panel_physics_speed_unit_show");
-                                       HUD_Write_Cvar("hud_panel_physics_speed_max");
-                                       HUD_Write_Cvar("hud_panel_physics_speed_vertical");
-                                       HUD_Write_Cvar("hud_panel_physics_topspeed");
-                                       HUD_Write_Cvar("hud_panel_physics_topspeed_time");
-                                       HUD_Write_Cvar("hud_panel_physics_acceleration_max");
-                                       HUD_Write_Cvar("hud_panel_physics_acceleration_vertical");
-                                       HUD_Write_Cvar("hud_panel_physics_flip");
-                                       HUD_Write_Cvar("hud_panel_physics_baralign");
-                                       HUD_Write_Cvar("hud_panel_physics_progressbar");
-                                       HUD_Write_Cvar("hud_panel_physics_acceleration_progressbar_mode");
-                                       HUD_Write_Cvar("hud_panel_physics_acceleration_progressbar_scale");
-                                       HUD_Write_Cvar("hud_panel_physics_acceleration_progressbar_nonlinear");
-                                       HUD_Write_Cvar("hud_panel_physics_text");
-                                       HUD_Write_Cvar("hud_panel_physics_text_scale");
-                                       break;
-                               case HUD_PANEL_CENTERPRINT:
-                                       HUD_Write_Cvar("hud_panel_centerprint_align");
-                                       HUD_Write_Cvar("hud_panel_centerprint_flip");
-                                       HUD_Write_Cvar("hud_panel_centerprint_fontscale");
-                                       HUD_Write_Cvar("hud_panel_centerprint_fontscale_bold");
-                                       HUD_Write_Cvar("hud_panel_centerprint_time");
-                                       HUD_Write_Cvar("hud_panel_centerprint_fade_in");
-                                       HUD_Write_Cvar("hud_panel_centerprint_fade_out");
-                                       HUD_Write_Cvar("hud_panel_centerprint_fade_subsequent");
-                                       HUD_Write_Cvar("hud_panel_centerprint_fade_subsequent_passone");
-                                       HUD_Write_Cvar("hud_panel_centerprint_fade_subsequent_passone_minalpha");
-                                       HUD_Write_Cvar("hud_panel_centerprint_fade_subsequent_passtwo");
-                                       HUD_Write_Cvar("hud_panel_centerprint_fade_subsequent_passtwo_minalpha");
-                                       HUD_Write_Cvar("hud_panel_centerprint_fade_subsequent_minfontsize");
-                                       HUD_Write_Cvar("hud_panel_centerprint_fade_minfontsize");
-                                       break;
-                               case HUD_PANEL_ITEMSTIME:
-                                       HUD_Write_Cvar("hud_panel_itemstime_iconalign");
-                                       HUD_Write_Cvar("hud_panel_itemstime_progressbar");
-                                       HUD_Write_Cvar("hud_panel_itemstime_progressbar_name");
-                                       HUD_Write_Cvar("hud_panel_itemstime_progressbar_reduced");
-                                       HUD_Write_Cvar("hud_panel_itemstime_text");
-                                       HUD_Write_Cvar("hud_panel_itemstime_ratio");
-                                       HUD_Write_Cvar("hud_panel_itemstime_dynamicsize");
-                                       break;
-                               case HUD_PANEL_MAPVOTE:
-                                       HUD_Write_Cvar("hud_panel_mapvote_highlight_border");
-                                       break;
-                               case HUD_PANEL_QUICKMENU:
-                                       HUD_Write_Cvar("hud_panel_quickmenu_align");
-                                       break;
-                               case HUD_PANEL_SCOREBOARD:
-                                       HUD_Write_Cvar("hud_panel_scoreboard_fadeinspeed");
-                                       HUD_Write_Cvar("hud_panel_scoreboard_fadeoutspeed");
-                                       HUD_Write_Cvar("hud_panel_scoreboard_respawntime_decimals");
-                                       HUD_Write_Cvar("hud_panel_scoreboard_table_bg_alpha");
-                                       HUD_Write_Cvar("hud_panel_scoreboard_table_bg_scale");
-                                       HUD_Write_Cvar("hud_panel_scoreboard_table_fg_alpha");
-                                       HUD_Write_Cvar("hud_panel_scoreboard_table_fg_alpha_self");
-                                       HUD_Write_Cvar("hud_panel_scoreboard_table_highlight");
-                                       HUD_Write_Cvar("hud_panel_scoreboard_table_highlight_alpha");
-                                       HUD_Write_Cvar("hud_panel_scoreboard_table_highlight_alpha_self");
-                                       HUD_Write_Cvar("hud_panel_scoreboard_bg_teams_color_team");
-                                       HUD_Write_Cvar("hud_panel_scoreboard_accuracy_doublerows");
-                                       HUD_Write_Cvar("hud_panel_scoreboard_accuracy_nocolors");
-                                       break;
-                       }
+                       panel.panel_export(fh);
                        HUD_Write("\n");
                }
-               MUTATOR_CALLHOOK(HUD_WriteCvars, fh);
 
                HUD_Write("menu_sync\n"); // force the menu to reread the cvars, so that the dialogs are updated
 
index d91fe370e1d997cd213e661dfeb69adb63ab6312..f3f3d8b009da75d4b0e2839548557ce73a205b96 100644 (file)
@@ -27,3 +27,7 @@ float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary);
 void HUD_Panel_EnableMenu();
 
 void HUD_Panel_FirstInDrawQ(float id);
+
+#define HUD_Write(s) fputs(fh, s)
+#define HUD_Write_Cvar(cvar) HUD_Write(strcat("seta ", cvar, " \"", cvar_string(cvar), "\"\n"))
+#define HUD_Write_PanelCvar(cvar_suf) str = strcat("hud_panel_", panel.panel_name, cvar_suf), HUD_Write_Cvar(str)
index 95ceced82c74d7ca6a39adc2084de9e950c85a2c..5abbbf036bc4e2c9b1dae289c8595f83fec6e7d0 100644 (file)
 
 // Ammo (#1)
 
+void HUD_Ammo_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_ammo_onlycurrent");
+       HUD_Write_Cvar("hud_panel_ammo_noncurrent_alpha");
+       HUD_Write_Cvar("hud_panel_ammo_noncurrent_scale");
+       HUD_Write_Cvar("hud_panel_ammo_iconalign");
+       HUD_Write_Cvar("hud_panel_ammo_progressbar");
+       HUD_Write_Cvar("hud_panel_ammo_progressbar_name");
+       HUD_Write_Cvar("hud_panel_ammo_progressbar_xoffset");
+       HUD_Write_Cvar("hud_panel_ammo_text");
+}
+
 void DrawNadeProgressBar(vector myPos, vector mySize, float progress, vector color)
 {
        HUD_Panel_DrawProgressBar(
index 446a64ec65649c7266c890f56fdc803f366dec72..2f5aab5ed9f49b021e57db2a9fa0ee73f23a6525 100644 (file)
@@ -6,6 +6,26 @@
 #include <client/miscfunctions.qh>
 
 // CenterPrint (#16)
+
+void HUD_CenterPrint_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_centerprint_align");
+       HUD_Write_Cvar("hud_panel_centerprint_flip");
+       HUD_Write_Cvar("hud_panel_centerprint_fontscale");
+       HUD_Write_Cvar("hud_panel_centerprint_fontscale_bold");
+       HUD_Write_Cvar("hud_panel_centerprint_time");
+       HUD_Write_Cvar("hud_panel_centerprint_fade_in");
+       HUD_Write_Cvar("hud_panel_centerprint_fade_out");
+       HUD_Write_Cvar("hud_panel_centerprint_fade_subsequent");
+       HUD_Write_Cvar("hud_panel_centerprint_fade_subsequent_passone");
+       HUD_Write_Cvar("hud_panel_centerprint_fade_subsequent_passone_minalpha");
+       HUD_Write_Cvar("hud_panel_centerprint_fade_subsequent_passtwo");
+       HUD_Write_Cvar("hud_panel_centerprint_fade_subsequent_passtwo_minalpha");
+       HUD_Write_Cvar("hud_panel_centerprint_fade_subsequent_minfontsize");
+       HUD_Write_Cvar("hud_panel_centerprint_fade_minfontsize");
+}
+
 // These are the functions that draw the text at the center of the screen (e.g. frag messages and server MOTDs).
 // Usually local_notification_centerprint_generic() is called, which in turn calls centerprint_generic(), which
 // uses some kind of macro magic to call HUD_CenterPrint, which draws them on screen using drawcolorcodedstring().
index 5f309d0b0224bd4c019f9f4d51b29a9f851368a9..78cc6a0ef9066ae8291d52d3f0ea7f34a49b0c34 100644 (file)
@@ -6,6 +6,11 @@
 
 // Chat (#12)
 
+void HUD_Chat_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+}
+
 void HUD_Chat()
 {
        if(!autocvar__hud_configure)
index ed7966c16ea1431fe0bfcbdeab2f2386f96897cb..908aa1defe7c68e76df489e0238fbaab3a62bf11 100644 (file)
@@ -5,6 +5,13 @@
 
 // Engine info (#13)
 
+void HUD_EngineInfo_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_engineinfo_framecounter_time");
+       HUD_Write_Cvar("hud_panel_engineinfo_framecounter_decimals");
+}
+
 float prevfps;
 float prevfps_time;
 int framecounter;
index 1a61a96d3d1c90bad00b39a7f0fa79ddf9a181c8..b1a9311939e33ea9f368f15baef17a441045331f 100644 (file)
@@ -7,6 +7,21 @@
 
 // Health/armor (#3)
 
+void HUD_HealthArmor_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_healtharmor_combined");
+       HUD_Write_Cvar("hud_panel_healtharmor_flip");
+       HUD_Write_Cvar("hud_panel_healtharmor_iconalign");
+       HUD_Write_Cvar("hud_panel_healtharmor_baralign");
+       HUD_Write_Cvar("hud_panel_healtharmor_progressbar");
+       HUD_Write_Cvar("hud_panel_healtharmor_progressbar_health");
+       HUD_Write_Cvar("hud_panel_healtharmor_progressbar_armor");
+       HUD_Write_Cvar("hud_panel_healtharmor_progressbar_gfx");
+       HUD_Write_Cvar("hud_panel_healtharmor_progressbar_gfx_smooth");
+       HUD_Write_Cvar("hud_panel_healtharmor_text");
+}
+
 void HUD_HealthArmor()
 {
        int armor, health, fuel, air_time;
index 131d62efe921129071db68a515723bf45cf0c69f..363465dfb77ff4723ac42c4a258c9864dae0d9b2 100644 (file)
@@ -8,6 +8,12 @@
 
 // Info messages (#14)
 
+void HUD_InfoMessages_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_infomessages_flip");
+}
+
 float autocvar_hud_panel_infomessages_group0 = 1;
 float autocvar_hud_panel_infomessages_group_fadetime = 0.4;
 float autocvar_hud_panel_infomessages_group_time = 6;
index 18ec37d47e78f8df34789593c97cc8c4864d21dc..0a8b8cf5ed18f8d6815c02a194130fd37b15e5a6 100644 (file)
@@ -9,6 +9,14 @@
 
 // Mod icons (#10)
 
+void HUD_ModIcons_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_modicons_ca_layout");
+       HUD_Write_Cvar("hud_panel_modicons_dom_layout");
+       HUD_Write_Cvar("hud_panel_modicons_freezetag_layout");
+}
+
 void DrawCAItem(vector myPos, vector mySize, float aspect_ratio, int layout, int i)
 {
        TC(int, layout); TC(int, i);
index 82690bee73a3d494a84a69762f7749f75806ce49..bfb23bf2c7e6bf2183bf092d09b55964958226f1 100644 (file)
@@ -5,6 +5,16 @@
 
 // Notifications (#4)
 
+void HUD_Notify_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_notify_flip");
+       HUD_Write_Cvar("hud_panel_notify_fontsize");
+       HUD_Write_Cvar("hud_panel_notify_time");
+       HUD_Write_Cvar("hud_panel_notify_fadetime");
+       HUD_Write_Cvar("hud_panel_notify_icon_aspect");
+}
+
 void HUD_Notify_Push(string icon, string attacker, string victim)
 {
        if (icon == "")
index aa77690a6a4a23ee36aa39548511289239ab8ad1..a451f924b029d386b86365fa50d2fdb610bbc9a2 100644 (file)
@@ -9,6 +9,26 @@
 
 // Physics (#15)
 
+void HUD_Physics_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_physics_speed_unit_show");
+       HUD_Write_Cvar("hud_panel_physics_speed_max");
+       HUD_Write_Cvar("hud_panel_physics_speed_vertical");
+       HUD_Write_Cvar("hud_panel_physics_topspeed");
+       HUD_Write_Cvar("hud_panel_physics_topspeed_time");
+       HUD_Write_Cvar("hud_panel_physics_acceleration_max");
+       HUD_Write_Cvar("hud_panel_physics_acceleration_vertical");
+       HUD_Write_Cvar("hud_panel_physics_flip");
+       HUD_Write_Cvar("hud_panel_physics_baralign");
+       HUD_Write_Cvar("hud_panel_physics_progressbar");
+       HUD_Write_Cvar("hud_panel_physics_acceleration_progressbar_mode");
+       HUD_Write_Cvar("hud_panel_physics_acceleration_progressbar_scale");
+       HUD_Write_Cvar("hud_panel_physics_acceleration_progressbar_nonlinear");
+       HUD_Write_Cvar("hud_panel_physics_text");
+       HUD_Write_Cvar("hud_panel_physics_text_scale");
+}
+
 vector acc_prevspeed;
 float acc_prevtime, acc_avg, top_speed, top_speed_time;
 float physics_update_time, discrete_speed, discrete_acceleration;
index 49b7a97018c0071d4170e06fe43e8bd274d7d905..1662415edda0e77e51cbea992f25cbbb54ec96ff 100644 (file)
@@ -7,6 +7,15 @@
 
 // Powerups (#2)
 
+void HUD_Powerups_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_powerups_iconalign");
+       HUD_Write_Cvar("hud_panel_powerups_baralign");
+       HUD_Write_Cvar("hud_panel_powerups_progressbar");
+       HUD_Write_Cvar("hud_panel_powerups_text");
+}
+
 // Powerup item fields (reusing existing fields)
 .string message;  // Human readable name
 .string netname;  // Icon name
index 3c87a1c1d58ebd259491f3988d6d6a92b5d0386d..73bd583bcd5b44b85d62c3dc45b6f1457c299346 100644 (file)
@@ -6,6 +6,13 @@
 
 // Pressed keys (#11)
 
+void HUD_PressedKeys_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_pressedkeys_aspect");
+       HUD_Write_Cvar("hud_panel_pressedkeys_attack");
+}
+
 void HUD_PressedKeys()
 {
        if(!autocvar__hud_configure)
index a0bd8727a99d271004951553a1d1653f0213cd91..66ee555b43910b1472ba1b59555741972c90f176 100644 (file)
 
 // QuickMenu (#23)
 
+void HUD_QuickMenu_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_quickmenu_align");
+}
+
 // QUICKMENU_MAXLINES must be <= 10
 const int QUICKMENU_MAXLINES = 10;
 // visible entries are loaded from QuickMenu_Buffer into QuickMenu_Page_* arrays
index 281b2377ff10e839439cd83f002a5ef6ebf93130..cd0b26e0bd7af067bd797092e82f045b20b796dc 100644 (file)
@@ -5,7 +5,12 @@
 #include <client/miscfunctions.qh>
 #include <common/mapinfo.qh>
 
-// Race timer (#6)
+// Race timer (#8)
+
+void HUD_RaceTimer_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+}
 
 // return the string of the onscreen race timer
 string MakeRaceString(int cp, float mytime, float theirtime, float othertime, float lapdelta, string theirname)
index 612dc12e98ada6183ca03d1ed8712f63f8ae0aaa..b75b36d33fbd632bda6c81609e76bd2b2fb1cbfe 100644 (file)
 
 // Radar (#6)
 
+void HUD_Radar_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_radar_foreground_alpha");
+       HUD_Write_Cvar("hud_panel_radar_rotation");
+       HUD_Write_Cvar("hud_panel_radar_zoommode");
+       HUD_Write_Cvar("hud_panel_radar_scale");
+       HUD_Write_Cvar("hud_panel_radar_maximized_scale");
+       HUD_Write_Cvar("hud_panel_radar_maximized_size");
+       HUD_Write_Cvar("hud_panel_radar_maximized_rotation");
+       HUD_Write_Cvar("hud_panel_radar_maximized_zoommode");
+}
+
 bool HUD_Radar_Clickable()
 {
        return hud_panel_radar_mouse && !hud_panel_radar_temp_hidden;
index 525bf614b8be11e0cd01c075ec857b61c2937090..10aec79ff6939f663dea3139994111e894a21f8c 100644 (file)
 
 // Score (#7)
 
+void HUD_Score_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_score_rankings");
+}
+
 void HUD_Score_Rankings(vector pos, vector mySize, entity me)
 {
        float score;
index 08a1a73bb0977148aa8174f48ef67d836aad4ded..962759011a9e3d2b13e9f5e69d228f1e0cb75a6d 100644 (file)
 
 // Scoreboard (#24)
 
+void Scoreboard_Draw_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_scoreboard_fadeinspeed");
+       HUD_Write_Cvar("hud_panel_scoreboard_fadeoutspeed");
+       HUD_Write_Cvar("hud_panel_scoreboard_respawntime_decimals");
+       HUD_Write_Cvar("hud_panel_scoreboard_table_bg_alpha");
+       HUD_Write_Cvar("hud_panel_scoreboard_table_bg_scale");
+       HUD_Write_Cvar("hud_panel_scoreboard_table_fg_alpha");
+       HUD_Write_Cvar("hud_panel_scoreboard_table_fg_alpha_self");
+       HUD_Write_Cvar("hud_panel_scoreboard_table_highlight");
+       HUD_Write_Cvar("hud_panel_scoreboard_table_highlight_alpha");
+       HUD_Write_Cvar("hud_panel_scoreboard_table_highlight_alpha_self");
+       HUD_Write_Cvar("hud_panel_scoreboard_bg_teams_color_team");
+       HUD_Write_Cvar("hud_panel_scoreboard_accuracy_doublerows");
+       HUD_Write_Cvar("hud_panel_scoreboard_accuracy_nocolors");
+}
+
 const int MAX_SBT_FIELDS = MAX_SCORE;
 
 PlayerScoreField sbt_field[MAX_SBT_FIELDS + 1];
index e01aa751757e3087b25038cdac422e6b162c4049..8bb4ade6a17f49aca0f69be10c5ffa303069af2f 100644 (file)
@@ -6,6 +6,11 @@
 
 // Timer (#5)
 
+void HUD_Timer_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+}
+
 void HUD_Timer()
 {
        if(!autocvar__hud_configure)
index 0337eccfc215cac966713dd4602018548129b935..4aab1b93bb520315148e1574e95ccf1b8d111bf2 100644 (file)
@@ -7,6 +7,12 @@
 
 // Vote (#9)
 
+void HUD_Vote_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_vote_alreadyvoted_alpha");
+}
+
 void HUD_Vote()
 {
        if(autocvar_cl_allow_uid2name == -1 && (ISGAMETYPE(CTS) || ISGAMETYPE(RACE) || (serverflags & SERVERFLAG_PLAYERSTATS)))
index 8668886a91282da36356f92d9577a8fdfffa9601..f7444daaa3572cd063eaa62f454430f8ef353db0 100644 (file)
@@ -8,6 +8,35 @@
 
 // Weapons (#0)
 
+void HUD_Weapons_Export(int fh)
+{
+       HUD_Write_Cvar("hud_panel_weapons_accuracy");
+       HUD_Write_Cvar("hud_panel_weapons_label");
+       HUD_Write_Cvar("hud_panel_weapons_label_scale");
+       HUD_Write_Cvar("hud_panel_weapons_complainbubble");
+       HUD_Write_Cvar("hud_panel_weapons_complainbubble_padding");
+       HUD_Write_Cvar("hud_panel_weapons_complainbubble_time");
+       HUD_Write_Cvar("hud_panel_weapons_complainbubble_fadetime");
+       HUD_Write_Cvar("hud_panel_weapons_complainbubble_color_outofammo");
+       HUD_Write_Cvar("hud_panel_weapons_complainbubble_color_donthave");
+       HUD_Write_Cvar("hud_panel_weapons_complainbubble_color_unavailable");
+       HUD_Write_Cvar("hud_panel_weapons_ammo");
+       HUD_Write_Cvar("hud_panel_weapons_ammo_color");
+       HUD_Write_Cvar("hud_panel_weapons_ammo_alpha");
+       HUD_Write_Cvar("hud_panel_weapons_aspect");
+       HUD_Write_Cvar("hud_panel_weapons_timeout");
+       HUD_Write_Cvar("hud_panel_weapons_timeout_effect");
+       HUD_Write_Cvar("hud_panel_weapons_timeout_fadebgmin");
+       HUD_Write_Cvar("hud_panel_weapons_timeout_fadefgmin");
+       HUD_Write_Cvar("hud_panel_weapons_timeout_speed_in");
+       HUD_Write_Cvar("hud_panel_weapons_timeout_speed_out");
+       HUD_Write_Cvar("hud_panel_weapons_onlyowned");
+       HUD_Write_Cvar("hud_panel_weapons_noncurrent_alpha");
+       HUD_Write_Cvar("hud_panel_weapons_noncurrent_scale");
+       HUD_Write_Cvar("hud_panel_weapons_selection_radius");
+       HUD_Write_Cvar("hud_panel_weapons_selection_speed");
+}
+
 entity weaponorder[Weapons_MAX];
 void weaponorder_swap(int i, int j, entity pass)
 {
index 72ee803fa40b0331a930607d0b398f464fac11aa..d6a073a5de91d4798917c424c2f37cc8b3fd70eb 100644 (file)
@@ -138,6 +138,8 @@ void CSQC_Init()
 
        registercvar("cl_multijump", "-1");
 
+       registercvar("cl_dodging", "0");
+
        registercvar("cl_spawn_near_teammate", "1");
 
        registercvar("cl_weapon_switch_reload", "1");
index d0bab24b56d2d1918da0a132275efdd143e348bf..c025bdd4651229ed39d182281ca9f4542b31fb59 100644 (file)
@@ -8,6 +8,13 @@
 
 #include <common/mapinfo.qh>
 
+// MapVote (#21)
+
+void MapVote_Draw_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_mapvote_highlight_border");
+}
 
 int mv_num_maps;
 
index e9778b795ce2e077cb7cef10023712b616743f74..0629c2a9f0dd17a7897c73f6ff68dc818748c4ac 100644 (file)
@@ -170,12 +170,6 @@ MUTATOR_HOOKABLE(DrawScoreboard, EV_NO_ARGS);
        /**/
 MUTATOR_HOOKABLE(DrawInfoMessages, EV_DrawInfoMessages);
 
-/** Called when drawing info messages, allows adding new info messages */
-#define EV_HUD_WriteCvars(i, o) \
-       /** file */                     i(float, MUTATOR_ARGV_0_float) \
-       /**/
-MUTATOR_HOOKABLE(HUD_WriteCvars, EV_HUD_WriteCvars);
-
 /** Called when the view model is being animated (setorigin is called after the hook, so you only need to modify origin here if desired) */
 #define EV_DrawViewModel(i, o) \
        /** entity id */                i(entity, MUTATOR_ARGV_0_entity) \
index 359d3d8a532641c82a189b7d37855d1ec6293b3d..d07557f9ac011be83a17d6cd2aacaa74bce1a1bb 100644 (file)
@@ -62,10 +62,6 @@ void Casing_Draw(entity this)
         //UNSET_ONGROUND(this);
     }
 
-    Movetype_Physics_MatchTicrate(this, autocvar_cl_casings_ticrate, autocvar_cl_casings_sloppy);
-    if (wasfreed(this))
-        return; // deleted by touch function
-
     this.renderflags = 0;
     this.alpha = bound(0, this.cnt - time, 1);
 
@@ -73,7 +69,12 @@ void Casing_Draw(entity this)
     {
         Casing_Delete(this);
         this.drawmask = 0;
+        return;
     }
+
+    Movetype_Physics_MatchTicrate(this, autocvar_cl_casings_ticrate, autocvar_cl_casings_sloppy);
+    //if (wasfreed(this))
+    //    return; // deleted by touch function
 }
 
 SOUND(BRASS1, W_Sound("brass1"));
index 408a14e0d87fbac00a3dfcc11bd6292997149fe3..73d127bd40c707f39a29bcb7f31f0b64afa0e4a2 100644 (file)
@@ -377,6 +377,9 @@ MUTATOR_HOOKFUNCTION(ca, FilterItem)
 
 MUTATOR_HOOKFUNCTION(ca, PlayerDamage_SplitHealthArmor)
 {
+       if (time < game_starttime || (round_handler_IsActive() && !round_handler_IsRoundStarted()))
+               return;
+
        entity frag_attacker = M_ARGV(1, entity);
        entity frag_target = M_ARGV(2, entity);
        float frag_damage = M_ARGV(7, float);
index 257e5e40f185ddc0bf254b9dc11d926258365cc2..f771b0f83cfea0d7c2a9545c96ea28f04af00d10 100644 (file)
@@ -671,11 +671,8 @@ void _MapInfo_Parse_Settemp(string pFilename, string acl, float type, string s,
                        }
                        else
                        {
-                               for (;;)
+                               while((s = fgets(fh)))
                                {
-                                       if (!((s = fgets(fh))))
-                                               break;
-
                                        // catch different sorts of comments
                                        if(s == "")                    // empty lines
                                                continue;
index da86cabce89b83c048ed8a99342e07d501dcee2b..987347283fb646e2b73e5569ccceb7d8a97a614f 100644 (file)
@@ -146,9 +146,12 @@ void TeleportPlayer(entity teleporter, entity player, vector to, vector to_angle
 #ifdef SVQC
        if(IS_PLAYER(player))
        {
-               if(tflags & TELEPORT_FLAG_TDEATH)
-                       if(player.takedamage && !IS_DEAD(player) && !g_race && !g_cts && (autocvar_g_telefrags || (tflags & TELEPORT_FLAG_FORCE_TDEATH)))
-                               tdeath(player, teleporter, telefragger, telefragmin, telefragmax);
+               if((tflags & TELEPORT_FLAG_TDEATH) && player.takedamage && !IS_DEAD(player)
+                       && !g_race && !g_cts && (autocvar_g_telefrags || (tflags & TELEPORT_FLAG_FORCE_TDEATH))
+                       && !(round_handler_IsActive() && !round_handler_IsRoundStarted()))
+               {
+                       tdeath(player, teleporter, telefragger, telefragmin, telefragmax);
+               }
 
                // player no longer is on ground
                UNSET_ONGROUND(player);
index fd9e3941e1285daafce81122fecfd8763a29b703..0acdb0da59964e20c6900b5ff4532b953fb35652 100644 (file)
 #include <client/hud/hud_config.qh>
 #include <client/mapvoting.qh>
 
+void HUD_MinigameBoard_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+}
+
+void HUD_MinigameStatus_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+}
+
+void HUD_MinigameHelp_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+}
+
+void HUD_MinigameMenu_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+}
+
 // whether the mouse is over the given panel
 bool HUD_mouse_over(entity somepanel)
 {
index a65532307c1132a56680e3a9988289d276cf38fd..5b53b3d651c2d76e49ac25e6778fc24a781e7fde 100644 (file)
@@ -4,7 +4,8 @@ string Buff_UndeprecateName(string buffname)
     {
         case "ammoregen": return "ammo";
         case "haste": case "scout": return "speed";
-        case "guard": case "revival": case "regen": return "medic";
+        case "guard": return "resistance";
+        case "revival": case "regen": return "medic";
         case "invis": return "invisible";
         case "jumper": return "jump";
         default: return buffname;
@@ -27,7 +28,7 @@ REGISTER_BUFF(RESISTANCE) {
     this.m_color = '0.36 1 0.07';
 }
 BUFF_SPAWNFUNCS(resistance, BUFF_RESISTANCE)
-BUFF_SPAWNFUNC_Q3TA_COMPAT(resistance, BUFF_RESISTANCE)
+BUFF_SPAWNFUNC_Q3TA_COMPAT(guard, BUFF_RESISTANCE)
 
 REGISTER_BUFF(SPEED) {
     this.m_name = _("Speed");
@@ -46,7 +47,6 @@ REGISTER_BUFF(MEDIC) {
     this.m_color = '1 0.12 0';
 }
 BUFF_SPAWNFUNCS(medic, BUFF_MEDIC)
-BUFF_SPAWNFUNC_Q3TA_COMPAT(guard, BUFF_MEDIC)
 BUFF_SPAWNFUNC_Q3TA_COMPAT(regen, BUFF_MEDIC)
 BUFF_SPAWNFUNC_Q3TA_COMPAT(revival, BUFF_MEDIC)
 
index 3651e9aa07286d42db46bc13b430cb869f74cf83..19f8b1046ca9f4acce853f5644012cdec16c2468 100644 (file)
@@ -221,7 +221,8 @@ void PM_dodging(entity this)
        if (!this.dodging_action) return;
 
        // when swimming or dead, no dodging allowed..
-       if (this.waterlevel >= WATERLEVEL_SWIMMING || IS_DEAD(this) || (PHYS_DODGING_CLIENTSELECT && !PHYS_DODGING_ENABLED(this)))
+       bool frozen_dodging = (PHYS_FROZEN(this) && PHYS_DODGING_FROZEN(this));
+       if (this.waterlevel >= WATERLEVEL_SWIMMING || IS_DEAD(this) || (PHYS_DODGING_CLIENTSELECT && !PHYS_DODGING_ENABLED(this) && !frozen_dodging))
        {
                this.dodging_action = 0;
                this.dodging_direction.x = 0;
index 5add006c3d2c6bc7082ff8f7cc59294652f9dcef..78a5624c31b98bf74829377557fa7af956927944 100644 (file)
@@ -185,6 +185,20 @@ MUTATOR_HOOKFUNCTION(itemstime, PlayerSpawn)
 
 #ifdef CSQC
 
+// ItemsTime (#22)
+
+void HUD_ItemsTime_Export(int fh)
+{
+       // allow saving cvars that aesthetically change the panel into hud skin files
+       HUD_Write_Cvar("hud_panel_itemstime_iconalign");
+       HUD_Write_Cvar("hud_panel_itemstime_progressbar");
+       HUD_Write_Cvar("hud_panel_itemstime_progressbar_name");
+       HUD_Write_Cvar("hud_panel_itemstime_progressbar_reduced");
+       HUD_Write_Cvar("hud_panel_itemstime_text");
+       HUD_Write_Cvar("hud_panel_itemstime_ratio");
+       HUD_Write_Cvar("hud_panel_itemstime_dynamicsize");
+}
+
 void DrawItemsTimeItem(vector myPos, vector mySize, float ar, string item_icon, float item_time, bool item_available, float item_availableTime)
 {
     float t = 0;
index 510fcf92e19345ca2d371d574f598af356a849df..9ac33b45bb328a612a395fb74f5a206fd62a7644 100644 (file)
@@ -1,6 +1,7 @@
 #include "nades.qh"
 
 #include "../overkill/okmachinegun.qh"
+#include "../overkill/okshotgun.qh"
 
 #ifdef SVQC
 bool autocvar_g_nades_nade_small;
@@ -670,7 +671,9 @@ void nade_heal_boom(entity this)
 
 void nade_monster_boom(entity this)
 {
-       entity e = spawnmonster(spawn(), this.pokenade_type, 0, this.realowner, this.realowner, this.origin, false, false, 1);
+       entity e = spawn();
+       e.noalign = true; // don't drop to floor
+       e = spawnmonster(e, this.pokenade_type, 0, this.realowner, this.realowner, this.origin, false, false, 1);
 
        if(autocvar_g_nades_pokenade_monster_lifetime > 0)
                e.monster_lifetime = time + autocvar_g_nades_pokenade_monster_lifetime;
@@ -892,7 +895,7 @@ void nade_damage(entity this, entity inflictor, entity attacker, float damage, i
        }
        else if(DEATH_ISWEAPON(deathtype, WEP_MACHINEGUN) || DEATH_ISWEAPON(deathtype, WEP_OVERKILL_MACHINEGUN))
                damage = this.max_health * 0.1;
-       else if(DEATH_ISWEAPON(deathtype, WEP_SHOCKWAVE) || DEATH_ISWEAPON(deathtype, WEP_SHOTGUN)) // WEAPONTODO
+       else if(DEATH_ISWEAPON(deathtype, WEP_SHOCKWAVE) || DEATH_ISWEAPON(deathtype, WEP_SHOTGUN) || DEATH_ISWEAPON(deathtype, WEP_OVERKILL_SHOTGUN)) // WEAPONTODO
        {
                if(!(deathtype & HITTYPE_SECONDARY))
                        damage = this.max_health * 1.15;
index 63aa3dd955716971d60c1c7c794cf7ee5a4ad6b1..7894d14fd856bb1a8e09a4401fd88259ee940320 100644 (file)
@@ -747,7 +747,7 @@ void Movetype_Physics_MatchTicrate(entity this, float tr, bool sloppy)  // SV_Ph
 
        float dt = time - this.move_time;
 
-       int n = max(0, floor(dt / tr));
+       int n = bound(0, floor(dt / tr), 32); // limit the number of frames to 32 (CL_MAX_USERCMDS, using DP_SMALLMEMORY value for consideration of QC's limitations)
        dt -= n * tr;
        this.move_time += n * tr;
 
index cba24ff8e90f2e986ba041f2f8b0597c06b318ae..91073a88e48bd79e0b949120b38857e1243d8e9b 100644 (file)
@@ -163,11 +163,8 @@ void PM_ClientMovement_UpdateStatus(entity this)
             setsize(this, STAT(PL_MIN, this), STAT(PL_MAX, this));
         }
        }
-#ifdef CSQC
 
-       if (IS_ONGROUND(this) || this.velocity.z <= 0 || PHYS_WATERJUMP_TIME(this) <= 0)
-               PHYS_WATERJUMP_TIME(this) = 0;
-#endif
+       _Movetype_CheckWater(this); // needs to be run on the client, might as well use the latest on the server too!
 }
 
 void CPM_PM_Aircontrol(entity this, float dt, vector wishdir, float wishspeed)
@@ -453,11 +450,6 @@ void CheckWaterJump(entity this)
                        this.velocity_z = 225;
                        this.flags |= FL_WATERJUMP;
                        SET_JUMP_HELD(this);
-               #ifdef SVQC
-                       PHYS_TELEPORT_TIME(this) = time + 2;    // safety net
-               #elif defined(CSQC)
-                       PHYS_WATERJUMP_TIME(this) = 2;
-               #endif
                }
        }
 }
@@ -616,27 +608,15 @@ void PM_check_frozen(entity this)
 {
        if (!PHYS_FROZEN(this))
                return;
-       if (PHYS_DODGING_FROZEN(this)
-#ifdef SVQC
-       && IS_REAL_CLIENT(this)
-#endif
-       )
+       if (PHYS_DODGING_FROZEN(this) && IS_CLIENT(this))
        {
-               PHYS_CS(this).movement_x = bound(-5, PHYS_CS(this).movement.x, 5);
-               PHYS_CS(this).movement_y = bound(-5, PHYS_CS(this).movement.y, 5);
-               PHYS_CS(this).movement_z = bound(-5, PHYS_CS(this).movement.z, 5);
+               // bind movement to a very slow speed so dodging can use .movement for directional calculations
+               PHYS_CS(this).movement_x = bound(-2, PHYS_CS(this).movement.x, 2);
+               PHYS_CS(this).movement_y = bound(-2, PHYS_CS(this).movement.y, 2);
+               PHYS_CS(this).movement_z = bound(-2, PHYS_CS(this).movement.z, 2);
        }
        else
                PHYS_CS(this).movement = '0 0 0';
-
-       vector midpoint = ((this.absmin + this.absmax) * 0.5);
-       if (pointcontents(midpoint) == CONTENT_WATER)
-       {
-               this.velocity = this.velocity * 0.5;
-
-               if (pointcontents(midpoint + '0 0 16') == CONTENT_WATER)
-                       this.velocity_z = 200;
-       }
 }
 
 void PM_check_hitground(entity this)
index 97a4224233e3c4c55f9b0a4d0b80b1b50a2e0d07..3237fd43728429d767e9d7d1d5f0a877e3347bbf 100644 (file)
@@ -158,10 +158,6 @@ STATIC_INIT(PHYS_INPUT_BUTTON)
 #define ITEMS_STAT(s)                       ((s).items)
 
 .float teleport_time;
-#define PHYS_TELEPORT_TIME(s)               ((s).teleport_time)
-
-.float waterjump_time;
-#define PHYS_WATERJUMP_TIME(s)               ((s).waterjump_time)
 
 #ifdef CSQC
 
index fa087b5eb48bbb29c78bee163e703ee7e9e60a3a..624e0a9126e8a497272cf0ad2a9c98ec6b26b2eb 100644 (file)
@@ -3,7 +3,6 @@
 void sys_phys_fix(entity this, float dt)
 {
        this.team = myteam + 1; // is this correct?
-       PHYS_WATERJUMP_TIME(this) -= dt;
        this.movement = PHYS_INPUT_MOVEVALUES(this);
        this.items = STAT(ITEMS, this);
        if (!(PHYS_INPUT_BUTTON_JUMP(this))) // !jump
index 41506ec31778f41344218c81b42bf70d8cc711f9..75657c90f268c6f9248377114df942c96fbf1674 100644 (file)
@@ -90,13 +90,8 @@ void sys_phys_update(entity this, float dt)
        if (this.flags & FL_WATERJUMP) {
                this.velocity_x = this.movedir.x;
                this.velocity_y = this.movedir.y;
-               if (this.waterlevel == WATERLEVEL_NONE
-                   || time > PHYS_TELEPORT_TIME(this)
-                   || PHYS_WATERJUMP_TIME(this) <= 0
-                  ) {
+               if (this.waterlevel == WATERLEVEL_NONE) {
                        this.flags &= ~FL_WATERJUMP;
-                       PHYS_TELEPORT_TIME(this) = 0;
-                       PHYS_WATERJUMP_TIME(this) = 0;
                }
        } else if (MUTATOR_CALLHOOK(PM_Physics, this, maxspeed_mod, dt)) {
                // handled
@@ -196,7 +191,7 @@ void sys_phys_simulate(entity this, float dt)
        if (this.com_phys_water) {
                // water jump only in certain situations
                // this mimics quakeworld code
-               if (this.com_in_jump && this.waterlevel == WATERLEVEL_SWIMMING && this.velocity_z >= -180 && !this.viewloc) {
+               if (this.com_in_jump && this.waterlevel == WATERLEVEL_SWIMMING && this.velocity_z >= -180 && !this.viewloc && !PHYS_FROZEN(this)) {
                        vector yawangles = '0 1 0' * this.v_angle.y;
                        vector forward, right, up;
                        MAKE_VECTORS(yawangles, forward, right, up);
@@ -223,13 +218,23 @@ void sys_phys_simulate(entity this, float dt)
            + right * PHYS_CS(this).movement.y
            + '0 0 1' * PHYS_CS(this).movement.z * (this.com_phys_vel_2d ? 0 : 1);
        if (this.com_phys_water) {
-               if (PHYS_INPUT_BUTTON_CROUCH(this)) {
-                       wishvel.z = -PHYS_MAXSPEED(this);
+               if (PHYS_FROZEN(this))
+               {
+                       if(this.waterlevel >= WATERLEVEL_SUBMERGED && this.velocity.z >= -70) // don't change the speed too abruptally
+                               wishvel = '0 0 160'; // resurface
+                       else if(this.waterlevel >= WATERLEVEL_SWIMMING && this.velocity.z > 0)
+                               wishvel = eZ * 1.3 * min(this.velocity.z, 160); // resurface a bit more above the surface
                }
-               if (this.viewloc) {
-                       wishvel.z = -160;    // drift anyway
-               } else if (wishvel == '0 0 0') {
-                       wishvel = '0 0 -60'; // drift towards bottom
+               else
+               {
+                       if (PHYS_INPUT_BUTTON_CROUCH(this)) {
+                               wishvel.z = -PHYS_MAXSPEED(this);
+                       }
+                       if (this.viewloc) {
+                               wishvel.z = -160;    // drift anyway
+                       } else if (wishvel == '0 0 0') {
+                               wishvel = '0 0 -60'; // drift towards bottom
+                       }
                }
        }
        if (this.com_phys_ladder) {
@@ -261,8 +266,7 @@ void sys_phys_simulate(entity this, float dt)
        float wishspeed = min(vlen(wishvel), this.com_phys_vel_max);
 
        if (this.com_phys_air) {
-               if ((IS_SVQC && time >= PHYS_TELEPORT_TIME(this))
-                   ||  (IS_CSQC && PHYS_WATERJUMP_TIME(this) <= 0)) {
+               if (!(this.flags & FL_WATERJUMP)) {
                        // apply air speed limit
                        float airaccelqw = PHYS_AIRACCEL_QW(this);
                        float wishspeed0 = wishspeed;
@@ -323,7 +327,7 @@ void sys_phys_simulate(entity this, float dt)
                if (this.com_phys_water) {
                        wishspeed *= 0.7;
 
-                       //      if (PHYS_WATERJUMP_TIME(this) <= 0) // TODO: use
+                       //      if (!(this.flags & FL_WATERJUMP)) // TODO: use
                        {
                                // water friction
                                float f = 1 - dt * PHYS_FRICTION(this);
@@ -337,7 +341,7 @@ void sys_phys_simulate(entity this, float dt)
                                }
 
                                // holding jump button swims upward slowly
-                               if (this.com_in_jump && !this.viewloc) {
+                               if (this.com_in_jump && !this.viewloc && !PHYS_FROZEN(this)) {
                                        // was:
                                        // lava: 50
                                        // slime: 80
@@ -407,7 +411,7 @@ void sys_phys_simulate(entity this, float dt)
                        return;
                }
 
-               if (IS_CSQC ? PHYS_WATERJUMP_TIME(this) <= 0 : time >= PHYS_TELEPORT_TIME(this)) {
+               if (!(this.flags & FL_WATERJUMP)) {
                        PM_Accelerate(this, dt, wishdir, wishspeed, wishspeed, this.com_phys_acc_rate, 1, 0, 0, 0);
                }
        }
index a5610b3de4024428a748bb7aaf375376d569e827..ef2ca0b9f26b43f35ab02a28030c064b2a8cabee 100644 (file)
@@ -129,7 +129,7 @@ void CSQCPlayer_Physics(entity this)
 {
        if(!autocvar_cl_movement) { return; }
 
-       _Movetype_CheckWater(this); // we apparently need to check water *before* physics so it can use this for water jump
+       //_Movetype_CheckWater(this); // we apparently need to check water *before* physics so it can use this for water jump
 
        vector oldv_angle = this.v_angle;
        vector oldangles = this.angles; // we need to save these, as they're abused by other code
index bcc1f2c693fdc7a14b07f54fbff14f62f36c8c34..8c7911233d8d29400e9900f83d86c55a8477f44c 100644 (file)
@@ -146,6 +146,7 @@ noref bool require_spawnfunc_prefix;
                FIELD_SCALAR(fld, health) \
                FIELD_SCALAR(fld, height) \
                FIELD_SCALAR(fld, impulse) \
+               FIELD_SCALAR(fld, invincible_finished) \
                FIELD_SCALAR(fld, item_pickupsound) \
                FIELD_SCALAR(fld, killtarget) \
                FIELD_SCALAR(fld, lerpfrac) \
@@ -178,6 +179,7 @@ noref bool require_spawnfunc_prefix;
                FIELD_SCALAR(fld, phase) \
                FIELD_SCALAR(fld, platmovetype) \
                FIELD_SCALAR(fld, race_place) \
+               FIELD_SCALAR(fld, strength_finished) \
                FIELD_SCALAR(fld, radius) \
                FIELD_SCALAR(fld, respawntimestart) \
                FIELD_SCALAR(fld, respawntimejitter) \
index b301beafa7d4c377f22463e924444275d1f26064..21278f720cc6e37c1ed13d78dc5eca8280885c33 100644 (file)
@@ -528,10 +528,10 @@ void XonoticServerList_draw(entity me)
        }
        else { me.nItems = gethostcachevalue(SLIST_HOSTCACHEVIEWCOUNT); }
 
-       me.connectButton.disabled = (me.lockedSelectedItem || (me.nItems == 0 && me.ipAddressBox.text == ""));
+       me.connectButton.disabled = (me.ipAddressBox.text == "");
        //me.disconnectButton.disabled = (!(gamestatus & (GAME_ISSERVER | GAME_CONNECTED)));
-       me.infoButton.disabled = (me.lockedSelectedItem || me.nItems == 0 || !owned);
-       me.favoriteButton.disabled = (me.lockedSelectedItem || (me.nItems == 0 && me.ipAddressBox.text == ""));
+       me.infoButton.disabled = !owned;
+       me.favoriteButton.disabled = (me.ipAddressBox.text == "");
 
        bool found = false;
        if(me.lockedSelectedItem)
@@ -745,10 +745,8 @@ void XonoticServerList_resizeNotify(entity me, vector relOrigin, vector relSize,
 }
 void ServerList_Connect_Click(entity btn, entity me)
 {
-       if (me.lockedSelectedItem)
-               return;
-       string sv = (me.ipAddressBox.text != "") ? me.ipAddressBox.text : me.selectedServer;
-       localcmd(sprintf("connect %s\n", sv));
+       if (me.ipAddressBox.text != "")
+               localcmd(sprintf("connect %s\n", me.ipAddressBox.text));
 }
 void ServerList_Favorite_Click(entity btn, entity this)
 {
index 6aa798afb9b8b823f6363a914cde396fb165d55f..79989cc176d1a3e70200cd3fe03f60da91458817 100644 (file)
@@ -159,6 +159,7 @@ bool autocvar_g_maplist_votable_suggestions;
 bool autocvar_g_maplist_votable_suggestions_override_mostrecent;
 float autocvar_g_maplist_votable_timeout;
 bool autocvar_g_maplist_ignore_sizes;
+bool autocvar_g_maplist_sizes_count_maxplayers = true;
 bool autocvar_g_maplist_sizes_count_bots = true;
 int autocvar_g_maxplayers;
 float autocvar_g_maxplayers_spectator_blocktime;
index 336d825a7f58cc2ba4aa99ae1a45d81781293b80..110704f2bbd9b2d80cfba1f6325faa321b53f378 100644 (file)
@@ -124,7 +124,7 @@ void CampaignPreInit()
                {
                        string arg = argv(j);
                        if(arg == "") continue;
-                       _MapInfo_Parse_Settemp(mapname, MAPINFO_SETTEMP_ACL_USER, 0, arg, 0); // no recursion!
+                       _MapInfo_Parse_Settemp(mapname, MAPINFO_SETTEMP_ACL_USER, 0, arg, 1);
                }
        }
 #endif
index cb26ccc1fccc9c08be1bc46a4cf85bcd20842d8a..2f45c06aed9adbab7ebd8d499e1bf4ee3d6e768b 100644 (file)
@@ -1955,6 +1955,8 @@ void Join(entity this)
 
 int GetPlayerLimit()
 {
+       if(g_duel)
+               return 2; // TODO: this workaround is needed since the mutator hook from duel can't be activated before the gametype is loaded (e.g. switching modes via gametype vote screen)
        int player_limit = autocvar_g_maxplayers;
        MUTATOR_CALLHOOK(GetPlayerLimit, player_limit);
        player_limit = M_ARGV(0, int);
index 8f131b745c8782c077e84cfef4641e1b4e12f8b1..8d1b58629cd7374f47eb304db066e8071c36d2d0 100644 (file)
@@ -338,6 +338,8 @@ void cvar_changes_init()
                BADCVAR("g_ctf_flag_glowtrails");
                BADCVAR("g_ctf_dynamiclights");
                BADCVAR("g_ctf_flag_pickup_verbosename");
+               BADPRESUFFIX("g_ctf_flag_", "_model");
+               BADPRESUFFIX("g_ctf_flag_", "_skin");
                BADCVAR("g_domination_point_leadlimit");
                BADCVAR("g_forced_respawn");
                BADCVAR("g_freezetag_point_leadlimit");
@@ -358,6 +360,7 @@ void cvar_changes_init()
                BADCVAR("leadlimit_and_fraglimit");
                BADCVAR("leadlimit_override");
                BADCVAR("pausable");
+               BADCVAR("sv_announcer");
                BADCVAR("sv_checkforpacketsduringsleep");
                BADCVAR("sv_damagetext");
                BADCVAR("sv_db_saveasdump");
@@ -1072,7 +1075,8 @@ bool MapHasRightSize(string map)
        // open map size restriction file
        string opensize_msg = strcat("opensize ", map);
        float fh = fopen(strcat("maps/", map, ".sizes"), FILE_READ);
-       int pcount = player_count;
+       int player_limit = ((autocvar_g_maplist_sizes_count_maxplayers) ? GetPlayerLimit() : 0);
+       int pcount = ((player_limit > 0) ? min(player_count, player_limit) : player_count); // bind it to the player limit so that forced spectators don't influence the limits
        if(!autocvar_g_maplist_sizes_count_bots)
                pcount -= currentbots;
        if(fh >= 0)
@@ -1105,7 +1109,7 @@ string Map_Filename(float position)
 
 void Map_MarkAsRecent(string m)
 {
-       cvar_set("g_maplist_mostrecent", strwords(strcat(m, " ", autocvar_g_maplist_mostrecent), max(0, autocvar_g_maplist_mostrecent_count)));
+       cvar_set("g_maplist_mostrecent", strwords(cons(m, autocvar_g_maplist_mostrecent), max(0, autocvar_g_maplist_mostrecent_count)));
 }
 
 float Map_IsRecent(string m)
index acac831d76a181940782c1b074d7b5e0ef0b3d61..523d32bbcc4f3bcef9f22210e42c10fa5cec38ff 100644 (file)
@@ -726,14 +726,14 @@ bool GameTypeVote_Finished(int pos)
        if(!gametypevote || gametypevote_finished)
                return false;
 
+       localcmd("sv_vote_gametype_hook_all\n");
+       localcmd("sv_vote_gametype_hook_", mapvote_maps[pos], "\n");
+
        if ( !GameTypeVote_SetGametype(GameTypeVote_Type_FromString(mapvote_maps[pos])) )
        {
                LOG_TRACE("Selected gametype is not supported by any map");
        }
 
-       localcmd("sv_vote_gametype_hook_all\n");
-       localcmd("sv_vote_gametype_hook_", mapvote_maps[pos], "\n");
-
        gametypevote_finished = true;
 
        return true;
index 9a12a04866c2c251fdd333725f0a22c4af757fff..32fdbba172faeb67d38f1a14c6f8c46d92e0eded 100644 (file)
@@ -767,7 +767,7 @@ void trigger_race_checkpoint_verify(entity this)
                        // race only (middle of the race)
                        g_race_qualifying = false;
                        pl_race_place = 0;
-                       if (!Spawn_FilterOutBadSpots(this, findchain(classname, "info_player_deathmatch"), 0, false)) {
+                       if (!Spawn_FilterOutBadSpots(this, findchain(classname, "info_player_deathmatch"), 0, false, true)) {
                                error(strcat("Checkpoint ", ftos(i), " misses a spawnpoint with race_place==", ftos(pl_race_place), " (used for respawning in race) - bailing out"));
             }
 
@@ -775,7 +775,7 @@ void trigger_race_checkpoint_verify(entity this)
                                // qualifying only
                                g_race_qualifying = 1;
                                pl_race_place = race_lowest_place_spawn;
-                               if (!Spawn_FilterOutBadSpots(this, findchain(classname, "info_player_deathmatch"), 0, false)) {
+                               if (!Spawn_FilterOutBadSpots(this, findchain(classname, "info_player_deathmatch"), 0, false, true)) {
                                        error(strcat("Checkpoint ", ftos(i), " misses a spawnpoint with race_place==", ftos(pl_race_place), " (used for qualifying) - bailing out"));
                 }
 
@@ -783,7 +783,7 @@ void trigger_race_checkpoint_verify(entity this)
                                g_race_qualifying = 0;
                                for (int p = 1; p <= race_highest_place_spawn; ++p) {
                                        pl_race_place = p;
-                                       if (!Spawn_FilterOutBadSpots(this, findchain(classname, "info_player_deathmatch"), 0, false)) {
+                                       if (!Spawn_FilterOutBadSpots(this, findchain(classname, "info_player_deathmatch"), 0, false, true)) {
                                                error(strcat("Checkpoint ", ftos(i), " misses a spawnpoint with race_place==", ftos(pl_race_place), " (used for initially spawning in race) - bailing out"));
                     }
                                }
@@ -794,7 +794,7 @@ void trigger_race_checkpoint_verify(entity this)
                pl_race_checkpoint = race_NextCheckpoint(0);
                g_race_qualifying = 1;
                pl_race_place = race_lowest_place_spawn;
-               if (!Spawn_FilterOutBadSpots(this, findchain(classname, "info_player_deathmatch"), 0, false)) {
+               if (!Spawn_FilterOutBadSpots(this, findchain(classname, "info_player_deathmatch"), 0, false, true)) {
                        error(strcat("Checkpoint 0 misses a spawnpoint with race_place==", ftos(pl_race_place), " (used for qualifying) - bailing out"));
         }
        } else {
index 69b18ba2a206d8685dd1ef33bf18604007a971fb..12175bb764f036435c1f745c0ac2ddc12fe74777 100644 (file)
@@ -108,8 +108,7 @@ float TeamScore_AddToTeam(int t, float scorefield, float score)
 {
        entity s;
 
-       if(game_stopped || time < game_starttime
-               || (round_handler_IsActive() && !round_handler_IsRoundStarted()))
+       if(game_stopped)
        {
                score = 0;
        }
@@ -338,8 +337,7 @@ float PlayerScore_Add(entity player, PlayerScoreField scorefield, float score)
        bool mutator_returnvalue = MUTATOR_CALLHOOK(AddPlayerScore, scorefield, score, player);
        score = M_ARGV(1, float);
 
-       if((!mutator_returnvalue && game_stopped) || time < game_starttime
-               || (round_handler_IsActive() && !round_handler_IsRoundStarted()))
+       if(!mutator_returnvalue && game_stopped)
        {
                score = 0;
        }
index 5aa81a2a73b0e9ad3fae1304237f863e71c9a2ed..616824bbcbb78b4c0ebe2f2a67cd1ca65d54fc90 100644 (file)
@@ -65,10 +65,16 @@ void spawnpoint_use(entity this, entity actor, entity trigger)
        {
                this.team = actor.team;
                some_spawn_has_been_used = true;
+               this.SendFlags |= 1; // update team on the client side
        }
        //LOG_INFO("spawnpoint was used!\n");
 }
 
+void spawnpoint_reset(entity this)
+{
+       this.SendFlags |= 1; // update team since it was restored during reset
+}
+
 void relocate_spawnpoint(entity this)
 {
     // nudge off the floor
@@ -106,6 +112,7 @@ void relocate_spawnpoint(entity this)
     this.use = spawnpoint_use;
     setthink(this, spawnpoint_think);
     this.nextthink = time + 0.5 + random() * 2; // shouldn't need it for a little second
+    this.reset2 = spawnpoint_reset; // restores team, allows re-sending the spawnpoint
     this.team_saved = this.team;
     IL_PUSH(g_saved_team, this);
     if (!this.cnt)
@@ -215,7 +222,7 @@ spawnfunc(info_player_team4)
 // Returns:
 //   _x: prio (-1 if unusable)
 //   _y: weight
-vector Spawn_Score(entity this, entity spot, float mindist, float teamcheck)
+vector Spawn_Score(entity this, entity spot, float mindist, float teamcheck, bool targetcheck)
 {
        // filter out spots for the wrong team
        if(teamcheck >= 0)
@@ -223,7 +230,7 @@ vector Spawn_Score(entity this, entity spot, float mindist, float teamcheck)
                        return '-1 0 0';
 
        if(race_spawns)
-               if(spot.target == "")
+               if(!spot.target || spot.target == "")
                        return '-1 0 0';
 
        if(IS_REAL_CLIENT(this))
@@ -250,7 +257,7 @@ vector Spawn_Score(entity this, entity spot, float mindist, float teamcheck)
        vector spawn_score = prio * '1 0 0' + shortest * '0 1 0';
 
        // filter out spots for assault
-       if(spot.target && spot.target != "")
+       if(spot.target && spot.target != "" && targetcheck)
        {
                int found = 0;
                for(entity targ = findchain(targetname, spot.target); targ; targ = targ.chain)
@@ -276,21 +283,21 @@ vector Spawn_Score(entity this, entity spot, float mindist, float teamcheck)
        return spawn_score;
 }
 
-void Spawn_ScoreAll(entity this, entity firstspot, float mindist, float teamcheck)
+void Spawn_ScoreAll(entity this, entity firstspot, float mindist, float teamcheck, bool targetcheck)
 {
        entity spot;
        for(spot = firstspot; spot; spot = spot.chain)
-               spot.spawnpoint_score = Spawn_Score(this, spot, mindist, teamcheck);
+               spot.spawnpoint_score = Spawn_Score(this, spot, mindist, teamcheck, targetcheck);
 }
 
-entity Spawn_FilterOutBadSpots(entity this, entity firstspot, float mindist, float teamcheck)
+entity Spawn_FilterOutBadSpots(entity this, entity firstspot, float mindist, float teamcheck, bool targetcheck)
 {
        entity spot, spotlist, spotlistend;
 
        spotlist = NULL;
        spotlistend = NULL;
 
-       Spawn_ScoreAll(this, firstspot, mindist, teamcheck);
+       Spawn_ScoreAll(this, firstspot, mindist, teamcheck, targetcheck);
 
        for(spot = firstspot; spot; spot = spot.chain)
        {
@@ -392,7 +399,23 @@ entity SelectSpawnPoint(entity this, bool anypoint)
        }
        else
        {
-               firstspot = Spawn_FilterOutBadSpots(this, firstspot, 100, teamcheck);
+               firstspot = Spawn_FilterOutBadSpots(this, firstspot, 100, teamcheck, true);
+
+               // emergency fallback! double check without targets
+               // fixes some crashes with improperly repacked maps
+               if(!firstspot)
+               {
+                       firstspot = IL_FIRST(g_spawnpoints);
+                       prev = NULL;
+                       IL_EACH(g_spawnpoints, true,
+                       {
+                               if(prev)
+                                       prev.chain = it;
+                               it.chain = NULL;
+                               prev = it;
+                       });
+                       firstspot = Spawn_FilterOutBadSpots(this, firstspot, 100, teamcheck, false);
+               }
 
                // there is 50/50 chance of choosing a random spot or the furthest spot
                // (this means that roughly every other spawn will be furthest, so you
index 92af8df66fe017167bf2b64a6127235a2e6e2d50..fe6adaebf2cc7fa7ab47c10a530da0b7e907edf8 100644 (file)
@@ -9,7 +9,7 @@ const int SPAWN_PRIO_GOOD_DISTANCE = 10;
 .vector spawnpoint_score;
 float spawnpoint_nag;
 bool SpawnEvent_Send(entity this, entity to, int sf);
-entity Spawn_FilterOutBadSpots(entity this, entity firstspot, float mindist, float teamcheck);
+entity Spawn_FilterOutBadSpots(entity this, entity firstspot, float mindist, float teamcheck, bool targetcheck);
 entity SelectSpawnPoint(entity this, bool anypoint);
 spawnfunc(info_player_deathmatch);
 void spawnpoint_use(entity this, entity actor, entity trigger);
index 668d10484b461c3503188e346606b2827482fdba..683a96e02cf9ec442f1a48f3f3658d9b1e8b57e0 100644 (file)
@@ -13,7 +13,6 @@ g_balance_kill_antispam 0
 g_forced_respawn 1
 // g_playerclip_collisions 0 // do not check playerclips
 g_powerups 0
-g_spawnpoints_auto_move_out_of_solid 1
 g_start_delay 3
 g_use_ammunition 0
 g_weapon_stay 1
index 7b5855f1e36b363c4efccadf6f1f39f4ae5817cf..8862efcc08cec1ca280eb5a8f6040be3be92ad7f 100644 (file)
@@ -1,8 +1,16 @@
 echo
-echo You have not written any server.cfg file yet.
-echo The server will therefore run at default settings.
+echo ^1You have started a dedicated server but have not created
+echo ^1any server.cfg in your config directory.
 echo
-echo For information on how to set up a dedicated server,
-echo look at the files in the server/ subdirectory of your
-echo Xonotic install.
+echo ^1If you are seeing this when just trying to play Xonotic
+echo ^1(not host a server), try the other executables.
 echo
+echo ^1For information on how to set up a dedicated server,
+echo ^1look at the files in the server/ subdirectory of your
+echo ^1Xonotic install.
+echo
+echo ^1Quitting in 5 seconds.
+echo
+
+// see https://gitlab.com/xonotic/xonotic/issues/184
+defer 5 quit
index d2f981933f587b7417401d280cf62dfe1e1c9461..5004a75509c272274f0a64d74c1bbe04809a6a69 100644 (file)
Binary files a/textures/erebusfullbright_gloss.tga and b/textures/erebusfullbright_gloss.tga differ
index 1c26b072cf1d2a514070ce40420523101c0bc1c0..a99f2d6721b41924b80e2cc6b88a8f30bd811526 100644 (file)
Binary files a/textures/erebusfullbright_reflect.tga and b/textures/erebusfullbright_reflect.tga differ
diff --git a/textures/gib2_gloss.tga b/textures/gib2_gloss.tga
new file mode 100644 (file)
index 0000000..1e83337
Binary files /dev/null and b/textures/gib2_gloss.tga differ
diff --git a/textures/gib2_spec.tga b/textures/gib2_spec.tga
deleted file mode 100644 (file)
index 1e83337..0000000
Binary files a/textures/gib2_spec.tga and /dev/null differ
diff --git a/textures/gib3_gloss.tga b/textures/gib3_gloss.tga
new file mode 100644 (file)
index 0000000..1e81d9a
Binary files /dev/null and b/textures/gib3_gloss.tga differ
diff --git a/textures/gib3_spec.tga b/textures/gib3_spec.tga
deleted file mode 100644 (file)
index 1e81d9a..0000000
Binary files a/textures/gib3_spec.tga and /dev/null differ
diff --git a/textures/gib4_gloss.tga b/textures/gib4_gloss.tga
new file mode 100644 (file)
index 0000000..899b220
Binary files /dev/null and b/textures/gib4_gloss.tga differ
diff --git a/textures/gib4_spec.tga b/textures/gib4_spec.tga
deleted file mode 100644 (file)
index 899b220..0000000
Binary files a/textures/gib4_spec.tga and /dev/null differ
diff --git a/textures/hagar_gloss.tga b/textures/hagar_gloss.tga
new file mode 100644 (file)
index 0000000..e44d88b
Binary files /dev/null and b/textures/hagar_gloss.tga differ
diff --git a/textures/hagar_spec.tga b/textures/hagar_spec.tga
deleted file mode 100644 (file)
index e44d88b..0000000
Binary files a/textures/hagar_spec.tga and /dev/null differ
index f3f636dde2b0eff3fd8e49d3ca8c3d97e20feb81..5004a75509c272274f0a64d74c1bbe04809a6a69 100644 (file)
Binary files a/textures/nyxfullbright_gloss.tga and b/textures/nyxfullbright_gloss.tga differ
index 0052c20d690dcf73d05c435f052068b8679fb885..a99f2d6721b41924b80e2cc6b88a8f30bd811526 100644 (file)
Binary files a/textures/nyxfullbright_reflect.tga and b/textures/nyxfullbright_reflect.tga differ
index f1335c9d29b185978c78baa09d773f5f74dd1043..389da6f74cb35b5340e0644530f2ce2291da9bcd 100644 (file)
@@ -228,7 +228,8 @@ seta cl_damageeffect_lifetime 0.1 "how much a damage effect lasts, based on dama
 seta cl_damageeffect_lifetime_min 3 "minimum lifetime a damage effect may have"
 seta cl_damageeffect_lifetime_max 6 "maximum lifetime a damage effect may have"
 
-set cl_deathglow 0.8 "number of seconds during which dead bodies glow out"
+set cl_deathglow 2 "number of seconds during which dead bodies glow out"
+set cl_deathglow_min 0.5 "glow out up to this glow factor"
 
 cl_movement 1
 cl_movement_track_canjump 0
index 4fd599567007c6f55371e22293be76c4cca36ed1..664ec70020b3093c170242db862f668e4c879f6d 100644 (file)
@@ -205,7 +205,7 @@ set g_pickup_respawntime_scaling_linear 1 "Multiply respawn time by `reciprocal
 set g_weaponarena "0" "put in a list of weapons to enable a weapon arena mode, or try \"all\", \"most\", \"all_available\" or \"most_available\" (available only gives the weapon if the map normally has it as a pickup item)"
 set g_weaponarena_random "0" "if set to a number, only that weapon count is given on every spawn (randomly)"
 set g_weaponarena_random_with_blaster "1" "additionally, always provide the blaster in random weapon arena games"
-set g_spawnpoints_auto_move_out_of_solid 0 "if set to 1 you will see a warning if a spawn point was placed inside a solid"
+set g_spawnpoints_auto_move_out_of_solid 1 "show a warning if a spawn point was placed inside a solid, disabling this setting causes such spawn points to be removed and produce a more verbose error message"
 set g_forced_respawn 0 "if set to 1 and a player died, that player gets automatically respawned once <g_respawn_delay> seconds are over"
 set g_fullbrightplayers 0 "brightens up player models (note that the color, skin or model of the players does not change!)"
 set g_fullbrightitems 0 "disables lighting effects on items, making them appear bright for visibility"
@@ -220,6 +220,7 @@ set g_maplist_selectrandom 0 "if 1, a random map will be chosen as next map - DE
 set g_maplist_shuffle 1 "new randomization method: like selectrandom, but avoid playing the same maps in short succession. This works by taking out the first element and inserting it into g_maplist with a bias to the end of the list"
 set g_maplist_check_waypoints 0 "when 1, maps are skipped if there currently are bots, but the map has no waypoints"
 set g_maplist_ignore_sizes 0 "when 1, all maps are shown in the map list regardless of player count"
+set g_maplist_sizes_count_maxplayers 1 "check the player limit when getting the player count so forced spectators don't affect the size restrictions"
 set g_maplist_sizes_count_bots 1 "include the number of bots currently in the server when counting the number of players for size restrictions"
 
 set g_items_mindist 4000 "starting distance for the fading of items"