replaced Mod_LoadSkinFrame functions with R_SkinFrame system, this
allows multiple models to share textures in a given level, as well as
models using the same texture multiple times (often the case in md3
where meshes have a vertex limit, and q3bsp where texture structs
describe surface properties and multiple may exist referring to the same
texture set)
this reduced Nexuiz video memory usage by over 150MB
replaced qglArrayElement calls with qglVertex3f calls in showtris code,
this avoids issues with abysmal gl_vbo 1 performance on NVIDIA cards
(which seem to use a software fallback for drawing lines for some
reason)
modified Mod_LoadSkinFrame to not attempt to generate a fogging mask if
not given the TEXF_ALPHA flag (in which case the fog mask would not be
used anyway)
fixed several bugs in fog code, it basically wasn't working in the
r_glsl 0 case at all, it still doesn't work with rtlights in gl_combine
1 mode though
significant cleanup of reliefmapping shader, now uses step() function
instead of if's, this might improve compatibility with ATI cards, but
not sure, in any case I improved the stepping math a little bit which
saves some time, minor fps improvement on reliefmapping compared to
before
changed protocol code to always send origin as low precision if
possible, except for exteriormodel's (such as the player itself),
this means the only effect of EF_LOWPRECISION is lower precision angles
removed the forced LOWPRECISION flag on entities because it messes up
angles too much, and it is hard to decide what origins warrant high
precision or low precision
improved entity unsticking code, it now uses a trace from the offset
position back to the original position, and uses the impact point, this
makes it correct significantly less than before
try unstick offsets in a certain order, preferring horizontal offsets
and then vertical, and never doing horizontal + vertical, this fixes
problems where you would 'creep' along the floor diagonally at certain
frametimes at certain plane distances where precision error causes
problems, now you only teleport upward 1 unit and fall repeatedly
added numbots and numhumans in server info parsing, serverlist filtering
can also mask by these, and the 'player empty' check for the engine's
own server listings now uses numhumans rather than numplayers
added reporting of number of bots in getinfo/getstatus replies (they are
counted as clients also, so something parsing the info can deduct them
if it wishes)
refactored DrawQ_Pic to actually do the drawing rather than wasting time
on a DrawQ_SuperPic call
added DrawQ_Fill as an optimized case of DrawQ_Pic
this significantly improved performance of shownetgraph
changed r_textshadow behavior to always draw a black shadow, but with
alpha dependent on the brightness of the primary text color, this means
you don't get white shadows under black text, but do get black shadows
under white text
rewrote DrawQ_String and friends to be one combined function that draws
colored strings more efficiently by batching characters with differing
colors together, and it even batches the shadow with the text which can
help performance significantly with r_textshadow on
added shownetgraph 2 mode which shows netgraphs for all clients when
hosting a listen server
tweaked shownetgraph separator spacing a bit so that it is only 2 pixels
between incoming/outgoing graphs, and 4 pixels between netgraphs
relabeled incoming/outgoing graphs to world/input
moved calls of CL_ReadDemoMessage and CL_SendMove from CL_ReadFromServer
to the main loop
renamed CL_ReadFromServer to CL_UpdateWorld, and it is now called even
if not connected (to clear the r_refdef entities/lights info, and the
num_brushmodels)
replaced cl_nettimesyncmode with 3 cvars cl_nettimesyncfactor,
cl_nettimesyncboundmode, cl_nettimesyncboundtolerance
the new default time sync method is from Quake3 and slowly adjusts 1ms
forward each packet received, or falls back 2ms if it found itself ahead
of time
fix a crash reported by Lardarse when using more skin textures for a
.mdl model than skins exist in the model, this was caused by texture_t
containing pointers to itself that were broken by the reallocation of
the array
disable some debugging code that caused an empty packet to be sent each
server frame even if CanSend returned false (which was done just to see
when the CanSend blocking was occurring, since it was hard to tell)
implemented shownetgraph
major overhaul of rate limiting code
implemented packet-frequency rate limiting (like qw/q2/q3) as a fallback
when packet size limiting fails (such as packet sizes below 100 bytes
causing all sorts of issues, so now the minimum bound on maxsize is 100,
and another good example is reliable messages exceeding the rate limit)
fixed several issues in the recent effect rate limiting code (situations
where it could get stuck and stop sending them entirely due to too low a
rate setting)
fixed issues introduced in recent stats code (was not resetting them on
a level change, leading to very broken stats for the client)
this includes a missing part of the LOWPRECISION-on-all-entities patch so
that now works
EF_LOWPRECISION is now default on all entities except the player, this
saves quite a bit of bandwidth (bad side effect: rotating bmodels are
less smooth, need another workaround for that...)
fixed a bug in entity priorities which caused entities to be sent with
no change bits set (which did nothing useful, just wasted bandwidth),
saving quite a bit more bandwidth
sv.datagram is now flushed to client->unreliablemsg buffers, along with
logging of good split points so that each effect can be issued to
different packets as space allows (sending some each packet), this makes
effects finally obey the rate limit
cleaned up sending of csqc stats in pre-DP6 protocols and renamed the
autosentstats stuff to customstats to better represent what it does
implemented stats updates in pre-DP6 protocols (mostly for sake of
customstats code cleanlyness)
changed cl_nettimesyncmode 2 to use tighter tolerances again (1 frame,
not 2)
added cl_nettimesyncmode 5 (new default) which is like 2 but has very
tight tolerances (1/8th of frame delta)
New console commands sv_cmd, menu_cmd, cl_cmd, that call GameCommand(string s) in the server, menu, client program with the remainder of the command line as argument. Extension: DP_QC_CMD for all of them, DP_SV_CMD for sv_cmd.
changed .viewzoom field to scale view frustum slopes rather than fov
angle, this makes zooming more fluid and straightforward, and causes a 1
to 1 correspondence between the sensitivity decrease and the view size
decrease
added cls.timedemo check in S_PaintAndSubmit to use cl.mtime[0] for sound sync when doing timedemos, this greatly improves the accuracy of benchmarks with respect to sound mixing time
player model no longer shadows gun model
technical explanation: this was done by adding a RENDER_NOSELFSHADOW flag which is used on view models, this flag prevents any entities using the flag from shadowing themselves or eachother... then another hack was added to queue the shadowing of the RENDER_EXTERIORMODEL entities in the RENDER_NOSELFSHADOW batch (so it does not shadow other RENDER_NOSELFSHADOW entities), but still have it receive shadows by lighting it in the normal self-shadowing batch... In more general use the RENDER_NOSELFSHADOW flag could be used to make characters not shadow themselves (like in Doom3), however r_shadow_frontsidecasting 0 is a better approach to that problem (partial self-shadowing characters)
added GL_DepthRange function and MATERIALFLAG_SHORTDEPTHRANGE (now used by viewmodels), this prevents viewmodels from poking into walls
changed EF_NODEPTHTEST code to set MATERIALFLAG_SHORTDEPTHRANGE instead of MATERIALFLAG_NODEPTHTEST, this causes proper rendering of opaque models (such as the held item in prydon gate)
this also reenabled stencil shadows on view models but they render as if they are very very small (due to MATERIALFLAG_SHORTDEPTHRANGE)
changed default value of cl_viewmodel_scale from 0.3 to 1, this makes stereo rendering look better (small gun model looks silly when you can actually see that it is small) and makes rtlight cubemaps affect the gun more realistically
view models no longer receive stencil shadows (only basic light visibility culling like transparent surfaces receive), this makes the gun much more visible and protects it the player's own shadow, this change may is a major one and may get further changes (such as better culling perhaps)
check vid_activewindow in several spammy prints that occur when the client is running slower than the server
changed cl.time warnings from developer 10 to developer 100 and check vid_activewindow
made the following changes to CL_NetworkTimeReceived:
changed cl_nettimesyncmode 2 to be more tolerant of out of bounds values, this fixes occasional choppyness
now prints warnings if time is out of bounds if developer is 10 or higher
simplified some code
disabled time interpolation code during signon process, this should give better starting values for cl.time
fixed a bug where the loading plaque caused front buffer rendering of all later stereo views (glDrawBuffer was not being set in stereo rendering, except when vid_stereobuffer was used)
swapped left/right views so that positive values for r_stereo_separation produce normal stereo, not cross-eyed
added r_stereo_angle cvar based on a patch from Thomas Spriggs, this allows you to make the views look different directions, in addition to the existing offset capability
cl_bobmodel_side and cl_bobmodel_up cvars now are scaled by cl_viewmodel_scale so that cl_viewmodel_scale can be changed without affecting the amount of viewmodel movement on the screen
reworked predicted player physics to call PlayerPreThink before the move and PlayerPostThink after the move, in addition to calling those surrounding the regular physics code, hopefully this doesn't break anything, it fixes the jumping bug introduced in the recent changes