Exemplo n.º 1
0
        protected internal override void PostProcess(VoidPtr bresAddress, VoidPtr dataAddress, int dataLength, StringTable stringTable)
        {
            base.PostProcess(bresAddress, dataAddress, dataLength, stringTable);

            ResourceGroup *group;

            if (_version == 5)
            {
                CHR0v5 *header = (CHR0v5 *)dataAddress;
                header->_stringOffset = (int)stringTable[Name] + 4 - (int)dataAddress;
                group = header->Group;
            }
            else
            {
                CHR0v4_3 *header = (CHR0v4_3 *)dataAddress;
                header->_stringOffset = (int)stringTable[Name] + 4 - (int)dataAddress;
                group = header->Group;
            }

            group->_first = new ResourceEntry(0xFFFF, 0, 0, 0, 0);
            ResourceEntry *rEntry = group->First;

            int index = 1;

            foreach (CHR0EntryNode n in Children)
            {
                dataAddress = (VoidPtr)group + (rEntry++)->_dataOffset;
                ResourceEntry.Build(group, index++, dataAddress, (BRESString *)stringTable[n.Name]);
                n.PostProcess(dataAddress, stringTable);
            }
        }
        public override bool OnInitialize()
        {
            base.OnInitialize();
            if (_version == 5)
            {
                CHR0v5 *header = Header5;
                _numFrames = header->_numFrames;
                _loop      = header->_loop != 0;

                if (_name == null)
                {
                    if (header->ResourceString != null)
                    {
                        _name = header->ResourceString;
                    }
                    else
                    {
                        _name = "anim" + Index;
                    }
                }

                if (header->_origPathOffset > 0)
                {
                    _originalPath = header->OrigPath;
                }

                (_userEntries = new UserDataCollection()).Read(header->UserData);

                return(header->Group->_numEntries > 0);
            }
            else
            {
                CHR0v4_3 *header = Header4_3;
                _numFrames = header->_numFrames;
                _loop      = header->_loop != 0;

                if (_name == null)
                {
                    if (header->ResourceString != null)
                    {
                        _name = header->ResourceString;
                    }
                    else
                    {
                        _name = "anim" + Index;
                    }
                }

                if (header->_origPathOffset > 0)
                {
                    _originalPath = header->OrigPath;
                }

                return(header->Group->_numEntries > 0);
            }
        }
Exemplo n.º 3
0
        protected override bool OnInitialize()
        {
            base.OnInitialize();

            startUpVersion = _version = Header->_version;

            if (_version == 5)
            {
                CHR0v5 *header = Header5;
                _numFrames = header->_numFrames;
                _loop      = header->_loop;

                _dataoffset   = header->_dataOffset;
                _stringoffset = header->_stringOffset;

                if (_name == null)
                {
                    if (Header5->ResourceString != null)
                    {
                        _name = Header5->ResourceString;
                    }
                    else
                    {
                        _name = "anim" + Index;
                    }
                }

                return(Header5->Group->_numEntries > 0);
            }
            else
            {
                CHR0v4_3 *header = Header4_3;
                _numFrames    = header->_numFrames;
                _loop         = header->_loop;
                _dataoffset   = header->_dataOffset;
                _stringoffset = header->_stringOffset;

                if (_name == null)
                {
                    if (Header4_3->ResourceString != null)
                    {
                        _name = Header4_3->ResourceString;
                    }
                    else
                    {
                        _name = "anim" + Index;
                    }
                }

                return(Header4_3->Group->_numEntries > 0);
            }
        }
        public override void OnRebuild(VoidPtr address, int length, bool force)
        {
            ResourceGroup *group;

            if (_version == 5)
            {
                CHR0v5 *header = (CHR0v5 *)address;
                *       header = new CHR0v5(_version, length, _numFrames, Children.Count, _loop);
                group = header->Group;
            }
            else
            {
                CHR0v4_3 *header = (CHR0v4_3 *)address;
                *         header = new CHR0v4_3(_version, length, _numFrames, Children.Count, _loop);
                group = header->Group;
            }

            *group = new ResourceGroup(Children.Count);

            VoidPtr entryAddress = group->EndAddress;
            VoidPtr dataAddress  = entryAddress;

            foreach (CHR0EntryNode n in Children)
            {
                dataAddress += n._entryLen;
            }

            ResourceEntry *rEntry = group->First;

            foreach (CHR0EntryNode n in Children)
            {
                (rEntry++)->_dataOffset = (int)entryAddress - (int)group;

                n._dataAddr = dataAddress;
                n.Rebuild(entryAddress, n._entryLen, true);
                entryAddress += n._entryLen;
                dataAddress  += n._dataLen;
            }

            if (_userEntries.Count > 0 && _version == 5)
            {
                CHR0v5 *header = (CHR0v5 *)address;
                header->UserData = dataAddress;
                _userEntries.Write(dataAddress);
            }
        }
        protected internal override void PostProcess(VoidPtr bresAddress, VoidPtr dataAddress, int dataLength, StringTable stringTable)
        {
            base.PostProcess(bresAddress, dataAddress, dataLength, stringTable);

            ResourceGroup *group;

            if (_version == 5)
            {
                CHR0v5 *header = (CHR0v5 *)dataAddress;
                header->ResourceStringAddress = (int)stringTable[Name] + 4;
                if (!String.IsNullOrEmpty(_originalPath))
                {
                    header->OrigPathAddress = stringTable[_originalPath] + 4;
                }
                group = header->Group;
            }
            else
            {
                CHR0v4_3 *header = (CHR0v4_3 *)dataAddress;
                header->ResourceStringAddress = (int)stringTable[Name] + 4;
                if (!String.IsNullOrEmpty(_originalPath))
                {
                    header->OrigPathAddress = stringTable[_originalPath] + 4;
                }
                group = header->Group;
            }

            group->_first = new ResourceEntry(0xFFFF, 0, 0, 0, 0);
            ResourceEntry *rEntry = group->First;

            int index = 1;

            foreach (CHR0EntryNode n in Children)
            {
                dataAddress = (VoidPtr)group + (rEntry++)->_dataOffset;
                ResourceEntry.Build(group, index++, dataAddress, (BRESString *)stringTable[n.Name]);
                n.PostProcess(dataAddress, stringTable);
            }

            if (_version == 5)
            {
                _userEntries.PostProcess(((CHR0v5 *)dataAddress)->UserData, stringTable);
            }
        }