/// <summary>
		///     Serializes this instance.
		/// </summary>
		/// <returns>The serialized structure values.</returns>
		public StructureValueCollection Serialize()
		{
			var values = new StructureValueCollection();
			values.SetInteger("range start index", (uint) StartIndex);
			values.SetInteger("range size", (uint) Size);
			return values;
		}
Ejemplo n.º 2
0
        private long _offset; // The offset that the reader is currently at

        #endregion Fields

        #region Constructors

        /// <summary>
        ///     (private) Constructs a new StructureReader.
        /// </summary>
        /// <param name="reader">The IReader to read from.</param>
        private StructureReader(IReader reader)
        {
            _reader = reader;
            _baseOffset = reader.Position;
            _offset = _baseOffset;
            _collection = new StructureValueCollection();
        }
Ejemplo n.º 3
0
		private void Load(StructureValueCollection values)
		{
			Magic = (int) values.GetInteger("magic");
			ParentMagic = (int) values.GetInteger("parent magic");
			GrandparentMagic = (int) values.GetInteger("grandparent magic");
			Description = new StringID(values.GetIntegerOrDefault("stringid", 0));
		}
Ejemplo n.º 4
0
		private void Load(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea,
			EngineDescription buildInfo)
		{
			Name = new StringID(values.GetInteger("name stringid"));

			LoadPermutations(values, reader, metaArea, buildInfo);
		}
Ejemplo n.º 5
0
		/// <summary>
		///     Serializes this instance.
		/// </summary>
		/// <returns>A collection of structure values.</returns>
		public StructureValueCollection Serialize()
		{
			var result = new StructureValueCollection();
			result.SetInteger("virtual address", VirtualAddress);
			result.SetInteger("size", Size);
			return result;
		}
Ejemplo n.º 6
0
		private void Load(StructureValueCollection values)
		{
			Magic = (int) values.GetInteger("magic");
			ParentMagic = (int) values.GetInteger("parent magic");
			GrandparentMagic = (int) values.GetInteger("grandparent magic");
			// No description stringid :(
		}
Ejemplo n.º 7
0
        private long _offset; // The offset that the writer is currently at

        #endregion Fields

        #region Constructors

        private StructureWriter(StructureValueCollection values, IWriter writer)
        {
            _writer = writer;
            _baseOffset = writer.Position;
            _offset = _baseOffset;
            _collection = values;
        }
Ejemplo n.º 8
0
		private void Load(StructureValueCollection values, FileSegmenter segmenter)
		{
			_eofSegment = segmenter.WrapEOF((int) values.GetInteger("file size"));

			var metaOffset = (int) values.GetInteger("meta offset");
			var metaSize = (int) values.GetInteger("meta size");
			uint metaOffsetMask = values.GetInteger("meta offset mask");

			var metaSegment = new FileSegment(
				segmenter.DefineSegment(metaOffset, metaSize, 0x200, SegmentResizeOrigin.Beginning), segmenter);
			MetaArea = new FileSegmentGroup(new MetaOffsetConverter(metaSegment, metaOffsetMask));
			IndexHeaderLocation = MetaArea.AddSegment(metaSegment);

			Type = (CacheFileType) values.GetInteger("type");

			var headerGroup = new FileSegmentGroup();
			headerGroup.AddSegment(segmenter.WrapSegment(0, HeaderSize, 1, SegmentResizeOrigin.None));

			StringIDCount = (int) values.GetInteger("string table count");
			var sidDataSize = (int) values.GetInteger("string table size");
			StringIDData = segmenter.WrapSegment((int) values.GetInteger("string table offset"), sidDataSize, 1,
				SegmentResizeOrigin.End);
			StringIDIndexTable = segmenter.WrapSegment((int) values.GetInteger("string index table offset"), StringIDCount*4, 4,
				SegmentResizeOrigin.End);

			FileNameCount = (int) values.GetInteger("file table count");
			var fileDataSize = (int) values.GetInteger("file table size");
			FileNameData = segmenter.WrapSegment((int) values.GetInteger("file table offset"), fileDataSize, 1,
				SegmentResizeOrigin.End);
			FileNameIndexTable = segmenter.WrapSegment((int) values.GetInteger("file index table offset"), FileNameCount*4, 4,
				SegmentResizeOrigin.End);

			InternalName = values.GetString("internal name");
			ScenarioName = values.GetString("scenario name");

			StringArea = new FileSegmentGroup();
			StringArea.AddSegment(segmenter.WrapSegment((int) values.GetInteger("string block offset"), StringIDCount*0x80, 0x80,
				SegmentResizeOrigin.End));
			StringArea.AddSegment(StringIDIndexTable);
			StringArea.AddSegment(StringIDData);
			StringArea.AddSegment(FileNameIndexTable);
			StringArea.AddSegment(FileNameData);

			StringIDIndexTableLocation = SegmentPointer.FromOffset(StringIDIndexTable.Offset, StringArea);
			StringIDDataLocation = SegmentPointer.FromOffset(StringIDData.Offset, StringArea);
			FileNameIndexTableLocation = SegmentPointer.FromOffset(FileNameIndexTable.Offset, StringArea);
			FileNameDataLocation = SegmentPointer.FromOffset(FileNameData.Offset, StringArea);

			LocaleArea = new FileSegmentGroup();

			var rawTableOffset = (int) values.GetInteger("raw table offset");
			var rawTableSize = (int) values.GetInteger("raw table size");
			RawTable = segmenter.WrapSegment(rawTableOffset, rawTableSize, 1, SegmentResizeOrigin.End);

			Checksum = values.GetInteger("checksum");

			// Set up a bogus partition table
			Partitions = new Partition[1];
			Partitions[0] = new Partition(SegmentPointer.FromOffset(MetaArea.Offset, MetaArea), (uint) MetaArea.Size);
		}
