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)); } }