private void LoadSoundNames(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, EngineDescription buildInfo) { var count = (int)values.GetInteger("number of sound names"); var address = values.GetInteger("sound name table address"); var layout = buildInfo.Layouts.GetLayout("sound names"); var entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, metaArea); SoundNames = entries.Select(e => new StringID(e.GetInteger("name index"))).ToArray(); }
private ThirdGenCacheFileReference[] LoadExternalFiles(StructureValueCollection values, IReader reader) { var count = (int)values.GetInteger("number of external cache files"); uint address = values.GetInteger("external cache file table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("external cache file table entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); return(entries.Select(e => new ThirdGenCacheFileReference(e)).ToArray()); }
private List <ITagClass> LoadClasses(IReader reader, StructureValueCollection headerValues) { var count = (int)headerValues.GetInteger("number of classes"); uint address = headerValues.GetInteger("class table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("class entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); return(entries.Select <StructureValueCollection, ITagClass>(e => new ThirdGenTagClass(e)).ToList()); }
private List <Script> LoadScripts(IReader reader, StructureValueCollection values) { var count = (int)values.GetInteger("number of scripts"); uint address = values.GetInteger("script table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("script entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); return(entries.Select(e => new Script(e, reader, _metaArea, _stringIDs, _buildInfo)).ToList()); }
private void LoadScales(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, EngineDescription buildInfo) { var count = (int)values.GetInteger("number of scales"); var address = values.GetInteger("scales table address"); var layout = buildInfo.Layouts.GetLayout("sound scales"); var entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, metaArea); SoundScales = (from entry in entries select new FourthGenSoundScale(entry)).ToArray <ISoundScale>(); }
public IEnumerable <ResourcePointer> LoadPointers(IReader reader, IList <ResourcePage> pages) { StructureValueCollection values = LoadTag(reader); var count = (int)values.GetInteger("number of raw segments"); uint address = values.GetInteger("raw segment table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("raw segment table entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); return(entries.Select(e => LoadPointer(e, pages))); }
/// <summary> /// Reads all child objects of this reflexive. /// </summary> /// <param name="values">The values read from the parent.</param> /// <param name="reader">The stream to read from.</param> /// <param name="metaArea">The meta area of the cache file.</param> /// <param name="stringIDs">The string ID source for the cache file.</param> /// <param name="buildInfo">The build info for the cache file.</param> /// <returns>The objects that were read.</returns> public ScriptObject[] ReadObjects(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, StringIDSource stringIDs, EngineDescription buildInfo) { var count = (int)values.GetInteger(_countEntryName); uint address = values.GetInteger(_addressEntryName); StructureLayout layout = buildInfo.Layouts.GetLayout(_layoutName); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, metaArea); return(entries.Select(e => ReadScriptObject(e, reader, metaArea, stringIDs, buildInfo)).ToArray()); }
private IList <ScriptParameter> LoadParameters(IReader reader, StructureValueCollection values, FileSegmentGroup metaArea, EngineDescription buildInfo) { var count = (int)values.GetInteger("number of parameters"); uint address = values.GetInteger("address of parameter list"); StructureLayout layout = buildInfo.Layouts.GetLayout("script parameter entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, metaArea); return(entries.Select(e => new ScriptParameter(e)).ToList()); }
private void LoadSoundPlaybacks(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, EngineDescription buildInfo) { var count = (int)values.GetInteger("number of playbacks"); var address = values.GetInteger("playback table address"); var layout = buildInfo.Layouts.GetLayout("sound playbacks"); var entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, metaArea); SoundPlaybacks = (from entry in entries select new ThirdGenSoundPlayback(entry, SoundNames)).ToArray <ISoundPlayback>(); }
private StructureValueCollection[] ReadReflexive(StructureValueCollection values, IReader reader, string countName, string addressName, string layoutName) { var count = (int)values.GetInteger(countName); uint address = (uint)values.GetInteger(addressName); long expand = _expander.Expand(address); StructureLayout layout = _buildInfo.Layouts.GetLayout(layoutName); return(ReflexiveReader.ReadReflexive(reader, count, expand, layout, _metaArea)); }
private List <ITag> LoadTags(IReader reader, StructureValueCollection headerValues, IList <ITagClass> classes) { var count = (int)headerValues.GetInteger("number of tags"); uint address = headerValues.GetInteger("tag table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("tag entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); return (entries.Select <StructureValueCollection, ITag>((e, i) => new NewThirdGenTag(e, (ushort)i, _metaArea, classes)) .ToList()); }
private List <ScriptGlobal> LoadGlobals(IReader reader, StructureValueCollection values) { var count = (int)values.GetInteger("number of script globals"); uint address = values.GetInteger("script global table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("script global entry"); address = (uint)addrFix + (address & 0xFFFFFFF); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); return(entries.Select(e => new ScriptGlobal(e)).ToList()); }
private List <ScriptGlobal> LoadGlobals(IReader reader, StructureValueCollection values) { var count = (int)values.GetInteger("number of script globals"); uint address = (uint)values.GetInteger("script global table address"); long expand = _expander.Expand(address); StructureLayout layout = _buildInfo.Layouts.GetLayout("script global entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, expand, layout, _metaArea); return(entries.Select(e => new ScriptGlobal(e, _stringIDs)).ToList()); }
private void LoadVertexGroups(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, EngineDescription buildInfo, IModelSubmesh[] submeshes) { var count = (int)values.GetInteger("number of vertex groups"); uint address = values.GetInteger("vertex group table address"); StructureLayout layout = buildInfo.Layouts.GetLayout("model vertex group"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, metaArea); VertexGroups = (from entry in entries select new FourthGenModelVertexGroup(entry, submeshes)).ToArray(); }
private void Load(IReader reader) { reader.SeekTo(_scenario.MetaLocation.AsOffset()); var scenarioLayout = _buildInfo.Layouts.GetLayout("scnr"); var scenarioData = StructureReader.ReadStructure(reader, scenarioLayout); var count = (int)scenarioData.GetInteger("simulation definition table count"); var address = scenarioData.GetInteger("simulation definition table address"); var entryLayout = _buildInfo.Layouts.GetLayout("simulation definition table entry"); _table = ReflexiveReader.ReadReflexive(reader, count, address, entryLayout, _metaArea).Select((e) => _tags[new DatumIndex(e.GetInteger("datum index"))]).ToList(); }
private void LoadSubmeshes(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, EngineDescription buildInfo) { var count = (int)values.GetInteger("number of submeshes"); uint address = (uint)values.GetInteger("submesh table address"); StructureLayout layout = buildInfo.Layouts.GetLayout("model submesh"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, metaArea); Submeshes = (from entry in entries select new ThirdGenModelSubmesh(entry)).ToArray(); }
private void LoadSections(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, EngineDescription buildInfo) { var count = (int)values.GetInteger("number of sections"); uint address = values.GetInteger("section table address"); StructureLayout layout = buildInfo.Layouts.GetLayout("model section"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, metaArea); Sections = (from entry in entries select new FourthGenModelSection(entry, reader, metaArea, buildInfo)).ToArray(); }
private void LoadBoundingBoxes(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, EngineDescription buildInfo) { var count = (int)values.GetInteger("number of bounding boxes"); uint address = values.GetInteger("bounding box table address"); StructureLayout layout = buildInfo.Layouts.GetLayout("model bounding box"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, 1, address, layout, metaArea); BoundingBoxes = (from entry in entries select BoundingBox.Deserialize(entry)).ToArray(); }
private IEnumerable <ResourceDefinitionFixup> LoadDefinitionFixups(StructureValueCollection values, IReader reader) { var count = (int)values.GetInteger("number of definition fixups"); uint address = values.GetInteger("definition fixup table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("definition fixup entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); return(entries.Select(e => new ResourceDefinitionFixup { Offset = (int)e.GetInteger("offset"), Type = (int)e.GetInteger("type index") })); }
public List <ResourceSize> LoadSizes(IReader reader) { StructureValueCollection values = LoadTag(reader); var count = (int)values.GetInteger("number of raw sizes"); uint address = (uint)values.GetInteger("raw size table address"); long expand = _expander.Expand(address); StructureLayout layout = _buildInfo.Layouts.GetLayout("raw size table entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, expand, layout, _metaArea); return(entries.Select((e, i) => LoadSize(e, i, reader)).ToList()); }
public IEnumerable <ResourcePage> LoadPages(IReader reader) { StructureValueCollection values = LoadTag(reader); ThirdGenCacheFileReference[] files = LoadExternalFiles(values, reader); var count = (int)values.GetInteger("number of raw pages"); uint address = values.GetInteger("raw page table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("raw page table entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); return(entries.Select((e, i) => LoadPage(e, i, files))); }
public IEnumerable <Resource> LoadResources(IReader reader, TagTable tags, IList <ResourcePointer> pointers) { StructureValueCollection values = LoadTag(reader); byte[] infoBuffer = LoadResourceInfoBuffer(values, reader); var count = (int)values.GetInteger("number of resources"); uint address = values.GetInteger("resource table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("resource table entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); return(entries.Select((e, i) => LoadResource(e, i, tags, pointers, infoBuffer, reader))); }
private IEnumerable <ThirdGenZoneSet> ReadZoneSetTable(StructureValueCollection tagValues, string countName, string addressName, IReader reader) { if (!tagValues.HasInteger(countName) || !tagValues.HasInteger(addressName)) { return(Enumerable.Empty <ThirdGenZoneSet>()); } var count = (int)tagValues.GetInteger(countName); uint address = tagValues.GetInteger(addressName); StructureLayout layout = _buildInfo.Layouts.GetLayout("zone set definition"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); return(entries.Select(e => new ThirdGenZoneSet(e, reader, _metaArea))); }
private List <IPolyart> LoadPolyart(IReader reader, StructureValueCollection headerValues) { if (!headerValues.HasInteger("number of polyart fixups")) { return(null); } var count = (int)headerValues.GetInteger("number of polyart fixups"); long address = (long)headerValues.GetInteger("polyart fixup table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("polyart table entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); return(entries.Select <StructureValueCollection, IPolyart>(e => new ThirdGenPolyart(e, _metaArea)).ToList()); }
private void LoadResourceTypes(StructureValueCollection values, IReader reader, StringIDSource stringIDs) { if (!values.HasInteger("number of resource types") || !values.HasInteger("resource type table address")) { return; } var count = (int)values.GetInteger("number of resource types"); uint address = values.GetInteger("resource type table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("resource type entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); _resourceTypes = entries.Select(e => new FourthGenResourceType(e, stringIDs)).ToArray(); }
private IEnumerable <ResourceFixup> LoadResourceFixups(StructureValueCollection values, IReader reader) { var count = (int)values.GetInteger("number of resource fixups"); uint address = (uint)values.GetInteger("resource fixup table address"); long expand = _expander.Expand(address); StructureLayout layout = _buildInfo.Layouts.GetLayout("resource fixup entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, expand, layout, _metaArea); return(entries.Select(e => new ResourceFixup { Offset = (int)e.GetInteger("offset"), Address = (uint)e.GetInteger("address") })); }
private void FreeZoneSetsInTable(StructureValueCollection tagValues, string countName, string addressName, IReader reader) { if (!tagValues.HasInteger(countName) || !tagValues.HasInteger(addressName)) { return; } var count = (int)tagValues.GetInteger(countName); uint address = tagValues.GetInteger(addressName); StructureLayout layout = _buildInfo.Layouts.GetLayout("zone set definition"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); foreach (StructureValueCollection entry in entries) { ThirdGenZoneSet.Free(entry, _allocator); } }
private ScriptObject[] ReadPointSets(IReader reader, StructureValueCollection values) { // Point sets are nested in another reflexive for whatever reason // Seems like the length of the outer is always 1, so just take the first entry and process it var count = (int)values.GetInteger("point set data count"); if (count == 0) { return(new ScriptObject[0]); } uint address = values.GetInteger("point set data address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("point set data entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); return(ReadObjects(reader, entries.First(), _pointSets)); }
private Dictionary <int, ITag> LoadImportant(IReader reader, StructureValueCollection headerValues, List <ITag> tags) { var count = (int)headerValues.GetInteger("number of important tags"); long address = (long)headerValues.GetInteger("important tag table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("important tag entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); Dictionary <int, ITag> output = new Dictionary <int, ITag>(); foreach (StructureValueCollection ent in entries) { output[(int)ent.GetInteger("class magic")] = tags[(int)ent.GetInteger("datum index") & 0xFFFF]; } return(output); }
private void FreeResources(StructureValueCollection values, IReader reader) { var count = (int)values.GetInteger("number of resources"); uint address = values.GetInteger("resource table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("resource table entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); foreach (StructureValueCollection entry in entries) { FreeResource(entry); } int size = count * layout.Size; if (address >= 0 && size > 0) { _allocator.Free(address, size); } }