protected override void OnWrite(VoidPtr address)
        {
            sMiscUnknown10Entry *data = (sMiscUnknown10Entry *)address;

            foreach (MiscUnk10Entry e in _entries)
            {
                e.Write(data++);
            }

            RebuildAddress = data;

            sMiscUnknown10 *header = (sMiscUnknown10 *)data;

            header->_haveNBoneIndex1 = _haveNBoneIndex1;
            header->_haveNBoneIndex2 = _haveNBoneIndex2;
            header->_throwNBoneIndex = _throwNBoneIndex;
            header->_pad             = _pad;
            header->_haveNBoneIndex3 = _haveNBoneIndex3;

            //Values are switched on purpose
            header->_list._startOffset = _entries.Count;
            header->_list._listCount   = _entries.Count > 0 ? Offset(address) : 0;

            if (header->_list._listCount > 0)
            {
                Lookup(&header->_list._listCount);
            }
        }
        protected override void OnParse(VoidPtr address)
        {
            _entries = new List <MiscUnk10Entry>();
            sMiscUnknown10 *hdr = (sMiscUnknown10 *)address;

            _haveNBoneIndex1 = hdr->_haveNBoneIndex1;
            _haveNBoneIndex2 = hdr->_haveNBoneIndex2;
            _throwNBoneIndex = hdr->_throwNBoneIndex;
            _unkCount        = hdr->_list._startOffset;
            _unkOffset       = hdr->_list._listCount;
            _pad             = hdr->_pad;
            _haveNBoneIndex3 = hdr->_haveNBoneIndex3;

            //if ((_offset - _unkOffset) / 16 != _unkCount)
            //    throw new Exception("Count is incorrect");

            for (int i = 0; i < _unkCount; i++)
            {
                _entries.Add(Parse <MiscUnk10Entry>(_unkOffset + i * 0x10));
            }
        }