Skip to content

Hotfix 0.1.1

Pre-release
Pre-release

Choose a tag to compare

@NeverCookFirst NeverCookFirst released this 07 Sep 11:34
· 59 commits to main since this release

Two crashes and a performance trap, all fixed.

Ropes and vines no longer kill the game

Touching a rope or a vine ended the game instantly, with game.log stopping
mid-sentence and no error of any kind. Reported on the third level, where ropes
first appear, and it also explains the freeze some players hit on entering the
LEGO Movie world.

This was a bug in the recompiler, not in the game. Four branches inside
sub_839AACC0 were compiled into a hard abort, even though the label they jump
to sits in that very same function. The address check only trusted targets that
land inside a recorded block, and the original compiler had left this piece of
code in a gap between blocks - so a perfectly valid jump was treated as a jump
into nowhere. The generated code now emits the jump whenever the label exists,
which also cleared 8 of the 14 aborts of this kind across the recompiled source.

The game no longer runs on your integrated GPU

On laptops and desktops with integrated graphics the game could end up running
on the integrated chip while the dedicated card sat idle - the frame rate was a
fraction of what the hardware should manage, and the only cure was adding a
manual exception in the driver control panel.

The two flags that ask the driver for the dedicated GPU were declared in the
wrong binary: drivers read them from the executable's export table, and ours
were in a DLL, where nothing ever looked. They are now in the executable. The
Direct3D 12 backend also asks Windows for adapters in high-performance order
instead of taking whichever one is enumerated first.

game.log now names the card it picked and how much dedicated memory it has,
and says so plainly when it lands on integrated graphics:

DXGI adapter: NVIDIA GeForce RTX 4060 (vendor 0x10DE, device 0x2882, 8188 MB dedicated)

Crashes now leave evidence

Until now a crash outside emulated code took the process down without writing a
single line, which is why the rope crash was invisible for so long. The game now
logs the exception and the faulting address before it dies, and drops a
crash-<pid>.dmp next to the executable.

If you hit a crash, that file and the last lines of game.log are what make it
fixable - please attach them to your report.