public void Load(string adtFileName, string wdtFileName) { WdtFile = new WDT.WDT(); WdtFile.Load(wdtFileName); using (var reader = new BinaryReader(File.OpenRead(adtFileName))) { while (reader.BaseStream.Position < reader.BaseStream.Length) { var chunkName = new string(reader.ReadChars(4).Reverse().ToArray()); var chunkSize = reader.ReadInt32(); var chunkType = Type.GetType(chunkName); if (chunkType != null) { // If chunkType is an array, it can only be MCNK if (chunkType.IsArray) { MCNK[MCNK.Count(c => c != null)] = (MCNK)Activator.CreateInstance(typeof(MCNK), reader.ReadBytes(chunkSize), WdtFile); } else { GetType().GetProperty(chunkName)?.SetValue(this, Activator.CreateInstance(chunkType, reader.ReadBytes(chunkSize))); } } } } }