Exemplo n.º 1
0
        protected internal override void OnRebuild(VoidPtr address, int length, bool force)
        {
            bint *addr = (bint *)address;

            foreach (MoveDefIndexNode b in Children)
            {
                b._entryOffset = addr;
                *addr++ = b.ItemIndex;
            }

            FDefListOffset *header = (FDefListOffset *)addr;

            _entryOffset = header;

            if (Children.Count > 0)
            {
                header->_startOffset = (int)address - (int)_rebuildBase;
                _lookupOffsets.Add((int)header->_startOffset.Address - (int)_rebuildBase);
            }

            header->_listCount = Children.Count;
        }
Exemplo n.º 2
0
        public override void OnRebuild(VoidPtr address, int length, bool force)
        {
            VoidPtr addr = address;

            foreach (MoveDefHitDataListNode p in Children)
            {
                if (!p.External)
                {
                    p.Rebuild(addr, p._calcSize, true);
                    addr += p._calcSize;
                }
            }

            _entryOffset = addr;
            FDefListOffset *header = (FDefListOffset *)addr;

            foreach (MoveDefHitDataListNode d in Children)
            {
                (&header[d.offsetID])->_listCount   = d.Children.Count;
                (&header[d.offsetID])->_startOffset = (int)d._entryOffset - (int)_rebuildBase;
                _lookupOffsets.Add((&header[d.offsetID])->_startOffset.Address - (int)_rebuildBase);
            }
        }
Exemplo n.º 3
0
        public override void OnRebuild(VoidPtr address, int length, bool force)
        {
            _lookupOffsets = new List <int>();

            int mainOff = 0, defOff = 0, offOff = 0, swtchOff = 0, grpOff = 0;

            foreach (MoveDefModelVisRefNode r in Children)
            {
                defOff += 4;
                foreach (MoveDefBoneSwitchNode b in r.Children)
                {
                    offOff += 8;
                    if (b.defaultGroup >= 0)
                    {
                        mainOff += 8;
                    }

                    foreach (MoveDefModelVisGroupNode o in b.Children)
                    {
                        swtchOff += 8;
                        grpOff   += o.Children.Count * 4;
                    }
                }
            }

            //bones
            //groups
            //switches
            //offsets
            //defaults
            //header

            bint *                    boneAddr    = (bint *)address;
            FDefListOffset *          groupLists  = (FDefListOffset *)((VoidPtr)boneAddr + grpOff);
            FDefListOffset *          switchLists = (FDefListOffset *)((VoidPtr)groupLists + swtchOff);
            bint *                    offsets     = (bint *)((VoidPtr)switchLists + offOff);
            FDefModelDisplayDefaults *defaults    = (FDefModelDisplayDefaults *)((VoidPtr)offsets + defOff);
            FDefModelDisplay *        header      = (FDefModelDisplay *)((VoidPtr)defaults + mainOff);

            _entryOffset = header;

            header->_entryOffset = (int)offsets - (int)_rebuildBase;

            _lookupOffsets.Add((int)header->_entryOffset.Address - (int)_rebuildBase);

            header->_entryCount = Children[0].Children.Count; //Children 1 child count will be the same

            int defCount = 0;

            foreach (MoveDefModelVisRefNode r in Children)
            {
                r._entryOffset = offsets;
                if (r.Children.Count > 0)
                {
                    *offsets = (int)switchLists - (int)_rebuildBase;
                    _lookupOffsets.Add((int)offsets - (int)_rebuildBase);
                }

                offsets++;
                foreach (MoveDefBoneSwitchNode b in r.Children)
                {
                    b._entryOffset = switchLists;
                    if (b.defaultGroup >= 0)
                    {
                        defCount++;
                        defaults->_switchIndex      = b.Index;
                        (defaults++)->_defaultGroup = b.defaultGroup;
                    }

                    switchLists->_listCount = b.Children.Count;
                    if (b.Children.Count > 0)
                    {
                        switchLists->_startOffset = (int)groupLists - (int)_rebuildBase;
                        _lookupOffsets.Add((int)switchLists->_startOffset.Address - (int)_rebuildBase);
                    }
                    else
                    {
                        switchLists->_startOffset = 0;
                    }

                    switchLists++;
                    foreach (MoveDefModelVisGroupNode o in b.Children)
                    {
                        o._entryOffset         = groupLists;
                        groupLists->_listCount = o.Children.Count;
                        if (o.Children.Count > 0)
                        {
                            groupLists->_startOffset = (int)boneAddr - (int)_rebuildBase;
                            _lookupOffsets.Add((int)groupLists->_startOffset.Address - (int)_rebuildBase);
                        }
                        else
                        {
                            groupLists->_startOffset = 0;
                        }

                        groupLists++;
                        foreach (MoveDefBoneIndexNode bone in o.Children)
                        {
                            bone._entryOffset = boneAddr;
                            *boneAddr++ = bone.boneIndex;
                        }
                    }
                }
            }

            if (defCount > 0)
            {
                header->_defaultsOffset = (int)offsets - (int)_rebuildBase;
                _lookupOffsets.Add((int)header->_defaultsOffset.Address - (int)_rebuildBase);
            }
            else
            {
                header->_defaultsOffset = 0;
            }

            header->_defaultsCount = defCount;
        }
        protected internal override void OnRebuild(VoidPtr address, int length, bool force)
        {
            VoidPtr addr = address;

            foreach (MoveDefArticleNode b in Children)
            {
                b._buildHeader = false;
                b.Rebuild(addr, b._childLength, true);
                addr += b._childLength;
            }

            VoidPtr start = addr;

            foreach (MoveDefArticleNode b in Children)
            {
                b._entryOffset = addr;

                Article *article = (Article *)addr;

                article->_id       = b.id;
                article->_boneID   = b.bone;
                article->_arcGroup = b.group;

                article->_actionsStart        = b.aStart;
                article->_actionFlagsStart    = b.aFlags;
                article->_subactionFlagsStart = b.sFlags;
                article->_subactionMainStart  = b.sMStart;
                article->_subactionGFXStart   = b.sGStart;
                article->_subactionSFXStart   = b.sSStart;
                article->_modelVisibility     = b.visStart;
                article->_collisionData       = b.off1;
                article->_unknownD2           = b.off2;
                article->_unknownD3           = b.off3;

                bint *ext = (bint *)((VoidPtr)article + 52);
                ext[0] = (b.subActions == null ? 0 : b.subActions.Children.Count);

                //Add all header offsets
                bint *off = (bint *)(addr + 12);
                for (int i = 0; i < 10 + b._extraOffsets.Count; i++)
                {
                    if (off[i] > 1480 && off[i] < Root.dataSize)
                    {
                        b._lookupOffsets.Add((int)&off[i] - (int)_rebuildBase);
                    }
                }

                _lookupOffsets.AddRange(b._lookupOffsets);

                addr += b._entryLength;
            }

            FDefListOffset *header = (FDefListOffset *)addr;

            _entryOffset = header;

            if (Children.Count > 0)
            {
                header->_startOffset = (int)start - (int)_rebuildBase;
                _lookupOffsets.Add((int)header->_startOffset.Address - (int)_rebuildBase);
            }

            header->_listCount = Children.Count;
        }