public static void ParseCharacter(CharName name, DataSection data, VoidPtr address) { OffsetHolder o = ExtraDataOffsets.GetOffsets(name); if (o != null) { o.Parse(data, address); } }
protected override void OnParse(VoidPtr address) { //Initialize lists _extraEntries = new List <MovesetEntryNode>(); _articles = new SortedList <int, MovesetEntryNode>(); _subActions = new BindingList <SubActionEntry>(); //Get header values _hdr = *(DataHeader *)address; _unk27 = _hdr.Unknown27; _unk28 = _hdr.Unknown28; _flags1 = _hdr.Flags1; _flags2 = _hdr.Flags2; bint *v = (bint *)address; //Calculate the size of each section using the offsets in order of data appearance int[] sizes = SakuraiArchiveNode.CalculateSizes(_root._dataSize, v, 27, true); //Parse any data related to scripts ParseScripts(v, sizes); //Now parse all other data entries for this character. //If an offset is 0 (except for the attributes), the entry will be set to null. //subaction flags (offset 0) are parsed in ParseScripts _modelVis = Parse <ModelVisibility>(v[1]); _attributes = Parse <AttributeList>(v[2], "Attributes"); _sseAttributes = Parse <AttributeList>(v[3]); _misc = Parse <MiscSectionNode>(v[4]); _commonActionFlags = Parse <EntryList <ActionFlags> >(v[5], 0x10); //action flags (offset 6) are parsed in ParseScripts _unknown7 = Parse <EntryList <Unknown7Entry> >(v[7], 8); _actionInterrupts = Parse <ActionInterrupts>(v[8]); //entry actions (offset 9) are parsed in ParseScripts //exit actions (offset 10) are parsed in ParseScripts _actionPre = Parse <EntryList <ActionPre> >(v[11], 4); //main subactions (offset 12) are parsed in ParseScripts //gfx subactions (offset 13) are parsed in ParseScripts //sfx subactions (offset 14) are parsed in ParseScripts //other subactions (offset 15) are parsed in ParseScripts _anchoredItems = Parse <EntryList <ItemAnchor> >(v[16], sItemAnchor.Size); _gooeyBomb = Parse <EntryList <ItemAnchor> >(v[17], sItemAnchor.Size); _boneRef1 = Parse <EntryList <BoneIndexValue> >(v[18], 4, sizes[18] / 4); _boneRef2 = Parse <BoneReferences2>(v[19]); _entryOverrides = Parse <ActionOverrideList>(v[20]); _exitOverrides = Parse <ActionOverrideList>(v[21]); _unknown22 = Parse <Unknown22>(v[22]); _samusCannon = Parse <EntryList <ItemAnchor> >(v[23], sItemAnchor.Size + 4); _unknown24 = Parse <Unknown24>(v[24]); //Parse extra offsets specific to this character //It appears that the module controls this data OffsetHolder o = ExtraDataOffsets.GetOffsets(((MovesetNode)_root).Character); if (o != null) { o.Parse(this, address + DataHeader.Size); } //Set article indices (they are parsed as extra offsets) int u = 0; foreach (ArticleNode e in _articles.Values) { e._index = u++; } }