示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
 internal static int EncodeFILEBlock(FILEHeader *header, RSAREntryList entries)
 {
     return(0);
 }