r1ch.net forums
* Home Help Search Login Register
r1ch.net  |  r1ch.net stuff  |  R1Q2  |  Topic: R1Q2 Changelog
Pages: 1 [2] 3 4 ... 6
Author Topic: R1Q2 Changelog  (Read 217814 times)

Posts: 2625

« Reply #15 on: December 19, 2004, 10:39:45 am »

(Client only)
  • Fix crash when reading malformed .loc file.

  • [/list:u]

Posts: 2625

« Reply #16 on: December 20, 2004, 09:44:20 am »

  • Fix bad bytes being sent to client on a message overflow (this will fix the "Illegible server message" bug)

  • Made Com_sprintf always terminate output.

  • Changed PMove to ignore any bbox set if the server isn't running in enhanced mode.

  • Make client .loc reading support more robust.

  • addloc and saveloc commands on client.

  • Added new byte to R1Q2 serverdata for the server to convey whether it is running in enhanced mode, removed the downloadport. PROTOCOL 35 COMPATIBILITY IS BROKEN WITH THESE CHANGES.

  • Client can now detect when packet overflow on the server is occuring and prints suitable message.

  • Moved "mod didn't clean up unused entity..." message to only show when sv_gamedebug is set.

  • [/list:u]

Posts: 2625

« Reply #17 on: December 21, 2004, 09:24:05 am »

  • Fix sv_validate_playerskins not replacing some invalid skins.

  • New cvar, sv_entity_inuse_hack to control whether server sends entities that aren't marked as in use. Some mods seemingly do not clean up entities that are not in use, resulting in them possibly going over the network and wasting bandwidth. Set this to 1 if possible to save bandwidth and CPU time, but depending on the mod you are using this behaviour may be intended by the mod author not realising of the problem. Default to 0.

  • Display client ping as 0 instead of 9999 when not reciving any frame latencies in sv_calcpings_method 2.

  • Add R1GL and NCGL to video menu as options.

  • Automatically update latched cvars on map change by reloading Game DLL.

  • [/list:u]

Posts: 2625

« Reply #18 on: January 15, 2005, 08:50:21 pm »

