Skip to content

Commit

Permalink
* fixed/corrected cvar descriptions
Browse files Browse the repository at this point in the history
* avoid double signal fault in signal_handler()
* small QVM fixes
* updated ChangeLog since release
  • Loading branch information
Eugene committed Oct 23, 2022
1 parent 6cd1ee9 commit f3c7c3e
Show file tree
Hide file tree
Showing 17 changed files with 103 additions and 49 deletions.
4 changes: 2 additions & 2 deletions code/client/cl_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -967,10 +967,10 @@ void CL_InitInput( void ) {

cl_maxpackets = Cvar_Get ("cl_maxpackets", "60", CVAR_ARCHIVE );
Cvar_CheckRange( cl_maxpackets, "15", "125", CV_INTEGER );
Cvar_SetDescription( cl_maxpackets, "Set the transmission packet size or how many packets are sent to client. Maximum packet upload rate." );
Cvar_SetDescription( cl_maxpackets, "Set how many client packets are sent to the server per second, can't exceed \\com_maxFPS." );
cl_packetdup = Cvar_Get( "cl_packetdup", "1", CVAR_ARCHIVE_ND );
Cvar_CheckRange( cl_packetdup, "0", "5", CV_INTEGER );
Cvar_SetDescription( cl_packetdup, "Limits the number of duplicate commands allowed per packet." );
Cvar_SetDescription( cl_packetdup, "Limits the number of previous client commands added in packet, helps in packetloss mitigation, increases client command packets size a bit." );

cl_run = Cvar_Get( "cl_run", "1", CVAR_ARCHIVE_ND );
Cvar_SetDescription( cl_run, "Persistent player running movement." );
Expand Down
8 changes: 4 additions & 4 deletions code/client/cl_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -3760,14 +3760,14 @@ static void CL_InitGLimp_Cvars( void )

vid_xpos = Cvar_Get( "vid_xpos", "3", CVAR_ARCHIVE );
Cvar_CheckRange( vid_xpos, NULL, NULL, CV_INTEGER );
Cvar_SetDescription( vid_xpos, "Sets window X-coordinate when windowed, requires \\vid_restart." );
Cvar_SetDescription( vid_xpos, "Saves/sets window X-coordinate when windowed, requires \\vid_restart." );
vid_ypos = Cvar_Get( "vid_ypos", "22", CVAR_ARCHIVE );
Cvar_CheckRange( vid_ypos, NULL, NULL, CV_INTEGER );
Cvar_SetDescription( vid_ypos, "Sets window Y-coordinate when windowed, requires \\vid_restart." );
Cvar_SetDescription( vid_ypos, "Saves/sets window Y-coordinate when windowed, requires \\vid_restart." );

r_noborder = Cvar_Get( "r_noborder", "0", CVAR_ARCHIVE_ND | CVAR_LATCH );
Cvar_CheckRange( r_noborder, "0", "1", CV_INTEGER );
Cvar_SetDescription( r_noborder, "Setting to 0 will remove window borders and titlebar in windowed mode, hold ALT to drag & drop it with opened console." );
Cvar_SetDescription( r_noborder, "Setting to 1 will remove window borders and titlebar in windowed mode, hold ALT to drag & drop it with opened console." );

r_mode = Cvar_Get( "r_mode", "-2", CVAR_ARCHIVE | CVAR_LATCH );
Cvar_CheckRange( r_mode, "-2", va( "%i", s_numVidModes-1 ), CV_INTEGER );
Expand Down Expand Up @@ -3898,7 +3898,7 @@ void CL_Init( void ) {
cl_conXOffset = Cvar_Get ("cl_conXOffset", "0", 0);
Cvar_SetDescription( cl_conXOffset, "Console notifications X-offset." );
cl_conColor = Cvar_Get( "cl_conColor", "", 0 );
Cvar_SetDescription( cl_conColor, "Console background color, set as R G B A values from 0-255." );
Cvar_SetDescription( cl_conColor, "Console background color, set as R G B A values from 0-255, use with \\seta to save in config." );

#ifdef MACOS_X
// In game video is REALLY slow in Mac OS X right now due to driver slowness
Expand Down
2 changes: 1 addition & 1 deletion code/client/snd_dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -1501,7 +1501,7 @@ qboolean S_Base_Init( soundInterface_t *si ) {

s_mixahead = Cvar_Get( "s_mixAhead", "0.2", CVAR_ARCHIVE_ND );
Cvar_CheckRange( s_mixahead, "0.001", "0.5", CV_FLOAT );
Cvar_SetDescription( s_mixahead, "Duration between sound being mixed and played (in seconds). Lower values make sound more responsive, but it may become unstable. Higher values add more delay." );
Cvar_SetDescription( s_mixahead, "Amount of time to pre-mix sound data to avoid potential skips/stuttering in case of unstable framerate. Higher values add more CPU usage." );

s_mixOffset = Cvar_Get( "s_mixOffset", "0", CVAR_ARCHIVE_ND | CVAR_DEVELOPER );
Cvar_CheckRange( s_mixOffset, "0", "0.5", CV_FLOAT );
Expand Down
2 changes: 1 addition & 1 deletion code/client/snd_mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ void SND_setup( void )

cv = Cvar_Get( "com_soundMegs", DEF_COMSOUNDMEGS, CVAR_LATCH | CVAR_ARCHIVE );
Cvar_CheckRange( cv, "1", "512", CV_INTEGER );
Cvar_SetDescription( cv, "Amount of memory (RAM) assigned to the hunk (in MB)." );
Cvar_SetDescription( cv, "Amount of memory (RAM) assigned to the sound buffer (in MB)." );

scs = ( cv->integer * /*1536*/ 12 * dma.speed ) / 22050;
scs *= 128;
Expand Down
6 changes: 3 additions & 3 deletions code/qcommon/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -2056,7 +2056,7 @@ static void Com_InitZoneMemory( void ) {
// allocate the random block zone
cv = Cvar_Get( "com_zoneMegs", XSTRING( DEF_COMZONEMEGS ), CVAR_LATCH | CVAR_ARCHIVE );
Cvar_CheckRange( cv, "1", NULL, CV_INTEGER );
Cvar_SetDescription( cv, "Amount of memory (RAM) allocated for the random block zone (in MB)." );
Cvar_SetDescription( cv, "Initial amount of memory (RAM) allocated for the main block zone (in MB)." );

#ifndef USE_MULTI_SEGMENT
if ( cv->integer < DEF_COMZONEMEGS )
Expand Down Expand Up @@ -3613,8 +3613,7 @@ void Com_Init( char *commandLine ) {
Cvar_Get( "sv_master3", "master.maverickservers.com", CVAR_INIT );

com_protocol = Cvar_Get( "protocol", XSTRING( DEFAULT_PROTOCOL_VERSION ), 0 );
Cvar_CheckRange( com_protocol, "0", NULL, CV_INTEGER );
Cvar_SetDescription( com_protocol, "Specify protocol version number for current Quake3e protocol.");
Cvar_SetDescription( com_protocol, "Specify network protocol version number, use -compat suffix for OpenArena compatibility.");
if ( Q_stristr( com_protocol->string, "-compat" ) > com_protocol->string ) {
// strip -compat suffix
Cvar_Set2( "protocol", va( "%i", com_protocol->integer ), qtrue );
Expand All @@ -3624,6 +3623,7 @@ void Com_Init( char *commandLine ) {
com_protocolCompat = qfalse;
}

Cvar_CheckRange( com_protocol, "0", NULL, CV_INTEGER );
com_protocol->flags &= ~CVAR_USER_CREATED;
com_protocol->flags |= CVAR_SERVERINFO | CVAR_ROM;

Expand Down
2 changes: 1 addition & 1 deletion code/qcommon/files.c
Original file line number Diff line number Diff line change
Expand Up @@ -4646,7 +4646,7 @@ static void FS_Startup( void ) {
fs_basepath = Cvar_Get( "fs_basepath", Sys_DefaultBasePath(), CVAR_INIT | CVAR_PROTECTED | CVAR_PRIVATE );
Cvar_SetDescription( fs_basepath, "Write-protected CVAR specifying the path to the installation folder of the game." );
fs_basegame = Cvar_Get( "fs_basegame", BASEGAME, CVAR_INIT | CVAR_PROTECTED );
Cvar_SetDescription( fs_basegame, "Write-protected CVAR specifying the path to the base mod folder." );
Cvar_SetDescription( fs_basegame, "Write-protected CVAR specifying the path to the base game folder." );
fs_steampath = Cvar_Get( "fs_steampath", Sys_SteamPath(), CVAR_INIT | CVAR_PROTECTED | CVAR_PRIVATE );

#ifndef USE_HANDLE_CACHE
Expand Down
8 changes: 6 additions & 2 deletions code/qcommon/vm_aarch64.c
Original file line number Diff line number Diff line change
Expand Up @@ -1714,7 +1714,9 @@ static uint32_t alloc_rx( uint32_t pref )
reg = pref & RMASK;

#ifdef DEBUG_VM
if ( rx_mask[reg] )
if ( reg >= ARRAY_LEN( rx_mask ) )
DROP( "forced register R%i index overflowed!", reg );
else if ( rx_mask[reg] )
DROP( "forced register R%i is already masked!", reg );
#endif

Expand Down Expand Up @@ -1800,7 +1802,9 @@ static uint32_t alloc_sx( uint32_t pref )
reg = pref & RMASK;

#ifdef DEBUG_VM
if ( sx_mask[reg] )
if ( reg >= ARRAY_LEN( sx_mask ) )
DROP( "forced register S%i index overflowed!", reg );
else if ( sx_mask[reg] )
DROP( "forced register S%i is already masked!", reg );
#endif

Expand Down
8 changes: 6 additions & 2 deletions code/qcommon/vm_armv7l.c
Original file line number Diff line number Diff line change
Expand Up @@ -1489,7 +1489,9 @@ static uint32_t alloc_rx( uint32_t pref )
reg = pref & RMASK;

#ifdef DEBUG_VM
if ( rx_mask[reg] )
if ( reg >= ARRAY_LEN( rx_mask ) )
DROP( "forced register R%i index overflowed!", reg );
else if ( rx_mask[reg] )
DROP( "forced register R%i is already masked!", reg );
#endif

Expand Down Expand Up @@ -1575,7 +1577,9 @@ static uint32_t alloc_sx( uint32_t pref )
reg = pref & RMASK;

#ifdef DEBUG_VM
if ( sx_mask[reg] )
if ( reg >= ARRAY_LEN( sx_mask ) )
DROP( "forced register S%i index overflowed!", reg );
else if ( sx_mask[reg] )
DROP( "forced register S%i is already masked!", reg );
#endif

Expand Down
10 changes: 5 additions & 5 deletions code/qcommon/vm_local.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,13 +196,13 @@ struct vm_s {
unsigned int codeSize; // code + jump targets, needed for proper munmap()
unsigned int codeLength; // just for information

int instructionCount;
int32_t instructionCount;
intptr_t *instructionPointers;

unsigned int dataMask;
unsigned int dataLength; // data segment length
unsigned int exactDataLength; // from qvm header
unsigned int dataAlloc; // actually allocated, for mmap()/munmap()
uint32_t dataMask;
uint32_t dataLength; // data segment length
uint32_t exactDataLength; // from qvm header
uint32_t dataAlloc; // actually allocated, for mmap()/munmap()

int numSymbols;
vmSymbol_t *symbols;
Expand Down
35 changes: 20 additions & 15 deletions code/qcommon/vm_x86.c
Original file line number Diff line number Diff line change
Expand Up @@ -249,19 +249,19 @@ typedef enum {
R_ESI = 0x06,
R_EDI = 0x07,
#if idx64
R_R8 = 0x08,
R_R9 = 0x09,
R_R10 = 0x0A,
R_R11 = 0x0B,
R_R12 = 0x0C,
R_R13 = 0x0D,
R_R14 = 0x0E,
R_R15 = 0x0F,
R_R8 = 0x08,
R_R9 = 0x09,
R_R10 = 0x0A,
R_R11 = 0x0B,
R_R12 = 0x0C,
R_R13 = 0x0D,
R_R14 = 0x0E,
R_R15 = 0x0F,
R_MASK = 0x0F,
R_REX = 0x10 // mask to force 64-bit operation
R_REX = 0x10 // mask to force 64-bit operation
#else
R_MASK = 0x07,
R_REX = 0x00
R_REX = 0x00
#endif
} intreg_t;

Expand Down Expand Up @@ -1518,16 +1518,17 @@ static void set_rx_var( uint32_t reg, const var_addr_t *v ) {
#endif
}


static void set_rx_ext( uint32_t reg, ext_t ext ) {
#ifdef LOAD_OPTIMIZE
if ( reg >= ARRAY_LEN( rx_regs ) )
DROP( "register value %i s out of range", reg );
rx_regs[reg].ext = ext;
DROP( "register index %i is out of range", reg );
else
rx_regs[reg].ext = ext;
#endif
}



static void set_sx_var( uint32_t reg, const var_addr_t *v ) {
#ifdef LOAD_OPTIMIZE
if ( reg < ARRAY_LEN( sx_regs ) ) {
Expand Down Expand Up @@ -2235,7 +2236,9 @@ static uint32_t alloc_rx( uint32_t pref )
reg = pref & RMASK;

#ifdef DEBUG_VM
if ( rx_mask[reg] )
if ( reg >= ARRAY_LEN( rx_mask ) )
DROP( "forced register R%i index overflowed!", reg );
else if ( rx_mask[reg] )
DROP( "forced register R%i is already masked!", reg );
#endif

Expand Down Expand Up @@ -2321,7 +2324,9 @@ static uint32_t alloc_sx( uint32_t pref )
reg = pref & RMASK;

#ifdef DEBUG_VM
if ( sx_mask[reg] )
if ( reg >= ARRAY_LEN( sx_mask ) )
DROP( "forced register S%i index overflowed!", reg );
else if ( sx_mask[reg] )
DROP( "forced register S%i is already masked!", reg );
#endif

Expand Down
6 changes: 3 additions & 3 deletions code/renderer/tr_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1477,7 +1477,7 @@ static void R_Register( void )
ri.Cvar_SetDescription( r_nomip, "Apply picmip only on worldspawn textures." );

r_neatsky = ri.Cvar_Get( "r_neatsky", "0", CVAR_ARCHIVE | CVAR_LATCH );
ri.Cvar_SetDescription( r_neatsky, "Applies texture mipping to skies." );
ri.Cvar_SetDescription( r_neatsky, "Disables texture mipping for skies." );
r_roundImagesDown = ri.Cvar_Get ("r_roundImagesDown", "1", CVAR_ARCHIVE_ND | CVAR_LATCH );
ri.Cvar_SetDescription( r_roundImagesDown, "When images are scaled, round images down instead of up (default 1)." );
r_colorMipLevels = ri.Cvar_Get ("r_colorMipLevels", "0", CVAR_LATCH );
Expand All @@ -1488,7 +1488,7 @@ static void R_Register( void )
ri.Cvar_SetDescription( r_texturebits, "Number of texture bits per texture." );

r_mergeLightmaps = ri.Cvar_Get( "r_mergeLightmaps", "1", CVAR_ARCHIVE_ND | CVAR_LATCH );
ri.Cvar_SetDescription( r_mergeLightmaps, "Merge small lightmaps into 2 or fewer giant lightmaps." );
ri.Cvar_SetDescription( r_mergeLightmaps, "Merge built-in small lightmaps into bigger lightmaps (atlases)." );
r_vbo = ri.Cvar_Get( "r_vbo", "0", CVAR_ARCHIVE_ND | CVAR_LATCH );
ri.Cvar_SetDescription( r_vbo, "Use Vertex Buffer Objects to cache static map geometry, may improve FPS on modern GPUs, increases hunk memory usage by 15-30MB (map-dependent)." );

Expand Down Expand Up @@ -1537,7 +1537,7 @@ static void R_Register( void )
ri.Cvar_SetDescription( r_dlightMode, "Dynamic light mode:\n 0: VQ3 'fake' dynamic lights\n 1: High-quality per-pixel dynamic lights, slightly faster than VQ3's on modern hardware\n 2: Same as 1 but applies to all MD3 models too" );
r_dlightScale = ri.Cvar_Get( "r_dlightScale", "0.5", CVAR_ARCHIVE_ND );
ri.Cvar_CheckRange( r_dlightScale, "0.1", "1", CV_FLOAT );
ri.Cvar_SetDescription( r_dlightScale, "Scales dynamic light radii." );
ri.Cvar_SetDescription( r_dlightScale, "Scales dynamic light radius." );
r_dlightSpecPower = ri.Cvar_Get( "r_dlightSpecPower", "8", CVAR_ARCHIVE_ND );
ri.Cvar_CheckRange( r_dlightSpecPower, "1", "32", CV_FLOAT );
ri.Cvar_SetDescription( r_dlightSpecPower, "Factors specularity effect from dynamic lights on surfaces." );
Expand Down
4 changes: 2 additions & 2 deletions code/renderervk/tr_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1522,7 +1522,7 @@ static void R_Register( void )
ri.Cvar_SetDescription( r_nomip, "Apply picmip only on worldspawn textures." );

r_neatsky = ri.Cvar_Get( "r_neatsky", "0", CVAR_ARCHIVE | CVAR_LATCH );
ri.Cvar_SetDescription( r_neatsky, "Applies texture mipping to skies." );
ri.Cvar_SetDescription( r_neatsky, "Disables texture mipping for skies." );
r_roundImagesDown = ri.Cvar_Get ("r_roundImagesDown", "1", CVAR_ARCHIVE_ND | CVAR_LATCH );
ri.Cvar_SetDescription( r_roundImagesDown, "When images are scaled, round images down instead of up (default 1)." );
r_colorMipLevels = ri.Cvar_Get ("r_colorMipLevels", "0", CVAR_LATCH );
Expand All @@ -1533,7 +1533,7 @@ static void R_Register( void )
ri.Cvar_SetDescription( r_texturebits, "Number of texture bits per texture." );

r_mergeLightmaps = ri.Cvar_Get( "r_mergeLightmaps", "1", CVAR_ARCHIVE_ND | CVAR_LATCH );
ri.Cvar_SetDescription( r_mergeLightmaps, "Merge small lightmaps into 2 or fewer giant lightmaps." );
ri.Cvar_SetDescription( r_mergeLightmaps, "Merge built-in small lightmaps into bigger lightmaps (atlases)." );
#if defined (USE_VULKAN) && defined (USE_VBO)
r_vbo = ri.Cvar_Get( "r_vbo", "1", CVAR_ARCHIVE | CVAR_LATCH );
ri.Cvar_SetDescription( r_vbo, "Use Vertex Buffer Objects to cache static map geometry, may improve FPS on modern GPUs, increases hunk memory usage by 15-30MB (map-dependent)." );
Expand Down
10 changes: 5 additions & 5 deletions code/server/sv_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -719,9 +719,9 @@ void SV_Init( void )
Cvar_SetDescription( sv_clientTLD, "Client country detection code." );

sv_minRate = Cvar_Get( "sv_minRate", "0", CVAR_ARCHIVE_ND | CVAR_SERVERINFO );
Cvar_SetDescription( sv_minRate, "Minimum server bandwidth (in bit per second) a client must use." );
Cvar_SetDescription( sv_minRate, "Minimum server bandwidth (in bit per second) a client can use." );
sv_maxRate = Cvar_Get( "sv_maxRate", "0", CVAR_ARCHIVE_ND | CVAR_SERVERINFO );
Cvar_SetDescription( sv_maxRate, "Maximum server bandwidth (in bit per second) a client must use." );
Cvar_SetDescription( sv_maxRate, "Maximum server bandwidth (in bit per second) a client can use." );
sv_dlRate = Cvar_Get( "sv_dlRate", "100", CVAR_ARCHIVE | CVAR_SERVERINFO );
Cvar_CheckRange( sv_dlRate, "0", "500", CV_INTEGER );
Cvar_SetDescription( sv_dlRate, "Bandwidth allotted to PK3 file downloads via UDP, in kbyte/s." );
Expand Down Expand Up @@ -769,12 +769,12 @@ void SV_Init( void )

sv_reconnectlimit = Cvar_Get( "sv_reconnectlimit", "3", 0 );
Cvar_CheckRange( sv_reconnectlimit, "0", "12", CV_INTEGER );
Cvar_SetDescription( sv_reconnectlimit, "Number of times a disconnected client can come back and reconnect." );
Cvar_SetDescription( sv_reconnectlimit, "Number of seconds a disconnected client should wait before next reconnect." );

sv_padPackets = Cvar_Get( "sv_padPackets", "0", CVAR_DEVELOPER );
Cvar_SetDescription( sv_padPackets, "Possibly toggles the padding of network packets on the server PAD - Packet Assembler/Disassembler." );
Cvar_SetDescription( sv_padPackets, "Adds padding bytes to network packets for rate debugging." );
sv_killserver = Cvar_Get( "sv_killserver", "0", 0 );
Cvar_SetDescription( sv_killserver, "Debugging tool to kill the server." );
Cvar_SetDescription( sv_killserver, "Internal flag to manage server state." );
sv_mapChecksum = Cvar_Get( "sv_mapChecksum", "", CVAR_ROM );
Cvar_SetDescription( sv_mapChecksum, "Allows check for client server map to match." );
sv_lanForceRate = Cvar_Get( "sv_lanForceRate", "1", CVAR_ARCHIVE_ND );
Expand Down
3 changes: 1 addition & 2 deletions code/unix/linux_glimp.c
Original file line number Diff line number Diff line change
Expand Up @@ -2029,8 +2029,7 @@ void IN_Init( void )
Cvar_SetDescription( in_mouse,
"Mouse data input source:\n" \
" 0 - disable mouse input\n" \
" 1 - di/raw mouse\n" \
" -1 - win32 mouse" );
" 1 - enable mouse input" );

if ( in_mouse->integer )
{
Expand Down
2 changes: 2 additions & 0 deletions code/unix/linux_signals.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,12 @@ static void signal_handler( int sig )

signalcaught = qtrue;
sprintf( msg, "Signal caught (%d)", sig );
VM_Forced_Unload_Start();
#ifndef DEDICATED
CL_Shutdown( msg, qtrue );
#endif
SV_Shutdown( msg );
VM_Forced_Unload_Done();
Sys_Exit( 0 ); // send a 0 to avoid DOUBLE SIGNAL FAULT
}

Expand Down
40 changes: 40 additions & 0 deletions docs/quake3e-changes.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,43 @@
14-Oct-2022:
* preserve \cl_reconnectAgrs between online mod changes
* fixed nested cgame command execution
* renderers: avoid potential division-by-zero for AGEN_PORTAL
* CMake: numerous improvements
* Vulkan: updated SDK headers, applied potential fix for molten-vk compatibility
* server: do not enforce non-zero level times at startup, for mod compatibility
* SDL2: fix escape key not sending a char event
* Vulkan: fixed insufficient attachment pool size for extreme case (antialiasing + supersampling + hdr + bloom)
* Vulkan: fixed error at \snd_restart (REF_KEEP_WINDOW context)
* video-pipe: use full (pc) color space and do not enforce particular rate for output audio stream
* OpenGL: setup TMU information in R_InitExtensions() to avoid potential errors with KEEP_WINDOW flag
* Implemented \in_forceCharset for SDL backend
* Renderers: fixed non-working \r_ignorehwgamma, \r_overbrightbits now can operate independently from \r_ignorehwgamma in some cases
* Vulkan: handle special DRM/KMS case (FIFO+maxImageCount==0), use 4 swapchain images for that
* Fixed missing video/audio frames during multi-segment avi rendering
* Fix client forgetting password when it is set in main menu
* Renderers: make sure that R_ColorShiftLightingBytes() is not picking more data that we actually need/have
* SDL2: fixed crash when some cvars (like in_keyboardDebug) may be dereferenced before initialization, unified that behavior with win32 backend
* Better support for non-standard protocols (71-compat etc.)
* Vulkan: use minimal VkApplicationInfo at instance creation
* Vulkan: disable anisotropy for nearest-sampling modes
* win32: show/hide mouse cursor only if it has been not suppressed by OS
* Added con_autoclear cvar
* Added \kicknum, \kickall, and 'kickbots commands, patch by Ensiform
* Always keep bots, even with \devmap
* Allow 8x multisampling in traditional (non-framebuffer) MSAA
* Improve the default texture quality settings:
- Use the highest texture quality
- Use 8x anisotropic filtering by default
* Renderers: make sure that amplitude for TMOD_STRETCH is not zero
* Fixed stack overflow in \varfunc
* Fixed potential out-of-bounds access caused by large s_paintedtime
* Added \con_scale - to scale console font size relative to default smallchar width/height
* Fixed erroneous gamma setup in windowed mode
* Handle negative color shift that caused black lightmaps
* Use differential time and interval comparisons whenever possible
* Various botlib and QVM fixes
* Vulkan: mark offscreen rendering unavailable for NVidia on linux too

14-Oct-2021:
* Filesystem: close all handles when switching to other game directory
* Sound: fixed potential division-by-zero in S_GetSoundTime() in case of failed DirectSound initialization, reworked shutdown functions
Expand Down
2 changes: 1 addition & 1 deletion docs/quake3e.htm
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@
<b>\dlmap</b> is the same as <b>\download</b> but also will check for map existence
<br>
<br>
<b>cl_dlURL</b> cvar must point to download location, where (optional) <b>%1</b> pattern will be replaced by <b>\download|dlmap</b> command argument (filename/mapmane) and HTTP header may be analysed to obtain destination filename<br><br>
<b>cl_dlURL</b> cvar must points to download location, where (optional) <b>%1</b> pattern will be replaced by <b>\download|dlmap</b> command argument (filename/mapmane) and HTTP header may be analysed to obtain destination filename<br><br>

For example: <br><br>
&nbsp;&nbsp;1) If <b>cl_dlURL</b> is <b>http://127.0.0.1</b> and you type <b>\download <u>promaps.pk3</u></b> -
Expand Down

0 comments on commit f3c7c3e

Please sign in to comment.