Optimized executable; builds of ioq3 engine for urt This project replaces only the executable of urban terror with a latest version of ioq3 engine, optimized and enriched with several new features and fixes. It does not require q3 and is compatible for online play. Notable features * Raw Mouse Motion (High-Definition) and Raw Mouse Keys support for Windows clients: in_rawmouse 1; it also eliminates cases of negative acceleration. * "bumpy" renderer with use of VBOs and GLSL, Bump mapping, Bloom, Depth of Field Blur, Fog, Fancy Water, Improved Decal Code, and more. Faster than vanilla q3 renderer on r_simpleshaders 1 (set by default for performance; 0 to get its effects). * Several Surround even on Stereo Headphones Systems (Hear audio coming from the back differently): o dmaHD with 3D H-HRTF audio, Speed-of-sound mapping according to medium: Air or Water, Natural Doppler effects, automatic memory management, 2 alternative mixers, optimized for headphones and available to all OSes (the default; s_useopenal 0, s_useikalizer 0) o OpenAL with OpenAL-Soft library or a hardware implementation (s_useopenal 1 and appropriate library). It is also required by VoIP. o iKALiZER: win32 only (s_useikalizer 1, s_useopenal 0) * Google Translation in chat with /translateAuto 1 or with /translate * Unicode fonts Rendering, mainly for Google Translation output. * Win64 binary support first developed for this project [with actual qvm compilation] * Funstuff, Radio Audio and part of other audio are pre-Loaded to avoid potential freezes of FPS (blocks of rendering, shown with blank gaps on lag meter). This was a q3-wide UrT issue that applied when someone else joins the game or funstuff is set on the fly, or when some audio files are heard for the 1st time [Bug reports: 1, 2] * Mumble Positional Audio (hear others in '3D') - 'to use it, start Mumble before you start ioq3, and run the game with +set cl_useMumble 1' - more info at mumble * Microsecond Definition support; it potentially increases efficiency of the engine and makes it possible to use any integer on com_maxfps; /sysMicroGranularity. * An important issue of dropping audio on auto firing is fixed (it was giving the illusion of lower firing rate); it affected Base and dmaHD audio and it can be tuned with /s_smpRepeat. * Reduce CPU usage explicitly with com_Sleep or automatically with com_SleepWhenMinimized/Unfocused (this will often reduce FPS, mainly useful for saving CPU time; settings in milliseconds; sane values 0-40). * Voice (VoIP) for servers that support it (/cl_voip 1; ioq3 server: /sv_voip 1). Full instructions are here. Bind a key to +voiprecord to talk, '/voip muteall' to mute all. It requires OpenAL and a high /rate. * Meters with stats for Ping, FPS, Snaps and Packets * Quiet console; avoid seeing the same technical messages over and over when map changes. * /zoomsensitivity; avoid scripts by using a direct multiplier on your normal sensitivity only when zoomed. e.g. /zoomsensitivity 1.5 means sensitivity x 1.5 * Teleportation: bind a key with /bindteleport and transfer back there when key is hit (locally or with rcon; server cmd: /teleport x y z). * Motion Blur (at least on NVIDIA); /r_motionBlur 1; r_motionBlurStrength to tune the strength of the effect * autotimenudge set timenudge automatically - experimental feature - do not use when spectacting or right after round change - see notes below * Anaglyph rendering with 3D glasses * /sysexec, execute an external program (in the path or using full path). This can be used to control external applications via controller utilities. * /totaltimerun - report the total time the client has run since its internal var was first saved plus the time run for current session. * Stopwatch of millisecond accuracy * 'server is full and server is for low pings /reconnect' workaround; plus no need to wait to hit /reconnect on a 'server is full' that may erroneously report 'for low pings'. [Bug report: 1] * SDL system for accessing input, graphics and audio hardware; this may improve access to input, audio and video hardware. * Alarm mechanism on clock * Built on recent compilers * Blank the screen temporarily with +blank (/bind x +blank) * /rebind: bind a key to a cvar and its current value. Useful for making gear-sets binds on the fly during gaming. * Windows clients can hold more than 512 .pk3s. Downloads * Notes on 'bumpy' renderer in main downloads: o 'bumpy' takes longer to load but has higher FPS on hardware that supports it. Use the vanilla renderer downloads if that's not your desire. o q3ut4/ contents included in a pack are required in game's q3ut4/ dir. o 'bumpy' is unsupported on older or limited video cards. Use the vanilla renderer downloads in that case. o In rare map spots, graphics may not appear properly (this is normal at least partially due to map bugs). Again, use the vanilla renderer downloads if it proves important. * Win32: o ioq3-urt.zip 3.0M (last updated: 25 Dec 2010) o 'Old CPUs/MMX-only/non-SSE2' build: ioq3-urt.zip * Win64: o ioq3-urt.zip [no ikalizer (closed win32 lib); it supports qvm compilation; notice it is often slower than 32bit due to further need of optimizations on ioq3 qvm compilation code] * Linux: o 32bit: ioq3-urt.tar.bz2 (default ubuntu is this; no ikalizer (win32 lib)) o 64bit: ioq3-urt.tar.bz2 (notice it might be slower than 32bit due to further need of optimizations on ioq3 qvm compilation code) * Mac o compiled by voidref [it might be based on an earlier version of source]: at urt mac forum * Source: o recent snapshot: ioq3-urt-git.tar.lzma Vanilla renderer downloads: Vanilla q3 renderer (non-bumpy) Click to Show Vanilla Renderer Downloads * Win32: o ioq3-urt.zip 2.0M (last updated: 25 Dec 2010) o 'Old CPUs/MMX-only/non-SSE2' build: ioq3-urt.zip * Win64: o ioq3-urt.zip [no ikalizer (win32 lib); it supports qvm compilation; notice it is often slower than 32bit due to further need of optimizations on ioq3 qvm compilation code] * Linux: o 32bit: ioq3-urt.tar.bz2 (default ubuntu is this; no ikalizer (win32 lib)) o 64bit: ioq3-urt.tar.bz2 (notice it might be slower than 32bit due to further need of optimizations on ioq3 qvm compilation code) * Mac o compiled by voidref [it might be based on an earlier version of source]: at urt mac forum * Source: o snapshot: ioq3-urt-git.tar.lzma Old versions dir www0.org/urt/ Installation * Note: 'bumpy' renderer's q3ut4/ dirs included in a pack are required in game's q3ut4/ dir. Also notice that they may be altered between versions. * Windows: o Unzip files into urt's .exe folder o Run ioq3-urt.exe (one can rename it to ioUrbanTerror.exe for convenience with other programs, though this is not a version of iourt, it only acts like it partly) * Linux: o extract file(s) into urt's executable binary directory (tar jxpvf in console or with a file manager). o run ./ioq3-urt (if it's not executable, chmod +x) * Mac: see its thread Discussion Discussion (and unofficial changelog) For Windows and For Linux at the urt forum Notable features in depth * ConsoleVars added: (dmaHD, iKALiZER, Bumpy and new ioquake3's vars are not listed; they are included in their respective URLs.): Show console Vars added // in_rawmouse "1" // Use Raw Mouse Motion (High-Definition) and Raw Mouse Keys (Windows clients) translateAuto "0" // Enable to translate chat text automatically translateIN "auto" // Input translation language, automatic detection by default translateOut "en" // Output translation language //bind x translate // /translate explicitely cl_translation "1" // Enable the translation system (it involves enabling cURL) cl_translationSleep "40" // Sleep the Translation thread to save CPU time. With the default of 40 // it effectively operates at 25FPS (1000/40) translateAutoFilterShorterThan "3" // Don't try to translate messages shorter than that translateAutoFilterServer "1" // Don't try to translate console: and Server: messages Unicode_Enable "1" // Enable Unicode rendering support Unicode_TranslationOutput "1" // Render translation output; on by default Unicode_ConsoleOutput "0" // Render all console output Unicode_ChatOutput "0" // Render all chat. Unicode_ConsoleOuput overrides it. Unicode_Color "95 197 255" // Color in RGB format Unicode_Shadow "1.004 1.01" // Shadow offset factors in X and Y Unicode_Alpha "0.85" // Alpha value (how 'faded' it is) Unicode_Font "LiberationSerif-Regular.ttf" // Font file to use in the path Unicode_Enable "1" // Enable the system in whole Unicode_Fontsize "0.022" // Size Unicode_LineSpace "-1.3" // Space between lines Unicode_LineSize "64" // Maximum width of each line Unicode_Lines "10" // Max lines to render Unicode_PositionX "11" // Position on the horizontal axis(a factor) Unicode_PositionY "4" // Similarly on the Y axis Unicode_MessageTime "4500" // Time each message stays on Unicode_MessageFadeTime "1350" // Start fading when remain Unicode_Greeting "Unicode support Initialized" // Greeting on client Initialization Unicode_Library DEFAULT_FTGL_LIB // FTGL library (OS depended) sysMicroGranularity "1" // Microsecond Definition support; it potentially increases efficiency of the // engine and makes it possible to use any integer on com_maxfps. s_smpRepeat "16" // Sample Repeat limit; increased from the equivalent hardcoded // default of vanilla of 4. It fixes severe issues of audio samples // dropping (e.g. on auto firing). Base or dmaHD related only. //bind x sysexec // execute an external program which is in the path or using full // path zoomsensitivity "1" // sensitivity * only when zoomed cl_zoomsensitivityfovthreshhold "90" // internal. fov below which zooming is considered to occur cl_quiet "1" // remove technical messages, especially on map change cl_quietuglyhack "1" // remove even more stemming from the game code - requires cl_quiet //bind KEY totaltimerun // print total time run since cl_totaltimerunsave was first saved, // plus total time run for current session // no need to bind it. cl_totaltimerunsave "0" // internal. save total time run in seconds up to 32bit unsigned // (136.2 years). // it can only be altered manually on the config cl_aviMotionJpegQuality "90" // jpeg quality when cl_aviMotionJpeg is on r_screenshotJPEGQuality "90" // similarly for /screenshotJPEG net_dynamicport "1" // Randomize the port of the client if it's the default to workaround the // 'same IP issue' on NAT LANs. r_motionBlur "0" // Motion Blur (at least on NVIDIA) r_motionBlurStrength "0.90" // tune the effect of Motion Blur (up to 0.99) r_windowPosition "0,0" // comma separated window position when r_centerWindow 0. It's mostly usefull when // r_noborder is 1 since in that case taskbars can be accommodated. It's ignored when // r_noborder is 0 + it's on "0,0" to not be messing with 'draggability'. com_Sleep "0" // Reduce CPU impact by explicitly sleeping the client; in . com_SleepWhenMinimized "12" // Automatically reduce CPU impact when minimized by sleeping the client; in . com_SleepWhenUnfocused "12" // Similarly when unfocused ////////////////// //*experimental* auto-timenudge //bind KEY autotimenudge // On-demand auto-timenudge - do not use right after round change // or when spectating cl_autotimenudge "1" // turn on collection of autotimenudge data, very minimal gain if //off cl_autotimenudgeinterval "1" // interval in secs for calculation of standard deviation cl_autotimenudgecommand "ut_timenudge" // game's command for timenudge cl_autotimenudgelive "0" // live autotimenudge - *VERY* experimental: expect hell on round // change or spectating, plus it periodically causes config write // may be bearable on non-round-based gametypes. cl_autotimenudgefloodprotsec "5" // flood protection seconds for live autotimenudge ///////////////// cl_drawmouse "1" //draw mouse stats cl_drawmouseinterval "0.08" //interval it waits to calculate cl_drawmouseposx "0" //pos x on screem cl_drawmouseposy "3" // cl_drawmousesize "7" //font size //bind KEY minimize //explicitly minimize; fixes a gamma bug with alt+tab since //alt+tab's real job is not to minimize but to bring up a list. cl_alttabminimize "1" //0 to remove SDL's explicit minimize on alt+tab cl_nologo "0" // don't show the logo video (off by default). the 'normal' // "+nosplash on shortcut" way // was only a workaround, +nosplash doesn't really exist, any // +whatever would stop it cl_recordfontsize "8" // recording notification font size. 0 will disable the // notification so be careful. cl_drawclockcolor "8" // color of clock cl_drawclockfontsize "6" // size of clock cl_drawclock12 "1" // 24 or 12h clock cl_drawclockshowseconds "0" // seconds on/off cl_drawclockposx "2" // position of clock on the screen X dimension cl_drawclockposy "42" // position of clock on the screen Y dimension cl_drawclockalarm24 "0" // Turn on the alarm clock in HH:MM in 24h format cl_drawclockalarmcmd "play music/mainmenu" // alarm clock command. what happens when alarm goes off //bind KEY cl_utradio // Print radio commands available - no need to bind it //bind KEY rebind // bind a key to a cvar and its current value // e.g. /rebind F9 gear" sets F9 to "gear XXXXX" cl_stopwatch "0" // Stopwatch On/Off //bind KEY cl_stopwatchstartpause // Stopwatch Start/Pause - Bind it to a key //bind KEY cl_stopwatchreset // Stopwatch Reset - Bind it to a key cl_stopwatchposx "8" // Stopwatch Position X cl_stopwatchposy "23" // Stopwatch Position Y cl_stopwatchsize "12" // Stopwatch Size cl_drawping "0" // Ping Statistics On/Off cl_drawpingfontsize "7" // Ping Font size cl_drawpingfirstinterval "2" // Ping First Interval - collect info for cl_drawpingsecondinterval "10" // Ping Second Interval cl_drawpingposx "0" // Ping Position X cl_drawpingposy "14" // Ping Position Y cl_drawfps "0" // FPS Stats On/Off cl_drawfpsfontsize "7" // FPS Font size cl_drawfpsinterval "1" // FPS Interval cl_drawfpsposx "0" // FPS Position X cl_drawfpsposy "11" // FPS Position Y cl_drawpackets "0" // Client Packets per Second Stats On/Off cl_drawpacketsfontsize "7" // PPS Font size cl_drawpacketsfirstinterval "2" // PPS First Interval cl_drawpacketssecondtinterval "10" // PPS Second Interval cl_drawpacketsposx "16" // PPS Position X cl_drawpacketsposy "2" // PPS Position Y cl_drawsnaps "0" // Server Snaps per second Stats On/Off cl_drawsnapsfontsize "7" // SPS Font size cl_drawsnapsfirstinterval "2" // SPS First Interval cl_drawsnapssecondinterval "10" // SPS Second Interval cl_drawsnapsposx "0" // SPS Position X cl_drawsnapsposy "7" // SPS Position Y //bind KEY +blank // Blanks rendering while it's pressed + turns off 2D at the time r_blankrgb "0 0 0 0" // Blanking color in 0-255 R, G, B and 0-1 alpha r_blank "0" // Internal: manually blank rendering, 2D is not turned off com_nosafemode "0" // Don't ask to go to 'safe' settings after a crash; mainly for debugging. * Raw Mouse Motion (High-Definition) and Raw Mouse Keys: in_rawmouse 1: It utilizes raw input of Windows in accordance with a Microsoft advisory. The main advantages are higher resolution support and the elimination of cases of negative acceleration. With in_mouse -1/in_rawmouse 0, negative acceleration can occur since an internal desktop cursor is utilized which may produce the quirk if it hits the edge of the window before it recenters. Also, since the virtual cursor only sends signals when it moves, it is lower resolution/higher latency in certain cases. On in_mouse 1/in_rawmouse 0 (DirectInput) there's no negative acceleration attributed to software or lower resolution but there are higher latencies involved (also according to microsoft). The functionality is live, meaning in_rawmouse's value takes effect immediately in game. Since it accesses the raw device it might ignore high-level windows settings such as left-handed switches. The API is not always stable so in certain systems it might be better to revert to the old way. * Full info on the "bumpy" Renderer by Peter "TwentySeven" McNeill is in its thread. Porting was greatly helped by QA member undead. r_simpleshaders is 1 by default for performance, set it to 0 for its effects. Features such as fancy water or full bump mapping have to be supported by the map or override a map's shaders. e.g. try ut4_moonbase for fancy water examples. It may require newer GPU hardware or more RAM than before. It is still relatively unstable, especially on older or simpler video cards; in that case vanilla builds are available. BSP processing duration is expected to be increased. * Surround even on Stereo Headphones Systems (Hear audio coming from the back differently): o dmaHD audio is developed by p5yc0runn3r and offers real 3 dimensional H-HRTF audio with Bauer Delay and Spatialization on low CPU usage. It is optimized for 2 channel headphone listening, it offers Natural Doppler effects, Different mediums: air and water, Speed-of-sound mapping in different mediums, Logarithmic attenuation of distant sounds, Fast integer computation, automatic memory management. s_useopenal and s_useikalizer should be set to 0 to use it. More information and full var listing is in its thread. It is on by default. To revert it to base system set dmaHD_enable to 0 and restart game. Other ioq3 defaults are s_mixahead 0.2 and s_sdlSpeed 22050. o OpenAL is an API with several software and hardware outcomes and is also required by in-game VoIP support. OpenAL-Soft is a software implementation which offers basic Binaural experience. The API also provides a framework for card manufacturers to support their audio features on hardware. Audio cards that have OpenAL support on their drivers (such as Creative, Nvidia, and Realtek's) can provide forms of "Surround Headphone sound" or Surround Speakers setups (via methods such as HRTFs, Dolby 5.1 Simulation, CMSS-3D, 5.1/7.1 Speakers etc.). The system needs an appropriate library (e.g. an OpenAL32.dll) available such as OpenAL-Soft for basic software binaural audio, Creative's basic OpenAL libraries, or a manufacturer's hardware supporting libraries. o iKALiZER is the most fully featured but it can have the most CPU impact - though mainly on old systems and single core CPUs - hence it has to be enabled manually with s_useikalizer 1. It is developed by Christophe Gossa and more information is in its thread. Headphone HRTF mode is enabled by default (other modes are available (such as 5.1 or holographic headphones, see /ikalizer_channelmode) but this should be the main needed by most gamers). If you need its replacement sounds (nades sound great), download the 20MB file (from its thread) and place only q3ut4\iqs dir in %appdata%\Quake3\q3ut4 (not in .exe dir\q3ut4). If OpenAL was enabled, it has to be disabled with s_useopenal 0 before using this; /s_info should report which sound system is in use. * Google Translation; /translateAuto 1 will attempt to automatically translate chat messages, translateIN can give the input language - automatic detection by default, translateOut the output (mainly for "en" currently due to ASCII console limitations). /translate can explicitly translate a sentence and cl_translation enables the overall translation support (it involves initializing cURL). Other related vars are in the var list above. It is both multithreaded and able to re-use already open connections to Google hence its resources and networking impact is minimized. * Unicode rendering of fonts is mainly useful for output from Google Translation. Several vars can configure it starting with /Unicode_. They are listed in detail in the var list above. B0Cfw.png FGn5O.png * A base audio (and by inheritance dmaHD) issue involving dropped sounds when attempting to play them simultaneously is tackled with the /s_smpRepeat var. It effectively allows a higher limit for simultaneous playback of the same sample. This solves the issue of having dropped sounds e.g. when auto firing a G36 or M4 which was giving the illusion that rate of fire was lowered (while only the audio that was heard was erratic). The issue was apparent on all clients and systems though it is less pronounced on older versions of ioquake3 (such as the one on iourt). The new var's default limit of 16 is 4 times higher than the hardcoded vanilla one. There is a minimum limit of 8 since the previous one (4) was effectively buggy. Examples: in a quiet environment, auto firing a LR300 now can lose sounds only on timescale 3 or 4 when using the minimum allowable of 8. On the default of 16 or higher it's virtually impossible. Notice the limit is internally doubled for sounds originating from the Listener (like the aforementioned firing examples). It doesn't affect CPU load; such a process existed to begin with possibly for avoiding spamming of sounds that fill up all channels due to map or gameplay quirks. * Concerning VoIP, notice that cl_voip is 0 by default and if it's enabled the console will be slightly spammy about its requirements, i.e. "I need OpenAL" and "I need high /rate" (in bright yellow) if they're not available. If it's initialized reasonably, i.e. it got a recording device on OpenAL, it will print '* VoIP is initialized'. * Microsecond Definition is a experimental feature that might do little to be noticeable. The theory is that better granularity of timing, microseconds instead of milliseconds, will increase efficiency of the engine. An interesting outcome is that currently it's used to throttle FPS with com_maxfps in finer granularity, and as a byproduct, that makes it able to throttle at any number since it's not restricted by 1000/integer anymore. It's also used scaled on milliseconds calculations (that was already the case for UNIX). Its governing var - /sysMicroGranularity - can be changed on the go. Cl_drawFPS utilizes it for finer output in a floating form. It can be expanded to other areas of the engine/client. It is susceptible to hardware bugs or bugs on the windows API that make frequency of the timer reported incorrectly (disabling certain power options may remedy it); disable if necessary. * /totaltimerun reports the total time the client has run since its internal var was first saved (cl_totaltimerunsave), plus the time run for current session. (up to 136.2 years). ttr.png * Anaglyph rendering (with 3D glasses) 3d.png It is available in the latest ioq3 versions; detailed information on its use is here (lengthy details on its operation and vars here). Notice that it may need /r_anaglyphMode (e.g. 1) and not r_stereoEnabled which may require special hardware or not be functional yet. I tested it on a common pair of red/cyan glasses but that may not be an ideal mode. * Stopwatch (millisecond accuracy) sw3.png Use /cl_stopwatch 1 to show it; bind a key to cl_stopwatchstartpause to start/pause it; cl_stopwatchreset to zero it. Similarly with the meters described below, its position can change with cl_stopwatchposx/y and its size with cl_stopwatchsize. It supports /timescale. * Auto-timenudge is an experimental feature (do not use when spectacting or right after round change): auto.png It attempts to set timenudge based on the standard deviation of ping. /autotimenudge attempts to set it on-demand according to the collected data. A very experimental feature is cl_autotimenudgelive which attempts to do it periodically automatically; it is very quirky since hell may commence after round-change or when spectating since at that time ping data is unreliable or nonsensical (however, it may be bearable on non-round-based gametypes). Another undesireable behavior is that config is updated each time though on the on-demand version this can be considered normal. Other cvars incluce cl_autotimenudgecommand for setting the timenudge command of the game (ut_timenudge on urt), cl_autotimenudgeinterval for the interval it collects data to calculate standard deviation and cl_autotimenudgefloodprotsec for setting flood protection delay in the case of live. cl_drawping described below can be used to observe standard deviation directly according to certain intervals (data are not connected between them). * Detailed Meters: cl_drawPing, cl_drawPackets and cl_drawSnaps ms.png sps22.png pps2.png They show base value of Ping, Snapshots per second (from server to gamer) or Packets per second (from gamer to server); there is also mean value for two intervals (in seconds) set by the user via vars. There is max spike or drop of those values in the intervals set as well as mean spike or drop and most importantly, standard deviation. Standard deviation shows in general 'the common difference of most values from the mean'. This means it's a very good approximation of stability in a single number. A (direct) use of it might be to set ut_timenudge according to the standard deviation of ping but that may be debatable. Their size can change, their position can change too according to vars you can easily find out by typing the vars and hitting tab (to not flood this page unnecessarily). In the case of snaps/sec delayed packets are also shown, referring to those throttled by rate/sv_maxrate and extrapolated ones (which may have a different meaning from extrapolation shown on net meter); the packets/per second meter (client->server) demonstrates how depended is cl_maxpackets on FPS. * The /cl_drawFPS variant draws values in a floating form and utilizes microGranularity for high precision: fps-1.png * /cl_drawmouse (updates/sec, dots/sec, total dots for an interval and max dots) mouse.png * cl_drawclock has an alarm mechanism, it can be a 12h clock on choice and it can be set whether to show seconds. alarm.png cl_drawclockshowseconds shows seconds (off by default); cl_drawclock12 makes it become a 12h clock and cl_drawclockalarm24 can set its alarm time in the form of HH:MM (in 24h format). It alarms (by default) by playing the main urt audio theme. The alarm command (what happens when alarm time comes) can change with cl_drawclockalarmcmd (e.g. it can quit the client on alarm if set to 'quit'). It is not in operation when clock isn't shown to save cpu cycles (granted, it has minuscule importance but the principle of optimization stands) and it's not in operation when not in a map. Positional vars are similar to meters'; cl_drawclockcolor alters the main clock's color. * Recording notification has been modified to only show the first 10 characters of the filename to not flood the screen (similarly to iourt); cl_recordfontsize will change its font size; 0 will disable the notification so be careful. rec-2.png * Concerning teleportation, /bindteleport is a bit gimmicky, mainly for /map and /devmap since it doesn't add 'rcon' in front. If someone was running a server with it I guess they could add manually clients to binds with /rcon teleport . * On Windows, config files, demos, screenshots, and videos. are auto-saved in %appdata%\Quake3\q3ut4 to allow for multiple users and to avoid security system issues on Vista/7 (%appdata% is a shortcut to \Users\\AppData\Roaming in Vista/7 or \Documents and Settings\\Application Data in XP). An autoexec or a demo already in the old location still works fine. The priority is "read %appdata% first, app dir second; if a cfg appears in both, only read the one in %appdata%". The autogenerated q3config is being saved in %appdata%. "You can revert to the old single-user behaviour by setting the fs_homepath cvar to the directory where the game executable is located. For example: ioq3-urt.exe +set fs_homepath "c:\UrT" Note that this cvar MUST be set as a command line parameter [e.g. in the shortcut or qtracker parameters]." * Mouse keys for Logitech and potentially other mice can be differently mapped here - even on the same filename - because ioq3 uses the SDL library to access input. The good news is that previously disabled keys may now work. * The mess of technical messages each time a map changes is removed with cl_quiet; On by default. Some messages that are controlled by the game code (and not engine code fully accessed by this) are removed with an ugly hack via ..cl_quietuglyhack. * /minimize (also on a bind) explicitly minimizes the client, plus alt+tab explicitly directs SDL to minimize it (rather than relying on the windows manager). Use of /minimize can fix a gamma related bug that may appear on windows if one minimizes it with alt+tab (since alt+tab's real job is to bring up a list, not to minimize). * cmd buffer has been increased to support larger config files (of 128KB) * an interesting support feature from ioq3 is that in case of crash, the game presents the user with a choice to start with safe settings (e.g. video resolution). * a +vstr bug (involving locking of key-down event in the case of using a second +vstr bind) has been workarounded [Bug report:1]. * /rebind can work as follows: If F5 is bound to "rebind F9 gear" then hitting F5 during gaming will set F9 to "gear XXXXX". Useful for setting gear-sets binds on the fly during gaming (when not knowing what sets will be used when making scripts). * cl_aviMotionJpegQuality can adjust the quality of JPEG when cl_aviMotionJpeg is on. Similarly, r_screenshotJPEGQuality can do the same for /screenshotJPEG. Additional information Additional features * r_windowPosition (default: "0,0") basically aids the use of r_noborder 1 and r_centerWindow 0. On default it puts the game on the top for seeing taskbars. Similarly with r_centerWindow it just utilizes an SDL env var. * SDL Keyboard speed/delay being static now respects OS settings on Windows. It will update its setting each time a new input method is requested or when console is brought down. * +vstr is backported; the 'run different things on key press and release' method. * AltGr key's behavior being quirky on ioquake3 when the key is kept pressed is workarounded. Before the fix, it was possible to be unable to use AltGr simultaneously with other keys. * console text length is increased 10-fold and console history is supposed to be holding 512 entries instead of 16. * To avoid the 'same IP issue' on NAT LAN clients, it includes a workaround to have a dynamic port by randomizing it inside the dynamic range. The behavior can be disabled with the use of net_dynamicport. It only alters the port once, when it's the default, and it appears in q3config now. Dedicated servers (if anyone compiles one from this, I doubt it), still stay on 27960. Slight problem is that this is a quick workaround so if you start a server from the UI you may want to avoid the dynamic behavior for having a certain port. (It would I guess be more complete if the UI had a net_port option.) * A DNS issue involving the .net domain for the urt master is workarounded (by pointing to .info). * Server compilation is possible though untested. * cvar list limit has been doubled. * SDL doesn't lock caps and num lock by default on Windows provided DLLs; they work as normal keys as before. For other builds, (e.g. Linux) SDL_DISABLE_LOCK_KEYS=1 environmental variable/setting does the same. Same variable can override behavior in all builds. * Linux clients can use the terminal if the client started from it, like the old behavior. o Also, two related and aimed-at-ioquake3 patches by Rambetter involving fixes on the tty terminal and the console are included (bug reports: 1 and 2). + Part of those had been part of ioquake3 at later versions. * cURL is more forgiving if its lib is not found, it will attempt the defaults before giving up (libcurl-3.dll and libcurl-4.dll on windows, libcurl.dylib on mac, libcurl.so.4 and libcurl.so.3 on other unix). * A bumpy renderer issue that would make the client crash on any map that had an invalid shader stage (which is missing texture map specification) is dealt with by dropping the relevant stage(s). It's irrelevant to vanilla renderer clients. * cl_nologo (off by default) hides the logo video; the "normal" "+nosplash on shortcut" way was only a workaround; +nosplash doesn't really exist; +whatever just hijacks the command line options stopping the video; this var just does it normally. * com_zonemegs defaults to 48 instead of 24 on bumpy renderer clients to avoid certain map issues. * To print the urt radio commands available use /cl_utradio:P More information on other features * It is normal for translation to inflict some networking load since it contacts Google, hence for absolute performance one should be aware of the 'auto' mode. However, there are several reasons the network and especially system load is minimal: It orders translations via the Google Translation API which returns very short messages (not whole web pages), it is fully multithreaded since all its operations run on a separate thread, it re-uses already open Connections to Google (with cURL's 'multi' route), and it utilizes very limited CPU time since it operates at only 25FPS by default (this can be increased or reduced with its sleep cvar). o Translation output to UNIX console can also be Unicode if the terminal supports it (apart from using the in-game OpenGL Unicode rendering support). * Audio: o CPU Usage: + Benchmarking results showed dmaHD to outperform both OpenAL and iKALiZER. + iKALiZER has heavy CPU needs especially on old and single-core systems. However, in the case of modern multi-core CPUs ikalizer impact should be minimal since ikalizer not only is operated on a newer CPU but it also supports multiprocessing. In any case, one could balance their requirements and set it up appropriately; no relevant option is locked. Also, certain settings listed in its thread may help even for older processors. o iKALiZER on linux: it is reported to work with wine (with a win32 version of the client) o OpenAL may be theoretically more advanced than dmaHD or Ikalizer for those wanting to support hardware features on high-end cards such as Creative X-Fi PCI models (being among those with rich Binaural audio). It does however refer to a minority group of players and drivers may not even be good at supporting OpenAL, at least on all Windows versions. * The 'Server is for low pings' -> /reconnect workaround plus 'Server is full -> Server is for low pings' bug workaround works as follows: "If you see a 'Server is for low pings, attempt to reconnect, up to three times only. If you see a 'server full' reset the 'up to three times' counter". A nice side-effect of this is that one doesn't have to wait on the client to hit /reconnect on 'server is full' either. As a bonus, it also includes a "Reconnect on 'No or bad challenge for address'" method, since that error may be simply overcome that way, though it again has a limit (attempting it only twice) to not spam on legitimate cases. * The com_Sleep* vars while brutal at first glance may be very useful in specific scenarios. e.g. a system may be able to run reliably a server and a client playing the game at the same time on a single core, since even OS priority features may not provide stability otherwise (this was the case on a 'Desktop Scheduler' linux system at least). Also, the com_maxfpsminimized/unfocused vars may not be able to reduce CPU impact to a desirable level and there's a hardcoded limitation of the engine to ignore implicit sleeping above 100FPS. * The way /sysexec works on Windows is with some acrobatics using CreateProcess() to avoid the new program stealing focus. For non-Windows it assumes system() will be enough by letting the user use some userland magic to avoid such stealing of focus. It is generally a raw method - especially on Unix - that may need proper care on what is being fed to it. e.g. Winamp (initial launching) or even ioq3 itself (a new instance of it) will steal focus from it by force even if they are instructed not to. This can be considered 'normal'. On non-windows it may require a shell method that exits right after execution, since system() itself halts the program until exit. Theoretically, even windows can be left requiring a userland program doing any focusing/unfocusing business but it allowed some handholding. * Motion blur's strength (r_motionBlurStrengh) is considered to produce a 'very blury' effect on 0.9 to 0.99; for a 'sort of' blury effect, use 0.6. The function involved is not supported by ATI even if it's in OpenGL 1.3. The assumed reasoning is that such effects are also possible with GLSL. * "+blank" is "hax-y" since it explicitly alters and polls the value of cg_draw2d which is not part of the client. Blank's color can be changed with /r_blankrgb # # # # (in R,G,B(0-255) values and 0-1 alpha); /r_blank does the basic blanking but it doesn't explicitly remove 2D. * While windows clients can now hold more than 512 .pk3s, they will usually not be able to reach the new limit of 2048 due to BIG_INFO_STRING limitations. * It's possible SDL utilization alters behavior of base audio. Common problems and solutions * in case game console can't be brought down, force it with shift+esc. * if /totaltimerun loses its time saved, one can just convert any duration (up to 136.2 years) into seconds and manually write it in q3config on cl_totaltimerunsave * "The application was unable to start correctly (oxc000007b)" is an error that may come up in the case of mixing 64bit and 32bit DLLs from the packages. They are not compatible. The executable's name * people who use Xfire could rename the executable to ioUrbanTerror.exe, for xfire to detect it is running (for people to join your games, see your server info, talk to you in-game, etc), or otherwise set it up appropriately. * If you have an NVIDIA or other settings panel directing to specific settings, such as SLI configuration or mouse key binds on a Logitech panel, you may have to rename the .exe or add a new entry for those settings. What is in the packages * ioq3-urt.exe: Engine executable (or without the extension for linux) * SDL.dll: Required SDL library; assumed on the system on linux * q3ut4/ dir: bumpy's glsl shaders and textures; required only for non-vanilla renderer clients. * libfreetype-6.dll: Freetype font loading library for FTGL and ultimately Unicode support(required, assumed on the system on linux) o libftgl-2.dll: Optional FTGL library for Rendering of Unicode fonts (an FTGL library should be installed on linux if the feature is required) + libgcc_s_sjlj-1.dll: Required by FTGL (C++ support) (unneeded on linux) + libstdc++-6.dll: Required by FTFL (C++ library) (unneeded on linux) o LiberationSerif-Regular.ttf: An Open source font for Unicode rendering support. You can replace it with another one with /Unicode_Font * libcurl-3.dll: optional cURL library; required by autodownloading and GoogleTranslate; assumed on the system on linux. * OpenAL32.dll:- optional OpenAL-soft library (provided with windows binaries). An OpenAL library is required by VoIP. Assumed on the system on linux. o zlib1.dll: optional library required by Win64's OpenAL32.dll * ikalizer.aei: optional iKALiZER library for audio processing (it was only available in a win32 binary form) Notice Win64 and Win32 DLLs are not compatible ("The application was unable to start correctly (oxc000007b)" is an error that may come up in the case of mixing them incorrectly). Compilation options and compiler types * The main [win32] build is based on 'fast but relatively safe optimizations' on gcc (-O3) and SSE2 optimizations (-msse -msse2 and -mfpmath=sse). The old CPUs one is -O3 and MMX (-mmmx). The compilers are recent MinGW-w64 for 64 and 32bit targets (for Windows) and Debian Stable's (for Linux) . SDL on win32 builds is compiled with SSE2 and MMX flags separately. o Linux compilers could had been more recent but it would be hard to support systems with an old lib c. Source is available anyway. * Notice that these are not the most aggressive optimization options available; this is to avoid reliability issues while still being relatively fast (e.g. on -ffast-math, headshots on ikalizer were occasionally heard next to the player whatever the distance). o Similarly, the MS C compiler was abandoned due to severe reliability issues (notably big FPS reductions in several cases; also potentially erratic firing rate). * Some 'historical' options such as unrolling loops are removed because they don't appear to improve performance or they worsen it. * Win64 and Linux64 builds are on -O3 though that implies also -msse -msse2 and -mfpmath=sse automatically since there are no x86_64 processors that don't support them. * Makefile has support for 'profiling' for mingw builds (with PROFILEGEN/USE flags) though the advantage is minuscule or none while it mainly lowers the file size, hence it's usually avoided to facilitate frequent uploads of binaries. Source The main source is based on latest ioq3 engine source. It has been modified to run UrT directly, to be standalone, to have UrT's icon and to include the various modifications listed here. SDL source has been modified minimally to not lock caps and num lock keys by default. External sources that had been adopted in an almost Vanilla form are dmaHD, iKALiZER and Bumpy's (links and info are on the Notable features sections above). See 'to Compile it.txt' for basic guidelines on compilation. Minor modifications on iKALiZER and Bumpy iKALiZER's global volume had been adjusted to approach the sound of 0.22b (only 0.22(without 'b') is released in source). It also includes empty placeholders for voip to keep the client running if cl_voip is 1. r_ext_multitexture had been locked to 1 temporarily to avoid a bumpy issue. Notable libraries it uses * SDL is a library for calling APIs related to graphics, audio and input (and is responsible for window creation), hence it might provide a better behavior to several areas compared to builds without it (e.g. it may solve issues related to bringing up 3D rendering). A recent SDL 1.2.x Hg is used to avoid a cursor issue with the official release and potentially getting better behavior by being on a new code base. * cURL is the library used by autodownloading to connect to servers having maps and by GoogleTranslate support. * Freetype and FTGL are used for Unicode fonts rendering (mainly useful for translation output) * iKALiZER depends on its 32bit DLL available (the .aei file). Other notices * There is virtually no effect on performance if the ping/snaps/fps etc. meters added here are set to not be shown on the screen; if they are not shown, their calculations are not performed either; however, even if all of them are drawn, the performance decrease is minimal (this notion is similar for default 2d tools in the game such as the net meter). * SMP is mainly safe (and most probably doable at all) on Mac only [because only they have thread-safe OpenGL drivers], hence it's not available on main builds. One is of course free to compile it in and try their luck. ioq3 development reports that it was originally developed for very old systems and it may not offer an advantage. * Input behavior changes on linux too are most probably in order; SDL support was at its infancy in ioquake3 when iourt was made. * x86_64 code is relatively normal to be slower since admittedly by vm_x86_64*'s original author, it could use some more optimizations on the code (and urt only offers .qvms and not dlls/sos to avoid it). However, it may be only marginal, e.g. only -2% FPS on a Win64, and in cases it might be impressively higher, e.g. +20% FPS on a certain debian64. It may be higher in certain cases even with the code shortcomings since the kernel or/and supporting libraries may be favoring x86_64 code (as it was apparently the case on a debian64). Hardware may also be related. Its qvm compiling stage (between connecting and seeing the map loading screen) may also be slightly longer due to having a more complex method of jit compilation. * Since quake3arena.com had died for a while hence update.quake3arena.com polling spit irritating remarks, and it's not used, CL_RequestMotd() has been commented out as it is in iourt. * Not all changes are listed in this page; several minor edits are not shown; e.g. removing quirks that only resulted in printing warnings. * Notice cURL DLLs provided are 7.21.* even if the filenames may indicate older ones (this was done to avoid useless warnings due to already saved cvars). * r_maxstaticverts appears to be a var added for 'bumpy'/HD renderer to ease pre-allocation of memory for certain operations. If a warning concerning it pops up in some maps, it could be increased relatively safely. e.g. try double. Uninstallation To uninstall this, only remove the files that were extracted; for complete cleanup on windows' %appdata%\Quake3 can be removed. Known Bugs or Quirks * bumpy renderer is still relatively unstable and it doesn't support certain older or simpler cards, currently. If everything fails see the vanilla renderer versions in downloads. * High Frequency timer might produce erratic behavior on certain hardware/OSes; disable it with /sysMicroGranularity 0 in that case. It is reported that certain dynamic (over-)clocking features in certain motherboards produce unstable results (possibly due to hardware bugs or bugs on the windows API (since the feature does adjust automatically on frequency changes)). In cases, restricting the client to one CPU core might help (on SMP systems). * Raw input may be quirky in certain systems, but, notice various games have the issue - e.g. quake live have it available but not default deliberately - hence it's most probable the issues are external. * r_ext_multitexture had been locked to 1 temporarily to avoid a bumpy issue. * Win64 client may be unstable on certain high NVIDIA effects (this is potentially an NVIDIA drivers issue). * Caused by -fomit-frame-pointer (not found on current builds): crashes on /disconnect (or e.g. from game to main menu). * [It may be at least partly alleviated with recent gcc 4.6.0 builds:] Win64 build on OpenAL-Soft sound appears to have 'repeat the last sound a couple of times' artifacts occasionally. o Creative's OpenAL sound (non OpenAL-soft) appears to be very choppy on win64 [it appears to be alleviated on gcc 4.6.0 but artifacts are still there] . + Creative's OpenAL may be choppy or quirky in all other windows clients too. * /ut_weaptoggle (alone) crashes the client in main game (report and mailing list discussion) * Caps/Num lock 'non locking' doesn't work on in_mouse 1 (SDL issue, bugzilla report) o x86_64 on in_mouse 1(Win64) goes berserk; same bug report as above (may not appear on raw mouse). * severely dropped FPS on MSVC builds is occasionally not apparent on gcc builds (gcc is now default, MSVC builds are not provided anymore). * Unclear whether history length change is respected. * sometimes autotimenudge [at least on on-demand version], always returns 0 deviation. * the 'not being able to bring down the console needing shift+esc' may manifest itself on in_mouse 1. * linux bumpy crashy? (at least on sli 64) * 44100 audio quirky in openal? (perhaps normal in 4.1) * relation between high ping and low fps? (at least on linux)