27 Commits

Author SHA1 Message Date
Devin Zuczek 7c78a0187a Update license link 2026-06-30 11:01:31 -04:00
Devin Zuczek ff9749483a updating readme 2026-06-30 10:49:09 -04:00
Devin Zuczek 4b413728a7 add readme 2026-06-30 10:16:16 -04:00
Devin Zuczek c28ec48bbb skip logging some collection endpoints 2026-06-30 10:10:53 -04:00
Lapis e36f1e447e Merge pull request #2 from djdevin/2023-improve-logging 2026-06-29 16:25:26 -04:00
Lapis 733a13682d Merge pull request #3 from djdevin/2023-project-path-variables 2026-06-29 16:22:02 -04:00
Devin Zuczek 65a3560fc7 improve logging 2026-06-29 16:12:54 -04:00
Devin Zuczek 9148e7b6dd configurable rec room location 2026-06-29 16:05:59 -04:00
Lapis ede406e25b Merge pull request #1 from djdevin/2023-eac-account-creation 2026-06-29 15:33:05 -04:00
Devin Zuczek 35d0a4281a disable cheatmanager to preserve DUID function 2026-06-29 15:21:43 -04:00
Lapis 9bafbcd188 fix account creation... ooops... 2026-06-18 11:20:38 -04:00
Lapis f56ed0d8de fix room loading + metadata changes allowed 2026-06-18 09:22:48 -04:00
Lapis dcb7faec5d fix photon patches 2026-06-14 06:04:49 -04:00
Lapis 837543f5e2 add advanced settings 2026-06-04 18:58:56 -04:00
Lapis 6855abe9f6 kill cheatmanager on any scene 2026-06-04 18:49:44 -04:00
Lapis 9c6448a3f4 2023 eac patch 2026-06-03 18:07:50 -04:00
Lapis d0299ae50e fix: scene name 2026-06-03 15:05:15 -04:00
Lapis 095b199568 oops 2026-06-03 09:34:54 -04:00
Lapis 0e53f35fb6 fix cheatmanager destroy 2026-06-02 18:41:58 -04:00
Lapis e1459b2de2 fix: 2023 references 2026-06-02 18:13:57 -04:00
Lapis 2448d8daae chore: clean up project file 2026-05-21 15:50:50 -04:00
Lapis b4e83bddbf fix for VR 2026-04-05 14:49:32 -04:00
Lapis 5a8b4b2d52 kill cheatmanager, add configs 2026-04-03 13:39:51 -04:00
Lapis 78a9a2e824 stupid dumb photon patch 2026-04-02 14:10:24 -04:00
Lapis f70ed0c548 Merge branch 'main' of https://github.com/LapisGit/CannedNet.Client 2026-04-01 09:19:22 -04:00
Lapis a442466f98 h 2026-04-01 09:19:01 -04:00
Lapis 7c103ac7e1 Initial commit 2026-04-01 09:17:03 -04:00
11 changed files with 1064 additions and 172 deletions
+3 -1
View File
@@ -2,4 +2,6 @@ bin/
obj/
/packages/
riderModule.iml
/_ReSharper.Caches/
/_ReSharper.Caches/
/.idea
CannedNet.Client.sln.DotSettings.user
+1
View File
@@ -0,0 +1 @@
GamePath.props
+655 -161
View File
@@ -14,6 +14,24 @@
</RestoreAdditionalProjectSources>
<RootNamespace>CannedNet.Client</RootNamespace>
</PropertyGroup>
<!-- GamePath = root of a Rec Room install whose BepInEx/interop/ has been populated.
It is intentionally NOT hardcoded here so the repo is distributable. Set it via ONE of:
1. a local GamePath.props file (copy GamePath.props.example -> GamePath.props; gitignored)
2. a RECROOM_PATH environment variable
3. the command line: dotnet build -p:GamePath="D:\Path\To\RecRoom" -->
<Import Project="$(MSBuildThisFileDirectory)GamePath.props" Condition="Exists('$(MSBuildThisFileDirectory)GamePath.props')" />
<PropertyGroup>
<GamePath Condition="'$(GamePath)' == '' and '$(RECROOM_PATH)' != ''">$(RECROOM_PATH)</GamePath>
</PropertyGroup>
<Target Name="ValidateGamePath" BeforeTargets="ResolveAssemblyReferences;Build">
<Error Condition="'$(GamePath)' == ''"
Text="GamePath is not set. Copy GamePath.props.example to GamePath.props and set your Rec Room install path (or set the RECROOM_PATH env var, or pass -p:GamePath=...). See CLAUDE.md." />
<Error Condition="'$(GamePath)' != '' and !Exists('$(GamePath)\BepInEx\interop')"
Text="GamePath '$(GamePath)' has no BepInEx\interop folder. Point it at a Rec Room install that has been launched once under BepInEx so the IL2CPP interop assemblies are generated." />
</Target>
<ItemGroup>
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-be.*" IncludeAssets="compile"/>
@@ -22,433 +40,909 @@
<ItemGroup>
<Reference Include="Assembly-CSharp">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Assembly-CSharp.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp-firstpass">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Assembly-CSharp-firstpass.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Assembly-CSharp-firstpass.dll</HintPath>
</Reference>
<Reference Include="AstarPathfindingProject">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\AstarPathfindingProject.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\AstarPathfindingProject.dll</HintPath>
</Reference>
<Reference Include="Bitpacker">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Bitpacker.dll</HintPath>
<Reference Include="Backtrace.Unity">
<HintPath>$(GamePath)\BepInEx\interop\Backtrace.Unity.dll</HintPath>
</Reference>
<Reference Include="Circuits">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Circuits.dll</HintPath>
<Reference Include="Circuits.All.Injection.Debugging">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.All.Injection.Debugging.dll</HintPath>
</Reference>
<Reference Include="Circuits.All.Injection.PhotonNetSystem">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.All.Injection.PhotonNetSystem.dll</HintPath>
</Reference>
<Reference Include="Circuits.All.Injection.UnityEngine">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.All.Injection.UnityEngine.dll</HintPath>
</Reference>
<Reference Include="Circuits.All.Mock">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.All.Mock.dll</HintPath>
</Reference>
<Reference Include="Circuits.All.RecRoom">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.All.RecRoom.dll</HintPath>
</Reference>
<Reference Include="Circuits.Dynamic.Core.NetSystem">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Dynamic.Core.NetSystem.dll</HintPath>
</Reference>
<Reference Include="Circuits.Dynamic.Mock">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Dynamic.Mock.dll</HintPath>
</Reference>
<Reference Include="Circuits.Shared.Core.ByteCode">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Shared.Core.ByteCode.dll</HintPath>
</Reference>
<Reference Include="Circuits.Shared.CV2.Dependencies">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Shared.CV2.Dependencies.dll</HintPath>
</Reference>
<Reference Include="Circuits.Shared.RecRoom.Engine">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Shared.RecRoom.Engine.dll</HintPath>
</Reference>
<Reference Include="Circuits.Shared.RecRoom.Objects">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Shared.RecRoom.Objects.dll</HintPath>
</Reference>
<Reference Include="Circuits.Shared.Utilities">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Shared.Utilities.dll</HintPath>
</Reference>
<Reference Include="Circuits.Static.Core.CompileSystem">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Static.Core.CompileSystem.dll</HintPath>
</Reference>
<Reference Include="Circuits.Static.Core.GraphSystem">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Static.Core.GraphSystem.dll</HintPath>
</Reference>
<Reference Include="Circuits.Static.Core.NetSystem">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Static.Core.NetSystem.dll</HintPath>
</Reference>
<Reference Include="Circuits.Static.Core.RequestReduce">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Static.Core.RequestReduce.dll</HintPath>
</Reference>
<Reference Include="Circuits.Static.Core.TreeSystem">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Static.Core.TreeSystem.dll</HintPath>
</Reference>
<Reference Include="Circuits.Static.Core.TypeCheckSystem">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Static.Core.TypeCheckSystem.dll</HintPath>
</Reference>
<Reference Include="Circuits.Static.Core.TypeSystem">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Static.Core.TypeSystem.dll</HintPath>
</Reference>
<Reference Include="Circuits.Static.Core.UnificationSystem">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Static.Core.UnificationSystem.dll</HintPath>
</Reference>
<Reference Include="Circuits.Static.EV">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Static.EV.dll</HintPath>
</Reference>
<Reference Include="Circuits.Static.RecRoom">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Static.RecRoom.dll</HintPath>
</Reference>
<Reference Include="Circuits.Static.Utilities">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.Static.Utilities.dll</HintPath>
</Reference>
<Reference Include="Circuits.V2">
<HintPath>$(GamePath)\BepInEx\interop\Circuits.V2.dll</HintPath>
</Reference>
<Reference Include="Codestage.Anticheattoolkit.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\Codestage.Anticheattoolkit.Runtime.dll</HintPath>
</Reference>
<Reference Include="CSCore">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\CSCore.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\CSCore.dll</HintPath>
</Reference>
<Reference Include="EasyAntiCheat.Client">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\EasyAntiCheat.Client.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\EasyAntiCheat.Client.dll</HintPath>
</Reference>
<Reference Include="Google.Protobuf">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Google.Protobuf.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Google.Protobuf.dll</HintPath>
</Reference>
<Reference Include="ICSharpCode.SharpZipLib">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\ICSharpCode.SharpZipLib.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\ICSharpCode.SharpZipLib.dll</HintPath>
</Reference>
<Reference Include="Il2CppMicrosoft.Bcl.HashCode">
<HintPath>$(GamePath)\BepInEx\interop\Il2CppMicrosoft.Bcl.HashCode.dll</HintPath>
</Reference>
<Reference Include="Il2CppMicrosoft.CognitiveServices.Speech.csharp">
<HintPath>$(GamePath)\BepInEx\interop\Il2CppMicrosoft.CognitiveServices.Speech.csharp.dll</HintPath>
</Reference>
<Reference Include="Il2CppMicrosoft.Toolkit.HighPerformance">
<HintPath>$(GamePath)\BepInEx\interop\Il2CppMicrosoft.Toolkit.HighPerformance.dll</HintPath>
</Reference>
<Reference Include="Il2CppMono.Security">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppMono.Security.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Il2CppMono.Security.dll</HintPath>
</Reference>
<Reference Include="Il2Cppmscorlib">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2Cppmscorlib.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Il2Cppmscorlib.dll</HintPath>
</Reference>
<Reference Include="Il2CppSystem">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Il2CppSystem.dll</HintPath>
</Reference>
<Reference Include="Il2CppSystem.Buffers">
<HintPath>$(GamePath)\BepInEx\interop\Il2CppSystem.Buffers.dll</HintPath>
</Reference>
<Reference Include="Il2CppSystem.Configuration">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.Configuration.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Il2CppSystem.Configuration.dll</HintPath>
</Reference>
<Reference Include="Il2CppSystem.Core">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.Core.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Il2CppSystem.Core.dll</HintPath>
</Reference>
<Reference Include="Il2CppSystem.Data">
<HintPath>$(GamePath)\BepInEx\interop\Il2CppSystem.Data.dll</HintPath>
</Reference>
<Reference Include="Il2CppSystem.Drawing">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.Drawing.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Il2CppSystem.Drawing.dll</HintPath>
</Reference>
<Reference Include="Il2CppSystem.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.Runtime.dll</HintPath>
<Reference Include="Il2CppSystem.Memory">
<HintPath>$(GamePath)\BepInEx\interop\Il2CppSystem.Memory.dll</HintPath>
</Reference>
<Reference Include="Il2CppSystem.Numerics">
<HintPath>$(GamePath)\BepInEx\interop\Il2CppSystem.Numerics.dll</HintPath>
</Reference>
<Reference Include="Il2CppSystem.Numerics.Vectors">
<HintPath>$(GamePath)\BepInEx\interop\Il2CppSystem.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="Il2CppSystem.Runtime.CompilerServices.Unsafe">
<HintPath>$(GamePath)\BepInEx\interop\Il2CppSystem.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="Il2CppSystem.Runtime.Serialization">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.Runtime.Serialization.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Il2CppSystem.Runtime.Serialization.dll</HintPath>
</Reference>
<Reference Include="Il2CppSystem.Xml">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Il2CppSystem.Xml.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Il2CppSystem.Xml.dll</HintPath>
</Reference>
<Reference Include="Il2CppSystem.Xml.Linq">
<HintPath>$(GamePath)\BepInEx\interop\Il2CppSystem.Xml.Linq.dll</HintPath>
</Reference>
<Reference Include="Kyub.EmojiSearch">
<HintPath>$(GamePath)\BepInEx\interop\Kyub.EmojiSearch.dll</HintPath>
</Reference>
<Reference Include="Logger.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\Logger.Runtime.dll</HintPath>
</Reference>
<Reference Include="NewPlayerChallenges.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\NewPlayerChallenges.Runtime.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json">
<HintPath>$(GamePath)\BepInEx\interop\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Nito.Collections.Deque">
<HintPath>$(GamePath)\BepInEx\interop\Nito.Collections.Deque.dll</HintPath>
</Reference>
<Reference Include="Oculus.Platform">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Oculus.Platform.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Oculus.Platform.dll</HintPath>
</Reference>
<Reference Include="Oculus.VR">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Oculus.VR.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Oculus.VR.dll</HintPath>
</Reference>
<Reference Include="OSA">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\OSA.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\OSA.dll</HintPath>
</Reference>
<Reference Include="Pathfinding.ClipperLib">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Pathfinding.ClipperLib.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Pathfinding.ClipperLib.dll</HintPath>
</Reference>
<Reference Include="Pathfinding.Ionic.Zip.Reduced">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Pathfinding.Ionic.Zip.Reduced.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Pathfinding.Ionic.Zip.Reduced.dll</HintPath>
</Reference>
<Reference Include="Pathfinding.Poly2Tri">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Pathfinding.Poly2Tri.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Pathfinding.Poly2Tri.dll</HintPath>
</Reference>
<Reference Include="Photon3Unity3D">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Photon3Unity3D.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Photon3Unity3D.dll</HintPath>
</Reference>
<Reference Include="PhotonChat">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonChat.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\PhotonChat.dll</HintPath>
</Reference>
<Reference Include="PhotonRealtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonRealtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\PhotonRealtime.dll</HintPath>
</Reference>
<Reference Include="PhotonUnityNetworking">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonUnityNetworking.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\PhotonUnityNetworking.dll</HintPath>
</Reference>
<Reference Include="PhotonUnityNetworking.Utilities">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonUnityNetworking.Utilities.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\PhotonUnityNetworking.Utilities.dll</HintPath>
</Reference>
<Reference Include="PhotonVoice">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonVoice.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\PhotonVoice.dll</HintPath>
</Reference>
<Reference Include="PhotonVoice.API">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonVoice.API.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\PhotonVoice.API.dll</HintPath>
</Reference>
<Reference Include="PhotonVoice.PUN">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonVoice.PUN.dll</HintPath>
</Reference>
<Reference Include="PhotonWebSocket">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\PhotonWebSocket.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\PhotonVoice.PUN.dll</HintPath>
</Reference>
<Reference Include="Pngcs">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Pngcs.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Pngcs.dll</HintPath>
</Reference>
<Reference Include="RecNet.Interfaces">
<HintPath>$(GamePath)\BepInEx\interop\RecNet.Interfaces.dll</HintPath>
</Reference>
<Reference Include="RecNet.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecNet.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Agdxgidisplays.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Agdxgidisplays.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Agdxgidisplays.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.AgInitialization.Interfaces">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.AgInitialization.Interfaces.dll</HintPath>
</Reference>
<Reference Include="RecRoom.AgInitialization.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.AgInitialization.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Agmobilear.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Agmobilear.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Agmobilear.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Analytics.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Analytics.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ApplicationLifecycle.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ApplicationLifecycle.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Assetbundles.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Assetbundles.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Assetbundles.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Async">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Async.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Async.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Circuitsv2.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Circuitsv2.Runtime.dll</HintPath>
<Reference Include="RecRoom.Attributes.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Attributes.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Audio.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Audio.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.AutomationTests.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.AutomationTests.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.BitPacker.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.BitPacker.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Build.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Build.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Challenges.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Challenges.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Chat.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Chat.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.CircuitsV1.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.CircuitsV1.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ClusterLods.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ClusterLods.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.CodeGen.Attributes">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.CodeGen.Attributes.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Commandline.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Commandline.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.CommonDataTypes.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.CommonDataTypes.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Configloader.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Configloader.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Connectables.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Connectables.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Content.Authoring.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Content.Authoring.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Creation.Interfaces.UX.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Creation.Interfaces.UX.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Creation.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Creation.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.CultureUtil.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.CultureUtil.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.CultureUtil.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Datastructures.CollisionMesh.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Datastructures.CollisionMesh.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Datastructures.CullingGroupManager.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Datastructures.CullingGroupManager.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Datastructures.OverridableFields.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Datastructures.OverridableFields.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Datastructures.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Datastructures.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Datastructures.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Datastructures.Singletons.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Datastructures.Singletons.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Debugging.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Debugging.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.EditorHelpers.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.EditorHelpers.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.EditorHelpers.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Encoding.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Encoding.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Experiments.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Experiments.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.FastLines.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.FastLines.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.FuzzySearch.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.FuzzySearch.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.GameSystems.Interfaces">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.GameSystems.Interfaces.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Imageutils.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Imageutils.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Imposters.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Imposters.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Instantiation.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Instantiation.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.iOSNative.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.iOSNative.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.iOSNative.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.JuniorAccountVisibility.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.JuniorAccountVisibility.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Keepsakes.Interfaces">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Keepsakes.Interfaces.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Keepsakes.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Keepsakes.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Keepsakes.UnityExtensions">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Keepsakes.UnityExtensions.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Localization.Service">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Localization.Service.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Maker.Core.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Maker.Core.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Maker.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Maker.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.MemoryStats.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.MemoryStats.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Minijson.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Minijson.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.MobileHome.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.MobileHome.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Nativemesh.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Nativemesh.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Networking.DataTypes.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Networking.DataTypes.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Networking.Mocks">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Networking.Mocks.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Networking.DataTypes.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Networking.NetworkedObjects.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Networking.NetworkedObjects.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Networking.NetworkedObjects.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Networking.PhotonImpl.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Networking.PhotonImpl.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Networking.RoomLoading.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Networking.RoomLoading.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Networking.RPC.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Networking.RPC.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Networking.RPC.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Networking.SynchronizedFields.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Networking.SynchronizedFields.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Networking.SynchronizedFields.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ProBuilderExtensions">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.ProBuilderExtensions.dll</HintPath>
<Reference Include="RecRoom.NoEngine.Algorithms.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.NoEngine.Algorithms.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.NoEngine.Common.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.NoEngine.Common.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.NoEngine.DataStructures.Performance.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.NoEngine.DataStructures.Performance.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.NoEngine.DataStructures.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.NoEngine.DataStructures.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.NoEngine.Debugging.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.NoEngine.Debugging.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.NoEngine.JetBrains.Annotations">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.NoEngine.JetBrains.Annotations.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Attributes.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Attributes.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.BitPacker.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.BitPacker.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.ComponentData.Generated.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.ComponentData.Generated.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.ComponentData.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.ComponentData.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.ConfigUI.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.ConfigUI.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Entities.Core.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Entities.Core.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Entities.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Entities.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Interfaces.ConfigUI.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Interfaces.ConfigUI.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Interfaces.Prefabs.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Interfaces.Prefabs.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Interfaces.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Interfaces.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Prefabs.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Prefabs.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Properties.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Properties.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Protobufs.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Protobufs.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.RendererV1.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.RendererV1.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Services.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Services.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Systems.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Systems.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Telemetry.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Telemetry.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Transmission.PUN.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Transmission.PUN.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectModel.Transmission.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectModel.Transmission.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ObjectPool.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ObjectPool.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Persistence.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Persistence.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.PlatformNotifications.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.PlatformNotifications.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Preferences.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Preferences.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.PrefParsers.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.PrefParsers.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ProgressionEvents.Interfaces">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ProgressionEvents.Interfaces.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ProgressionEvents.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ProgressionEvents.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Promises.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Promises.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Promises.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Protobuf.Debugging.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Protobuf.Debugging.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Protobuf.Extensions.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Protobuf.Extensions.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Protobuf.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Protobuf.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Protobuf.UnityExtensions.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Protobuf.UnityExtensions.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Rbex.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Rbex.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ResourceManagement.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.ResourceManagement.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ResourceManagement.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Scheduler.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Scheduler.Runtime.dll</HintPath>
<Reference Include="RecRoom.RoomLoading.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.RoomLoading.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.RoomPermissions.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.RoomPermissions.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Rranticheat.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Rranticheat.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.RRUI.Core.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.RRUI.Core.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.RRUI.Data.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.RRUI.Data.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.RRUI.Navigation.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.RRUI.Navigation.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.RRUI.Theme.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.RRUI.Theme.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Scheduling.Interface.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Scheduling.Interface.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Scheduling.Scheduler.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Scheduling.Scheduler.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Scheduling.Schedules.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Scheduling.Schedules.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.ShapeRendering.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.ShapeRendering.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Streamingaudio.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Streamingaudio.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Streamingaudio.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Tmp_overrides.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Tmp_overrides.Runtime.dll</HintPath>
<Reference Include="RecRoom.Studio.Common.LocalTesting">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Studio.Common.LocalTesting.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Studio.Common.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Studio.Common.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.TagsAndLayers.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.TagsAndLayers.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Time.Interfaces">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Time.Interfaces.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Time.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Time.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Tweening.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Tweening.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Tweening.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.UIInteraction.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.UIInteraction.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Unityextensions.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\RecRoom.Unityextensions.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Unityextensions.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.UrlHandler.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.UrlHandler.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Utf8json.Interfaces">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Utf8json.Interfaces.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Utf8json.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Utf8json.Runtime.dll</HintPath>
</Reference>
<Reference Include="RecRoom.Versioning.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\RecRoom.Versioning.Runtime.dll</HintPath>
</Reference>
<Reference Include="SA.Foundation">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SA.Foundation.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\SA.Foundation.dll</HintPath>
</Reference>
<Reference Include="SA.Foundation.Network">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SA.Foundation.Network.dll</HintPath>
</Reference>
<Reference Include="SA.Foundation.Tests">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SA.Foundation.Tests.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\SA.Foundation.Network.dll</HintPath>
</Reference>
<Reference Include="SA.iOS">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SA.iOS.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\SA.iOS.dll</HintPath>
</Reference>
<Reference Include="SA.iOS.XCode">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SA.iOS.XCode.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\SA.iOS.XCode.dll</HintPath>
</Reference>
<Reference Include="Singular">
<HintPath>$(GamePath)\BepInEx\interop\Singular.dll</HintPath>
</Reference>
<Reference Include="StansAssets.Foundation">
<HintPath>$(GamePath)\BepInEx\interop\StansAssets.Foundation.dll</HintPath>
</Reference>
<Reference Include="StansAssets.Plugins">
<HintPath>$(GamePath)\BepInEx\interop\StansAssets.Plugins.dll</HintPath>
</Reference>
<Reference Include="StatsigUnity.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\StatsigUnity.Runtime.dll</HintPath>
</Reference>
<Reference Include="SteamVR">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SteamVR.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\SteamVR.dll</HintPath>
</Reference>
<Reference Include="SteamVR_Actions">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\SteamVR_Actions.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\SteamVR_Actions.dll</HintPath>
</Reference>
<Reference Include="TextureTool.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\TextureTool.Runtime.dll</HintPath>
</Reference>
<Reference Include="ToxMod">
<HintPath>$(GamePath)\BepInEx\interop\ToxMod.dll</HintPath>
</Reference>
<Reference Include="UJect.Runtime">
<HintPath>$(GamePath)\BepInEx\interop\UJect.Runtime.dll</HintPath>
</Reference>
<Reference Include="UJect.UnityExtensions">
<HintPath>$(GamePath)\BepInEx\interop\UJect.UnityExtensions.dll</HintPath>
</Reference>
<Reference Include="Unity.Addressables">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Addressables.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.Addressables.dll</HintPath>
</Reference>
<Reference Include="Unity.Burst">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Burst.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.Burst.dll</HintPath>
</Reference>
<Reference Include="Unity.Burst.Unsafe">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Burst.Unsafe.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.Burst.Unsafe.dll</HintPath>
</Reference>
<Reference Include="Unity.Collections">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Collections.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.Collections.dll</HintPath>
</Reference>
<Reference Include="Unity.Entities">
<HintPath>$(GamePath)\BepInEx\interop\Unity.Entities.dll</HintPath>
</Reference>
<Reference Include="Unity.InputSystem">
<HintPath>$(GamePath)\BepInEx\interop\Unity.InputSystem.dll</HintPath>
</Reference>
<Reference Include="Unity.Jobs">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Jobs.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.Jobs.dll</HintPath>
</Reference>
<Reference Include="Unity.Localization">
<HintPath>$(GamePath)\BepInEx\interop\Unity.Localization.dll</HintPath>
</Reference>
<Reference Include="Unity.Mathematics">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Mathematics.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.Mathematics.dll</HintPath>
</Reference>
<Reference Include="Unity.Postprocessing.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.Postprocessing.Runtime.dll</HintPath>
<Reference Include="Unity.ProBuilder">
<HintPath>$(GamePath)\BepInEx\interop\Unity.ProBuilder.dll</HintPath>
</Reference>
<Reference Include="Unity.Properties">
<HintPath>$(GamePath)\BepInEx\interop\Unity.Properties.dll</HintPath>
</Reference>
<Reference Include="Unity.RenderPipeline.Universal.ShaderLibrary">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.RenderPipeline.Universal.ShaderLibrary.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.RenderPipeline.Universal.ShaderLibrary.dll</HintPath>
</Reference>
<Reference Include="Unity.RenderPipelines.Core.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.RenderPipelines.Core.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.RenderPipelines.Core.Runtime.dll</HintPath>
</Reference>
<Reference Include="Unity.RenderPipelines.Universal.Runtime">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.RenderPipelines.Universal.Runtime.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.RenderPipelines.Universal.Runtime.dll</HintPath>
</Reference>
<Reference Include="Unity.ResourceManager">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.ResourceManager.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.ResourceManager.dll</HintPath>
</Reference>
<Reference Include="Unity.Serialization">
<HintPath>$(GamePath)\BepInEx\interop\Unity.Serialization.dll</HintPath>
</Reference>
<Reference Include="Unity.TextMeshPro">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.TextMeshPro.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.TextMeshPro.dll</HintPath>
</Reference>
<Reference Include="Unity.XR.ARFoundation">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.XR.ARFoundation.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.XR.ARFoundation.dll</HintPath>
</Reference>
<Reference Include="Unity.XR.ARSubsystems">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.XR.ARSubsystems.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.XR.ARSubsystems.dll</HintPath>
</Reference>
<Reference Include="Unity.XR.Management">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Unity.XR.Management.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Unity.XR.Management.dll</HintPath>
</Reference>
<Reference Include="Unity.XR.Oculus">
<HintPath>$(GamePath)\BepInEx\interop\Unity.XR.Oculus.dll</HintPath>
</Reference>
<Reference Include="Unity.XR.OpenVR">
<HintPath>$(GamePath)\BepInEx\interop\Unity.XR.OpenVR.dll</HintPath>
</Reference>
<Reference Include="Unity.XR.PSVR">
<HintPath>$(GamePath)\BepInEx\interop\Unity.XR.PSVR.dll</HintPath>
</Reference>
<Reference Include="UnityEngine">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AccessibilityModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.AccessibilityModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.AccessibilityModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AIModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.AIModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.AIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AndroidJNIModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.AndroidJNIModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.AndroidJNIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AnimationModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.AnimationModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ARModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ARModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.AnimationModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AssetBundleModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.AssetBundleModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.AssetBundleModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AudioModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.AudioModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.AudioModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ClothModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ClothModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.ClothModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ClusterInputModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ClusterInputModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.ClusterInputModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ClusterRendererModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ClusterRendererModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.ClusterRendererModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.CoreModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.CoreModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CrashReportingModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.CrashReportingModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.CrashReportingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.DirectorModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.DirectorModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.DirectorModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.DSPGraphModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.DSPGraphModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.DSPGraphModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.GameCenterModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.GameCenterModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.GameCenterModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.GIModule">
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.GIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.GridModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.GridModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.GridModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.HotReloadModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.HotReloadModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.HotReloadModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ImageConversionModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ImageConversionModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.ImageConversionModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.IMGUIModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.IMGUIModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.IMGUIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.InputLegacyModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.InputLegacyModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.InputLegacyModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.InputModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.InputModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.InputModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.JSONSerializeModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.JSONSerializeModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.JSONSerializeModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.LocalizationModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.LocalizationModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.LocalizationModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ParticleSystemModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ParticleSystemModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.ParticleSystemModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.PerformanceReportingModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.PerformanceReportingModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.PerformanceReportingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.Physics2DModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.Physics2DModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.Physics2DModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.PhysicsModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.PhysicsModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.PhysicsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ProfilerModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ProfilerModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.ProfilerModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule">
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ScreenCaptureModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.ScreenCaptureModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.ScreenCaptureModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SharedInternalsModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.SharedInternalsModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.SharedInternalsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SpatialTracking">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.SpatialTracking.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.SpatialTracking.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SpriteMaskModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.SpriteMaskModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.SpriteMaskModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SpriteShapeModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.SpriteShapeModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.SpriteShapeModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.StreamingModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.StreamingModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.StreamingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SubstanceModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.SubstanceModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.SubstanceModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SubsystemsModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.SubsystemsModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.SubsystemsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TerrainModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.TerrainModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.TerrainModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TerrainPhysicsModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.TerrainPhysicsModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.TerrainPhysicsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TextCoreModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.TextCoreModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.TextCoreModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TextRenderingModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.TextRenderingModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.TextRenderingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TilemapModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.TilemapModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.TilemapModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TLSModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.TLSModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.TLSModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UI">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UI.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UI.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UIElementsModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UIElementsModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UIElementsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UIElementsNativeModule">
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UIElementsNativeModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UIModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UIModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UmbraModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UmbraModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UmbraModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UNETModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UNETModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UNETModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityAnalyticsModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityAnalyticsModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UnityAnalyticsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityConnectModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityConnectModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UnityConnectModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityCurlModule">
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UnityCurlModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityTestProtocolModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityTestProtocolModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UnityTestProtocolModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestAssetBundleModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityWebRequestAssetBundleModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UnityWebRequestAssetBundleModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestAudioModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityWebRequestAudioModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UnityWebRequestAudioModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityWebRequestModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UnityWebRequestModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestTextureModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityWebRequestTextureModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UnityWebRequestTextureModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestWWWModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.UnityWebRequestWWWModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.UnityWebRequestWWWModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VehiclesModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.VehiclesModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.VehiclesModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VFXModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.VFXModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.VFXModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VideoModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.VideoModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.VideoModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VirtualTexturingModule">
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.VirtualTexturingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VRModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.VRModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.VRModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.WindModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.WindModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.XR.LegacyInputHelpers">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.XR.LegacyInputHelpers.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.WindModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.XRModule">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\UnityEngine.XRModule.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\UnityEngine.XRModule.dll</HintPath>
</Reference>
<Reference Include="Valve.Newtonsoft.Json">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\Valve.Newtonsoft.Json.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\Valve.Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="XboxUWP">
<HintPath>..\..\..\Downloads\Radium_PC_20260220_KbdgFG\BepInEx\interop\XboxUWP.dll</HintPath>
<HintPath>$(GamePath)\BepInEx\interop\XboxUWP.dll</HintPath>
</Reference>
</ItemGroup>
<Target Name="DeployPlugin" AfterTargets="Build">
<Copy SourceFiles="$(OutputPath)$(AssemblyName).dll" DestinationFolder="$(GamePath)\BepInEx\plugins\" />
</Target>
</Project>
+10
View File
@@ -0,0 +1,10 @@
<Project>
<!-- Copy this file to "GamePath.props" (same folder) and set GamePath to your local
Rec Room install. GamePath.props is gitignored, so your local path stays out of the repo.
The install must have been launched once under BepInEx 6 (IL2CPP) so that
BepInEx/interop/ is populated with the proxy assemblies this project references. -->
<PropertyGroup>
<GamePath>C:\Path\To\RecRoom</GamePath>
</PropertyGroup>
</Project>
+29
View File
@@ -0,0 +1,29 @@
using HarmonyLib;
using RecRoom.AntiCheat;
using System.Text;
using Il2CppSystem;
namespace CannedNet.Client.Patches;
[HarmonyPatch]
public static class EACPatches
{
[HarmonyPrefix]
[HarmonyPatch(typeof(EACManager), "FJLMLEPOKGE")]
private static bool IsReadyPatch(ref bool __result)
{
__result = true;
return false;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(EACManager), "GenerateChallengeResponse")]
private static bool GenerateChallengeResponsePatch(string PGCINMIEBJP, ref string __result)
{
if (!string.IsNullOrEmpty(PGCINMIEBJP))
__result = Convert.ToBase64String(Encoding.UTF8.GetBytes(PGCINMIEBJP));
else
__result = Convert.ToBase64String(Encoding.UTF8.GetBytes("i hate this"));
return false;
}
}
+35
View File
@@ -0,0 +1,35 @@
using System;
using System.Reflection;
using ExitGames.Client.Photon;
using HarmonyLib;
using Photon.Realtime;
namespace CannedNet.Client.Patches;
[HarmonyPatch(typeof(GPFPFDBGCEK), "AMOHMPKKGHL")]
public class PhotonPatches
{
[HarmonyPostfix]
private static void Postfix(ref AppSettings __result)
{
Plugin.Log.LogInfo("okay im patching now");
if (__result != null)
{
__result.AppIdRealtime = Plugin.AppIdRT.Value;
__result.AppIdVoice = Plugin.AppIdVoice.Value;
__result.AppIdChat = Plugin.AppIdChat.Value;
__result.FixedRegion = "us";
__result.UseNameServer = true;
__result.Protocol = ConnectionProtocol.Udp;
if (Plugin.EnableAdvancedSettings.Value)
{
__result.Server = Plugin.PhotonHostname.Value;
__result.Port = Plugin.PhotonPort.Value == 0
? 4533
: Plugin.PhotonPort.Value;
}
}
}
}
+13
View File
@@ -0,0 +1,13 @@
using HarmonyLib;
[HarmonyPatch(typeof(JAPJPGNBMNM), "JOKECJKBJGD")]
public static class PromisePatch
{
public static bool Prefix(out HPHDJAFFHCN<JAPJPGNBMNM.AOFCCEACNNA> __result)
{
var result = JAPJPGNBMNM.AOFCCEACNNA.JGIHNLEFJEL();
var promise = HAAHJPGNIMD.NMOOLKAJDOC(result);
__result = promise;
return false;
}
}
+137 -6
View File
@@ -1,19 +1,150 @@
using BestHTTP;
using System;
using BestHTTP;
using HarmonyLib;
using Il2CppInterop.Runtime;
namespace CannedNet.Client.Patches;
/**
Intercept a variety of HTTP requests and rewrite them to point to our own custom server.
*/
public class SendRequestPatch
{
// Official name server host to redirect away from, swapped for the custom server.
private const string OfficialNameServer = "ns.rec.net";
// Skip when HTTP-logging so we don't spam the logs.
private static readonly string[] LogIgnoreSubstrings =
{
"/api/gamesight/event",
"/data/heartbeat",
"/identify",
"/httpapi",
};
private static bool IsIgnoredForLogging(string url)
{
foreach (var s in LogIgnoreSubstrings)
if (url.Contains(s, StringComparison.OrdinalIgnoreCase))
return true;
return false;
}
[HarmonyPatch(typeof(HTTPManager), "SendRequest", [typeof(HTTPRequest)])]
public class ConnectToRecNetPatch
{
private static void Prefix(ref HTTPRequest request)
{
Plugin.Log.LogInfo($"hi {request.Uri.Host}");
if (request.Uri.Host.ToString().Contains("ns.rec.net"))
request.Uri = new Il2CppSystem.Uri("https://ns.lapis.codes");
var debug = Plugin.Debug.Value && !IsIgnoredForLogging(request.Uri.AbsoluteUri);
if (debug)
{
var entityBody = request.GetEntityBody();
string body;
if (entityBody == null)
body = "<none>";
else if (IsBinaryContentType(request.GetFirstHeaderValue("content-type")) || LooksBinary(entityBody))
body = "<binary>";
else
body = System.Text.Encoding.UTF8.GetString(entityBody);
Plugin.Log.LogInfo($"[HTTP] {request.MethodType} {request.Uri.AbsoluteUri} body={body}");
}
var host = request.Uri.Host;
if (host == OfficialNameServer)
{
// Redirect the nameserver lookup to the custom server, swapping only the host.
var newHost = new System.Uri(Plugin.ServerHostname.Value).Host;
var builder = new Il2CppSystem.UriBuilder(request.Uri) { Host = newHost };
request.Uri = builder.Uri;
if (debug)
Plugin.Log.LogInfo($"[HTTP] intercepted {host} -> {newHost}");
}
if (debug)
LogResponseWhenDone(request);
}
}
}
// Wraps the request's completion callback so we log the response (status + body) when it
// finishes, then forwards to the game's original callback. This is how we see *which*
// request comes back empty (RecNet throws "Response was empty" on a blank body).
private static void LogResponseWhenDone(HTTPRequest request)
{
try
{
var original = request.Callback;
var url = request.Uri.AbsoluteUri;
request.Callback = DelegateSupport.ConvertDelegate<OnRequestFinishedDelegate>(
(Action<HTTPRequest, HTTPResponse>)((req, resp) =>
{
if (resp == null)
Plugin.Log.LogWarning($"[HTTP] <- {url} NO RESPONSE (state={req.State})");
else
{
string text;
if (IsBinaryContentType(resp.GetFirstHeaderValue("content-type")))
text = "<binary>";
else
{
text = resp.DataAsText;
if (string.IsNullOrEmpty(text)) text = "<empty>";
}
var msg = $"[HTTP] <- {resp.StatusCode} {url} body={text}";
if (resp.StatusCode is >= 200 and < 300)
Plugin.Log.LogInfo(msg);
else
Plugin.Log.LogError(msg);
}
original?.Invoke(req, resp);
}));
}
catch (Exception e)
{
Plugin.Log.LogError($"[HTTP] failed to attach response logger: {e}");
}
}
// Content-Type prefixes/keywords we treat as textual; anything else is logged as <binary> so we
// don't dump image/asset bytes into the log.
private static readonly string[] TextContentTypes =
{
"text/", "application/json", "application/xml", "application/javascript",
"application/x-www-form-urlencoded", "+json", "+xml",
};
// True if the body is (probably) binary and shouldn't be logged as text. Defaults to text when
// there's no Content-Type, so we err toward logging rather than hiding.
private static bool IsBinaryContentType(string contentType)
{
if (string.IsNullOrEmpty(contentType)) return false;
foreach (var t in TextContentTypes)
if (contentType.Contains(t, StringComparison.OrdinalIgnoreCase))
return false;
return true;
}
// Content sniff for raw request bytes — the Content-Type header isn't reliably set at
// SendRequest time (e.g. multipart form bodies set it lazily, and the body still embeds the
// raw image), so look at the bytes: a NUL byte, or a high ratio of non-text control bytes in
// the first chunk, means it's binary (or binary-mixed like a multipart upload).
private static bool LooksBinary(byte[] data)
{
if (data.Length == 0) return false;
var sample = Math.Min(data.Length, 4096);
var nonText = 0;
for (var i = 0; i < sample; i++)
{
var b = data[i];
if (b == 0) return true;
// Control chars other than tab/newline/carriage-return.
if (b < 0x20 && b != 0x09 && b != 0x0A && b != 0x0D) nonText++;
}
return nonText * 100 / sample > 10;
}
}
+49 -4
View File
@@ -1,7 +1,16 @@
using BepInEx;
using System;
using System.Collections;
using System.Text.Json;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using BepInEx.Unity.IL2CPP.Utils.Collections;
using HarmonyLib;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
using UnityEngine.Networking;
namespace CannedNet.Client;
@@ -10,11 +19,47 @@ public class Plugin : BasePlugin
{
internal static new ManualLogSource Log;
public static ConfigEntry<string> AppIdRT { get; private set; }
public static ConfigEntry<string> AppIdVoice { get; private set; }
public static ConfigEntry<string> AppIdChat { get; private set; }
public static ConfigEntry<string> ServerHostname { get; private set; }
public static ConfigEntry<bool> EnableAdvancedSettings { get; private set; }
public static ConfigEntry<string> PhotonHostname { get; private set; }
public static ConfigEntry<int> PhotonPort { get; private set; }
public static ConfigEntry<bool> Debug { get; private set; }
public override void Load()
{
Log = base.Log;
Log.LogInfo($"I JUST HIT THE JACKPOTTTT!!!!! YUH YUH YUH!");
AppIdRT = Config.Bind("Photon", "App Id Realtime", "", "Photon Realtime App ID");
AppIdVoice = Config.Bind("Photon", "App Id Voice", "", "Photon Voice App ID");
AppIdChat = Config.Bind("Photon", "App Id Chat", "", "Photon Chat App ID");
EnableAdvancedSettings = Config.Bind("Advanced", "Enabled Advanced Settings", false, "Allows other fields below in the advanced section to be modified.");
PhotonHostname = Config.Bind("Advanced", "Photon NameServer", "", "Custom Photon NameServer");
PhotonPort = Config.Bind("Advanced", "Photon NameServer Port", 0, "Custom Photon NameServer Port (if 0, it will be default)");
ServerHostname = Config.Bind("Server", "RecNet NameServer Host", "https://ns.lapis.codes", "Host for the RecNet NameServer.");
Debug = Config.Bind("Advanced", "Debug", false, "Show debug logs (HTTP tracing, etc. WARNING: will include sensitive information such as passwords and auth tokens in the logs, be careful when sharing them!)");
Harmony.CreateAndPatchAll(typeof(Plugin).Assembly);
SceneManager.sceneLoaded += (Action<Scene, LoadSceneMode>)OnSceneLoaded;
}
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
// CheatManager boots us out of rooms when it runs, but it's ALSO the DUID service the DI
// container resolves for account creation / login (destroying it removes that service).
// So instead of destroying it, *deactivate* the GameObject: it stops running (no Update /
// coroutines, so no boot) while the component still exists, so the DI container can still
// resolve PGECJHKNIEN and call its DUID methods. It's recreated per scene, so deactivate
// each freshly-spawned (active) instance on every load. (GameObject.Find only returns active
// objects, so once deactivated it isn't found again.)
var cheatMgr = GameObject.Find("GameRoot/(Startup)(Clone)/Core Systems/[CheatManager]");
if (cheatMgr != null)
{
cheatMgr.SetActive(false);
Log.LogInfo("cheatmanager deactivated");
}
}
}
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 Lapis
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+111
View File
@@ -0,0 +1,111 @@
# CannedNet Client
A [BepInEx 6](https://github.com/BepInEx/BepInEx) (IL2CPP) plugin that points the **Rec Room** client at a self-hosted / private "CannedNet" server instead of the official Rec Room backend.
It does this entirely client-side with [Harmony](https://harmony.pardeike.net/) patches — no game files are modified on disk. The plugin rewrites the RecNet name-server lookups, swaps in your own Photon credentials, and disables the client-side guards (EasyAntiCheat, TLS certificate pinning) that would otherwise reject a non-official server.
> ⚠️ **For private/experimental servers only.** This redirects traffic away from official Rec Room infrastructure and disables anti-cheat and certificate validation on the client. Do not use it against `rec.net` or any service you don't control. Use at your own risk.
## What it does
| Patch | File | Effect |
| --- | --- | --- |
| Name-server redirect | `Patches/SendRequestPatch.cs` | Intercepts `BestHTTP` requests and rewrites the host `ns.rec.net` → your configured server. Also provides optional HTTP request/response logging for development. |
| Photon override | `Patches/PhotonPatches.cs` | Replaces the Realtime / Voice / Chat App IDs (and optionally the Photon name server + port) with your own. |
| EAC bypass | `Patches/EACPatches.cs` | Forces EasyAntiCheat "ready" and stubs the challenge-response so the client connects without the official anti-cheat. |
| TLS bypass | `Patches/FuckOffTLS.cs` | Skips server-certificate validation so a custom server's cert is accepted. |
| Promise stub | `Patches/PromisePatch.cs` | Allows custom global-metadata.dat files without the game crashing. |
| CheatManager handling | `Plugin.cs` | Deactivates the in-game `CheatManager` (which would otherwise boot you from rooms) while keeping it resolvable for account creation / login. |
## Requirements
- A Rec Room install set up with **BepInEx 6 (IL2CPP, bleeding-edge)**, launched at least once so the IL2CPP interop assemblies have been generated under `BepInEx/interop/`.
- **.NET 6 SDK** to build the plugin.
- Your own server endpoints: a RecNet name server, and [Photon](https://www.photonengine.com) app keys.
_Looking for a custom RecNet server?_ Try https://github.com/CannedNet/CannedNet.Client
## Installing
1. Download the game using https://github.com/SteamRE/DepotDownloader. The manifest ID is `7859140924515540835`.
Example: `depotdownloader -app 471710 -depot 471711 -manifest 7859140924515540835`
**You must use this specific version.**
2. Install BepInEx to the game. See https://docs.bepinex.dev/articles/user_guide/installation/index.html. **Note that you must use version 6!**
### From release
1. Download a release from [/releases](/releases)
2. Drop the `.dll` file into `BepInEx/plugins/`
### From source
The project references the game's interop DLLs, so the build needs to know where your Rec Room install lives. Set `GamePath` using any one of:
1. **A local props file** (recommended):
```sh
cp GamePath.props.example GamePath.props
```
then edit `GamePath` in `GamePath.props` to point at your Rec Room install root. This file is local-only and stays out of the repo.
2. **An environment variable:**
```sh
set RECROOM_PATH=C:\Path\To\RecRoom # cmd
$env:RECROOM_PATH = "C:\Path\To\RecRoom" # PowerShell
```
3. **On the command line:**
```sh
dotnet build -p:GamePath="C:\Path\To\RecRoom"
```
Then build:
```sh
dotnet build
```
The build validates that `GamePath` is set and that `$(GamePath)\BepInEx\interop` exists, and fails with a clear message otherwise.
A post-build step (the `DeployPlugin` target in the `.csproj`) automatically copies the built `CannedNet.Client.dll` into your Rec Room install's `BepInEx/plugins/` folder after every build. Since `GamePath` already points at your install, you don't need to copy anything by hand — just `dotnet build` and launch the game.
If you need the DLL elsewhere, it's also left in `bin/Debug/net6.0/`.
## Configuration
Start the game for the first time. In `BepInEx` you should now see a `config` folder. If not, verify BepInEx installation and version.
Inside `config`, edit the `lapis.cannednet.client.cfg` file and update as needed:
**[Server]**
- `RecNet NameServer Host` — base URL of your RecNet name server (default `https://ns.lapis.codes`).
**[Photon]**
- `App Id Realtime` — Photon Realtime App ID.
- `App Id Voice` — Photon Voice App ID.
- `App Id Chat` — Photon Chat App ID.
**[Advanced]**
- `Enabled Advanced Settings` — must be `true` to apply the custom Photon name server / port below.
- `Photon NameServer` — custom Photon name server host.
- `Photon NameServer Port` — custom port (`0` uses the default, `4533`).
- `Debug` — verbose HTTP request/response logging (only needed for development)
> ⚠️ Debug logs include **sensitive data** (passwords, auth tokens). Be careful when sharing them.
## Project layout
| Path | Purpose |
| --- | --- |
| `Plugin.cs` | Plugin entry point, config bindings, Harmony bootstrap |
| `Patches/` | Harmony patches (networking, EAC, TLS, Photon) |
| `CannedNet.Client.csproj` | Build config + interop references (driven by `GamePath`), and the `DeployPlugin` post-build copy |
| `GamePath.props.example` | Template for your local `GamePath.props` |
## FAQ
**Can I use this for my own Rec Room server?**
Yes. That's the point.
## License
[MIT](LICENSE)