March 3rd, 2014, 20:22
Nemu says DMULTU:
00000000000031E1 * FFFFFFFFFFFFFF1D = 000031E0FFD3C57D
but should equal:
In other words, Nemu handles DMULTU the same as MULTU!
Turns out the reason GoldenEye suffers those crazy blackout issues is due to an error in the way DMULTU is handled. It's being treated as MULTU, using only the lower 32bit of each register. GE uses DMULTU when correcting a player's y position down to floor level, which ironically sends it flying exponentially high into the sky.
As in the previous example:
53742922876285.0 != -2898563.0
Now, I'm not a Windows hacker, so if somebody wants to patch Nemu itself you're on your own. However, since the list of abused games is likely rather short, you can change instances of DMULTU to DMULT when applicable.
For instance, in NGEE:
Set 7000EDC3 to 1C. Set an execute BP on 7000EDC0. On hit, step once, remove BP, press Go. You should be able to traverse any map without visibility issues.
Tags for this Thread