Files
Radicade/Tools/AugustInterop
2026-10-16 23:33:13 -07:00
..
2026-10-16 23:33:13 -07:00
2026-10-16 23:33:13 -07:00
2026-10-16 23:33:13 -07:00
2026-10-16 23:33:13 -07:00
2026-10-16 23:33:13 -07:00
2026-10-16 23:33:13 -07:00
2026-10-16 23:33:13 -07:00

August 2023 interop repair

For the exact Rec Room 20230825 metadata header fingerprint and the installed BepInEx 6.0.0-be.697 loader. This fixes interop generation, not login or gameplay. It does not change GameAssembly.dll or the metadata used by the native game.

Requirements: Node.js, .NET 9 SDK, and the August build's BepInEx core libraries. Run from the repository root, with the game closed during installation.

$gameRoot = 'C:\RecRoom\2023-08-29T06-53-33Z'
$core = Join-Path $gameRoot 'BepInEx\core'
$metadataDir = Join-Path $gameRoot 'RecRoom_Data\il2cpp_data\Metadata'
node tools/AugustInterop/normalize.cjs "$metadataDir\global-metadata.dat" artifacts/august-normalized-metadata.dat
dotnet run --project tools/AugustInterop -- "$core" artifacts/august-normalized-metadata.dat "$gameRoot\GameAssembly.dll"

The normalizer checks the exact shuffled header, table bounds, image/type counts, and every repaired module row. All other records remain unchanged. The C# tool uses the installed LibCpp2IL to verify metadata and native registration parsing.

To reproduce the loader modification, use the original loader backup as input:

dotnet run --project tools/AugustInterop -- --patch-loader "$core\BepInEx.Unity.IL2CPP.dll.before-august-interop" artifacts/BepInEx.Unity.IL2CPP.dll

For a different installation path, pass -p:BepInExCore=<path-to-core> when building. The patch tool requires a separate output file and exactly one matching metadata filename instruction. Preserve the original loader before installation.

Installation performed locally:

  • Normalized copy: RecRoom_Data/il2cpp_data/Metadata/global-metadata.interop.dat.
  • Modified loader: BepInEx/core/BepInEx.Unity.IL2CPP.dll.
  • Original loader: same path plus .before-august-interop.
  • Native global-metadata.dat: unchanged by this interop repair.

Launch RecRoom.exe +forcemode:screen. Successful generation ends with Il2CppInteropGen ... Done! and Chainloader startup complete, and writes BepInEx/interop/assembly-hash.txt. Keep UpdateInteropAssemblies = true. Do not copy March-generated interop assemblies into this build.

Rollback: close the game and restore the original loader from its backup. The separate normalized file can remain on disk; the original loader never reads it. The old loader will again reject this release's custom metadata if regeneration is needed. If the game build changes, this exact mapping must be revalidated.