|
@@ -5,6 +5,7 @@ using System.Reflection;
|
|
|
using Mono.Cecil;
|
|
|
using Mono.Cecil.Cil;
|
|
|
using UnityEngine;
|
|
|
+using Object = UnityEngine.Object;
|
|
|
|
|
|
namespace COM3D2.NeighUncensor.Patcher
|
|
|
{
|
|
@@ -12,11 +13,11 @@ namespace COM3D2.NeighUncensor.Patcher
|
|
|
{
|
|
|
public static readonly string[] TargetAssemblyNames = { "Assembly-CSharp.dll", "UnityEngine.dll" };
|
|
|
|
|
|
- private static Dictionary<string, Action<AssemblyDefinition, TypeDefinition>> patches = new Dictionary<string, Action<AssemblyDefinition, TypeDefinition>>
|
|
|
- {
|
|
|
- ["Assembly-CSharp"] = PatchAssemblyCSharp,
|
|
|
- ["UnityEngine"] = PatchUnityEngine
|
|
|
- };
|
|
|
+ private static readonly Dictionary<string, Action<AssemblyDefinition, TypeDefinition>> patches =
|
|
|
+ new Dictionary<string, Action<AssemblyDefinition, TypeDefinition>>
|
|
|
+ {
|
|
|
+ ["Assembly-CSharp"] = PatchAssemblyCSharp, ["UnityEngine"] = PatchUnityEngine
|
|
|
+ };
|
|
|
|
|
|
public static void Patch(AssemblyDefinition ad)
|
|
|
{
|
|
@@ -39,21 +40,22 @@ namespace COM3D2.NeighUncensor.Patcher
|
|
|
ins.OpCode = OpCodes.Nop;
|
|
|
il.InsertAfter(ins, il.Create(OpCodes.Ret));
|
|
|
il.InsertAfter(ins, il.Create(OpCodes.Call, mRef));
|
|
|
- if(passInstance)
|
|
|
+ if (passInstance)
|
|
|
il.InsertAfter(ins, il.Create(OpCodes.Ldarg_0));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private static void PatchAssemblyCSharp(AssemblyDefinition ad, TypeDefinition hooks)
|
|
|
{
|
|
|
- var tBody = ad.MainModule.GetType("TBody");
|
|
|
+ var bgMgr = ad.MainModule.GetType("BgMgr");
|
|
|
var importCM = ad.MainModule.GetType("ImportCM");
|
|
|
|
|
|
- var fixMaskFlag = tBody.Methods.FirstOrDefault(m => m.Name == "FixMaskFlag");
|
|
|
- PatchPostfix(fixMaskFlag, hooks.Methods.FirstOrDefault(m => m.Name == nameof(Hooks.PostFixMaskFlag)), true);
|
|
|
+ var createAssetBundle = bgMgr.Methods.FirstOrDefault(m => m.Name == "CreateAssetBundle");
|
|
|
+ PatchPostfix(createAssetBundle,
|
|
|
+ hooks.Methods.FirstOrDefault(m => m.Name == nameof(Hooks.PostCreateAssetBundle)));
|
|
|
|
|
|
- var loadSkinMeshR = importCM.Methods.FirstOrDefault(m => m.Name == "LoadSkinMesh_R");
|
|
|
- PatchPostfix(loadSkinMeshR, hooks.Methods.FirstOrDefault(m => m.Name == nameof(Hooks.PostLoadMesh)));
|
|
|
+ var readMaterial = importCM.Methods.FirstOrDefault(m => m.Name == "ReadMaterial");
|
|
|
+ PatchPostfix(readMaterial, hooks.Methods.FirstOrDefault(m => m.Name == nameof(Hooks.PostReadMaterial)));
|
|
|
}
|
|
|
|
|
|
private static void PatchUnityEngine(AssemblyDefinition ad, TypeDefinition hooks)
|
|
@@ -70,20 +72,28 @@ namespace COM3D2.NeighUncensor.Patcher
|
|
|
|
|
|
public static class Hooks
|
|
|
{
|
|
|
- private static object diffuse;
|
|
|
+ private static object replacement;
|
|
|
|
|
|
- public static void PostFixMaskFlag(TBody tbody)
|
|
|
+ public static Material PostReadMaterial(Material result)
|
|
|
{
|
|
|
- tbody.goSlot[(int)TBody.hashSlotName["moza"]].boVisible = false;
|
|
|
+ if (result.shader?.name.ToLowerInvariant().Contains("mosaic") ?? false)
|
|
|
+ {
|
|
|
+ if (replacement == null)
|
|
|
+ replacement = Shader.Find("Unlit/Transparent");
|
|
|
+ result.shader = (Shader)replacement;
|
|
|
+ result.renderQueue = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
- public static GameObject PostLoadMesh(GameObject result)
|
|
|
+ public static GameObject PostCreateAssetBundle(GameObject result)
|
|
|
{
|
|
|
TryUncensor(result);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- public static UnityEngine.Object OnResourceLoad(UnityEngine.Object result)
|
|
|
+ public static Object OnResourceLoad(Object result)
|
|
|
{
|
|
|
if (result is GameObject go)
|
|
|
TryUncensor(go);
|
|
@@ -99,16 +109,7 @@ namespace COM3D2.NeighUncensor.Patcher
|
|
|
if (smr == null || smr.materials == null)
|
|
|
return;
|
|
|
foreach (var mm in smr.materials)
|
|
|
- {
|
|
|
- if (mm.shader?.name.ToLowerInvariant().Contains("mosaic") ?? false)
|
|
|
- {
|
|
|
- if (diffuse == null)
|
|
|
- diffuse = Shader.Find("CM3D2/Toony_Lighted_Trans");
|
|
|
-
|
|
|
- mm.shader = diffuse as Shader;
|
|
|
- mm.color += new Color(0f, 0f, 0f, -1f);
|
|
|
- }
|
|
|
- }
|
|
|
+ PostReadMaterial(mm);
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
+}
|