Tips For Tweaking Unreal By: Mark Rein You should have no problem making Unreal totally playable on a system like this. It was downright FAST on this guys 200MMX with the VoodooRush when I did things and still looked and played AMAZING. Here's where to start: 1. Get rid of all the background crap you have running - ALL OF IT! Turn off screen savers and backgrounds and Active Desktop, completely unload ICQ, etc. These things suck the power out of your computer and compete with Unreal for your vital RAM. 2. Turn on low texture quality and low sound quality. You probably won't even notice the difference but the speed will improve. 3. Go into the Advanced Options menu and change the following: Under Audio: - set EffectsChannels to 8 instead of 16 - set LowSoundQuality to True - set OutputRate to 11025hz - set Use3DHardware False - set UseFilter to False - set UseReverb to False - set UseSpatial to False - set UseStereo to False - set UseSurround to False Note: An A3D sound card like the MonsterSound 3D will only slow down your system. There is a lot of Unreal Engine overhead in processing 3D audio and some latency on the card itself when playing new sound effects that will slow down Unreal. It's no problem if you have a fast system but it can be the difference between smooth play and jerky play on slower systems. Under Display: - set CurvedSurfaces to False - set LowDetailTextures to True - set ScreenFlashes to False Under Rendering and then under 3DFX Glide Support: - set Coronas False - set DetailBias 0 - set DetailTextures False - set FastUglyRefresh True - set HighDetailActors False - set RefreshRate 85hz (if your monitor supports this) - set ScreenSmoothing False - set ShinySurfaces False - set VolumetricLighting False If you're using Software Rendering here are the settings under Rendering, Software Rendering: - set Coronas False - set DetailBias .25 - set FastTranslucency True - set HighDetailActors False - set HighResTextureSmoothing False - set LowResTextureSmoothing False - set ShinySurfaces False - set VolumetricLighting False Once you get Unreal running quickly you can try turning some of the details back up. The first thing I'd do is turn Stereo support back on and maybe turn the Output rate up to 22,025hz but only if you think the sound quality is too low. Most people don't really notice this and it's a big performance hit when you raise it. I'd try changing one setting at a time until you see performance start to slow down again. To me, all these setting at their lowest level still deliver and outstanding experience and I never bother turning them up. The only think I like to change myself is the FastTranslucency for when I'm playing single player and want to be blown away by the beautiful environments - but be warned, turning this on takes a BIG performance hit. Here are some additional notes regarding performance settings: Unreal Performance Tips Unreal requires ALL of your computers resources in order to run at it's best. People sometimes don't even realize all the programs they have competing for their computers RAM and CPU attention. I get a lot of emails on the subject of Unreal performance. I get just as many "Wow Unreal runs GREAT on my P166 with 32Mb of RAM" as I do "Wow, Unreal is really slow on my P2-300 with 128Mb of RAM!". What does this say? It says the guy with the P166 has a really clean system and isn't trying to run Unreal at 640x480 while the guy with the P2-300 probably has a lot of his RAM being taken up by things other than Unreal or might be trying to run Unreal at a resolution his video card has no business running games at. ANY P2 system should ROCK with Unreal or it's set up badly - period. Any MMX system should have no problem running Unreal and any P166 or up, if configured well, should be able to give you a very enjoyable Unreal experience. So what are the big things that hurt Unreal's performance? The #1 problem: background processes. Things like Virus scanners, ICQ, and large high-res wallpapers all steal valuable resources. If you have icons in your system tray (lower right corner of your Windows task bar) right-click on them and figure out how to close down their programs. A lot of times when Unreal "hitches" it's due more to memory than anything else. When you get a "hitch" it's usually when Unreal is accessing your hard drive - it's trying to load content that didn't fit into memory. This is why it's SO important to keep as much memory free as possible and to be running background programs or big wallpapers that consume RAM. Unreal also requires a considerable amount of Virtual Memory. You can check out your virtual memory settings through the System icon under the Windows control panel. Make sure you have at LEAST 100Mb of virtual memory. Permanent virtual memory usually runs a lot faster than letting Windows decide. Some users report that setting up a permanent swap file of 150Mb (i.e. minimum 150Mb, maximum 150Mb) on a freshly defragmented harddrive makes a big difference to their performance. Once you've done these things there are also several settings in Unreal that can help speed things up a little and reduce the amount of RAM Unreal uses and which generally helps speed things up quite a bit and reduce hitching. The first two major settings are right within the Unreal game menu itself. Under Audio/Video options there are two settings: Texture Detail and Sound Quality. Setting these items both to low will use less RAM than setting them to high and you probably won't be able to tell the difference. There are other settings in the Advanced Options menu including a setting under Audio that allows you to set the sound Output Rate down really low (11025hz). If you have a slower computer but you have a Monster Sound or other A3D card turn off Use3dHardware - unfortunately 3D sound on these cards takes a lot of CPU horsepower. Under Rendering-> Software Rendering you might try turning HighDetailActors to false and Volumetric Lighting to False if you have a slower system. A lot of people just don't realize how much is running in the background. If you bought a fancy name-brand computer from a big-name retail that came with a lot of pre-installed software the chances are pretty good there's a lot of software running every time you boot up Windows 95. If you take the time to get rid of it you will probably find your Unreal experience improves massively. Unreal is just the first of many games that will push your system to it's limit. By taking the time to learn how to make Unreal run better you will be more prepared for the future of PC gaming. There are plenty of Unreal fan sites that offer "tweaking guides" and there is some good advice to be had from these sites. I highly recommend visiting some of these sites including http://unrealnation.com for further reading. Mark Rein, ----------------------------------- --------------- ---------- Unreal Console Commands Tim Sweeney Epic MegaGames, Inc. tim@epicgames.com http://www.epicgames.com/ Audience: Advanced Users, Server Administrators, Programmers. Last Updated: 12/21/98 Command Line Parameters -alladmin: Enable all players administrative access to the server. -conflicts: Show objects of different classes whose names conflict. -editor: Runs Unreal for editing. -firstrun: Re-asks the "First Run" questions in Unreal. -log: Runs with the log window initially visible. -nobind: Don't treat UnrealScript/C++ binding errors as critical, for rebuilding scripts and avoiding the chicken-and-egg binding problem. -noddraw: Disables DirectDraw support. -nodsound: Disables DirectSound support. -nogc: Disables garbage collection. -nohard: Disables 3d hardware support. -nok6: Disable AMD K6-3D support. -nolog: Don't show log window. -nommx: Disables MMX support. -noreplace: Don't automatically replace textures, sounds, and music if they are not found. -nosound: Disables sound. -nowarn: Disables warning message boxes on the screen. -profile: When C++ is compiled with DO_SLOW_GUARD=1, generates an UnrealScript function profile using the timings in the most recently played level only. -make: Rebuilds all .u files from their source .uc files. -make -h: Rebuilds all .u files from their source .uc files and generate a C++ header for each package. -safe: Runs Unreal in "safe mode", avoiding loading any device drivers which could crash if there are hardware/driver problems. -server: Runs as a dedicated server. -showdep: Causes script compiler to log dependency information when recompiling scripts. -silent: Run silently, with no log window, and no display of error messages. Critical errors just cause the engine to exit silently. -strict: Treat all script warnings as critical errors; useful for tracking down the call stack when debugging scripts. INI=inifilename: Sets the .ini file to use for configuration, normally Unreal.ini. LOG=logfilename: Uses the specified log file instead of Unreal.log. Useful when running multiple copies on the same machine. MULTIHOME=12.34.56.78: Sets the "home" ip address (in numerical format) for Unreal of a machine with multiple network cards. PORT=num: Sets the UDP port number for the Internet server. READINI=inifilename: Sets the .ini file for reading only (not for writing); overrides the INI= option. C++ Console Commands (Only works on the local machine) ADMIN: Sends a console command to the server you're connected to. You must be an administrator in order to use this. BRIGHTNESS: Cycle through 10 screen brightness values. CHAT: Brings up a prompt to type chat text. CANCEL: Cancels an "open" command in progress that is trying to connect to a network server. CDTRACK num: Play the specified CD track. CONSOLE FULL: Make the console fullscreen. CONSOLE HIDE: Hide the console. CONSOLE SHOW: Show the console. CPUSPEED=#: Identify your CPU speed, useful for machines which don't autodetect their speed properly. For example, CPUSPEED=266. DEBUG CRASH: Test crashing the game by appError. DEBUG EATMEM: Test allocating memory until it fills up. DEBUG GPF: Test a general protection fault. DEBUG RECURSE: Test crash by infinite recursion. DUMPCACHE: Display the contents of the memory cache GCache. DUMPNATIVES: Display a list of unused native function ids. EDITACTOR CLASS=classname: During game play, edits the properties of the nearest actor belonging to that class. Cool for debugging. ENDFULLSCREEN: Go back to playing in a window. EXEC filename: Execute the console commands in the filename, default is in the System directory. EXIT: Exit the program. FLUSH: Flush all caches. Regenerates all lighting, 3d hardware textures, etc. FLY: Fly around (instead of walking). See WALK. FOV angle: Set the field of view, for example "FOV 90" for 90 degrees. GHOST: Fly around and go through walls (see WALK). HIDEACTORS: Hide actors during game play. JUMPTO x y z: In UnrealEd, move the viewport to a certain X,Y,Z location, useful in conjunction with tester reports generated with the REPORT command. LOADGAME num: Load a game in position 0-9. MARK: Mark all objects that are in memory (for garbage collection debugging in conjunction with MARKCHECK). MARKCHECK: Display a list of all unmarked objects that are in memory (for garbage collection debugging in conjunction with MARK). MEM: List memory usage; only works when Unreal is compiled with the memory-tracking option (it's usually not). MEMSTAT: Show Windows overall memory statistics. MUSICORDER num: Change to a certain track in the song (0=ambient, 1=action, 2=suspense). OBJ CLASSES: Prints a list of all loaded classes. OBJ DEPENDENCIES PACKAGE=pkgname EXCLUDE1=otherpackage EXCLUDE2=otherpackage...: !! OBJ GARBAGE: Collect and purge garbage ("garbage" means objects which are no longer in use). OBJ HASH: Show object hashing statistics. OBJ LINKERS: Show a list of active linkers (each linker is responsible for loading objects from a package file). OBJ LIST CLASS=objectclass INSIDE=insideclass: List all objects belonging to the class and residing inside the specified object. If the class isn't specified, lists ALL objects. If the inside object isn't specified, shows all objects. Gives a summary of memory usage. This is very useful during game play for figuring out how much memory is being used. In UnrealEd, this statistic isn't useful because a huge amount of extra stuff is loaded which might not be used by your map. OBJ REFS CLASS=objectclass NAME=objectname: Show a list of objects which reference the object you specify. When trimming memory usage, this is useful for figuring out why some object is being loaded. OPEN url: Opens a local map (i.e. "unreal.unr") or an Internet server (i.e. "200.0.1.16" or "unreal.epicgames.com"). PREFERENCES: Displays the preferences in a window. REPORT: Copies a report of the current gameplay situation to the clipboard. You can then paste the resulting text into an email program, Notepad, etc. Extremely useful for beta testers, because it dumps the player's X,Y,Z location, the difficulty level, etc. RMODE: Set the rendering mode. 0-9. SAVEGAME num: Save the game in a specified position, 0-9. SHOT: Take a screenshot and save it in the System directory with a consecutive name like Shot0001.bmp. SHOWACTORS: Shows actors during gameplay. SOCKETS: In network play, shows a list of network sockets (UNetConnection's) in use. STAT ACTOR: Shows various statistics. STAT CACHE STAT CLIP STAT FILTER STAT FPS STAT GAME STAT GLOBAL STAT HARDWARE STAT ILLUM STAT LIGHT STAT MESH STAT POLYC STAT POLYV STAT REJECT STAT OCCLUSION STAT SOFT STAT SPAN STAT ZONE TOGGLEFULLSCREEN: Toggles fullscreen mode on and off. TYPE: Types text on the console. URL urlname: In network play, parses a URL and displays its components. VIEWUP: Sizes the view up. VIEWDOWN: Sizes the view down. WALK: Walk around normally (see FLY, GHOST). UnrealScript console commands (Can be used by remote administrators) ADDBOTS : Adds more bots to the game. ALLAMMO: Gives you all the ammo for your current weapons. GOD: Makes you invincible. INVISIBLE: Makes you invisible. KILLALL : Kills all actors of a certain class, for example "KILLALL UNREALI.BRUTE". KILLPAWNS: Kills all monsters. PLAYERSONLY: Pauses all non-player actors in the game. Cool for debugging scripts, taking screenshots. SAY : Broadcast a message to other players in the game. SLOMO : Sets the game speed, 1.0 is normal. SETNAME : Change your name (works in network play too). SETTEAM : Change your team (works in network play only when the rules allow). SUMMON : Spawns an actor of the specified class (for example, SUMMON UNREALI.BRUTE) in front of the player. SWITCHCOOPLEVEL : Causes the server (or local machine, in a single-player game) to switch to a new level with coop-style weapon carrying between levels. SWITCHLEVEL : Causes the server (or local machine, in a single-player game) to switch to a new level. Console configuration commands GET Gets a configurable class parameter. may be a partial classname, such as "playerpawn", or a qualified classname such as "engine.playerpawn". The class must be loaded in memory, otherwise GET returns an empty string. must be the name of a variable that is designated as configurable (either in UnrealScript using the "config" keyword or in C++ using CPF_Config). This returns the value of the configured variable, converted to a string. The value returned by GET reflects the class's default value (for scripted classes, this is the default value that was set for the class using its property sheet). At any time, zero or more instances of objects belonging to may be in memory, and may have modified values of , and they don't affect the value returned by "GET". SET Sets the default value of a class's variable. If the class is designated as configurable (using the "config" keyword in UnrealScript or CLASS_Config in C++), and so is the variable, this function updates the Unreal.ini file to reflect the new default value. If any instances of objects belonging to are in memory, all of those objects are updated. When an object's config variables are updated, they are notified as follows: The object's PreEditChange() function is called, basically saying "Get ready to be modified!" The object's configurable variables are updated with the newly configured values. The object's PostEditChange() function is called, saying "You've been modified, so validate and update yourself". This procedure enables objects to validate their configurable properties and update themselves. For example, the audio subsystem's PostEditChange() function clamps the sound volume to a safe range of 0.0 - 1.0 (because the SET command enables users to set it to ridiculous values) and then updates the actual volume of the sound effects that are playing. Unreal Key Bindings In the Unreal key bindings (under Advanced Options / Advanced / Raw Key Bindings), you can associate console commands and other special input commands with key presses and releases. In the text box next to a key name, you can type in one or more console commands, separated by the "|" character. For example, to bind the "S" key to the "Jump" alias, type this: Jump That causes the "Jump" alias to be executed when th user presses the "S" key. For another example, if you want to bind a chat message to a key, use this: Say "Come get some!" In addition, you can bind multiple actions to a keypress like this, to make the "S" key both jump and say a message. Jump | Say "Come get some!" You can also bind an action to the release of a key by using the OnRelease keyword. For example, you can make the "S" key fire when it's released: OnRelease Fire Or you can make the key jump when pressed, and fire when released: Jump | OnRelease Fire Keys can be bound to any of the following kinds of things: Any console command in the above lists. Any key alias (explained below). Any special input command. "Special input command" refers to console commands which only make sense in conjunction with the press or release of a key, or the movement of the mouse or joystick along an axis. The special input commands are: BUTTON , for example "BUTTON bFire": Maps a button to an UnrealScript variable stored in the Pawn class or any subclass. This tells the input system to automatically set the variable to True when the key is held down, and False when it's not pressed. For example, the Pawn script looks at bFire to tell whether the fire button is being held. The setting of bFire is not some hardcoded behavior of the engine, rather it is propagated into UnrealScript code by the input system, as a result of binding a key to "BUTTON bFire". TOGGLE , for example "TOGGLE bLook": Like the BUTTON command, but simply tells the input system to toggle the boolean variable's value when the key is pressed. AXIS , for example "Axis aStrafe Speed=-300.0". Maps an analog input axis movement to an UnrealScript variable, scaling it by some factor. The current axis keys listed in the Advanced Options menu are: MouseX, MouseY, MouseW (Intellimouse wheel), JoyX, JoyY, JoyZ, JoyR (joystick rudder), JoyU, JoyV (joystick alternate axis for example the Panther XL trackball). Supported PlayerPawn axes are aBaseX, aBaseY (base movements which are translated to rotating, strafing, looking, and forward movement based on context), aMouseX, aMouseY, aForward, aTurn, aStrafe, aUp (not used), aLookUp, aExtra0-aExtra4 (not used). To see how the game code processes movement, see the PlayerPawn class's PlayerInput and PlayerTick functions. In addition to the Advance Options menu, you can also bind keys from the console using the following command: SET INPUT For example: SET INPUT X Fire SET INPUT Enter Fire Unreal Key Aliases Key aliases are listed in Advanced Options / Advanced / Input Aliases. Aliases provide a convenient way to map one word (for example, "Jump") to a complex series of console commands that carry out a particular action. For example, the "Fire" alias is defined as: "Fire | Button bFire". This has the effect of calling the UnrealScript "PlayerPawn.Fire" function (aliases are not recursive), and then causing the input button bJump to be set to True as long as the key is held.