Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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);
            }
        }