Ejemplo n.º 9
0
		public SecondGenHeader(StructureValueCollection values, EngineDescription info, string buildString,
			FileSegmenter segmenter)
		{
			BuildString = buildString;
			HeaderSize = info.HeaderSize;
			Load(values, segmenter);
		}
Ejemplo n.º 10
0
        public static void WriteStructure(StructureValueCollection values, StructureLayout layout, IWriter writer)
        {
            var structWriter = new StructureWriter(values, writer);
            layout.Accept(structWriter);

            if (layout.Size > 0)
                structWriter.SeekWriter(layout.Size);
        }
Ejemplo n.º 11
0
        public FourthGenHeader(StructureValueCollection map_values, StructureValueCollection tag_values, StructureValueCollection string_values, EngineDescription info, string buildString,
			FileSegmenter segmenter)
		{
            EngineInfo = info;
			BuildString = buildString;
			HeaderSize = info.HeaderSize;
            Load(map_values, tag_values, string_values, segmenter);
		}
Ejemplo n.º 12
0
		private void Load(StructureValueCollection values, StringID[] stringIds)
		{
			SoundName = stringIds[values.GetInteger("sound name index")];
			ParametersIndex = (int)values.GetInteger("parameters index");
			FirstRuntimePermutationFlagIndex = (int)values.GetInteger("first runtime permutation flag index");
			EncodedPermutationCount = ((int)values.GetInteger("encoded permutation count") >> 4) & 63;
			FirstPermutationIndex = (int)values.GetInteger("first permutation index");
		}
Ejemplo n.º 13
0
		private void Load(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea,
			EngineDescription buildInfo)
		{
			ModelResourceIndex = new DatumIndex(values.GetInteger("model resource datum index"));

			LoadSections(values, reader, metaArea, buildInfo);
			LoadBoundingBoxes(values, reader, metaArea, buildInfo);
		}
Ejemplo n.º 14
0
		public StructureValueCollection Serialize(IList<ITagClass> classList)
		{
			var result = new StructureValueCollection();
			result.SetInteger("memory address", (MetaLocation != null) ? MetaLocation.AsPointer() : 0);
			result.SetInteger("class index", (Class != null) ? (uint) classList.IndexOf(Class) : 0xFFFFFFFF);
			result.SetInteger("datum index salt", Index.Salt);
			return result;
		}
Ejemplo n.º 15
0
		public FourthGenLanguage(GameLanguage language, StructureValueCollection values, FileSegmenter segmenter,
			FileSegmentGroup localeArea, EngineDescription buildInfo)
		{
			Language = language;
			_pointerLayout = buildInfo.Layouts.GetLayout("locale index table entry");
			_encryptionKey = buildInfo.LocaleKey;
			_sizeAlign = (_encryptionKey != null) ? AES.BlockSize : 1;
			Load(values, segmenter, localeArea);
		}
Ejemplo n.º 16
0
		/// <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();
		}
Ejemplo n.º 17
0
		private List<ThirdGenLanguage> LoadLanguages(StructureValueCollection values, FileSegmenter segmenter,
			EngineDescription buildInfo)
		{
			StructureValueCollection[] languageSet = values.GetArray("languages");

			IEnumerable<ThirdGenLanguage> result =
				languageSet.Select((l, i) => new ThirdGenLanguage((GameLanguage) i, l, segmenter, LocaleArea, buildInfo));
			return result.ToList();
		}
		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();
		}
Ejemplo n.º 19
0
		private void Load(StructureValueCollection values)
		{
			ShaderIndex = (int) values.GetInteger("shader index");
			IndexBufferStart = (int) values.GetInteger("index buffer start");
			IndexBufferCount = (int) values.GetInteger("index buffer count");
			VertexGroupStart = (int) values.GetInteger("vertex group start");
			VertexGroupCount = (int) values.GetInteger("vertex group count");
			VertexBufferCount = (int) values.GetInteger("vertex buffer count");
		}
