public SoundPathPoint(EndianReader reader) { X = reader.ReadSingle(); reader.Skip(4); // Unknown Y = reader.ReadSingle(); Duration = reader.ReadInt32(); }
public SoundInfo(EndianReader reader) { OverrideParentEffectSettings = (reader.ReadByte() != 0); ReadEffects(reader); BusID = reader.ReadUInt32(); ParentID = reader.ReadUInt32(); OverrideParentPrioritySettings = (reader.ReadByte() != 0); OffsetPriorityAtMaxDistance = (reader.ReadByte() != 0); byte numParameters = reader.ReadByte(); // TODO: actually store the parameter values instead of skipping over them reader.Skip(numParameters); reader.Skip(numParameters * 4); sbyte unknownCount = reader.ReadSByte(); if (unknownCount > 0) { reader.Skip(unknownCount); reader.Skip(unknownCount * 8); } ReadPositioningInfo(reader); // Read auxiliary send settings OverrideParentGameDefinedAuxiliarySendSettings = (reader.ReadByte() != 0); UseGameDefinedAuxiliarySends = (reader.ReadByte() != 0); OverrideParentUserDefinedAuxiliarySendSettings = (reader.ReadByte() != 0); ReadUserDefinedAuxiliarySends(reader); bool unknown = (reader.ReadByte() != 0); /*if (unknown) reader.Skip(4);*/ // Read voice settings LimitMethod = (SoundLimitMethod)reader.ReadSByte(); VirtualVoiceBehavior = (SoundVirtualVoiceBehavior)reader.ReadSByte(); OverrideParentPlaybackLimitSettings = (reader.ReadByte() != 0); OverrideParentVirtualVoiceSettings = (reader.ReadByte() != 0); ReadStateGroups(reader); ReadRTPCs(reader); reader.Skip(4); // I think this is part of the sound info data... }
public SoundBankMusicTrack(EndianReader reader, uint id) { ID = id; reader.Skip(0xC); AudioID = reader.ReadUInt32(); SourceID = reader.ReadUInt32(); }
public SoundPackFile(SoundPack parent, EndianReader reader) { ParentPack = parent; ID = reader.ReadUInt32(); reader.Skip(4); // Flags? Size = reader.ReadInt32(); Offset = reader.ReadInt32(); FolderID = reader.ReadInt32(); }
public SoundBankVoice(EndianReader reader, uint id) { ID = id; reader.Skip(4); StorageType = (SoundStorageType)reader.ReadInt32(); AudioID = reader.ReadUInt32(); SourceID = reader.ReadUInt32(); }
public RTPC(EndianReader reader) { XAxisParameterID = reader.ReadUInt32(); YAxisType = (RTPCYAxisType)reader.ReadInt32(); reader.Skip(5); short numPoints = reader.ReadInt16(); Points = new RTPCPoint[numPoints]; // Read points for (byte i = 0; i < numPoints; i++) Points[i] = new RTPCPoint(reader); }
public SoundBankSequenceContainer(EndianReader reader, uint id) { ID = id; Info = new SoundInfo(reader); // hax reader.Skip(0x18); // Read child IDs int numChildren = reader.ReadInt32(); ChildIDs = new uint[numChildren]; for (int i = 0; i < numChildren; i++) ChildIDs[i] = reader.ReadUInt32(); }
public UVDataBlock_3001(EndianReader reader, bool loadMesh, Vertex[] Vertices) : base(reader, 0x3001) { DataCount = reader.ReadInt32(); //vCount x2E00 = reader.ReadInt16(); //2E00 reader.EndianType = EndianFormat.BigEndian; unkUV0 = reader.ReadInt16(); //flags? 0x1C00 when world unkUV1 = reader.ReadByte(); unkUV2 = reader.ReadByte(); unkUV3 = reader.ReadByte(); unkUV4 = reader.ReadByte(); //0x00 when world, else 0x20 DataSize = reader.ReadByte(); if (!loadMesh) reader.SeekTo(EOBOffset); else for (int i = 0; i < DataCount; i++) { Vector tex0 = new Vector(); #region switch switch (DataSize) { case 8: tex0 = Vector.FromUByteN4(reader.ReadUInt32()); reader.Skip(0); break; case 12: reader.Skip(4); break; case 16: reader.Skip(12); break; case 20: reader.Skip(16); break; case 24: reader.Skip(16); break; case 28: reader.Skip(20); break; case 32: reader.Skip(16); break; case 36: reader.Skip(24); break; case 44: reader.Skip(28); break; } #endregion int u = reader.ReadInt16(); int v = reader.ReadInt16(); //var tex0 = new RealQuat(((float)a + (float)0) / (float)0xFFFF, ((float)b + (float)0) / (float)0xFFFF); var tex1 = new Vector((float)u / (float)(0x7FFF), (float)v / (float)(0x7FFF)); #region switch switch (DataSize) { case 8: reader.Skip(0); break; case 12: reader.Skip(4); break; case 16: reader.Skip(0); break; case 20: reader.Skip(0); break; case 24: reader.Skip(4); break; case 28: reader.Skip(4); break; case 32: reader.Skip(12); break; case 36: reader.Skip(8); break; case 44: reader.Skip(12); break; } #endregion //Vertices[i].Values.Add(new VertexValue(tex0, 0, "normal", 0)); Vertices[i].Values.Add(new VertexValue(tex1, VertexValue.ValueType.Int16_N2, "texcoords", 0)); } reader.EndianType = EndianFormat.LittleEndian; }
public Block_3301(EndianReader reader, bool loadSkin, Vertex[] Vertices) : base(reader, 0x3301) { FirstNodeID = reader.ReadInt16(); NodeCount = reader.ReadInt16(); if (!loadSkin) reader.Skip(Vertices.Length * 4); else foreach (var v in Vertices) { var val = Vector.FromUByte4(reader.ReadUInt32()); nodes.Add(val); v.Values.Add(new VertexValue(val, VertexValue.ValueType.UInt8_4, "blendindices", 0)); } }
public Block_1A01(EndianReader reader, bool loadSkin, Vertex[] Vertices) : base(reader, 0x1A01) { if (!loadSkin) reader.Skip(Vertices.Length * 4); else foreach (var v in Vertices) { var val = Vector.FromUByteN4(reader.ReadUInt32()); v.Values.Add(new VertexValue(val, VertexValue.ValueType.UInt8_4, "blendweight", 0)); } }
private void ReadHeader(EndianReader reader) { reader.EndianType = EndianFormat.BigEndian; // Check the 'RIFX' magic if (reader.ReadInt32() != 0x52494658) // RIFX throw new InvalidOperationException("Invalid RIFX header"); // Skip over the size, it's endianness varies and the value itself is just plain wrong sometimes reader.Skip(4); // Read the format magic value FormatMagic = reader.ReadInt32(); }
private void ReadHeader(EndianReader reader) { reader.EndianType = EndianFormat.BigEndian;// Endianness = Endian.BigEndian; reader.SeekTo(0); // Validate the magic number at the beginning if (reader.ReadUInt32() != HeaderMagic) throw new InvalidOperationException("Invalid sound pack magic"); reader.Skip(4 * 2); // Skip two unknown uint32s // Read the size of the folder list (needed to find the start of the file table) _folderListSize = reader.ReadInt32(); }
protected void LoadFixups() { var Entry = cache.zone.RawEntries[RawID & ushort.MaxValue]; var reader = new EndianReader(new MemoryStream(cache.zone.FixupData), EndianFormat.BigEndian); reader.SeekTo(Entry.FixupOffset + (Entry.FixupSize - 24)); int vCount = reader.ReadInt32(); reader.Skip(8); int iCount = reader.ReadInt32(); reader.SeekTo(Entry.FixupOffset); for (int i = 0; i < vCount; i++) { VertInfoList.Add(new mode.VertexBufferInfo() { Offset = Entry.Fixups[i].Offset, VertexCount = reader.ReadInt32(), Unknown1 = reader.ReadInt32(), DataLength = reader.ReadInt32(), Unknown2 = reader.ReadInt32(), //blank from here so far Unknown3 = reader.ReadInt32(), Unknown4 = reader.ReadInt32(), Unknown5 = reader.ReadInt32(), }); } for (int i = 0; i < vCount; i++) { //assumed to be vertex related Unknown1List.Add(new mode.UnknownInfo1() { Unknown1 = reader.ReadInt32(), //always 0 so far Unknown2 = reader.ReadInt32(), //always 0 so far Unknown3 = reader.ReadInt32(), //1350707457 }); } for (int i = 0; i < iCount; i++) { var data = new mode.IndexBufferInfo(); data.Offset = Entry.Fixups[vCount * 2 + i].Offset; data.FaceFormat = reader.ReadInt32(); //value exists only in reach beta and newer if (cache.Version >= DefinitionSet.HaloReachBeta) data.UnknownX = reader.ReadInt32(); else data.UnknownX = -1; data.DataLength = reader.ReadInt32(); data.Unknown0 = reader.ReadInt32(); //blank from here so far data.Unknown1 = reader.ReadInt32(); data.Unknown2 = reader.ReadInt32(); data.Unknown3 = reader.ReadInt32(); IndexInfoList.Add(data); } for (int i = 0; i < iCount; i++) { //assumed to be index related Unknown2List.Add(new mode.UnknownInfo2() { Unknown1 = reader.ReadInt32(), //always 0 so far Unknown2 = reader.ReadInt32(), //always 0 so far Unknown3 = reader.ReadInt32(), //1753688321 }); } for (int i = 0; i < 4; i++) { Unknown3List.Add(new mode.UnknownInfo3() { Unknown1 = reader.ReadInt32(), //vCount in 3rd, iCount in 4th Unknown2 = reader.ReadInt32(), //always 0 so far Unknown3 = reader.ReadInt32(), }); } reader.Close(); reader.Dispose(); }
private void ReadHeader(EndianReader reader) { reader.Skip(4); ID = reader.ReadUInt32(); }
private void ReadEffects(EndianReader reader) { byte numEffects = reader.ReadByte(); if (numEffects > 0) { EffectBypassMask = reader.ReadByte(); EffectIDs = new uint[numEffects]; for (byte i = 0; i < numEffects; i++) { reader.Skip(1); // Effect index, useless EffectIDs[i] = reader.ReadUInt32(); reader.Skip(2); } } else { EffectIDs = new uint[0]; } }