public MainFrm(GeneralConfig generalConfig, FullAssetConfig config) { _startTime = DateTime.Now; _generalConfig = generalConfig; _config = config; _timer = new Timer { Interval = 250 }; _timer.Tick += OnTimerTick; InitializeComponent(); }
static void Main() { var baseDir = FormatUtil.FindBasePath(); var generalConfig = GeneralConfig.Load(baseDir); var config = FullAssetConfig.Load(baseDir); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); void SaveChanges(object sender, EventArgs e) => config.Save(baseDir); var form = new MainFrm(generalConfig, config); form.SaveClicked += SaveChanges; Application.Run(form); form.SaveClicked -= SaveChanges; SaveChanges(null, EventArgs.Empty); }
static void Main() { var baseDir = FormatUtil.FindBasePath(); var config = FullAssetConfig.Load(baseDir); var outpathPath = Path.Combine(baseDir, @"Formats/AssetIds"); var xldPattern = new Regex(@"([0-9]+).XLD$"); var enums = new Dictionary <string, EnumData>(); foreach (var xld in config.Xlds.Values) { if (string.IsNullOrEmpty(xld.EnumName)) { continue; } int offset = 0; var match = xldPattern.Match(xld.Name); if (match.Success) { offset = 100 * int.Parse(match.Groups[1].Value); } if (!enums.ContainsKey(xld.EnumName)) { enums[xld.EnumName] = new EnumData { Name = xld.EnumName } } ; var e = enums[xld.EnumName]; foreach (var o in xld.Assets.Values.OrderBy(x => x.Id)) { var id = offset + o.Id; e.Entries.Add(string.IsNullOrEmpty(o.Name) ? new EnumEntry { Name = $"Unknown{id}", Value = id } : new EnumEntry { Name = Sanitise(o.Name), Value = id }); } } ItemConfig itemConfig = ItemConfig.Load(baseDir); enums["ItemId"] = new EnumData { Name = "ItemId" }; foreach (var item in itemConfig.Items) { enums["ItemId"].Entries.Add(string.IsNullOrEmpty(item.Value.Name) ? new EnumEntry { Name = $"Unknown{item.Key}", Value = item.Key } : new EnumEntry { Name = Sanitise(item.Value.Name), Value = item.Key }); } CoreSpriteConfig coreSpriteConfig = CoreSpriteConfig.Load(baseDir); enums["CoreSpriteId"] = new EnumData { Name = "CoreSpriteId" }; foreach (var item in coreSpriteConfig.CoreSpriteIds) { enums["CoreSpriteId"].Entries.Add(new EnumEntry { Name = Sanitise(item.Value), Value = item.Key }); } foreach (var e in enums.Values) { var duplicateNames = e.Entries.GroupBy(x => x.Name).Where(x => x.Count() > 1).ToList(); var counters = duplicateNames.ToDictionary(x => x.Key, x => 1); foreach (var o in e.Entries) { if (!counters.ContainsKey(o.Name)) { continue; } var name = o.Name; o.Name = name + counters[name]; counters[name]++; } } foreach (var e in enums.Values) { File.WriteAllText(Path.Combine(outpathPath, e.Name + ".cs"), $@"// Note: This file was automatically generated using Tools/GenerateEnums. // No changes should be made to this file by hand. Instead, the relevant json // files should be modified and then GenerateEnums should be used to regenerate // the various ID enums. namespace UAlbion.Formats.AssetIds {{ public enum {e.Name} {{ " + string.Join(Environment.NewLine, e.Entries.Select(x => $" {x.Name} = {x.Value},")) + @" } }"); } } }
public ReverserCore(GeneralConfig generalConfig, FullAssetConfig config) { GeneralConfig = generalConfig; Config = config; BaseExportDirectory = Path.GetFullPath(Path.Combine(GeneralConfig.BasePath, GeneralConfig.ExportedXldPath)); var files = Directory.EnumerateFiles(BaseExportDirectory, "*.*", SearchOption.AllDirectories); foreach (var file in files) { var absDir = Path.GetDirectoryName(file) ?? ""; var relativeDir = absDir.Substring(BaseExportDirectory.Length).TrimStart('\\').Replace("\\", "/"); if (relativeDir.Length == 0) { continue; } if (!Config.Xlds.ContainsKey(relativeDir)) { Config.Xlds.Add(relativeDir, new FullXldInfo()); } var xld = Config.Xlds[relativeDir]; if (!Xlds.ContainsKey(relativeDir)) { Xlds.Add(relativeDir, xld); } var relative = file.Substring(BaseExportDirectory.Length + 1); var parts = relative.Split('\\'); string key = parts.Last(); key = Path.GetFileNameWithoutExtension(key); if (!int.TryParse(key, out var number)) { continue; } if (!xld.Assets.ContainsKey(number)) { xld.Assets[number] = new FullAssetInfo(); } FullAssetInfo asset = xld.Assets[number]; asset.Filename = relative; } var commonPalette = File.ReadAllBytes(Path.Combine(GeneralConfig.BasePath, GeneralConfig.XldPath, "PALETTE.000")); var palettesPath = Path.Combine(BaseExportDirectory, "PALETTE0.XLD"); files = Directory.EnumerateFiles(palettesPath, "*.*", SearchOption.AllDirectories); foreach (var file in files) { var a = file.Substring(palettesPath.Length + 1, 2); ushort paletteNumber = ushort.Parse(a); var assetConfig = Config.Xlds["PALETTE0.XLD"].Assets[paletteNumber]; var paletteName = assetConfig.Name; if (string.IsNullOrEmpty(paletteName)) { paletteName = file.Substring(BaseExportDirectory.Length + 1); } using (var stream = File.Open(file, FileMode.Open)) using (var br = new BinaryReader(stream)) { var palette = new AlbionPalette(br, (int)br.BaseStream.Length, new AssetKey(AssetType.Palette, paletteNumber), paletteNumber); palette.SetCommonPalette(commonPalette); Palettes.Add(palette); } } }