- 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=ee483d75c6507cb8ba0a21a5bf4d50fa
- HASH=$(${ENGINE} -noconfig -nohome +exec serverbench.cfg
| tee /dev/stderr
| grep '^:'
// 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"
// =========
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 400
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 1
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
g_mod_physics Havoc
-// Xonotic Havoc physics (work in progress)
+// Nexuiz Havoc physics (work in progress)
sv_gravity 800
sv_maxspeed 400
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 1
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 1
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 1
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 1
g_teleport_maxspeed 0
+sv_gameplayfix_stepdown_maxspeed 400
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 320
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max_disable_on_ramps 0
g_teleport_maxspeed 0
sv_track_canjump 0
+sv_gameplayfix_stepdown_maxspeed 0
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 1
g_teleport_maxspeed 0
+sv_gameplayfix_stepdown_maxspeed 400
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 1
g_teleport_maxspeed 0
+sv_gameplayfix_stepdown_maxspeed 400
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 1
g_teleport_maxspeed 0
+sv_gameplayfix_stepdown_maxspeed 400
sv_jumpspeedcap_max 0.5
sv_jumpspeedcap_max_disable_on_ramps 1
g_teleport_maxspeed 600
+sv_gameplayfix_stepdown_maxspeed 400
sv_jumpspeedcap_max ""
sv_jumpspeedcap_max_disable_on_ramps 1
g_teleport_maxspeed 0
+sv_gameplayfix_stepdown_maxspeed 400
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;
#include "csqcmodel_hooks.qh"
#include "autocvars.qh"
-#include "csqcmodel_hooks.qh"
#include "miscfunctions.qh"
#include <client/mutators/_mod.qh>
#include "player_skeleton.qh"
int forceplayermodels_goodmodelindex;
.vector glowmod;
-.vector old_glowmod;
void CSQCPlayer_ModelAppearance_PreUpdate(entity this)
{
{
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));
registercvar("cl_multijump", "-1");
+ registercvar("cl_dodging", "0");
+
registercvar("cl_spawn_near_teammate", "1");
registercvar("cl_weapon_switch_reload", "1");
}
else
{
- for (;;)
+ while((s = fgets(fh)))
{
- if (!((s = fgets(fh))))
- break;
-
// catch different sorts of comments
if(s == "") // empty lines
continue;
{
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;
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");
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)
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;
{
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
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);
// 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)
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)
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
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
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"