public override void OnRebuild(VoidPtr address, int size, bool force) { ARCHeader *header = (ARCHeader *)address; *header = new ARCHeader((ushort)Children.Count, Name); ARCFileHeader *entry = header->First; foreach (ResourceNode child in Children) { if (child is ARCEntryNode node) { *entry = new ARCFileHeader(node.FileType, node.FileIndex, node._calcSize, node.GroupID, node._redirectIndex); } else if (_originalHeaders.TryGetValue(child, out ARCFileHeader origHeader)) { *entry = new ARCFileHeader(origHeader.FileType, origHeader.Index, child._calcSize, origHeader.GroupIndex, origHeader.ID); } else { throw new NotSupportedException("Cannot build a new ARCFileHeader for this node (not supported)"); } child.Rebuild(entry->Data, entry->Length, force); entry = entry->Next; } }
internal override void Initialize(ResourceNode parent, DataSource origSource, DataSource uncompSource) { base.Initialize(parent, origSource, uncompSource); if (parent != null && (parent is MRGNode || RootNode is U8Node)) { _fileType = 0; _fileIndex = (short)_parent._children.IndexOf(this); _group = 0; _unk = 0; _fileId = 0; if (_name == null) { _name = String.Format("{0}[{1}]", _fileType, _fileIndex); } } else if (parent != null) { ARCFileHeader *header = (ARCFileHeader *)(origSource.Address - 0x20); _fileType = header->FileType; _fileIndex = header->_index; _group = header->_groupIndex; _unk = header->_unk1; _fileId = header->_id; if (_name == null) { _name = String.Format("{0}[{1}]", _fileType, _fileIndex); } } else if (_name == null) { _name = Path.GetFileName(_origPath); } }
public override void OnPopulate() { ARCFileHeader *entry = Header->First; for (int i = 0; i < Header->_numFiles; i++, entry = entry->Next) { DataSource source = new DataSource(entry->Data, entry->Length); if ((entry->Length == 0) || (NodeFactory.FromSource(this, source) == null)) { //CompressionHeader* cmpr = (CompressionHeader*)source.Address; //if (Compressor.IsDataCompressed(source)) //{ // source.Compression = cmpr->Algorithm; // if (cmpr->ExpandedSize >= entry->Length && Compressor.Supports(cmpr->Algorithm)) // { // //Expand the whole resource and initialize // FileMap uncompMap = FileMap.FromTempFile(cmpr->ExpandedSize); // Compressor.Expand(cmpr, uncompMap.Address, uncompMap.Length); // new ARCEntryNode().Initialize(this, source, new DataSource(uncompMap)); // } // else // new ARCEntryNode().Initialize(this, source); //} //else new ARCEntryNode().Initialize(this, source); } } }
public override void Initialize(ResourceNode parent, DataSource origSource, DataSource uncompSource) { base.Initialize(parent, origSource, uncompSource); if (parent != null && (parent is MRGNode || RootNode is U8Node)) { _fileType = 0; _fileIndex = (short)Parent._children.IndexOf(this); _group = 0; //_unk = 0; _redirectIndex = 0; if (_name == null) { _name = GetName(); } } else if (parent != null && !(parent is FileScanNode)) { ARCFileHeader *header = (ARCFileHeader *)(origSource.Address - 0x20); _fileType = header->FileType; _fileIndex = header->_index; _group = header->_groupIndex; //_unk = header->_padding; _redirectIndex = header->_redirectIndex; if (_name == null) { _name = GetName(); } } else if (_name == null) { _name = Path.GetFileName(_origPath); } }
protected override void OnPopulate() { ARCFileHeader *entry = Header->First; for (int i = 0; i < Header->_numFiles; i++, entry = entry->Next) { if ((entry->_size == 0) || (NodeFactory.FromAddress(this, entry->Data, entry->Length) == null)) { new ARCEntryNode().Initialize(this, entry->Data, entry->Length); } } }
public override void OnPopulate() { ARCFileHeader *entry = Header->First; for (int i = 0; i < Header->_numFiles; i++, entry = entry->Next) { DataSource source = new DataSource(entry->Data, entry->Length); if ((entry->Length == 0) || (NodeFactory.FromSource(this, source) == null)) { new ARCEntryNode().Initialize(this, source); } } }
public override bool OnInitialize() { ARCFileHeader *header = (ARCFileHeader *)(WorkingUncompressed.Address - 0x20); int index = header->_index; _count = Header->_count; if (_name == null) { _name = String.Format("Stepjumps[{0}]", index); } return(Header->_count > 0); }
public override void OnRebuild(VoidPtr address, int size, bool force) { ARCHeader *header = (ARCHeader *)address; *header = new ARCHeader((ushort)Children.Count, Name); ARCFileHeader *entry = header->First; foreach (ARCEntryNode node in Children) { *entry = new ARCFileHeader(node.FileType, node.FileIndex, node._calcSize, node.GroupID, node._redirectIndex); node.Rebuild(entry->Data, entry->Length, force); entry = entry->Next; } }
protected override void OnPopulate() { ARCFileHeader *entry = Header->First; for (int i = 0; i < Header->_numFiles; i++, entry = entry->Next) { if ((entry->_size == 0) || (NodeFactory.FromAddress(this, entry->Data, entry->Length) == null)) { if (SpecialName.Contains(_name) && i == 0 && RootNode == this) { new MoveDefNode().Initialize(this, entry->Data, entry->Length); } else { new ARCEntryNode().Initialize(this, entry->Data, entry->Length); } } } }
public override void OnPopulate() { _originalHeaders.Clear(); ARCFileHeader *entry = Header->First; for (int i = 0; i < Header->_numFiles; i++, entry = entry->Next) { DataSource source = new DataSource(entry->Data, entry->Length); ResourceNode createdNode = entry->Length == 0 ? null : NodeFactory.FromSource(this, source); if (createdNode == null) { createdNode = new ARCEntryNode(); createdNode.Initialize(this, source); } _originalHeaders.Add(createdNode, *entry); } }
internal override void Initialize(ResourceNode parent, DataSource origSource, DataSource uncompSource) { base.Initialize(parent, origSource, uncompSource); if (parent != null) { ARCFileHeader *header = (ARCFileHeader *)(origSource.Address - 0x20); _fileType = header->FileType; _fileIndex = header->_index; _fileFlags = header->_flags; _fileId = header->_id; if (_name == null) { _name = String.Format("{0}[{1}]", _fileType, _fileIndex); } } else if (_name == null) { _name = Path.GetFileName(_origPath); } }
internal protected override void OnRebuild(VoidPtr address, int size, bool force) { ARCHeader *header = (ARCHeader *)address; *header = new ARCHeader((ushort)Children.Count, Name); ARCFileHeader *entry = header->First; foreach (ARCEntryNode node in Children) { *entry = new ARCFileHeader(node.FileType, node.FileIndex, node._calcSize, node.FileGroup, node.Unknown, node.FileId); if (node.IsCompressed) { node.MoveRaw(entry->Data, entry->Length); } else { node.Rebuild(entry->Data, entry->Length, force); } entry = entry->Next; } }