Isn't it time we got a sticky thread describing this problem and the solutions? I'll have a go right here...
Problem: Unreal, UT and old Unreal-engine games run 'erratically' - the game speeds up and slows down at random, seemingly independent of the framerate.
Cause: This is caused by the way the Unreal engine calculates time, which is a little archaic has a number of issues with modern hardware - primarily because it is based on the CPUs clock speed, which on modern CPUs is automatically varied to save power, but it also has issues when the framerate is particularly high.
Quick Fix: Sorry, you're out of luck - this can be caused by a range of issues, so go through the solution step-by-step and see which ones actually fix the problem.
Solutions: Try the following in order - generally the first few tend to fix the problem for most people, and the latter are more extreme measures for problematic systems (dual-core laptops running Vista are particularly awkward).
- If you have an AMD multi-core processor, install the AMD Dual-Core Optimizer (5th down). This is needed because of a bug with some AMD processors which means that the timers on the CPU cores aren't synchronised with each other.
- UT has a built-in flag you can use to tell it the CPUs clock speed if it doesn't detect the speed correctly (it shows the detected speed in UT.log). Create a shortcut to UnrealTournament.exe and add ' -cpuspeed=X' to the end - without the quotes, and replacing X with you CPUs clock speed in Mhz.
- As stated above, UT has issues with very high framerates (200+), you need to put a limit on it. The best way to do this is to install one of Chris Dohnal's updated renderers (OpenGL, D3D8 or D3D9) - this is worth doing anyway. Try OpenGL first, and if you have issues use D3D9 or 8.
- Copy the .dll (and .int if present) to UT\System
- Run the game in safe mode (create a shortcut to UnrealTournament.exe and add ' -safe' to the end)
- When it asks to select a render device, click on 'show all' at the bottom and select the appropriate device
- After the game starts up, open the console (normally the ~ key if I remember correctly), go to Render Devices > OpenGL (or D3Dx as appropriate), find the FrameRateLimit entry and set the value to 200.
- While you're there, find the SwapInterval entry and set it to 0 - see the section on VSync for an explanation.
Alternatively you can edit your UnrealTournament.ini directly to make these changes but you're on your own doing this, unless I update this guide that is.
- The next step is to disable the CPU's power saving features before running UT. There are a number of ways to go about this depending on which operating system you use, so I'll list the easiest first.
- On Windows XP, go to Control Panel > Power Options, and in the Power Schemes tab select 'Always On'. This can be done automatically in a batch file, as explained by Blitzschlag on the Infiltration forums.
- In Windows Vista, go to Control Panel > Power Options and select the 'High Performance' profile.
- In a modern Linux distro e.g. Ubuntu, the easiest thing to do is to use the EMIFreq applet - simply select either 'Performance' or a fixed speed.
Failing this there are three ways to go about this, none perfect but all fairly fool-proof.
- The first, and in my opinion the easiest, is to run a CPU-hungry process in the background. Prime95 is a good one to use as it defaults to running in the background, so won't interfere with UT at all.
- Download Prime95 from the link above and extract it to any location
- Run the application, and if nothing happens go to Options > Torture Test
- Select 'Small FFTs' as it uses the least amount of memory
- To start off, tell it to run only one thread - no need to waste any more power than is needed
- Click OK and leave it to it
- The second is to use a 3rd-party utility to manually set the CPU speed. These tend to vary in effectiveness though - I use RMClock on Windows XP but don't know if it supports Vista yet. Feel free to suggest any others.
- The third is a little more involved, but if you aren't worried about power-saving you'll only have to do it once. Disabling power saving in the BIOS is a fairly fail-safe method, but the exact option to look for can vary depending on the CPU and BIOS type. Either way, you'll usually find the settings in something like Advanced Options or CPU Features. For AMD processors, look for Cool & Quiet and disable it. For Intel CPUs look for something like EIST Function, Thermal Control and C1E Function.
- VSync (or Vertical Synchronisation) is a bit of a contentious issue - some people claim that enabling it solves the problem, while in my experience it can hinder things - try it both ways (0=off, 1=on). In a nutshell, it forces the video card to synchronise the swapping of buffers (i.e. outputting the picture) with each refresh of the monitor, in order to prevent 'tearing' effects where the monitor displays the upper part of one frame and the lower part of the next. On most modern flat panel monitors this is 60Hz, giving at most 60 updates per second, and in my experience a 60fps limit doesn't put enough load on a modern CPU to make it run at full clock speed all the time, meaning power saving will cut in and mess up the game speed.
Something I've missed, want anything clarified, have any suggestions, still can't get it working? Post here or PM me.