This is perhaps one of the largest amount changes ever made to R1Q2 as you can probably guess by the huge build number bump. Both the new client and server have been tested by a number of people so I hope there aren't too many bugs Smiley. If you run a server and update to this version, please be sure to check for updates regularly as there might still be the odd few issues that made it past testing. If you notice anything odd with this version then post a bug report in the forums! Enjoy!
  • All-new server-side netcode! It is now impossible to be disconnected from an "overflow" since all messages are packetized, queued and sorted. This gives the server much more power to inspect each individual type of message and choose what to do with it. Mods are now free to dump as much junk as they want at the client (within reason Wink) and the server will handle the delivery. The new code guarantees enough room for one reliable message per netchan ack and fills the remaining packet space with unreliables - first the svc_frame and then room permitting, all remaining datagrams starting with the most "noticable" - tempents and sounds. If they all fit and the netchan has just been acked, the packet is filled with all remaining reliable messages. Any unreliables that didn't make it get dropped as unreliable is assumed to be time-sensitive and thus not worth preserving for the next frame. The concept of overflowing both the unreliable and reliable buffers is gone, and the "Netchan_Transmit: dumped unreliable" dropping of the unreliable messages can also never happen. Clients probably won't notice any changes at all, but internally this makes for a MUCH cleaner and reliable implementation. Since this is all server-side it's fully compatible with any existing client. This will increase CPU usage a little bit, but I barely went over 50% with 40 players on a 700MHz Pentium III so it shouldn't be too noticable at all. This change also benefits the connection process - the server can begin sending data as soon as the client issues "new" without having to wait for the individual configstrings/baselines prompts, resulting in faster connection times.

  • Reduced bandwidth usage / packet size when sending delta updates from the baseline. Previously Q2 would always send the old origin even if it were identical to the baseline, causing a minimum of 10 bytes per entity. With this fix, unmodified deltas are down to just 2 bytes which should give quite a significant improvement for maps that use a lot of brush models or other static entities.

  • Server-side limited rcon support. Use 'lrcon_password' to set the password, clients should use rcon_password as normal. You can then use addlrconcmd substring to allow certain commands, for example addlrconcmd "set dmflags " will allow a client to use "rcon set dmflags 0", "rcon set dmflags 16404" but not "rcon set dmflags" (notice the space). Multiple commands in a single rcon are discarded. Use delrconcmd substring to remove an lrcon command.
  • sv_force_reconnect cvar to force a client reconnection to the server. Set this to the ip:port of the server to force clients to be reconnected as an anti-proxy check. Note that using this will be much faster than similar features in Q2Admin or whatever as R1Q2 is able to send the reconnect as soon as the client begins connecting instead of waiting for them to finish loading. The reconnect feature will ignore any IP addresses beginning 127. 10. 192.168. or 172.16. for compatibility with a LAN/WAN server and is completely transparent to any mods.

  • sv_download_refuselimit cvar, will refuse auto-downloading when this many players are in game. Default 0 means no limit.

  • sv_gamedebug 1 will turn on extra debug info for mod developers. Messages are printed to the console whenever something "bad" happens such as attempting to link unused entities, duplicating configstrings, unused entities having state, etc. Setting sv_gamedebug to higher values will cause breakpoints to occur depending on the severity of the problem, up to a maximum of sv_gamedebug 4 to break on all messages.

  • Game DLL errors that would otherwise cause a fatal error condition are now always displayed regardless of sv_gamedebug setting.

  • Additional Game DLL checks for correct usage of cprintf, centerprintf, unicast and WriteByte/WriteChar.

  • sv_max_downloadsize defaulted to 16MB.

  • sv_strict_userinfo_check defaulted to 1.

  • Disallow blank and all-whitespace names.

  • Memory allocated by Q2 is no longer initialized to zero. Often the memory is immediately overwritten again with other data so initializing it to zero was only slowing things down. I believe I've caught all instances where the code expected it to be initialized to zero, but if you experience any crashes please let me know how to reproduce it, or better yet get me a core file or crash dump.

  • Reworked the speedbot detection code into a generic "bad movement" detector. Moving too fast, too slow or having very irregular movement (maybe caused by lag) will trigger a detection -- see also sv_enforcetime change.

  • sv_enforcetime set to values higher than 1 will kick clients that exceed this amount of "bad movement". Every bad movement detection will increase an internal counter by 1 plus however far off the movement was. When this counter exceeds sv_enforcetime, the client will be kicked. Good movements will decrease the counter over time to hopefully account for the odd lag spike causing it to be hit. Good values would be between 5-25.

  • Disallow use of the 'link' command to link outside of the Quake 2 directory.

  • Fixed name change notification spamming a lot if the client tries to use a name over 15 characters.

  • Duplicate configstrings updates by Game DLLs are discarded.

  • No longer add automatic blackholes when a client attempts to download a name ending in /.

  • Re-implemented qport checking into the server as it appears some consumer routers still don't know how to do NAT properly.

  • For protocol 35 (R1Q2, EGL), qport is now a single byte. If you have multiple clients behind a single IP address with a broken NAT router, be sure you each have a unique qport value between 0 and 255. You can also set qport to 0 to avoid sending it completely if your router is not broken, doing so will save a tiny bit of outgoing bandwidth.

  • Force the correct value of CS_MAXCLIENTS regardless of what the Game DLL sets it to.

  • Fixed .loc file loading on the client not properly reading the full location name.

  • Fixed possible configstring corruption on client when dealing with malformed CS_PLAYERSKINS strings.

  • Fixed a buffer overflow (doesn't look exploitable) in client address book handling.

  • Fixed four buffer overflows in the "start server" menu that look possibly exploitable...

  • ..and another in the player config menu...

  • ..and yet another that looks remotely exploitable... Noticing a pattern here? The Q2 menu code is pretty awful Smiley.

  • Added some assembly-optimized string functions to the Win32 Client (also shared by R1GL) that are about 200-300% faster than the libc implementations for some reason.

  • Used some float->int unicast checks against zero for faster processing in some functions such as tracing on Win32. Disabled under linux though, presumably because gcc -ffast-math also tries to do something similar.

  • Disallow path traversal characters in logfile_name to prevent anyone with rcon from being able to overwrite arbitrary files.

  • Fixed really stupid bug on client that causes Sleep to be called every frame when not running a server. This was accountable for around 10% performance drop in the client. Oops.

  • Reduced frequency at which commands are executed, previously the function was being called for every single tick regardless if anything actually happened.

  • logfiler_filterlevel and con_filterlevel cvars to control the level of messages written to the logfile and console respectively. Set the value to the ones you DON'T want from these:

#define LOG_CLIENT      0x1
#define   LOG_SERVER      0x2
#define LOG_DEBUG      0x4
#define   LOG_WARNING      0x8
#define   LOG_ERROR      0x10
#define   LOG_GAME      0x20
#define   LOG_CONNECT      0x40
#define   LOG_NAME      0x80
#define   LOG_DROP      0x100
#define   LOG_KICK      0x200
#define   LOG_EXPLOIT      0x400
#define   LOG_DOWNLOAD      0x800
#define   LOG_NOTICE      0x1000
#define   LOG_CHAT      0x2000
#define   LOG_NET         0x4000
#define   LOG_GAMEDEBUG      0x8000

I hope they are mostly self explanatory. For example if you don't want to see heartbeat notices and other trivial information in your log file, set log_filterlevel to 4096 to filter out LOG_NOTICE messages.
  • Defaulted client "msg" cvar to 0.

  • messagemode / messagemode2 accept default text as a parameter.

  • Added binary tree for sound name lookups.

  • Slightly optimized the hud drawing functions in the client.

  • Increased server console command line length to 1024 from 256.

  • Handle log file write failures gracefully by closing the log file.

  • Doubled client console buffer size.

  • Auto-downloading to a client on Linux will try both the original and a lower-case version of the requested file. It is highly recommended where possible to keep all filenames and filename references (eg in maps) lower case.

  • Normalize auto-download requests beginning with ./ on both client and server.

  • Filesystem cache is now case-sensitive on Linux.

  • Fixed sv_fpsflood kicking clients that auto download too fast.

  • Fixed client mispredicting against brush models if cl_defermodels was set to 0.

  • Fixed client switching from non-baseq2 to baseq2 during connection resulting in ./ being used as the mod dir instead of ./baseq2

  • Client will render menu on a black background and won't draw text characters that would be obscured by the console. This is to help support a change in R1GL that groups all text drawing into a single glBegin/glEnd call for speed.

  • Fixed server-side baseline creation possibly causing entity state corruption for one frame when running.

  • cl_autorecord client cvar, will automatically begin recording a demo at the start of a map and stop on a map change.

  • Two special client cvars, beginmapcmd and endmapcmd will be expanded and treated as a command upon the beginning and end of a map. Eg set endmapcmd "screenshot" will take a screenshot just before the map changes.

  • Fixed server browser not showing some servers if they have the info string as another.

  • Automatically empty file system cache after failing to load a map, this allows you to install it while R1Q2 is still running without having to use fsflushcache for R1Q2 to notice it's presence.

  • cl_smoothsteps 2 on the client will enable more agressive step smoothing, but may cause the odd attempted smoothing when not on stairs such as when going up lifts or ramps. cl_smoothsteps 3 will use a similar method but will only consider 'steps' to be differences of 64, 96 and 128 units. At low cl_maxfps values and on most maps, cl_smoothsteps 3 should give the best response. If you still can't get step smoothing to work how you want it to, you may wish to consider using cl_async 0 to disable the net/fps separation and adjusting r_maxfps to 100 or so. Since a low cl_maxfps is the default in R1Q2, I have also made cl_smoothsteps 3 the default.

  • Server 'status' command will show version strings of all connected clients if you use 'status 1', and will show active downloads with 'status 2'.

  • Automatically fall back to protocol 34 if the server disconnects the client or if the client receives unknown command bytes from the server within the first 30 seconds of connecting.

  • sv_download_drop_file / sv_download_drop_message cvars. If sv_download_drop_file is set to a path and a client attempts to auto download that path, sv_download_drop_message will be printed to their console and they will be disconnected. This can be used to stop people trying to auto download large amounts of client-side files for big mods and direct them to the mod homepage instead. Supports \n newline expansion. For example use, the Q2 Gloom mod requires a sprite called sprites/s_firea.sp2 that is precached by the mod on every map. Thus I can set sv_download_drop_file "sprites/s_firea.sp2" and anyone connecting who hasn't installed the Q2 Gloom mod will be disconnected after downloading the map. This will vary from mod to mod but you should try to set the dropfile to a model/sprite if possible as they are the first things a client tries to auto download. Try using the modellist command to find a common model that is always loaded on each map.

  • Fixed cl_async 0 causing huge amounts of packets when used at low r_maxfps values. Note that if you don't have r_maxfps set higher than your video card refresh rate (assuming vsync is enabled) then you will experience high CPU usage as the client will be doing tight loops with no delay. This shouldn't have any effect on the game though, just something to be aware of.

  • Client will properly auto-download sprites and skins instead of ignoring the linked skins which subsequently crashes when trying to render.

  • Prevent cl_maxfps / r_maxfps from being set too low to cause problems.

  • Default m_fixaccel to 1 if Windows 2k/XP/etc is detected.

  • 'demomap' will load demos under the baseq2 Game DLL to avoid unnecessary interference from any mod progs. It will also set the maxclients configstring to 1 allowing you to use timedemo/timescale during demo playback.

  • sv_nc_clientsonly 0 will no longer check visibility of brush models.

  • Client locations support @t in chat messages for the location "there" where you are currently aiming. Note that this doesn't use %t due to some mods already using %t for other purposes.

  • Client locations now use %l for compatibility with server-side expansion if you don't have any local .loc files.

  • Cvar expansion supports bash-like ${varname}something for expanding from part of a string.

  • Against my better judgement, added "Xania Railgun Trail" support with cl_railtrail 1 / 2 / 3 etc for different colours. Values higher than 5 will result in the original railtrail with a modified palette.

  • Win32 client is built single-threaded for slightly faster calls to libc functions. To support this change, the dedicated server console is no longer thread-based, meaning if you drag the server console window the game will freeze and possibly cause timer-related problems.

  • Default auto-downloading on for client.

  • Fixed R1Q2 cvars cl_lents and s_focusfree being saved to config.cfg

  • Not a change in R1Q2 but I was looking over some of the default cvars, and s_mixahead is one I see many people never touch. If you have a fast CPU and a decent sound card, try lowering s_mixahead to 0.1 for decreased sound latency. If you experience stuttering or other problems, increase it by 0.01 until it goes away. For reference, I can use 0.05 on a Athlon 64 with a Santa Cruz sound card, but this seems to be a minority case. 0.08 - 0.1 seem the best for most modern systems.

  • Reworded "maximum performance / maximum compatibility" options in sound config menu. This actually controls whether Q2 writes directly to the DirectX primary buffer. According to the SDK the primary buffer is supposed to be used for DirectX to mix in and secondary buffers for individual audio sources. However since Q2 does its own internal mixing the use of secondary buffers is somewhat pointless. Technically Q2 should write to the secondary buffer for greatest compatibility, however s_primary 1 ("maximum performance") will write directly to the primary buffer. I'm not convinced this will have a noticable performance increase though, so I would recommend s_primary 0 for most purposes.

  • Client s_ambient cvar to control whether to play world sounds.

  • Client mouse cvars (in_mouse, m_fixaccel, m_directinput) are applied immediately when changed.

  • New cvarban syntax for greater flexibility. Supports inverted matching on every test and will not consider empty string to be a valid result unless used with *. New syntax: addcvarban <cvarname> <[!]((=|<|>)numvalue|[~|#]string|*)> <KICK|BLACKHOLE> message. Message is now optional. # is used as an explict string match, eg addcvarban foo #! will match on on foo containing "!".

  • Userinfobans, similar to cvarbans but operate on userinfo. adduserinfoban / deluserinfoban / listuserinfobans.

  • Validate userinfo key/value pair lengths that come from the client. A normal client should never send them over 64 characters, so R1Q2 will drop and blackhole any clients that send excessively long userinfo key/value pairs which could be used for malicious purposes.

  • Using the console kick function for players who have a number at the beginning of their name will no longer treat the number as a player ID.

  • Using cl_async 0 will cause cl_maxfps and r_maxfps to become linked to allow servers that cap cl_maxfps to continue to cap your packet rate.

  • Use OS-specific functions (stat/GetFileAttributesEx) instead of fopen/fseek/ftell/fclose to determine file lengths.

  • New cvar, z_debug 1 will switch all memory allocation into debug mode which is able to detect a lot of extra memory corruption problems at the expense of much slower allocation/free code. Mod developers or servers that seem to crash often should use z_debug 1 to see any problems related to memory management.

  • Game DLL memory allocation locations are tracked to catch any bad free attempts.

  • Fatal server crashes now write the error message to the logfile.

  • cl_hidewindowtitle cvar for disabling the Q2 Window titlebar in windowed mode for hopefully better compatibility with some window managers.

  • delhole command now takes either an index or IP address as the argument.

  • Fix for brush model loopsound bug at http://www.quakesrc.org/forums/viewtopic.php?t=4262

  • Fix for brush sides -1 array index bug at http://www.quakesrc.org/forums/viewtopic.php?t=4351

  • sv_packetentities_hack 2 will try both full frame data with zlib for protocol 35 clients and then go back and cut off the packet if it still doesn't fit. Gives the best of both worlds at the price of doing some potentially useless compression.

  • Editable console and chat text buffers.

  • [/list:u]
    Let the bug hunting begin...
« Last Edit: March 03, 2005, 03:16:05 am by R1CH » Logged

Posts: 2625

« Reply #19 on: January 15, 2005, 11:05:16 pm »

b4027 (Client Only)
  • Fix console buffer automatically filling up with old commands after cycling through the number of saved commands.

  • [/list:u]

Posts: 2625

« Reply #20 on: January 16, 2005, 02:14:20 am »

b4030 (Client Only)
  • Home/End behaviour in the console when at the beginning/end of the line or at an empty console buffer now applies to the console buffer due to popular demand.

  • [/list:u]

Posts: 2625

« Reply #21 on: January 18, 2005, 06:18:01 am »

  • Fixed sv_connectmessage sending if it's empty.

  • Fixed possible memory corruption issue with newline-expanded cvars being set to empty strings.

  • Improved z_debug 1 to verify memory size before the buffer so it hopefully doesn't cause an access violation (z_debug 1 already found the source of one bug I'd been trying to track down in the Gloom mod for ages)

  • Fixed cvarbans to work correctly if more than 6 or 7 were set.

  • Reduced cl_maxfps cap to 5 for allowing some physics exploits to continue to work.

  • Playerstate weaponindex is now delta-compressed, not sure why it wasn't before. Let me know if this causes any view weapon model issues.

  • [/list:u]

Posts: 2625

« Reply #22 on: January 18, 2005, 07:00:15 pm »

b4066 (Client Only)
  • Fixed a crash that occured if using cl_defermodels and trying to get the sound origin of a brush model that hadn't fully loaded.

  • Fixed a number of demo playback issues.

  • .loc files are now loaded from both the /mod/maps/ directory and if not found, the global /locs/ directory.

  • Fixed console starting dropped after first connecting.

  • [/list:u]

Posts: 2625

« Reply #23 on: January 21, 2005, 10:10:43 pm »


  • Fixed a crash when using developer 1 and sv_validate_playerskins 1.

  • Client .loc files are now loaded from "maps/mapname.loc" and if not found, "locs/mapname.loc". Thus global loc files should go into C:\Quake2\baseq2\locs\q2dm1.loc for example.

  • .loc files loaded from a pak no longer overrun the file lengh.

  • Fixed R1Q2 menu reading invalid strings if you had a cvar set outside the expected range.

  • Improved a few utility functions such as the userinfo/stringcmd filter.

  • Don't allow low-ASCII characters to be printed to the server console, fixed stripping of high ASCII chars on Linux.

  • 64 bit portability cleanups.

« Last Edit: January 22, 2005, 12:03:39 pm by R1CH » Logged

Posts: 2625

« Reply #24 on: January 23, 2005, 01:58:22 pm »


  • Fixed an infinite loop on Linux if low-ASCII characters were attempted to be output.

  • DirectInput Keyboard support on Win32 Client. Should fix the long-standing "sticky keys" that happens if your FPS drops. Default enabled, use in_dinputkeyboard 0 to disable it if you have problems.

  • Client chat buffer stores the previous messages, use UP/DOWN arrow keys to retrieve previous messages.

  • All memory allocated by the Game DLL is now tagged for buffer overflow checking.

  • New cvar, z_buggygame 1 will attempt to work around buggy Game DLLs that manage memory incorrectly by ignoring free() of invalid pointer and allocating twice the requested size to hopefully account for any poor code that writes past the end of memory. Horrible, I know... but so are some Game DLLs with the memory management it seems Smiley.

  • Attempted command expansion exploit no longer adds a blackhole.

  • All exploit type of attacks are logged with a line beginning "EXPLOIT:"

« Last Edit: January 23, 2005, 02:02:40 pm by R1CH » Logged

Posts: 2625

« Reply #25 on: January 23, 2005, 06:33:54 pm »

b4214 (Client Only)

  • Fixed crash on startup if not using DirectInput mouse.

  • Fixed some key mappings (particularly numpad) with DirectInput keyboard.

  • Caps Lock, Num Lock and Scroll Lock are bindable.

  • Add 1280x1024 and 1680x1050 to resolutions menu.

« Last Edit: January 23, 2005, 06:44:43 pm by R1CH » Logged

Posts: 2625

« Reply #26 on: January 23, 2005, 06:43:25 pm »

b4215 (Client Only)

  • Fixed more mouse issues and keyboard repeating itself during input subsystem restarts.

NOTE: cl_async 0 is broken in these previous two builds. Working on it now.
« Last Edit: January 23, 2005, 07:00:12 pm by R1CH » Logged

Posts: 2625

« Reply #27 on: January 23, 2005, 07:55:16 pm »

b4228 (Client Only)

  • Backported all (hopefully) the frame and input code from 3.20 into R1Q2. Using cl_async 0 now should use code identical to the 3.20 and other clients such as NoCheat for movement.

  • k_repeatrate and k_repeatdelay (both in milliseconds) for the new DirectInput keyboard repeat settings. Default of 0 tries to lookup your current global Windows repeat rate/delay and use a similar value.

« Last Edit: January 23, 2005, 07:59:05 pm by R1CH » Logged

Posts: 2625

« Reply #28 on: January 24, 2005, 08:52:24 pm »

b4257 (Client Only)

  • Hopefully improve cl_async 0 behaviour a bit more.

  • Fixed KP_MINUS / KP_PLUS acting reversed and allow Alt+Enter in DirectInput keyboard mode.

  • Delay for 1ms when rendering speed is below vsync to avoid 100% CPU usage.


Posts: 2625

« Reply #29 on: February 01, 2005, 12:04:01 am »


  • Fixed possible memory corruption on the client when loading .loc files.

  • Fixed sv_ratelimit_status not doing what it was supposed to do.

  • Blackholes now take an optional bit mask against the IP address, eg would block 192.168.*.*.

  • sv_blackhole_mask, default mask for automatic blackholes.

  • Defaulted in_dinputkeyboard to 0 due to numerous complaints that Windows hotkeys no longer work (side effect of using DirectInput unfortunately)

  • Removed unset command, was not really usable.

  • Fixed pics/models getting unloaded and then reloaded with cl_defermodels 1 (end registration is now done after all models load)

  • Game DLL memory leaks are displayed on shutdown.

  • Fixed some varargs functions with incorrect arguments (thanks to turol)

  • Fixed unrequested cvar check results not kicking clients.

  • Fixed zlib UDP downloads favoring uncompressed over compressed content if the compressed content was < 1300 bytes.

  • ignore / unignore client commands for ignoring blocks of chat text.

  • serverstatus client command for displaying quick status of a server. Use by itself for the current server, serverstatus address for status of a different server. Accepts serverstatus /s for showing full serverinfo and serverstatus /i for quick info. This replaces the undocumented 'sinfo' command of previous builds.

  • rcon results no longer have x.x.x.x: print displayed.

  • Increased debug graph width to 2048 pixels.

  • Fixed gl_mode and video menu disagreeing about which resolutions to use for which selections.

  • Other miscellaneous fixes here and there.

« Last Edit: February 01, 2005, 12:44:22 am by R1CH » Logged
Pages: 1 [2] 3 4 ... 6
r1ch.net  |  r1ch.net stuff  |  R1Q2  |  Topic: R1Q2 Changelog
Jump to:  

Powered by SMF 1.1.19 | SMF © 2013, Simple Machines