private static MainFieldChara ReadMainChara(byte[] oneb) { MainFieldChara localMfc = new MainFieldChara(); using (MemoryStream ms = new MemoryStream(oneb)) using (BinaryReader br = new BinaryReader(ms)) { List <uint> timOffsets = new List <uint>(); uint timOffset; while ((timOffset = br.ReadUInt32()) != 0xffffffff) { timOffsets.Add(timOffset & 0x00FFFFFF); } uint modelPointer = br.ReadUInt32(); //read textures List <Texture2D> tex2Dreader = new List <Texture2D>(); for (int i = 0; i < timOffsets.Count; i++) { TIM2 tim = new TIM2(br, timOffsets[i]); tex2Dreader.Add(tim.GetTexture()); } localMfc.textures = tex2Dreader.ToArray(); //read models ms.Seek(modelPointer, SeekOrigin.Begin); Debug_MCH mch = new Debug_MCH(ms, br, Debug_MCH.mchMode.FieldMain); localMfc.mch = mch; } return(localMfc); }
private static MainFieldChara ReadMainChara(byte[] oneBytes) { var localMfc = new MainFieldChara(); using (var ms = new MemoryStream(oneBytes)) using (var br = new BinaryReader(ms)) { var timOffsets = new List <uint>(); uint timOffset; while ((timOffset = br.ReadUInt32()) != 0xffffffff) { timOffsets.Add(timOffset & 0x00FFFFFF); } var modelPointer = br.ReadUInt32(); //read textures var texture2DReader = timOffsets .Select(x => new TIM2(br, x)) .Select(x => x.GetTexture()).ToList() .AsReadOnly(); localMfc.Textures = texture2DReader.ToArray(); //read models ms.Seek(modelPointer, SeekOrigin.Begin); var mch = new Debug_MCH(ms, br, Debug_MCH.mchMode.FieldMain); localMfc.MCH = mch; } return(localMfc); }
public static void Init(bool bForce = false) { if (bAlreadyInitialized && !bForce) { return; } List <MainFieldChara> mfc = new List <MainFieldChara>(); ArchiveWorker aw = new ArchiveWorker(Memory.Archives.A_FIELD); string[] test = aw.GetListOfFiles(); var CollectionEntry = test.Where(x => x.ToLower().Contains("main_chr")); if (!CollectionEntry.Any()) { return; } string fieldArchiveName = CollectionEntry.First(); var fieldArchive = aw.GetArchive(fieldArchiveName); string[] test_ = fieldArchive.GetListOfFiles(); for (int i = 0; i < test_.Length; i++) { //if (test_[i].Contains("d008.mch")) // continue; if (string.IsNullOrWhiteSpace(test_[i])) { continue; } byte[] oneb = fieldArchive.GetBinaryFile(test_[i]); if (oneb.Length < 64) //Hello Kazuo Suzuki! I will skip your dummy files { continue; } MainFieldChara currentLocalChara = ReadMainChara(oneb); int localId = int.Parse(Path.GetFileNameWithoutExtension(test_[i]).Substring(1, 3)); currentLocalChara.id = localId; mfc.Add(currentLocalChara); } MainFieldCharacters = mfc.ToArray(); bAlreadyInitialized = true; }