Tech. facts

Main
Download
Debug commands

Tech Info
Developer section

Contact
Links


 


How does UltraHLP work??

The main part of UltraHLP is a "Patch engine", which is inserted into UltraHLE. This engine reads all patch information out of the "ultra.kwl" file. So we get the possibility to patch parts of the loaded "ultra.exe", e.g. some variables. This is much better, then just directly patch "ultra.exe", because the full data segment (which extends from 0044800h to 00F8DD18h) is virtual memory and not physically existing in the exe file. A good example is the text output in the debug console. It is controlled by a byte in the data segment (somewhere far beyond F40000h) and have to be set to 01h. This can only be done at runtime.
Another big advantage is the easy way of implementing new features and patches, just by creating a new entry in the "ultra.kwl" file. 

The additional joystick support is added by inserting new code which handles the information for all buttons after the fourth. This new code is (in version 2.0) inserted in the gap between code and data segment. There is enough space, because of the page alignment forced by the PE (windows executable) format. It is possible to support up to 16 buttons (because the button structure is a 16 bit type). But who needs that many buttons...?

The "mario can“t jump high bug" is caused by an clumsy handling of the joystick input. We correct this by removing an invalid command, which deletes the ButtonStatusWord.

The debug is implemented in the original "ultra.exe", but the start procedure is not called. We changed the handling procedure of the "options/graphic emulation" menu item, to initialize and show the debug console. If the menu item is selected again, the console is disabled.

Why did you know all this things??

We just disassembled "ultra.exe" by using IDA 3.8 pro, the best (we know what we write) disassembler of the world, much better than this W32Dasm crap. Then we spend hours and hours to understand parts of the asm source. After a lot of hard work, we knew enough about UltraHLE, to make some patches. For extensively testing we used the best debugger of the world, Softice 3.24. All patches are written in pure asm code, compiled with Tasm 5.0. 
The cool graphics are made with 3dstudio and photoshop. No 3rd party filter were used.

How can I participate in this great adventure?

You wanna help to improve UltraHLE and implement new features? Fine, then go to the developer section and apply via EMail. Please do not apply, if you are a fucking lamer, who wants to get some "inside" information.