MelonLoader (DorkNet.ClientMod) is the sole client patcher now, so drop
the BepInEx plugin and its BepInEx-only installer:
- delete the DorkNet.ClientPatch project + tools/install-plugin.ps1
- drop the project from DorkNet.sln
- README / architecture / deploy docs: present DorkNet.ClientMod
(install-melon.ps1) as the patcher instead of the BepInEx plugin
- fix install-melon.ps1 fallback hint that pointed at the deleted
install-plugin.ps1
- tidy stray 'BepInEx port' comments in Mod.cs / PhotonCustomAuthController
Legacy-cleanup paths that REMOVE an old BepInEx install (install-legacy-client.ps1,
the old_plugin_paths entry in build-patcher-zip.ps1) are kept intentionally.
Three carry-overs from the march branch (commits 80cc4ce, cd9d105) and
the launcher-side Vite build fix, all applicable to december without
modification:
1. Vite admin-ui + site configs switch from `base: '/'` to `base: './'`.
Built index.html now emits `<script src="./assets/...">` instead of
`/assets/...`, so the Easy Launcher's single-origin path-prefix mode
(`https://<apex>/__dn/admin/`) resolves assets under the prefix
instead of skipping it and 404'ing on the wrong server host.
2. Mod.ResolveType promoted from private to internal so PhotonPatches'
and SavePatches' local FindGameType helpers can delegate to the
broader assembly-scan fallback (was misssing IL2CPP-mangled type
names like the literal "PhotonNetwork"). Both helpers collapse to
one-line `=> Mod.ResolveType(name);`.
3. Parked AuthValuesInjector_Prefix into
DorkNet.ClientMod/attic/AuthValuesInjector.cs.attic. In december
this method was defined but **never wired to a harmony hook** in
OnLateInitializeMelon, so it was effectively dead code. Removed
the method + GetCurrentLockToken helper + Cfg.InjectAuthValues
field + LoadConfig reader + log mention. The .cs.attic suffix
keeps the SDK's auto-globber from compiling the parked file.
Restore notes inside the attic file describe how to re-enable —
for december the suggested hook is a postfix on
PUNNetworkManager.EMGGKBALALH (mutate the AuthValues there)
instead of march's NetworkingPeer.CallAuthenticate which never
fires in IL2CPP.
Mirrors march-2020-03-10 bc8bcd9. Stripping SteamStub DRM with
Steamless is necessary but not sufficient — Rec Room's
Plugins/steam_api64.dll still talks to Steam at runtime and
bails when Steam isn't loaded. Bundles Goldberg Steam Emulator
(~11 MB) into the patcher zip, plus a 7-byte steam_appid.txt
pointing at Steam app 471710 (Rec Room). New steam_stub block
in manifest.json tells the launcher where to install them.
The mod resolves every game-side type at runtime via
AccessTools.TypeByName, so the IL2CPP interop assemblies
(Assembly-CSharp, Photon3Unity3D, UnityEngine.*) in the csproj were
dead references. Dropped them entirely — only MelonLoader's own
DLLs are actually needed at compile time.
tools/build-patcher-zip.ps1 now downloads MelonLoader BEFORE the
dotnet build and points MelonLoaderDir at the extracted contents,
so a fresh contributor checkout builds the patcher zip cold with
no Rec Room install required.
Mirrors the march-2020-03-10 1f407ef change.
Targets Rec Room 2020.12.18 client.
Re-import after adding:
- DorkNet.ClientMod/dorknet-clientmod.json.template — config schema
the launcher's manifest-driven patcher renders into UserData/.
- tools/build-patcher-zip.ps1 — produces the dorknet-clientpatch-{key}.zip
Release asset the launcher fetches.
- .github/workflows/release.yml — auto-publishes both Release assets
on v1-december-* tag push.
Scrubbed via maintainer-side scrub-for-public.ps1: same drop rules as
the prior import, plus build-patcher-zip.ps1 added to the tools/
allow-list so it survives the scrub.