Files
2026-10-16 23:33:13 -07:00

48 lines
2.4 KiB
Markdown

# 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.
```powershell
$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:
```powershell
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.