public override object Execute(List <string> args) { if (args.Count < 1 || args.Count > 2) { return(false); } if (args[0] == "new") { return(MatchShaderNew(args[1])); } else if (args.Count == 2) { return(false); } RenderMethodTemplate bmRmt2 = new RenderMethodTemplate(); CachedTag bmRmt2Instance; using (var blamStream = BlamCache.OpenCacheRead()) { if (BlamCache.TryGetCachedTag(args[0], out bmRmt2Instance)) { bmRmt2 = BlamCache.Deserialize <RenderMethodTemplate>(blamStream, bmRmt2Instance); } else { return(false); } } List <string> bmMaps = new List <string>(); List <string> bmArgs = new List <string>(); // Get a simple list of H3 bitmaps and arguments names foreach (var a in bmRmt2.TextureParameterNames) { bmMaps.Add(BlamCache.StringTable.GetString(a.Name)); } foreach (var a in bmRmt2.RealParameterNames) { bmArgs.Add(BlamCache.StringTable.GetString(a.Name)); } string result = null; using (var cacheStream = Cache.OpenCacheRead()) { ShaderMatcher Matcher = new ShaderMatcher(); Matcher.Init(cacheStream, Cache, BlamCache); // Find a HO equivalent rmt2 var edRmt2Instance = Matcher.FixRmt2Reference(cacheStream, bmRmt2Instance.Name, bmRmt2Instance, bmRmt2, bmMaps, bmArgs); result = edRmt2Instance.Name; } Console.WriteLine($"Blam template \"{bmRmt2Instance.Name}.rmt2\"\n matched with \"{result}.rmt2\"."); return(true); }