public static void DoEdit(ChangeArgs args) { // collect characters AICCollection result = new AICCollection(); foreach (Change c in Version.Changes) { if (!c.IsChecked || !(c is AICChange)) { continue; } AICCollection collection = ((AICChange)c).Collection; foreach (AICharacter aic in collection.Values) { // topmost aics have priority if (!result.ContainsKey(aic.Index)) { result.Add(aic.Index, aic); } } } CreateEdit(result).Activate(args); }
static void ParseAll() { AICCollection collection = new AICCollection(); foreach (string file in Directory.EnumerateFiles("decompiled", "*.txt")) { string name = Path.GetFileNameWithoutExtension(file); if (!Enum.TryParse(name, true, out AICIndex index)) { continue; } Console.WriteLine(index); using (StreamReader sr = new StreamReader(file)) { AICharacter aic = new AICharacter() { Index = (int)index, Name = index.ToString(), Personality = Parse(sr) }; collection.Add((int)index, aic); } } using (FileStream fs = new FileStream("vanilla.aic", FileMode.Create)) collection.Write(fs); }
static bool TryLoadCollection(string path, bool resource, out AICCollection result) { try { Stream stream; if (resource) { Assembly asm = Assembly.GetExecutingAssembly(); stream = asm.GetManifestResourceStream(path); } else { stream = new FileStream(path, FileMode.Open); } result = new AICCollection(stream); return(true); } catch (FormatException e) { Debug.Show(path + "\n" + e.Message); } result = null; return(false); }
public AICChange(string title, AICCollection coll, bool enabledDefault = false, bool isIntern = false) : base(title, ChangeType.AIC, enabledDefault, false) { this.NoLocalization = true; this.collection = coll; this.intern = isIntern; string descrIdent = title + isIntern; // set localized description, if it's empty seek a non-empty description var header = collection.Header; string descr = header.DescrByIndex(Localization.LanguageIndex); if (string.IsNullOrWhiteSpace(descr)) { foreach (int index in Localization.IndexLoadOrder) { descr = header.DescrByIndex(index); if (!string.IsNullOrWhiteSpace(descr)) { break; } } } this.headerKey = descrIdent + "_descr"; Localization.Add(headerKey, descr); this.Add(new DefaultHeader(descrIdent, true)); }
public static void Activate(ChangeArgs args) { AICCollection coll; using (FileStream fs = new FileStream("vanilla.aic", FileMode.Open)) coll = new AICCollection(fs); CreateEdit(coll).Activate(args); }
static ChangeHeader CreateEdit(AICCollection coll) { byte[] data; using (MemoryStream ms = new MemoryStream()) using (BinaryWriter bw = new BinaryWriter(ms)) { foreach (AICharacter aic in coll.Values) { // mov eax, index bw.Write((byte)0xB8); bw.Write((int)aic.Index * 0x2A4); // imul eax, 2A4 /*bw.Write((byte)0x69); * bw.Write((byte)0xC0); * bw.Write(0x2A4);*/ // add eax, esi bw.Write((byte)0x01); bw.Write((byte)0xF0); // edit AI's properties for (int i = 0; i < AIPersonality.TotalFields; i++) { // mov [eax + prop], value bw.Write((byte)0xC7); bw.Write((byte)0x80); bw.Write((int)(i * 4)); bw.Write((int)aic.Personality.GetByIndex(i)); } } data = ms.ToArray(); } // 004D1928 BinaryEdit be = new BinaryEdit("ai_prop") { new BinAddress("call", 0x1B + 1, true), new BinSkip(0x1B), new BinHook(5) { // ori code 0xE8, new BinRefTo("call"), // edit ais new BinBytes(data), } }; return(new DefaultHeader("ai_prop") { be }); }
/// <summary> /// Load the Data from the File /// </summary> private void Loaddata() { try { using (Stream stream = File.Open(path, FileMode.Open)) { aicCol = new AICCollection(stream); } } catch (Exception e) { MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public AICChange(string title, AICCollection coll, bool enabledDefault = false, bool isIntern = false) : base(title, ChangeType.AIC, enabledDefault, false) { this.NoLocalization = true; this.collection = coll; this.intern = isIntern; string descrIdent = title + isIntern; string descr = collection.Header.DescrByIndex(Localization.LanguageIndex); this.headerKey = descrIdent + "_descr"; Localization.Add(headerKey, descr); this.Add(new DefaultHeader(descrIdent, true)); }
static void UpdateAICs(string folder) { foreach (string file in Directory.EnumerateFiles(folder, "*.aic")) { AICCollection aicc; using (FileStream fs = new FileStream(file, FileMode.Open)) { aicc = new AICCollection(fs); } using (FileStream fs = new FileStream(file, FileMode.Create)) { aicc.Write(fs); } Console.WriteLine(file); } }
static void Main(string[] args) { Console.Title = "AIC-Updater"; var files = Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "*.aic"); if (files.Count() == 0) { Console.WriteLine("No .aic files found!"); } else { Console.WriteLine("The property names of the following .aic files will be updated."); Console.WriteLine("Any custom comments will be lost in the process!"); Console.WriteLine(); foreach (string file in files) { Console.WriteLine(Path.GetFileName(file)); } Console.WriteLine(); Console.WriteLine("Press ENTER to continue."); Console.ReadLine(); foreach (string file in files) { AICCollection aicc; using (FileStream fs = new FileStream(file, FileMode.Open)) { aicc = new AICCollection(fs); } using (FileStream fs = new FileStream(file, FileMode.Create)) { aicc.Write(fs); } } Console.WriteLine("Done."); } Console.ReadLine(); }