public override void Parse(VoidPtr address) { //Get header values sDataMisc *hdr = (sDataMisc *)address; misc = *hdr; //Parse all misc entries. //If an offset is 0, the entry will be set to null. _unknown1 = Parse <EntryList <IndexValue> >(misc[0], 4); _finalSmashAura = Parse <EntryList <MiscFinalSmashAura> >(misc[1], 0x14, misc[2]); _hurtBoxes = Parse <EntryList <MiscHurtBox> >(misc[3], 0x20, misc[4]); _ledgeGrabs = Parse <EntryList <MiscLedgeGrab> >(misc[5], 0x10, misc[6]); _unknown7 = Parse <EntryList <MiscUnknown7Entry> >(misc[7], 0x20, misc[8]); _boneRefs = Parse <EntryList <BoneIndexValue> >(misc[9], 4, 10); _unknown10 = Parse <MiscUnknown10>(misc[10]); _soundData = Parse <MiscSoundData>(misc[11]); _unkSection5 = Parse <MiscUnknown12>(misc[12]); _multiJump = Parse <MiscMultiJump>(misc[13]); _glide = Parse <MiscGlide>(misc[14]); _crawl = Parse <MiscCrawl>(misc[15]); _collisionData = Parse <CollisionData>(misc[16]); _tether = Parse <MiscTether>(misc[17]); _unknown18 = Parse <EntryListOffset <IndexValue> >(misc[18], 4); }
public override void Build(VoidPtr address) { dataHeader = (DataHeader *)(address + _data._childLength); //Action arrays are at the start of part 3 actionArrays[0] = (bint *)(address + _lengths[0] + _lengths[1]); actionArrays[1] = actionArrays[0] + _moveset._actions.Count; //Subaction arrays are at the start of part 4 subActionArrays[0] = (bint *)(address + (_lengths[0] + _lengths[1] + _lengths[2])); subActionArrays[1] = (bint *)(subActionArrays[0] + _data._subActions.Count); subActionArrays[2] = (bint *)(subActionArrays[1] + _data._subActions.Count); subActionArrays[3] = (bint *)(subActionArrays[2] + _data._subActions.Count); //Misc is right before the data header miscHeader = (sDataMisc *)(address + (_data._childLength - sDataMisc.Size)); dataHeader->MiscSectionOffset = Offset(miscHeader); dataHeader->SubactionMainStart = Offset(subActionArrays[0]); dataHeader->SubactionGFXStart = Offset(subActionArrays[1]); dataHeader->SubactionSFXStart = Offset(subActionArrays[2]); dataHeader->SubactionOtherStart = Offset(subActionArrays[3]); dataHeader->EntryActionsStart = Offset(actionArrays[0]); dataHeader->ExitActionsStart = Offset(actionArrays[1]); base.Build(address); dataHeader->Unknown27 = _data.Unknown27; dataHeader->Unknown28 = _data.Unknown28; dataHeader->Flags1 = _data.Flags1uint; dataHeader->Flags2 = _data.Flags2int; List <VoidPtr> lookup = _extraDataOffsets.Write(_data, (VoidPtr)dataHeader + DataHeader.Size); #if DEBUG foreach (VoidPtr addr in lookup) { if ((int)addr < (int)_baseAddress) { throw new Exception("Offset value set in lookup, not the address of the offset value."); } } #endif _lookupAddresses.AddRange(lookup); }