Skip to content

v0.8.2 - crash fix: loading a save in BioShock 1

Latest

Choose a tag to compare

@mohamad-balouza mohamad-balouza released this 14 Aug 20:06

Fixes a crash when loading a save in BioShock 1. If this hit you, it was not your setup - it was a real bug, and it is fixed. Everything else in v0.8.1 is unchanged; update if you play BioShock 1, and there is no harm in updating either way.

What was happening

To control the in-game FOV, the mod locates one of the engine's settings objects by walking the game's memory heaps. Loading a save destroys and recreates engine objects, so the mod re-runs that search right as the level comes up - and a level load also destroys whole heaps. If a heap disappeared during the search, the mod locked memory that no longer existed and the game died instantly with an access violation.

It was a race, which is why it hit some people on every save load and others never at all.

The fix

Every heap operation is now crash-proof. The protective guard was already there, but the one call that actually failed sat just outside it - so the guard covered the fault we had imagined and missed the one that happens in practice. On top of that the mod now checks whether a heap is still alive before touching it, and records both cases in the log instead of taking the process down.

If a skip ever happens you will see it on the scan line as SKIPPED n dead + n faulted heap(s), survived - that text means the guard did its job and the game kept running.

Other games

BioShock 2 and BioShock Infinite were never affected - they locate objects a different way that has always been guarded. Both were audited as part of this fix, and the fix itself lives in shared code, so all three games are covered from here on.

Install: unzip, copy the four DLLs into the game's binary folder (Build\Final\ for the remasters, Binaries\Win32\ for Infinite), launch through Steam. Full instructions in README.txt.

Everything from v0.8.1 (SteamVR / Steam Link support, the X+Y pause chord, BioShock 1 hand & weapon scaling, instant move direction) is included - see the v0.8.1 notes for that list.

sha256 (zip): B754B1C9DC94AA60A9BD149DA0FB7DC10A2FB3E03B02D734E518A3D347D35E58