diff --git a/README.md b/README.md index c444e56..4a0347d 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@
- An in-game explorer and a suite of debugging tools for IL2CPP and Mono Unity games, using MelonLoader and BepInEx.
+ An in-game explorer and a suite of debugging tools for IL2CPP and Mono Unity games, to aid with modding development.
@@ -22,15 +22,14 @@
## Releases
-| Mod Loader | Il2Cpp | Mono |
+| Mod Loader | IL2CPP | Mono |
| ----------- | ------ | ---- |
| [MelonLoader](https://github.com/HerpDerpinstine/MelonLoader) | ✔️ [link](https://github.com/sinai-dev/Explorer/releases/latest/download/Explorer.MelonLoader.Il2Cpp.zip) | ✔️ [link](https://github.com/sinai-dev/Explorer/releases/latest/download/Explorer.MelonLoader.Mono.zip) |
| [BepInEx](https://github.com/BepInEx/BepInEx) | ❔ [link](https://github.com/sinai-dev/Explorer/releases/latest/download/Explorer.BepInEx.Il2Cpp.zip) | ✔️ [link](https://github.com/sinai-dev/Explorer/releases/latest/download/Explorer.BepInEx.Mono.zip) |
-Il2Cpp Issues:
+IL2CPP Issues:
* Some methods may still fail with a `MissingMethodException`, please let me know if you experience this (with full debug log please).
-* Reflection may fail with certain types, see [here](https://github.com/knah/Il2CppAssemblyUnhollower#known-issues) for more details.
-* Scrolling with mouse wheel in the Explorer menu may not work on all games at the moment.
+* Reflection may fail with certain types, see [here](https://github.com/knah/IL2CPPAssemblyUnhollower#known-issues) for more details.
## Features
@@ -47,77 +46,52 @@
## How to install
-### MelonLoader
-Requires [MelonLoader](https://github.com/HerpDerpinstine/MelonLoader) to be installed for your game.
-
-1. Download the relevant release from above.
-2. Unzip the file into the `Mods` folder in your game's installation directory, created by MelonLoader.
-3. Make sure it's not in a sub-folder, `Explorer.dll` should be directly in the `Mods\` folder.
-
### BepInEx
-Requires [BepInEx](https://github.com/BepInEx/BepInEx) to be installed for your game.
-1. Download the relevant release from above.
-2. Unzip the file into the `BepInEx\plugins\` folder in your game's installation directory, created by BepInEx.
-3. Make sure it's not in a sub-folder, `Explorer.dll` should be directly in the `plugins\` folder.
+0. Install [BepInEx](https://github.com/BepInEx/BepInEx) for your game.
+1. Download the UnityExplorer release for BepInEx IL2CPP or Mono above.
+2. Take the `UnityExplorer.dll` file and put it in `[GameFolder]\BepInEx\plugins\`
+3. Take the `UnityExplorer\` folder (with `explorerui.bundle`) and put it in `[GameFolder]\Mods\`, so it looks like `[GameFolder]\Mods\UnityExplorer\explorerui.bundle`.
+4. In IL2CPP, it is highly recommended to get the base Unity libs for the game's Unity version and put them in the `BepInEx\unhollowed\base\` folder.
+
+### MelonLoader
+
+0. Install [MelonLoader](https://github.com/HerpDerpinstine/MelonLoader) for your game.
+1. Download the UnityExplorer release for MelonLoader IL2CPP or Mono above.
+2. Take the contents of the release and put it in the `[GameFolder]\Mods\` folder. It should look like `[GameFolder]\Mods\UnityExplorer.dll` and `[GameFolder]\Mods\UnityExplorer\explorerui.bundle`.
## Mod Config
-There is a simple Mod Config for the Explorer. You can access the settings via the "Options" page of the main menu.
+You can access the settings via the "Options" page of the main menu, or directly from the config at `Mods\UnityExplorer\config.xml` (generated after first launch).
-`Main Menu Toggle` (KeyCode) | Default: `F7`
+`Main Menu Toggle` (KeyCode)
+* Default: `F7`
* See [this article](https://docs.unity3d.com/ScriptReference/KeyCode.html) for a full list of all accepted KeyCodes.
-`Default Window Size` (Vector2) | Default: `x: 550, y: 700`
-* Sets the default width and height for all Explorer windows when created.
+`Force_Unlock_Mouse` (bool)
+* Default: `true`
+* Forces the cursor to be unlocked and visible while the UnityExplorer menu is open, and prevents anything else taking control.
-`Default Items per Page` (int) | Default: `20`
+`Default Page Limit` (int)
+* Default: `25`
* Sets the default items per page when viewing lists or search results.
+* Requires a restart to take effect, apart from Reflection Inspector tabs.
-`Enable Bitwise Editing` (bool) | Default: `false`
-* Whether or not to show the Bitwise Editing helper when inspecting integers
-
-`Enable Tab View` (bool) | Default: `true`
-* Whether or not all inspector windows a grouped into a single window with tabs.
-
-`Default Output Path` (string) | Default: `Mods\Explorer`
+`Default Output Path` (string)
+* Default: `Mods\Explorer`
* Where output is generated to, by default (for Texture PNG saving, etc).
-## Mouse Control
-
-Explorer can force the mouse to be visible and unlocked when the menu is open, if you have enabled "Force Unlock Mouse" (Left-Alt toggle). Explorer also attempts to prevent clicking-through onto the game behind the Explorer menu.
-
-If you need more mouse control:
-
-* For VRChat, use [VRCExplorerMouseControl](https://github.com/sinai-dev/VRCExplorerMouseControl)
-* For Hellpoint, use [HPExplorerMouseControl](https://github.com/sinai-dev/Hellpoint-Mods/tree/master/HPExplorerMouseControl/HPExplorerMouseControl)
-* You can create your own plugin using one of the two plugins above as an example. Usually only a few simple Harmony patches are needed to fix the problem.
-
-For example:
-```csharp
-using Explorer;
-using Harmony; // or 'using HarmonyLib;' for BepInEx
-// ...
-// You will need to figure out the relevant Class and Method for your game using dnSpy.
-[HarmonyPatch(typeof(MyGame.InputManager), nameof(MyGame.InputManager.Update))]
-public class InputManager_Update
-{
- [HarmonyPrefix]
- public static bool Prefix()
- {
- // prevent method running if menu open, let it run if not.
- return !ExplorerCore.ShowMenu;
- }
-}
-```
+`Log Unity Debug` (bool)
+* Default: `false`
+* Listens for Unity `Debug.Log` messages and prints them to UnityExplorer's log.
## Building
-If you'd like to build this yourself, you will need to have installed BepInEx and/or MelonLoader for at least one Unity game. If you want to build all 4 versions, you will need at least one Il2Cpp and one Mono game, with BepInEx and MelonLoader installed for both.
+If you'd like to build this yourself, you will need to have installed BepInEx and/or MelonLoader for at least one Unity game. If you want to build all 4 versions, you will need at least one IL2CPP and one Mono game, with BepInEx and MelonLoader installed for both.
1. Install MelonLoader or BepInEx for your game.
2. Open the `src\Explorer.csproj` file in a text editor.
-3. Set the relevant `GameFolder` values for the versions you want to build, eg. set `MLCppGameFolder` if you want to build for a MelonLoader Il2Cpp game.
+3. Set the relevant `GameFolder` values for the versions you want to build, eg. set `MLCppGameFolder` if you want to build for a MelonLoader IL2CPP game.
4. Open the `src\Explorer.sln` project.
5. Select `Solution 'Explorer' (1 of 1 project)` in the Solution Explorer panel, and set the Active config property to the version you want to build, then build it.
5. The DLLs are built to the `Release\` folder in the root of the repository.
@@ -128,5 +102,5 @@ If you'd like to build this yourself, you will need to have installed BepInEx an
Written by Sinai.
Thanks to:
-* [ManlyMarco](https://github.com/ManlyMarco) for their [Runtime Unity Editor](https://github.com/ManlyMarco/RuntimeUnityEditor), which I used for the REPL Console and the "Find instances" snippet, and the UI style.
-* [denikson](https://github.com/denikson) for [mcs-unity](https://github.com/denikson/mcs-unity). I commented out the `SkipVisibilityExt` constructor since it was causing an exception with the Hook it attempted.
+* [ManlyMarco](https://github.com/ManlyMarco) for their [Runtime Unity Editor](https://github.com/ManlyMarco/RuntimeUnityEditor), which I used for some aspects of the C# Console and Auto-Complete features.
+* [denikson](https://github.com/denikson) (aka Horse) for [mcs-unity](https://github.com/denikson/mcs-unity). I commented out the `SkipVisibilityExt` constructor since it was causing an exception with the Hook it attempted in IL2CPP.