public DependencyReader CreateReader(IAddressTranslator translator, IPointerExpander expander) { var reader = CreateReader(translator); reader.RegisterInstance(expander); return(reader); }
public ThirdGenHeader(StructureValueCollection values, EngineDescription info, string buildString, FileSegmenter segmenter, IPointerExpander expander) { BuildString = buildString; HeaderSize = info.HeaderSize; _expander = expander; Load(values, segmenter); }
public ThirdGenHeader(StructureValueCollection values, EngineDescription info, FileSegmenter segmenter, IPointerExpander expander) { BuildString = info.BuildVersion; HeaderSize = info.HeaderSize; cacheSegmentAlignment = info.SegmentAlignment; _expander = expander; Load(values, segmenter); }
private void Load(StructureValueCollection values, IReader reader, IPointerExpander expander) { Name = new StringID(values.GetInteger("name stringid")); _activeResources = LoadBitArray(values, "number of raw pool bitfields", "raw pool bitfield table address", reader, expander); _unknownResources = LoadBitArray(values, "number of raw pool 2 bitfields", "raw pool 2 bitfield table address", reader, expander); _unknownResources2 = LoadBitArray(values, "number of raw pool 3 bitfields", "raw pool 3 bitfield table address", reader, expander); _activeTags = LoadBitArray(values, "number of tag bitfields", "tag bitfield table address", reader, expander); _unknownTags = LoadBitArray(values, "number of tag 2 bitfields", "tag 2 bitfield table address", reader, expander); }
/// <summary> /// Initializes a new instance of the <see cref="SoundResourceManager" /> class. /// </summary> /// <param name="gestalt">The cache file's sound resource gestalt.</param> /// <param name="layoutTable">The cache file's resource layout table.</param> /// <param name="tags">The cache file's tag table.</param> /// <param name="metaArea">The cache file's meta area.</param> /// <param name="allocator">The cache file's tag data allocator.</param> /// <param name="buildInfo">The cache file's build information.</param> public SoundResourceManager(SoundResourceGestalt gestalt, TagTable tags, FileSegmentGroup metaArea, MetaAllocator allocator, EngineDescription buildInfo, IPointerExpander expander) { _gestalt = gestalt; _tags = tags; _metaArea = metaArea; _allocator = allocator; _buildInfo = buildInfo; _expander = expander; }
public ThirdGenZoneSetTable(ThirdGenResourceGestalt gestalt, IReader reader, FileSegmentGroup metaArea, MetaAllocator allocator, EngineDescription buildInfo, IPointerExpander expander) { _gestalt = gestalt; _metaArea = metaArea; _allocator = allocator; _buildInfo = buildInfo; _expander = expander; Load(reader); }
public ThirdGenTagTable(IReader reader, SegmentPointer indexHeaderLocation, FileSegmentGroup metaArea, MetaAllocator allocator, EngineDescription buildInfo, IPointerExpander expander) { _indexHeaderLocation = indexHeaderLocation; _metaArea = metaArea; _allocator = allocator; _buildInfo = buildInfo; _expander = expander; Load(reader); }
public ThirdGenSimulationDefinitionTable(ITag scenario, TagTable tags, IReader reader, FileSegmentGroup metaArea, MetaAllocator allocator, EngineDescription buildInfo, IPointerExpander expander) { _scenario = scenario; _tags = tags; _metaArea = metaArea; _allocator = allocator; _buildInfo = buildInfo; _expander = expander; Load(reader); }
public Pointer(int value, IAddressTranslator translator, IPointerExpander expander) { if (translator == null) { throw new ArgumentNullException(nameof(translator)); } this._value = value; this.translator = translator; this.expander = expander; }
public ThirdGenResourceGestalt(IReader reader, ITag zoneTag, FileSegmentGroup metaArea, MetaAllocator allocator, StringIDSource stringIDs, EngineDescription buildInfo, IPointerExpander expander) { _tag = zoneTag; _metaArea = metaArea; _allocator = allocator; _buildInfo = buildInfo; _expander = expander; Load(reader, stringIDs); }
public ThirdGenResourceLayoutTable(ITag playTag, FileSegmentGroup metaArea, MetaAllocator allocator, EngineDescription buildInfo, IPointerExpander expander) { _tag = playTag; _metaArea = metaArea; _allocator = allocator; _buildInfo = buildInfo; _expander = expander; _zone = _tag.Group.Magic != 1886151033; //"play" }
public ThirdGenScenarioScriptFile(ITag scenarioTag, string tagName, FileSegmentGroup metaArea, StringIDSource stringIDs, EngineDescription buildInfo, IPointerExpander expander) { _scenarioTag = _scriptTag = scenarioTag; _expander = expander; _stringIDs = stringIDs; _metaArea = metaArea; _buildInfo = buildInfo; Name = tagName.Substring(tagName.LastIndexOf('\\') + 1) + ".hsc"; DefineScriptObjectReflexives(); }
public StructureValueCollection Serialize(IList<ITagGroup> groupList, IPointerExpander expander) { var result = new StructureValueCollection(); uint cont = 0; if (MetaLocation != null) cont = expander.Contract(MetaLocation.AsPointer()); result.SetInteger("memory address", cont); result.SetInteger("tag group index", (Group != null) ? (uint) groupList.IndexOf(Group) : 0xFFFFFFFF); result.SetInteger("datum index salt", Index.Salt); return result; }
public HsdtScriptFile(ITag hsdtTag, string tagName, FileSegmentGroup metaArea, EngineDescription buildInfo, StringIDSource stringIDs, IPointerExpander expander) { if (CharConstant.ToString(hsdtTag.Group.Magic) != "hsdt") { throw new ArgumentException("Invalid tag. The tag must belong to the hsdt group."); } _hsdtTag = hsdtTag; Name = tagName.Substring(tagName.LastIndexOf('\\') + 1) + ".hsc"; _metaArea = metaArea; _buildInfo = buildInfo; _stringIDs = stringIDs; _expander = expander; }
public ScnrScriptFile(ITag scnrTag, string tagName, FileSegmentGroup metaArea, EngineDescription buildInfo, StringIDSource stringIDs, IPointerExpander expander, MetaAllocator allocator) { if (CharConstant.ToString(scnrTag.Group.Magic) != "scnr") { throw new ArgumentException("Invalid tag. The tag must belong to the scnr group."); } _scnrTag = scnrTag; Name = tagName.Substring(tagName.LastIndexOf('\\') + 1) + ".hsc";; _metaArea = metaArea; _buildInfo = buildInfo; _stringIDs = stringIDs; _expander = expander; _allocator = allocator; }
public EffectInterop(ITag scenario, IReader reader, FileSegmentGroup metaArea, MetaAllocator allocator, EngineDescription buildInfo, IPointerExpander expander) { _scenario = scenario; _metaArea = metaArea; _allocator = allocator; _buildInfo = buildInfo; _expander = expander; _effe = new List <byte[]>(); _beam = new List <byte[]>(); _cntl = new List <byte[]>(); _ltvl = new List <byte[]>(); Load(reader); }
public Pointer(DependencyReader reader, IAddressTranslator translator, IPointerExpander expander) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } if (translator == null) { throw new ArgumentNullException(nameof(translator)); } this._value = reader.ReadInt32(); this.translator = translator; this.expander = expander; }
private void Load(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, StringIDSource stringIDs, EngineDescription buildInfo, IPointerExpander expander) { Name = values.HasInteger("name index") ? stringIDs.GetString(new StringID(values.GetInteger("name index"))) : values.GetString("name"); ExecutionType = (short)values.GetInteger("execution type"); ReturnType = (short)values.GetInteger("return type"); RootExpressionIndex = new DatumIndex(values.GetInteger("first expression index")); if (Name == null) { Name = "script_" + RootExpressionIndex.Value.ToString("X8"); } Parameters = LoadParameters(reader, values, metaArea, buildInfo, expander); }
public StructureValueCollection Serialize(IList <ITagClass> classList, IPointerExpander expander) { var result = new StructureValueCollection(); uint cont = 0; if (MetaLocation != null) { cont = expander.Contract(MetaLocation.AsPointer()); } result.SetInteger("memory address", cont); result.SetInteger("class index", (Class != null) ? (uint)classList.IndexOf(Class) : 0xFFFFFFFF); result.SetInteger("datum index salt", Index.Salt); return(result); }
private BitArray LoadBitArray(StructureValueCollection values, string countName, string addressName, IReader reader, IPointerExpander expander) { if (!values.HasInteger(countName) || !values.HasInteger(addressName)) { return(new BitArray(0)); } var count = (int)values.GetInteger(countName); uint address = (uint)values.GetInteger(addressName); if (count <= 0 || address == 0) { return(new BitArray(0)); } long expand = expander.Expand(address); var ints = new int[count]; reader.SeekTo(_metaArea.PointerToOffset(expand)); for (int i = 0; i < count; i++) { ints[i] = reader.ReadInt32(); } return(new BitArray(ints)); }
private void SaveBitArray(BitArray bits, string countName, string addressName, MetaAllocator allocator, IStream stream, ReflexiveCache <int> cache, StructureValueCollection values, IPointerExpander expander) { if (bits.Length == 0) { values.SetInteger(countName, 0); values.SetInteger(addressName, 0); return; } var ints = bits.ToIntArray(); // If the address isn't cached, then allocate space and write a new array long newAddress; if (!cache.TryGetAddress(ints, out newAddress)) { newAddress = allocator.Allocate(ints.Length * 4, stream); stream.SeekTo(_metaArea.PointerToOffset(newAddress)); foreach (int i in ints) { stream.WriteInt32(i); } cache.Add(newAddress, ints); } uint cont = expander.Contract(newAddress); values.SetInteger(countName, (uint)ints.Length); values.SetInteger(addressName, cont); }
public static void WriteContractedTagBlock(IEnumerable <StructureValueCollection> elements, uint address, StructureLayout layout, FileSegmentGroup metaArea, IWriter writer, IPointerExpander expander) { long cont = expander.Expand(address); int offset = metaArea.PointerToOffset(address); int index = 0; foreach (StructureValueCollection entry in elements) { writer.SeekTo(offset + index * layout.Size); StructureWriter.WriteStructure(entry, layout, writer); index++; } }
public MetaAnalyzer(ICacheFile cacheFile) { _expander = cacheFile.PointerExpander; InitializeMemoryMap(cacheFile); RecognizeClassIDs(cacheFile); }
public ThirdGenZoneSet(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, IPointerExpander expander) { _metaArea = metaArea; Load(values, reader, expander); }
public BlockCollection(DependencyReader reader, ICacheFile cache, IAddressTranslator translator, IPointerExpander expander) : base(reader, cache, translator, expander) { if (IsInvalid) { return; } reader.BaseStream.Position = Pointer.Address; for (int i = 0; i < Count; i++) { items.Add((T)reader.ReadObject(typeof(T), (int)cache.CacheType)); } }
private static void FreeBitArray(StructureValueCollection values, string countName, string addressName, MetaAllocator allocator, IPointerExpander expander) { if (!values.HasInteger(countName) || !values.HasInteger(addressName)) { return; } var oldCount = (int)values.GetInteger(countName); uint oldAddress = (uint)values.GetInteger(addressName); long expand = expander.Expand(oldAddress); if (oldCount > 0 && oldAddress > 0) { allocator.Free(expand, oldCount * 4); } }
private void Load(StructureValueCollection values, ushort index, FileSegmentGroup metaArea, IList <ITagClass> classList, IPointerExpander expander) { uint address = (uint)values.GetInteger("memory address"); if (address != 0 && address != 0xFFFFFFFF) { long expanded = expander.Expand(address); MetaLocation = SegmentPointer.FromPointer(expanded, metaArea); } var classIndex = (int)values.GetInteger("class index"); if (classIndex >= 0 && classIndex < classList.Count) { Class = classList[classIndex]; } var salt = (ushort)values.GetInteger("datum index salt"); if (salt != 0xFFFF) { Index = new DatumIndex(salt, index); } else { Index = DatumIndex.Null; } }
public ThirdGenTag(StructureValueCollection values, ushort index, FileSegmentGroup metaArea, IList <ITagClass> classList, IPointerExpander expander) { Load(values, index, metaArea, classList, expander); }
/// <summary> /// Reads all child objects of this block. /// </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, IPointerExpander expander) { var count = (int)values.GetInteger(_countEntryName); uint address = (uint)values.GetInteger(_addressEntryName); long expand = expander.Expand(address); StructureLayout layout = buildInfo.Layouts.GetLayout(_layoutName); StructureValueCollection[] entries = TagBlockReader.ReadTagBlock(reader, count, expand, layout, metaArea); return(entries.Select(e => ReadScriptObject(e, reader, metaArea, stringIDs, buildInfo, expander)).ToArray()); }
private ScriptObject ReadScriptObject(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, StringIDSource stringIDs, EngineDescription buildInfo, IPointerExpander expander) { string name = GetObjectName(values, stringIDs); var result = new ScriptObject(name); foreach (ScriptObjectTagBlock child in _children) { result.RegisterChildren(child, child.ReadObjects(values, reader, metaArea, stringIDs, buildInfo, expander)); } return(result); }