Beispiel #1
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 (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;
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
                }
            }
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
        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);
                }
            }
        }
Beispiel #6
0
        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);
                }
            }
        }
Beispiel #7
0
        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);
        }
Beispiel #8
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;
            }
        }
Beispiel #9
0
        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);
                    }
                }
            }
        }
Beispiel #10
0
        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);
            }
        }
Beispiel #11
0
        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);
            }
        }
Beispiel #12
0
        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;
            }
        }