forked from zombieb/undead-universal-patch-il2cpp
2.0.0 - any gameconfigurationasset can be changed! breaking public API
This commit is contained in:
326
README.md
326
README.md
@@ -1,89 +1,289 @@
|
||||
# Undead Universal Patch
|
||||
|
||||
Non-EAC, IL2CPP build patcher for Rec Room (Dec 2018\*-*Apr 3 2020)
|
||||
|
||||
**Currently only supports unobfuscated builds**
|
||||
|
||||
Part two of two universal patches. The Mono patch is available at https://git.proxnet.dev/zombieb/undead-universal-patch-mono.
|
||||
Part two of two universal patches. The Mono patch is available at
|
||||
https://git.proxnet.dev/zombieb/undead-universal-patch-mono.
|
||||
|
||||
Compatible with [BepInEx builds](https://builds.bepinex.dev/projects/bepinex_be) that can automatically load interop assemblies before plugins (builds 710 and later)
|
||||
Compatible with [BepInEx builds](https://builds.bepinex.dev/projects/bepinex_be)
|
||||
that can automatically load interop assemblies before plugins (builds 710 and
|
||||
later)
|
||||
|
||||
**When submitting issues**, please submit your BepInEx log file with all log levels enabled. You can do this by setting `Logging.Disk.LogLevels` in `BepInEx.cfg` to `All`.
|
||||
**When submitting issues**, please submit your BepInEx log file with all log
|
||||
levels enabled. You can do this by setting `Logging.Disk.LogLevels` in
|
||||
`BepInEx.cfg` to `All`.
|
||||
|
||||
### Compiling
|
||||
|
||||
Unlike the Mono patch, some assemblies must be referenced.
|
||||
|
||||
Run BepInEx interop on your build and add the following assemblies to new folder `.\AssemblyReferences\` in this project directory:
|
||||
* `BepInEx/interop/Assembly-CSharp.dll`
|
||||
* `BepInEx/interop/Il2Cppmscorlib.dll`
|
||||
* `BepInEx/interop/Il2CppSystem.dll`
|
||||
* `BepInEx/interop/Photon3Unity3D.dll`
|
||||
* `BepInEx/interop/RecRoom.Datastructures.Runtime`
|
||||
* `BepInEx/interop/UnityEngine.CoreModule.dll`
|
||||
Run BepInEx interop on your build and add the following assemblies to new folder
|
||||
`.\AssemblyReferences\` in this project directory:
|
||||
|
||||
- `BepInEx/interop/Assembly-CSharp.dll`
|
||||
- `BepInEx/interop/Il2Cppmscorlib.dll`
|
||||
- `BepInEx/interop/Il2CppSystem.dll`
|
||||
- `BepInEx/interop/Photon3Unity3D.dll`
|
||||
- `BepInEx/interop/RecRoom.Datastructures.Runtime`
|
||||
- `BepInEx/interop/UnityEngine.CoreModule.dll`
|
||||
|
||||
## Dependencies
|
||||
|
||||
- Mapster
|
||||
- Requires `Mapster.dll` and `Mapster.Core.dll` (place in /BepInEx/plugins)
|
||||
- [Mapster on GitHub](https://github.com/MapsterMapper/Mapster)
|
||||
|
||||
### Linux users
|
||||
Wine currently has problems generating the keypair used in Galvanic authentication.
|
||||
|
||||
Wine currently has problems generating the keypair used in Galvanic
|
||||
authentication.
|
||||
|
||||
You can use a real Windows system to generate the keys for the first startup.
|
||||
|
||||
If you're unsure how to start your build on linux:
|
||||
* Install Steam
|
||||
* Add Rec Room as a non-steam game
|
||||
* Set the compatibility mode to the latest stable version of proton
|
||||
* Use protontricks to add the doorstop DLL
|
||||
* Start Rec Room through Steam
|
||||
|
||||
- Install Steam
|
||||
- Add Rec Room as a non-steam game
|
||||
- Set the compatibility mode to the latest stable version of proton
|
||||
- Use protontricks to add the doorstop DLL
|
||||
- Start Rec Room through Steam
|
||||
|
||||
### (AssetChanges) and (GameManager Patches)
|
||||
Properties of the object in the patch file will be used to set the properties of the respective object in the game's assembly.
|
||||
|
||||
Properties of the object in the patch file will be used to set the properties of
|
||||
the respective object in the game's assembly.
|
||||
|
||||
Each object type can be configured as follows:
|
||||
* `AGRoomRuntimeConfig.Room` or `AGRoomRuntimeConfig.RoomScene` or `AGRoomRuntimeConfig.Location`
|
||||
- Set the key to the replicationId of the object you want to change
|
||||
* Any object with a replicationId can be changed
|
||||
- Objects in the list have properties "Key" and "Value"
|
||||
* The key represents the name of the property to modify
|
||||
* The value will replace the current value in the assembly
|
||||
- Example:
|
||||
```json
|
||||
{"76d98498-60a1-430c-ab76-b54a29b7a163": [
|
||||
|
||||
- `AGRoomRuntimeConfig.Room` or `AGRoomRuntimeConfig.RoomScene` or
|
||||
`AGRoomRuntimeConfig.Location`
|
||||
- Set the key to the replicationId of the object you want to change
|
||||
- Any object with a replicationId can be changed
|
||||
- Objects in the list have properties "Key" and "Value"
|
||||
- The key represents the name of the property to modify
|
||||
- The value will replace the current value in the assembly
|
||||
- Example:
|
||||
```json
|
||||
{
|
||||
"76d98498-60a1-430c-ab76-b54a29b7a163": [
|
||||
{
|
||||
"Key": "ReleaseStatus",
|
||||
"Value": 0
|
||||
}
|
||||
]}
|
||||
```
|
||||
will prevent you from loading into the dorm, because you can't go to editor-only rooms.
|
||||
You can set rooms with ReleaseStatus:0 to 2 if you'd like to go to those rooms.
|
||||
This isn't very useful for most people. You *should* set this when using `TeamConfiguration` below.
|
||||
* `GameConfigurationAsset`
|
||||
- List of changes to the game configurations
|
||||
- See the example for syntax
|
||||
* Ex. "Crescendo Of The Blood Moon" (CrescendoOfTheBloodMoon_Config, 20200306)
|
||||
- Example:
|
||||
```json
|
||||
[
|
||||
{
|
||||
"GameName": "Crescendo Of The Blood Moon",
|
||||
"TeamConfigurations": [
|
||||
{"Size":6},
|
||||
{"Size":6}
|
||||
]
|
||||
},
|
||||
{
|
||||
"GameName": "Paintball Capture The Flag",
|
||||
"TeamConfigurations": [
|
||||
{"Size":1},
|
||||
{"Size":1},
|
||||
{"Size":1},
|
||||
]
|
||||
}
|
||||
]
|
||||
```
|
||||
* Some games have issues with spawning players from other teams into regular spawnpoints. Use `GameFreeSpawns` to remedy this.
|
||||
* GameFreeSpawns
|
||||
- Sets every current playing spawnpoint to be available to any team
|
||||
- Allows more than 4 players to spawn in correctly in quests like Crescendo
|
||||
- List the game names (strings) to enable the patch for
|
||||
- Example:
|
||||
```json
|
||||
["Crescendo Of The Blood Moon", "Paintball Capture The Flag"]
|
||||
```
|
||||
}
|
||||
```
|
||||
will prevent you from loading into the dorm, because you can't go to
|
||||
editor-only rooms. You can set rooms with ReleaseStatus:0 to 2 if you'd like
|
||||
to go to those rooms. This isn't very useful for most people. You _should_
|
||||
set this when using `TeamConfiguration` below.
|
||||
- `GameConfigurationAsset`
|
||||
- Dictionary of changes to the game configurations
|
||||
- Must use the entire game configuration when including one
|
||||
- See the example for syntax
|
||||
- Example:
|
||||
```json
|
||||
{
|
||||
"Soccer": {
|
||||
"Name": "COOLER Soccer",
|
||||
"LoadPriority": -1,
|
||||
"ManualGameStartRequirement": {
|
||||
"MinPlayerCount": 2,
|
||||
"MinTeamCount": 2,
|
||||
"MinTeamSize": 1
|
||||
},
|
||||
"AutomaticGameStartSupported": false,
|
||||
"AutomaticGameStartRequirement": {
|
||||
"MinPlayerCount": -1,
|
||||
"MinTeamCount": -1,
|
||||
"MinTeamSize": -1
|
||||
},
|
||||
"PreGameVoiceOverSupported": true,
|
||||
"ResultsVoiceOverSupported": true,
|
||||
"CountdownVoiceOverSupported": true,
|
||||
"GameModeNotificationsSupported": true,
|
||||
"InGamePlayerNotificationsSupported": true,
|
||||
"GameStartDelay": 10.0,
|
||||
"EndGameResultsDuration": 15.0,
|
||||
"RespawnOnGameStartSupported": true,
|
||||
"RespawnOnGameEndSupported": true,
|
||||
"JoinInProgressSupported": true,
|
||||
"TeamConfigurations": [
|
||||
{
|
||||
"MaxTeamSize": 12
|
||||
},
|
||||
{
|
||||
"MaxTeamSize": 12
|
||||
}
|
||||
],
|
||||
"TeamSelectionMethod": 2,
|
||||
"EndGameIfStartRequirementsNotMet": true,
|
||||
"ExplicitTeamSelectionSupported": false,
|
||||
"GameRunningTeamChangeSupported": false,
|
||||
"RespawnOnGameRunningTeamChangeSupported": true,
|
||||
"SpectatingSupported": true,
|
||||
"ShowOpenSlotsOnScoreboard": true,
|
||||
"ClearTeamsAfterGame": true,
|
||||
"TeamPlayerVisualSettings": {
|
||||
"UseTeamNameInsteadOfPlayerNameInNotifications": true,
|
||||
"UseTeamColorInFeedback": true,
|
||||
"TeamColorMode": 0,
|
||||
"TeamOutfitsSupported": true,
|
||||
"TeammateBeaconMode": 0,
|
||||
"OpponentBeaconMode": 0
|
||||
},
|
||||
"TeamRadioSupported": true,
|
||||
"TeamRadioSettings": {
|
||||
"RadioVolume": 0.12,
|
||||
"EnterRadioDistance": 1.5,
|
||||
"ExitRadioDistance": 1.0
|
||||
},
|
||||
"StatConfigurations": [
|
||||
{
|
||||
"Name": "Stat 1",
|
||||
"HideInUI": true,
|
||||
"HideInHUD": true,
|
||||
"Format": 0
|
||||
},
|
||||
{
|
||||
"Name": "Stat 2",
|
||||
"HideInUI": true,
|
||||
"HideInHUD": true,
|
||||
"Format": 0
|
||||
},
|
||||
{
|
||||
"Name": "Stat 3",
|
||||
"HideInUI": true,
|
||||
"HideInHUD": true,
|
||||
"Format": 0
|
||||
},
|
||||
{
|
||||
"Name": "Stat 4",
|
||||
"HideInUI": true,
|
||||
"HideInHUD": true,
|
||||
"Format": 0
|
||||
},
|
||||
{
|
||||
"Name": "Stat 5",
|
||||
"HideInUI": true,
|
||||
"HideInHUD": true,
|
||||
"Format": 0
|
||||
},
|
||||
{
|
||||
"Name": "Stat 6",
|
||||
"HideInUI": true,
|
||||
"HideInHUD": true,
|
||||
"Format": 0
|
||||
},
|
||||
{
|
||||
"Name": "Stat 7",
|
||||
"HideInUI": true,
|
||||
"HideInHUD": true,
|
||||
"Format": 0
|
||||
},
|
||||
{
|
||||
"Name": "Stat 8",
|
||||
"HideInUI": true,
|
||||
"HideInHUD": true,
|
||||
"Format": 0
|
||||
},
|
||||
{
|
||||
"Name": "Stat 9",
|
||||
"HideInUI": true,
|
||||
"HideInHUD": true,
|
||||
"Format": 0
|
||||
},
|
||||
{
|
||||
"Name": "Stat 10",
|
||||
"HideInUI": true,
|
||||
"HideInHUD": true,
|
||||
"Format": 0
|
||||
}
|
||||
],
|
||||
"PersistStatsOnGameStart": false,
|
||||
"MaxHealth": 100,
|
||||
"MaxShield": 0,
|
||||
"SuppressWeaponDamage": false,
|
||||
"AutoHealSupported": false,
|
||||
"AutoHealSettings": {
|
||||
"Delay": 0.0,
|
||||
"Duration": 0.0
|
||||
},
|
||||
"DownButNotOutSupported": false,
|
||||
"DownButNotOutSettings": {
|
||||
"MaxDepletionDuration": 0.0,
|
||||
"InvincibilityDuration": 0.0
|
||||
},
|
||||
"AutoRespawnSupported": true,
|
||||
"RespawnSettings": {
|
||||
"AutoRespawnDelay": 5.0,
|
||||
"RestoreHealthOnRespawn": true,
|
||||
"RespawnInvincibilityDuration": 3.0
|
||||
},
|
||||
"ReviveMode": 0,
|
||||
"ReviveSettings": {
|
||||
"RequiredDelay": 0.0,
|
||||
"MaxReviveHealthNormalized": 1.0,
|
||||
"MinReviveHealthNormalized": 1.0,
|
||||
"MultiplierPerReviveHealthNormalized": 1.0,
|
||||
"PickupToolsOnRevive": false,
|
||||
"ReviverInvincibilityDuration": 0.0,
|
||||
"ReviveeInvincibilityDuration": 0.0,
|
||||
"HandshakeHoldDuration": 0.0
|
||||
},
|
||||
"HUDSupported": false,
|
||||
"FriendlyFireSettings": {
|
||||
"PlayerOnPlayerFriendlyFireSupported": false,
|
||||
"PlayerOnEnemyFriendlyFireSupported": false,
|
||||
"EnemyOnPlayerFriendlyFireSupported": false,
|
||||
"EnemyOnEnemyFriendlyFireSupported": false,
|
||||
"GrenadesCanDamageTeammates": true
|
||||
},
|
||||
"PlayerCombatUISettings": {
|
||||
"LocalPlayerUISupported": false,
|
||||
"OpponentUISupported": true,
|
||||
"TeammateUISupported": true,
|
||||
"TeammateUIAlwaysVisible": false,
|
||||
"OpponentUIAlwaysVisible": false
|
||||
},
|
||||
"EnemyCombatUISettings": {
|
||||
"OpponentUISupported": true,
|
||||
"TeammateUISupported": false
|
||||
},
|
||||
"DeadMonochromeEffectSupported": true,
|
||||
"DownButNotOutMonochromeEffectSupported": true,
|
||||
"DamageRedFlashEffectSupported": true,
|
||||
"DefaultHitFeedbackSupported": true,
|
||||
"DefaultReviveFeedbackSupported": true,
|
||||
"DefaultDownedOpponentFeedbackSupported": true,
|
||||
"DefaultDownedLocalPlayerFeedbackSupported": true,
|
||||
"DefaultDownedTeammateFeedbackSupported": false,
|
||||
"DeadPersistentNotificationSupported": true,
|
||||
"SpawnPointSelectionMethod": 2,
|
||||
"MainHandTool": -1,
|
||||
"OffHandTool": -1,
|
||||
"ResetToolsOnGameStartSupported": true,
|
||||
"BrokenToolBehavior": 0,
|
||||
"EquipmentBeaconsSupported": true,
|
||||
"WeaponInfiniteAmmoSupported": false,
|
||||
"TeleportBufferDistanceRetricted": false,
|
||||
"OutOfBoundsSupported": false,
|
||||
"OutOfBoundsSpectatorsSupported": false,
|
||||
"DownOutOfBoundsPlayers": false,
|
||||
"OutOfBoundsGracePeriod": 3.0,
|
||||
"OutOfBoundsMaxDuration": 4.0
|
||||
}
|
||||
}
|
||||
```
|
||||
- Some games have issues with spawning players from other teams into regular
|
||||
spawnpoints. Use `GameFreeSpawns` to remedy this.
|
||||
- GameFreeSpawns
|
||||
- Sets every current playing spawnpoint to be available to any team
|
||||
- Allows more than 4 players to spawn in correctly in quests like Crescendo
|
||||
- List the game names (strings) to enable the patch for
|
||||
- Example:
|
||||
```json
|
||||
["Crescendo Of The Blood Moon", "Paintball Capture The Flag"]
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user