protected internal override void OnRebuild(VoidPtr address, int length, bool force) { CHR0 *header = (CHR0 *)address; *header = new CHR0(length, _numFrames, Children.Count, _unk1, _unk2, _unk3); ResourceGroup *group = header->Group; *group = new ResourceGroup(Children.Count); VoidPtr entryAddress = group->EndAddress; VoidPtr dataAddress = entryAddress; foreach (CHR0EntryNode n in Children) { dataAddress += n._entryLen; } //VoidPtr dataAddr = group->EndAddress; //CHR0Entry* entry = (CHR0Entry*)group->EndAddress; ResourceEntry *rEntry = group->First; foreach (CHR0EntryNode n in Children) { rEntry->_dataOffset = (int)entryAddress - (int)group; rEntry++; n._dataAddr = dataAddress; n.Rebuild(entryAddress, n._entryLen, true); entryAddress += n._entryLen; dataAddress += n._dataLen; } }
protected internal override void PostProcess(VoidPtr bresAddress, VoidPtr dataAddress, int dataLength, StringTable stringTable) { base.PostProcess(bresAddress, dataAddress, dataLength, stringTable); CHR0 *header = (CHR0 *)dataAddress; header->ResourceStringAddress = stringTable[Name] + 4; ResourceGroup *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); } }