Repository navigation
Releases
Releases · ec-/Quake3e
Latest Build
2026-10-14
- Client: make sure a local server is ACTUALLY killed before starting demo playback
- Client: don't warn about
g_syncif autoRecord - Vulkan: fix texture bind regression on
flamesmap - Common: use more explicit hunk memory control, remove CL_ClearMemory()
- FS: increase
\fs_basegamefolder limit from 4 to 8 - FS: always report the filename extension from FS_AllowedExtension()
- Client: avoid duplicate download URL separator
- botlib: reject missing jump candidates before midpoint calculation
- Renderers: give PNG chunk headers byte alignment
- Sound: use pthread-compatible ALSA callbacks
- QVM: initialize unused native call arguments
- Qcommon: match zlib allocator callback signatures
- FS: validate extension before pointer arithmetic
- botlib: initialize the complete movement result
- SDL: include Windows declarations independently of curl
- Common: validate affinity hex digits before widening
- Common: preserve affinity expression operators
- Botlib: preserve the signed chat offset sentinel
- Common: simplify and use more explicit hunk zone memory management
- Renderers: apply client-side CM + BSP hunk memory load optimization
- Win32: set WASAPI thread termination timeout to 10s
- Win32: fixed WIN32 ARM64 build
- Client: use named pipes for
\video-piperedirection on Win32 - Client: allow setting target file extension for \video-pipe via adding "|" suffix ("|mkv" for example) at the end of
\cl_aviPipeFormat - CM: fixed another tiny precision loss/misprediction on q3dm12
- CM: fixed precision for curve mesh collisions
- CM: fix root of MAX_PATCH_PLANES error, reduce definition MAX_PATCH_PLANES to the original value
- x86: enforce x87 double precision by default for all platforms to unify behavior/IEEE-754 compliance
- VM_x86: implemented new x87 JIT compiler
- VM_x86: use more explicit x87 precision/rounding control for better determination
- VM_x86: corrected NaN-checks for CPUs without fast FPU comparisons
- VM_x86: optimized some int->float SSE conversions
- FS: refined filesystem checks (e.g. check extensions of a short source file not whole ospath)
- QVM: explicitly mark all jump targets with unsafe bit
- VM_x86: add more const optimizations
- VM_x86: improve VM_FindSameLoad4()
- VM_x86: implement instruction length detection for RIP-related offsets instead of using hardcoded values
- VM_x86: call FlushInstructionCache() for generated bytecode in win32, allocate initial memory with RW permissions instead of RWX
- VM_x86: fixed out-of-bounds access with macro optimization enabled
- VM_x86: added more macro optimizations
- Win32: apply Win key hooks only if key is bound
- FS: keep qvm-referenced paks always locked
- FS: reduce simultaneously opened file handle limit to 250
- FS: refactor/cleanup FS_TouchFileInPak()
- Misc: raize description limit for Cvar_SetDescription2() from MAX_CVAR_VALUE_STRING (256) to MAX_STRING_CHARS (1024)
- Vulkan: disabled discard optimization for depth-write shaders
- Network: fixed incorrect timeout parameter for NET_FlushPacketQueue()
- Win32: added netmask detection function for ipv4 addresses
- Vulkan: corrected initial swapchain image layout transition (write-after-read hazard)
- QVM-JIT: fixed potential clobbering of aliased registers on sign-extension optimizations
- VM_x86: slightly refactored MACRO_OPTIMIZE and enabled by default
- ppc64-QVM: zero-extend cached OP_LOAD1/LOAD2 instead of sign-extend
- ppc64-QVM: honor IEEE unordered semantics for float <= and >=
- ppc64-QVM: do not clobber an aliased register when reducing a cached load
- ppc64-QVM: zero-extend cached OP_LOAD1/LOAD2 instead of sign-extend
- CI: Update deps & fix warns for brew
- Client: Add CG_KEY_CAPSLOCK_ON cgame trap for Caps Lock latch state
- Renderers: fixed compatibility with ut43_azurea_b1 map
- Vulkan: fixed recent SDK validation layer warnings
- QVM: fixed opStack flush conditions
- win32: improved forward compatibility for msvc2017 project files
- FS: block autoexec.cfg and q3config from
*.pk3dir - ppc64-QVM: debug-only emit-macro range checks + diagnostic data trap
- ppc64-QVM: tighten CONST_OPTIMIZE immediate-fit check for BAND/BOR/BXOR
- ppc64-QVM: drop branch-trap data check, always mask in emit_CheckReg
- aarch64-QVM: split fixed-size MOVXi into emit_MOVXi64
- ppc64-QVM: clear high bits before data-segment bounds check
- ppc64-QVM: direct mov_sx_rx via mtvsrws+xscvspdp on POWER9+
- botlib: fixed BotNextConsoleMessage() argument aligment issues reported by UBSan
- Sound: fixed heavy sound swapping on ut4_skipjumps_b2 with default soundmegs
- Sound: fixed
\s_listoutput - Add VSX Q_rsqrt with Newton-Raphson refinement
- Add PPC64 VSX SIMD compiler flags
- Server: fixed redundant gamestate retransmission
- Server: refactored/re-applied "delta snapshot developer print fix" + "don't delta from pre-map restart messages"
- Server: fixed client' gamestate acknowledge state after cURL downloads
- Server: improved gamestate acknowledge function to be more packet-loss friendly
- Client: reworked packet retransmission logic to use relative times
- Cmake: Update regex filter for QCOMMON_SRCS to avoid PowerPC code.
- QVM: moved x86-specific optimization to the common
- Win32: removed
\in_laggedand related code - QVM: fixed/improved MACRO_OPTIMIZE for x86, changed function align to 16 bytes
- arm64-QVM: implemented avoidance of long conditional branches, code cleanup
- QVM: corrected RCONST usage with forced data mask
- ppc-QVM: added more const-optimizations, implemented avoidance of long conditional branches
- x86-QVM: corrected error functions offsets, code cleanup
- win32: added description for
EXCEPTION_INT_DIVIDE_BY_ZERO - QVM: implemented FPU load/store and variable mapping optimizations for PowerPC
- QVM: various fixes/improvements
- implemented jump expansions and load/store optimizations for PowerPC
- implemented empty function optimization for armv7l
- replaced explicit color codes with corresponding warning/error defitions
- reset proc_len at empty function detection
- fixed SX/RX definition typo in vm_optimize.h
- Renderers: set correct shader time on 3D->2D transition
- QVM: slightly optimize scalar loads from syscall returns
- Common: reworked/simplified free block search for zone memory allocator and reduced overhead
- Server: do not rate-limit local client
- Fix OpenGL1 renderer failed to init
- Server: correct entity number for BotImport_EntityTrace()
- Server: correct entity numner for SV_Trace() as well
- QVM: Skip VM syscall array bounds check if DLL is used
- Common: Simplify RotatePointAroundVector()
- QMV: Add missing CG_CM_MARKFRAGMENTS syscall bounds checks
- Sound: Validate entity number passed to sound functions
- FS: Forbid reading/writing negative amount of bytes
- FS: Check FS_Read() return values in various subsystems
- Common: Use buffer size safe string functions where possible
- Server: Fix potential integer overflow in sv_filter code
- Renderers: Fix some minor PVS handling issues
- Renderers: Fix broken MD3 LODs registration
- Server: Harden game syscall argument validation
- Renderers: Harden BSP structure validity checks
- Renderers: Harden IQM, MD3 header validity checks
- QVM: Harden QVM header validity checks
- Botlib: Validate AAS file structure, Validate botlib vars range
- Botlib: Validate AAS_UpdateEntity() argument
- Botlib: Clean up botlib memory allocation code.
- QVM: apply generic (OP_LOAD + sign extendsion + OP_CONST + OP_EQ/OP_NE) optimization instead of platform-specific ones
- CI: Fix warn to update actions to Node24
- x86-QVM: implemented literal pool for FP immediates, implemented per-function jump compression
- QVM: added more optimizations for PowerPC JIT
- QVM: added basic const-optimizations for powerpc, fixed reduce_map_size() for BE systems
- QVM: utilize shared optimization framework for PowerPC bytecode compiler, estimated speedup is ~2x for now
- QVM: moved all platform-independend opStack/register optimizations to a separate header file
- QVM: refactored x86/armv7l/aarch64 bytecode compilers to utilize new optimization framework
- Makefile: added detection for aarch64 over 32-bit runtime environments like RPi4b + Debian Trixie armhf
- Win32: somewhat improved support for arm32 platform
- Huffman: reduced internal buffer sizes
- OpenGL: use GL_ARB_texture_border_clamp unconditionally if available
- OpenGL: Do not use VBO or per-pixel lighting without ARB shaders
- OpenGL: Prevent using merged lightmaps without GL_ARB_texture_border_clamp
- Renderers: fix drawSurf->sort typo in RB_RenderDrawSurfList()
- Vulkan: print note about buggy drivers
- Misc: define S_COLOR_DEVEL/S_COLOR_WARNING/S_COLOR_ERROR, replace some definitions as well
- QVM: slightly optimize syscallCount handling
- x86-QVM: use divss instead of divps for OP_DIVF to avoid triggering "Invalid Operation" bit
- Server: Add syscall overflow detection to prevent VM infinite loops
- Wire up max_routingcache cvar to routing cache eviction logic
- Renderers: Fix NULL pointer dereference in RE_Shutdown when renderer interface is not initialized
- Fix CMake renderer library naming to omit 'lib' prefix
- QVM: Add Power ISA 2.07/3.0 JIT optimizations to vm_powerpc.c
- Misc: Fix RENDERER_DEFAULT double-quoting in Makefile and CMakeLists.txt
- QVM: Add ppc64 big-endian (ELFv1 ABI) JIT support to vm_powerpc.c
- Make, CMake: Add ppc64 (PowerPC 64-bit BE) architecture support
- QVM: Add PPC64le JIT compiler (vm_powerpc.c) 8000
- Make, Cmake: Add ppc64le (PowerPC 64-bit LE) architecture support
- x86-QVM: use movss instead of movd for explicit FP register initialization on old SSE1-only CPUs
- Renderers: fix dlight regression and optimize shaders on simpsons_q3 map
- Renderers: unlock \r_flareSize and limit its range to [1..40]
- SDL: sync modifier keys with SDL state
- Win32: use GetKeyState() instead of Ge...
2025-10-14
- Client: increase default \cl_maxpackets to
125 - Client: search for modular renderers nearby main executable oly
- Server: reset \sv_maxclients modified flag after startup
- Server: improved gamestate acknowledge function
- Server: don't allow active clients to start downloads
- Win32: use
GlobalMemoryStatusEx()on modern platforms forSys_LowPhysicalMemory() - Win32: try to minimize game window at break point, useful when debugging from full-screen crashes
- Win32: unregister exception handler to avoid recursive errors on
exit() - SDL: paste text on
CMD-vfor MacOS - Sound: print messages about missing sounds in developer mode only
- FS: allow scanning external directories recursively via
FS_MATCH_SUBDIRSflag, enabled for cfg and demo files completion - FS: sort mod list, strip ending newlines in mod descriptions
- FS: fixed crash on directory traversal pattern match
- FS: reworked
FS_LoadLibrary()to use predefined search paths only, not referencing current game dir anymore - Makefile: disable unsafe FP optimizations for QVM modules (mostly for interpreter) to be IEEE754-compliant when handling NaNs
- QVM: reuse rounded up data segment space for extra pStack if possible
- Renderers: simplify tr.sinTable initialization
- Renderers: increase default geometric detail on characters and patches
- Renderers: implement \r_teleporterFlash cvar
- Renderers: correct
tcMod transformfor indexed lightmaps with \r_mergeLightmaps enabled - Renderers: fix grates on map
tscabdm3 - Renderers: reworked lighting stage detection to fix all known issues
- Renderers: added support for
dlightshader stage keyword to override stage used for dlight pass, available in.shaderxfiles - OpenGL: perform alpha tests after vertex color multiplication in VBO shaders
- Vulkan: fix wrong semaphore state at buffer resize
- Vulkan: use dedicated descriptor layout for flare test pipeline to reduce generic pipeline layout size from 6 to 5
- Vulkan: fix missing texture bound for \r_showNormals 1
- Vulkan: handle glConfig.textureEnvAddAvailable as well, similar to OpenGL renderer
- Vulkan: enabled
USE_BUFFER_CLEARby default, optimized related code paths - Vulkan: implemented (a sort of) \r_finish functionality
- Vulkan: check whenever
vk_clear_color()can be used at all, avoid using it for \r_showImages - Vulkan: separate swapchain image acquisition from fence wait
- Vulkan: do not mipmap images with 1-pixel width or height
- Vulkan: don't do double image upload on scratch image creation, misc.code cleanup
- Vulkan: handle
VK_ERROR_OUT_OF_DATE_KHRmore properly during swapchain acquisition - Vulkan: added
VK_PRESENT_MODE_FIFO_LATEST_READY_EXTdefinition - Vulkan: do not print presentation info at swapchain restart
- Vulkan: use dedicated rendering finished semaphore for each swapchain image
- Vulkan: use larger staging/geometry buffers by default if possible
2024-10-14
14-Oct-2024:
- Common: improved
waitcommand handling, now it will wait exact amount of client/server frames - Common: allow src and dest buffers to be overlapped in
Q_strncpy()for QVM compatibility reasons - Common: Use
nanosleep(2)instead ofusleep(3)-usleep(3)was declared obsolete in POSIX.1-2001 and removed in POSIX.1-2008 andnanosleep(2)was recommended to be used instead. - Server: cache
sv_maxclientsvalue to avoid potential crashes caused by VMs changing it at runtime - Server: save latched
sv_purestate to dedicated variable - Server: suppress false hitch warning during map load
- Server: reworked/optimized gamestate retransmission/acknowledgment
- Server: don't change serverid during map restart
- Server: don't spawn loading clients during map restart
- Server: fix server resource leaks during client reconnect
- Client: rewrote
CL_WritePacket()to allow proper packet duplication - which was intended by multiple function calls before - Client: Strip
\cl_aviPipeFormat - Win32: report actual color bits and correct PFD count
- X11: request alpha bits for >=24 bit color profiles
- Docs: Create quake3e.md, update quake3e.htm
- Vulkan: increase MAX_IMAGE_CHUNKS from 48 to 56
- Vulkan: added missing texture mode setup in
GL_SetDefaultState() - Vulkan: disabled
\r_ext_alpha_to_coveragefor now due to rendering artifacts on beyond4-wfa map - Vulkan: do not set transient flag for depth/stencil attachment when bloom (and thus - post-bloom pass) is enabled
- Vulkan: fix screenmap image layout transitions
- Vulkan: re-create swapchain on VK_SUBOPTIMAL_KHR as well
- Vulkan: improve flare visibility test code
- Vulkan: fixed various image layout transition synchronization issues
- Vulkan: applied fixes to some "Best Practices" validation layer errors
- Vulkan: add
\r_bloom_threshold_modeand\r_bloom_modulatecvars, similar to OpenGL renderer - OpenGL: allow all static tcGens/tcMods for VBO/environment mapping (assuming that we have all tcMod corrections applied before)
- Renderers: use
glConfig.stencilBitsinstead of dereferencing\r_stencilbitscvar - Renderers: apply lightmap texcoord correction only if lightmap is actually set
- Renderers: apply additional lightmap texcoord corrections when needed
- Renderers: do not merge single lightmap
- Filesystem: allow multiple basegames in fs_basegame cvar separated by '/'
- Filesystem: reset
fs_basegamecvar to last separated item - Makefile: fix grep warnings in macOS builds
- macOS: app will search for pk3 inside and next to the app bundle
- Use SDL_WINDOW_FULLSCREEN_DESKTOP on macOS
2023-10-14
14-Oct-2023:
- Added many CVAR descriptions
- Added \vid_restart fast - to perform fast \vid_restart in current gfx context
- x86: print CPU brand string if available
- Fixed spurious bound action on +vstr key releases
- Fix stuck binds in some cases
- Misc: try to apply map-depending configuration from cvar \cl_mapConfig_<mapname> cvars
- com_affinityMask: allow handy binding of P/E cores on Intel's x86, added support for hexadecimal notation and '+'/'-' operators
- Sound: added ogg-vorbis support
- Sound: Use more precise conversion for fp32le sound buffers
- Sound: re-enable sound-mixing asm in MSVC solutions
- Renderers: Fix jumppads shaders on
q3wcp14 - Renderers: fix incorrect ovebright bits displayed at startup
- Renderers: Fix clamp to edge detection
- Renderers: allow using
*lightmap<num>images in shaders - Renderers: fix potential crash in FixRenderCommandList()
- Renderers: make sure that merged lighmaps fits well into reported max. texture dimensions
- Renderers: make sure that we always configure dst blend bits
- Renderers: fix bloom latch state when switching back to opengl from vulkan
- Renderers: use more reasonable default backend color
- Also fix \screenshot levelshot taking not factoring scaled capture screen sizes.
- Vulkan: fix dlight regression on
q3dm1 - Vulkan: added some color-input optimized shaders, should improve FPS by up to 10% in bandwidth-limited cases (iGPUs)
- Vulkan: rebind indexes after legacy dlight pass before fog pass
- Vulkan: skip color/tex gen only if previous stage was not optimized and really calculated color/tex data
- Vulkan: fix depthFragment shaders in fog, allow fog-collapse for non-world shaders
- Vulkan: allow more color optimizations, with and without fog
- Vulkan: added entity-color optimization for single-stage shaders
- Added support for ppc64/ppc64le platforms
- Fix buffer overflow with \fdir cmd and file argument command completion
- Added \cl_drawRecording cvar to disable or make "RECORDING" demo message shorter
- Github-Actions: run linux builds on Ubuntu-20.04 for binary compatibility reason
- Win32: fixed crash on win11-x64/msvc during longjmp()
- Win32: fix potential null-pointer dereference in ExceptionFilter()
- Msg: check for error before checking value to avoid false-positive results
- Network: Use uint32_t as scope_id for ipv6 connections
- Server: fix formatting for some connection states in \status output
- Server: fix host player being dropped in TA SP
- cURL: updated prebuilt libraries and headers to version 8.4.0
- cURL: increase maximum buffer size
- cURL: fix deprecated warnings on modern versions
- vm_x86: convert "add reg, 128" to "sub reg, -128" to use 1-byte immediate value
- Fix & backport recent joystick code from ioq3
- Fix Info_RemoveKey() deleting only first key
- Fix info string trailing key issue
- Made rsqrt optimization hint really work
- Common: try to init logfile cvar as early as possible
- Stop using acstime for logfile date/time
- Cleanup Makefile
2022-10-14
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
2021-10-14
- 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
- Unix: output only printable chars in console
- SDL: removed archive flag for \in_nograb
- QVM: added more optimizations, removed unsafe x86 optimizations with disabled VM_RTCHECK_DATA
- QVM: always force either range checks or data mask operations
2021-07-20
- vm_x86: implemented new bytecode compiler with dynamic register allocation and many optimizations similar to aarch64/armv7l, brings ~2x performance increase
- vm_aarch64, vm_armv7l: added more optimizations, yields another ~40% performance increase
- win32: allow copying selected text from dedicated console via keyboard shortcuts
- win32: fixed input regression caused by previous fix for high-dpi mice in win10 insider builds
- win32: fixed application crash caused by hardened longjmp() in recent win10 versions
- win32: fixed broken minimize function after \vid_restart
2021-05-27
- QVM: more correct hanling of NaNs in bytecode compilers
- QVM: fixed non-working RocketArena3 server code
- Cvars: avoid misleading warnings when changing ROM variables
- Cvars: allow override "protocol" from command-line
- Sound: reduced lag during video capture
- SDL2: (somewhat) fixed non-working console key for non-US keyboard layouts
- Vulkan: fixed some broken debug features
- Vulkan: fixed resource leaks and incorrect layout transitions during image capture
- Vulkan: avoid redundant scissor updates
- Vulkan: use correct texture bundle for lighting, use static uniform location to avoid pushing garbage from stack variables
- Vulkan: fixed crash with \r_showtris 1 and \r_fastsky 1, fixed environment shader selection
- OpenGL: fixed crash with \snd_restart
- Do not light up shaders whose sort comes after insertion point (SS_FOG)
- Unified gamma correction between OpenGL and Vulkan renderers
2021-03-28
- Vulkan: implemented super-sample anti-aliasing, can be enabled via \r_ext_supersample 1, requires \r_fbo 1
- Vulkan: added \r_presentBits to support HDR monitors, added \r_dither to control dithering in such cases
- Vulkan: added more multitexturing optimizations
- OpenGL: fixed incorrect image capture with supersampling and renderscale enabled
- OpenGL: fixed texture generation for environment-mapped shaders in VBO
- OpenGL: disable bloom if multitexturing was disabled via \r_ext_multitexture 0
- Renderers: dereference $vid_width and $vid_height to actual rendering width/height inside extended shaders
- Win32: fixed crash on nvidia systems when using Vulkan renderer and Win+D hotkey
- Win32: fixed accidental focus losses when using high-dpi mice
- Win32: fixed non-working \in_minimize in windowed mode
- Win32: catch rare DescribePixelFormat() crash
- Fixed error raised by messagemode 3/4 called without running cgvm
- Fixed another crash in FixRenderCommandList()
- Fixed potential crash with fog table
- Allow \reconnect to work after client restart
- Added warnings in developer mode to know why and when a sound isn't played
- Added \r_dlightSaturation
- Unlocked \r_lodCurveError
- Check integrity of loaded maps and models
- SDL2+Wayland compatibility fixes
- Various fixes and improvements