Browse Source

Fix texture name capturing

Geoffrey Horsington 4 years ago
parent
commit
75be5ad3a3
2 changed files with 14 additions and 6 deletions
  1. 11 3
      COM3D2.CacheEditMenu.Patcher/Patcher.cs
  2. 3 3
      COM3D2.CacheEditMenu/Hooks.cs

+ 11 - 3
COM3D2.CacheEditMenu.Patcher/Patcher.cs

@@ -59,9 +59,10 @@ namespace COM3D2.CacheEditMenu.Patcher
 
             var sceneEdit = ad.MainModule.GetType("SceneEdit");
             var getMenuItemSetUp = sceneEdit.Methods.FirstOrDefault(m => m.Name == "GetMenuItemSetUP");
+            var initMenuItemScript = sceneEdit.Methods.FirstOrDefault(m => m.Name == "InitMenuItemScript");
 
-            var importCm = ad.MainModule.GetType("ImportCM");
-            var createTexture = importCm.Methods.FirstOrDefault(m => m.Name == "CreateTexture" && m.Parameters.Count == 1);
+//            var importCm = ad.MainModule.GetType("ImportCM");
+//            var createTexture = importCm.Methods.FirstOrDefault(m => m.Name == "CreateTexture" && m.Parameters.Count == 1);
 
             var hookType = hookAd.MainModule.GetType("COM3D2.CacheEditMenu.Hooks");
             var getMenuItemSetUpPrefix = hookType.Methods.FirstOrDefault(m => m.Name == "Prefix");
@@ -70,7 +71,14 @@ namespace COM3D2.CacheEditMenu.Patcher
             var createTexturePrefix = hookType.Methods.FirstOrDefault(m => m.Name == "CreateTexturePrefix");
 
             PatchHelper(getMenuItemSetUp, getMenuItemSetUpPrefix, getMenuItemSetUpPostfix, 0, 1);
-            PatchHelper(createTexture, createTexturePrefix, null, 0);
+
+            var il = initMenuItemScript.Body.GetILProcessor();
+            foreach (var ins in il.Body.Instructions.ToList())
+            {
+                if (ins.OpCode == OpCodes.Call &&
+                    ((MethodReference)ins.Operand).Name == "CreateTexture")
+                    il.InsertBefore(ins, il.Create(OpCodes.Call, ad.MainModule.ImportReference(createTexturePrefix)));
+            }
 
             var buffer = new byte[4096];
             using(var s = typeof(Patcher).Assembly.GetManifestResourceStream(

+ 3 - 3
COM3D2.CacheEditMenu/Hooks.cs

@@ -29,7 +29,7 @@ namespace COM3D2.CacheEditMenu
 
     public static class Hooks
     {
-        private const int CACHE_VERSION = 1020;
+        private const int CACHE_VERSION = 1021;
 
         private static readonly Dictionary<string, MenuInfo> infoCache = new Dictionary<string, MenuInfo>();
         private static BinaryWriter cacheWriter;
@@ -138,10 +138,10 @@ namespace COM3D2.CacheEditMenu
 
         public static string texFileName = null;
 
-        public static bool CreateTexturePrefix(ref Texture2D result, string fileName)
+        public static string CreateTexturePrefix(string fileName)
         {
             texFileName = fileName;
-            return true;
+            return fileName;
         }
 
         public static bool Postfix(bool result, SceneEdit.SMenuItem mi, string menuFileName)