internal int EncodeFILEBlock(FILEHeader *header, VoidPtr baseAddress, RSAREntryList entries, RSARNode node) { int len = 0; VoidPtr baseAddr = (VoidPtr)header + 0x20; VoidPtr addr = baseAddr; //Build files - order by groups foreach (RSARGroupNode g in entries._groups) { int headerLen = 0, audioLen = 0, i = 0; INFOGroupEntry *e = (INFOGroupEntry *)((VoidPtr)g._headerAddr + INFOGroupHeader.Size + 4 + g._files.Count * 8); g._headerAddr->_headerOffset = addr - baseAddress; foreach (RSARFileNode f in g._files) { e[i]._headerLength = f._headerLen; e[i]._headerOffset = headerLen; headerLen += f._headerLen; ++i; } i = 0; VoidPtr wave = addr + headerLen; g._headerAddr->_waveDataOffset = wave - baseAddress; foreach (RSARFileNode f in g._files) { f._rebuildAudioAddr = wave + audioLen; f.Rebuild(addr, f._headerLen, true); e[i]._dataOffset = f._audioLen == 0 ? 0 : audioLen; e[i]._dataLength = f._audioLen; addr += f._headerLen; audioLen += f._audioLen; ++i; } addr += audioLen; g._headerAddr->_headerLength = headerLen; g._headerAddr->_waveDataLength = audioLen; } len = ((int)addr - (int)(VoidPtr)header).Align(0x20); //Set header header->_header._tag = FILEHeader.Tag; header->_header._length = len; return(len); }
internal int EncodeFILEBlock(FILEHeader *header, RSAREntryList entries, RSARNode node) { int len = 0; VoidPtr baseAddr = (VoidPtr)header + 0x20; VoidPtr addr = baseAddr; //Build files - order by groups for (int x = 0; x <= entries._groups.Count; x++) { RSARGroupNode g = x == entries._groups.Count ? node._nullGroup : ((RSAREntryState)entries._groups[x])._node as RSARGroupNode; int headerLen = 0, audioLen = 0; int i = 0; INFOGroupEntry *e = (INFOGroupEntry *)((VoidPtr)g._rebuildAddr + INFOGroupHeader.Size + 4 + g._files.Count * 8); g._rebuildAddr->_headerOffset = (int)(addr - node._rebuildBase); foreach (RSARFileNode f in g.Files) { e[i]._headerLength = f._headerLen; e[i++]._headerOffset = headerLen; headerLen += f._headerLen; } i = 0; VoidPtr wave = addr + headerLen; g._rebuildAddr->_waveDataOffset = (int)(wave - node._rebuildBase); foreach (RSARFileNode f in g.Files) { f._rebuildAudioAddr = wave + audioLen; f.Rebuild(addr, f._headerLen, true); addr += f._headerLen; e[i]._dataLength = f._audioLen; e[i++]._dataOffset = f._audioLen == 0 ? 0 : audioLen; audioLen += f._audioLen; } addr += audioLen; g._rebuildAddr->_headerLength = headerLen; g._rebuildAddr->_waveDataLength = audioLen; } len = ((int)addr - (int)(VoidPtr)header).Align(0x20); //Set header header->_header._tag = FILEHeader.Tag; header->_header._length = len; return(len); }
internal static int EncodeFILEBlock(FILEHeader *header, RSAREntryList entries) { return(0); }