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); } }
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); } }