Ejemplo n.º 20
0
		private void Load(StructureValueCollection values, IModelSubmesh[] submeshes)
		{
			IndexBufferStart = (int) values.GetInteger("index buffer start");
			IndexBufferCount = (int) values.GetInteger("index buffer count");
			VertexBufferCount = (int) values.GetInteger("vertex buffer count");

			var submeshIndex = (int) values.GetInteger("parent submesh index");
			Submesh = submeshes[submeshIndex];
		}
Ejemplo n.º 21
0
		private void Load(StructureValueCollection values)
		{
			GainMin = (int)values.GetInteger("gain min");
			GainMax = (int)values.GetInteger("gain max");
			PitchMin = (short)values.GetInteger("pitch min");
			PitchMax = (short)values.GetInteger("pitch max");
			SkipFractionMin = (int)values.GetInteger("skip fraction min");
			SkipFractionMax = (int)values.GetInteger("skip fraction max");
		}
Ejemplo n.º 22
0
 /// <summary>
 ///     Reads an array of values from the stream and adds it to the value
 ///     collection which is currently being built.
 /// </summary>
 /// <param name="name">The name to store the array under.</param>
 /// <param name="offset">The array's offset (in bytes) from the beginning of the structure.</param>
 /// <param name="count">The number of elements to read into the array.</param>
 /// <param name="entryLayout">The layout to follow for each entry in the array.</param>
 public void VisitArrayField(string name, int offset, int count, StructureLayout entryLayout)
 {
     var arrayValue = new StructureValueCollection[count];
     for (int i = 0; i < count; i++)
     {
         _reader.SeekTo(_baseOffset + offset + i*entryLayout.Size);
         arrayValue[i] = ReadStructure(_reader, entryLayout);
     }
     _collection.SetArray(name, arrayValue);
 }
		private void Load(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, EngineDescription buildInfo)
		{
			LoadSoundNames(values, reader, metaArea, buildInfo);
			LoadPlatformCodecs(values, reader, metaArea, buildInfo);
			LoadPlaybackParameters(values, reader, metaArea, buildInfo);
			LoadScales(values, reader, metaArea, buildInfo);
			LoadSoundPlaybacks(values, reader, metaArea, buildInfo);
			LoadSoundPermutations(values, reader, metaArea, buildInfo);
			LoadSoundPermutationChunks(values, reader, metaArea, buildInfo);
		}
		private void LoadSoundPermutations(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, EngineDescription buildInfo)
		{
			var count = (int)values.GetInteger("number of sound permutations");
			var address = values.GetInteger("sound permutation table address");
			var layout = buildInfo.Layouts.GetLayout("sound permutations");
			var entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, metaArea);

			SoundPermutations = (from entry in entries
								 select new FourthGenSoundPermutation(entry, SoundNames)).ToArray<ISoundPermutation>();
		}
		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 ThirdGenSoundScale(entry)).ToArray<ISoundScale>();
		}
Ejemplo n.º 26
0
		/// <summary>
		///     Serializes the language data into a StructureValueCollection.
		/// </summary>
		/// <returns>The StructureValueCollection that was created from the language table.</returns>
		public StructureValueCollection Serialize()
		{
			var languageSet = new StructureValueCollection[Languages.Count];
			for (int i = 0; i < Languages.Count; i++)
				languageSet[i] = Languages[i].Serialize();

			var result = new StructureValueCollection();
			result.SetArray("languages", languageSet);
			return result;
		}
		private void LoadPlatformCodecs(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea, EngineDescription buildInfo)
		{
			var count = (int)values.GetInteger("number of platform codecs");
			var address = values.GetInteger("platform codecs table address");
			var layout = buildInfo.Layouts.GetLayout("sound platform codecs");
			var entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, metaArea);

			SoundPlatformCodecs = (from entry in entries
						   select new FourthGenSoundPlatformCodec(entry)).ToArray<ISoundPlatformCodec>();
		}
Ejemplo n.º 28
0
		private void Load(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea,
			EngineDescription buildInfo)
		{
			VertexFormat = (int) values.GetInteger("vertex format");
			ExtraElementsPerVertex = (int) values.GetInteger("extra elements per vertex");
			ExtraElementsType = (ExtraVertexElementType) values.GetInteger("extra element type");

			LoadSubmeshes(values, reader, metaArea, buildInfo);
			LoadVertexGroups(values, reader, metaArea, buildInfo, Submeshes);
		}
Ejemplo n.º 29
0
		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 ThirdGenModelVertexGroup(entry, submeshes)).ToArray();
		}
Ejemplo n.º 30
0
		private void LoadPermutations(StructureValueCollection values, IReader reader, FileSegmentGroup metaArea,
			EngineDescription buildInfo)
		{
			var count = (int) values.GetInteger("number of permutations");
			uint address = values.GetInteger("permutation table address");
			StructureLayout layout = buildInfo.Layouts.GetLayout("model permutation");
			StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, metaArea);

			Permutations = (from entry in entries
				select new FourthGenModelPermutation(entry)).ToArray();
		}