alive_reversing
alive_reversing copied to clipboard
Checkpoint gets clipped by the screen clipper
https://user-images.githubusercontent.com/7420121/106371200-846e6a80-6359-11eb-94b4-f524e4409696.mp4
The check point gets sliced in half by the screen clipper that the portal creates. The portal is supposed to draw on top of the clipper and not cut the check point.
So I gave this a shot and honestly I kind of got stuck.
The AO::ThrowableTotalIndicator that is spawned (on AO's Abe.cpp line 3075) is clearly set to use Abe's own layer. Yet, Abe himself is supposed to be clipped by the portal. So the indicator itself should also be clipped? .. So... Nothing's broken? Unless I misunderstood something about AO::ScreenClippers. Changing the layer argument in the constructor call to something higher than portals "fixes" the bug.
I also checked the decompiled function and sure enough it seems the indicator is set to use Abe's layer there as well. Although I might be wrong, I'm no assembly expert.
So then I started playing around with the hook manager. Unhooking the AO::ScreenClipper class methods didn't work. Unhooking the AO::ThrowableTotalIndicator methods didn't work either.
So I'm now convinced that this is actually some sort of bug in the OG renderer, or perhaps some extra checks in AO's renderer that look for types? But would that even be possible? Or perhaps the OG renderer didn't/couldn't clip line primitives?
I couldn't really 'unhook' parts of the renderer as it seems to exclusively use AE's renderer. It's either AE's renderer or nothing is draw on the screen. So eitherway I can't really test for this hypothesis. Unless you know of a way to use AO's renderer which works?
EDIT: Btw here's a save file that starts right where the vid starts because I'm too lazy to get to here using ddcheat all over again: test.zip EDIT EDIT: Also, what does the "Stand alone any bit" label mean?
Its not easy to test AO with the original rendering code as it uses AEs. However if you simply run the original game you'll see this issue doesn't repro. I don't think its worth trying to fix the software rendering. I would check/fix the OpenGL rendering instead.
"Stand alone any bit" means the standalone EXE 32 or 64bit. As there is also the injected DLL versions of the game code that can be used to compare against original functions.