public CrelicUnitedGameProject DeserializeRelic() { if (!m_read_toc) { m_read_toc = true; m_relic = m_arc.DeserializeRoot() as CrelicUnitedGameProject; if (m_toc != m_input) { m_toc.Dispose(); m_toc = m_input; m_arc.SetSource(m_input); } } return(m_relic); }
static public RioReader Create(ArcView file) { if (CRioArchive.RioSignature == file.View.ReadUInt32(0)) { return(new RioReader(file)); } if (file.Name.HasExtension(".ici")) { return(null); } var ici_name = file.Name + ".ici"; if (!VFS.FileExists(ici_name)) { ici_name = Path.ChangeExtension(file.Name, ".ici"); if (!VFS.FileExists(ici_name)) { return(null); } } byte[] ici_data; using (var ici = VFS.OpenBinaryStream(ici_name)) ici_data = ReadIci(ici, IciKey); CObjectArcMan arc_man; using (var ici = new BinMemoryStream(ici_data)) { var rio = new CRioArchive(ici); arc_man = rio.DeserializeRoot() as CObjectArcMan; if (null == arc_man) { return(null); } } var arc_object = arc_man.ArcList.FirstOrDefault(); if (null == arc_object || !VFS.IsPathEqualsToFileName(file.Name, arc_object.RioName)) { return(null); } return(new RioReader(arc_man, file)); }