<# .SYNOPSIS Disable Easy Anti-Cheat in a Rec Room 2020.12+ install so MelonLoader / Harmony patches can attach. .DESCRIPTION The 2020.12+ Steam builds ship EAC, but the integration is the standard EAC-launcher-wrapper model — NOT in-process anti-cheat in the game binary itself. Files in a 2020.12 install: RecRoom.exe (~650 KB) The actual Unity game binary. No SteamStub, no EAC strings. Recroom_Release.exe (~1.2 MB) The EAC launcher front-end. Steam launches this; it reads EasyAntiCheat/Launcher/Settings.json, talks to the EAC service, then spawns RecRoom.exe under EAC. EasyAntiCheat/ EAC service binaries + the launcher's Settings.json. EAC blocks foreign DLL injection (MelonLoader's version.dll proxy, Harmony hooks, etc.), which makes a normal Steam launch unrunnable for the modded client. The fix is simple: skip the EAC launcher entirely and run RecRoom.exe directly. EAC is never loaded into the process, no patching of any binary required. This script just writes Launch-DorkNet.bat at the install root that starts RecRoom.exe directly with any flags you pass through. The EasyAntiCheat/ folder and Recroom_Release.exe are left in place — they're harmless when nothing invokes them, and leaving them avoids tripping unrelated existence checks. Designed for use with a DorkNet private server only — EAC's whole point is the official live game. On a self-hosted server where every client talks to YOUR backend, EAC isn't doing anything useful. .PARAMETER RecRoomDir The Rec Room install root (the folder containing RecRoom.exe, EasyAntiCheat/, RecRoom_Data/). .PARAMETER Revert Remove the Launch-DorkNet.bat shortcut. (There's nothing else to undo — the script never touches the game files.) .PARAMETER WhatIf Show what would be done without touching the filesystem. .EXAMPLE # Set up direct launch on a 2020.12 install .\tools\remove-eac.ps1 -RecRoomDir 'C:\Games\RecRoom' .EXAMPLE # Tear it down .\tools\remove-eac.ps1 -RecRoomDir 'C:\Games\RecRoom' -Revert #> [CmdletBinding(SupportsShouldProcess = $true)] param( [Parameter(Mandatory)] [string] $RecRoomDir, [switch] $Revert ) $ErrorActionPreference = 'Stop' Set-StrictMode -Version Latest function Write-Step($msg) { Write-Host ('> ' + $msg) -ForegroundColor Cyan } function Write-OK($msg) { Write-Host ('+ ' + $msg) -ForegroundColor Green } function Write-Warn2($msg){ Write-Host ('! ' + $msg) -ForegroundColor Yellow } function Write-Err($msg) { Write-Host ('x ' + $msg) -ForegroundColor Red } $resolved = Resolve-Path -LiteralPath $RecRoomDir -ErrorAction SilentlyContinue if (-not $resolved) { Write-Err "RecRoomDir '$RecRoomDir' does not exist."; exit 1 } $RecRoomDir = $resolved.Path $GameExe = Join-Path $RecRoomDir 'RecRoom.exe' $BootBat = Join-Path $RecRoomDir 'Launch-DorkNet.bat' if ($Revert) { Write-Step 'Reverting — removing Launch-DorkNet.bat.' if (Test-Path -LiteralPath $BootBat) { if ($PSCmdlet.ShouldProcess($BootBat, 'remove launch shortcut')) { Remove-Item -LiteralPath $BootBat Write-OK 'Removed Launch-DorkNet.bat' } } else { Write-Warn2 'No Launch-DorkNet.bat present — already reverted.' } Write-OK 'Done. Steam launch path is unchanged (the script never touched it).' exit 0 } if (-not (Test-Path -LiteralPath $GameExe -PathType Leaf)) { Write-Err "RecRoom.exe not found in '$RecRoomDir'." Write-Host ' This script targets 2020.12+ installs. For 2020.03.10 there' -ForegroundColor DarkGray Write-Host ' is no EAC; just run Recroom_Release.exe directly.' -ForegroundColor DarkGray exit 1 } Write-Step "Setting up direct-launch in $RecRoomDir" $batBody = @" @echo off REM Launch Rec Room 2020.12+ directly, bypassing the EAC launcher REM (Recroom_Release.exe). Used with a DorkNet private server. REM REM RecRoom.exe is the real Unity game binary; the EAC launcher is only REM responsible for starting it under EAC's process protection. Running REM the game binary directly means EAC is never loaded into the process, REM so MelonLoader / Harmony patches attach cleanly. REM REM Generated by tools/remove-eac.ps1 -- re-run that script with -Revert REM to delete this shortcut. pushd "%~dp0" start "" "RecRoom.exe" %* popd "@ if ($PSCmdlet.ShouldProcess($BootBat, 'write Launch-DorkNet.bat')) { Set-Content -LiteralPath $BootBat -Value $batBody -Encoding ASCII Write-OK "Wrote $BootBat" } Write-Host '' Write-OK 'EAC bypass ready.' Write-Host ' - Launch with: ' -NoNewline; Write-Host $BootBat -ForegroundColor White Write-Host ' - Or run RecRoom.exe directly.' -ForegroundColor DarkGray Write-Host ' - Do NOT launch Recroom_Release.exe -- that is the EAC launcher.' -ForegroundColor DarkGray Write-Host ' - Steam "Play" will still try to start Recroom_Release.exe; avoid it.' -ForegroundColor DarkGray Write-Host ' - To undo: ' -NoNewline; Write-Host '.\tools\remove-eac.ps1 -RecRoomDir "" -Revert' -ForegroundColor White