==================================== 7. How This Works: ==================================== This is an FOSE plugin dll. It basically hacks Fallout. 7.1: FPS Management: The FPS management code monitors framerates and adjusts the flow of gametime. It mitigates stuttering by making Fallout game logic not skip ahead when it does stutter. Effectively, frames that take a long time end up being in slow motion. This is done by making Fallout act as if iFPSClamp were set to MinimumFPS, but only for frames that are slower than MinimumFPS. This may also improve stability. It can also impose a maximum framerate - some people perceive Fallout as smoother when its framerate is prevented from exceeding half the refresh rate, plus this helps free up resources for Fallouts secondary threads. The FPS management code can also puts the main thread of Fallout to sleep for brief periods of time, which has been oberved to improve stutter for some people (though that functionality may have been made redundant by other things this plugin does). 7.2: Critical Sections: Critical sections are microsoft-provided thread synchronization primitives that Fallout uses internally to make sure that threads don't accidentally corrupt each other. FSR by default makes most critical sections attempt to play fair even at the cost of throughput, making sure that no thread hogs a resource that other threads need. However, one specific critical section is overriden to use a slightly less fair method, and another specific critical section is suppressed so that it has no effect at all. And that's all very configurable from the ini file. Also the spincounts get overriden. 7.3: Heap Replacement: This feature is not working properly on Fallout 3 yet. 7.4: Hashtables: Fallout includes a bunch of hashtables for looking up all sorts of things. They use a generally horrid hashtable implementation, but the real problem is they never resize their hashtables. When a hashtable gets overful, performance drops. If a hashtable is underful then a tiny bit of memory may be wasted. Unfortunately, much of the hashtable code is inlined all over the place, and FOSE makes various assumptions about the hashtables as well, and its not at all clear to me what the relevant threading model is supposed to be, so changing them safely is quite difficult. Still, I have some hashtable hooks, and they're gradually getting better. FSR can increase the size of hashtables once they get overful. The act of resizing them is fraught with problems however - it can cause crashes or glitches, and the methods I use to prevent it from doing so can cause small performance stutters or other crashes or glitches. Still, at this point I think it might be working kinda decently. In the future I may replace or suplement this with overriding the initial sizes of certain hashtables.