From 2a72aec73533aaff63e31d462746cc90d22203fd Mon Sep 17 00:00:00 2001 From: dexyfex Date: Sat, 23 Dec 2017 07:56:39 +1100 Subject: [PATCH] Adding audio strings from nametables to JenkIndex --- GameFiles/FileTypes/RelFile.cs | 207 +++++++++++++++++++++--------- GameFiles/GameFileCache.cs | 6 +- GameFiles/Resources/RpfManager.cs | 62 +++++++++ World/AudioZones.cs | 40 +++--- 4 files changed, 237 insertions(+), 78 deletions(-) diff --git a/GameFiles/FileTypes/RelFile.cs b/GameFiles/FileTypes/RelFile.cs index b8143b5..721d312 100644 --- a/GameFiles/FileTypes/RelFile.cs +++ b/GameFiles/FileTypes/RelFile.cs @@ -31,14 +31,17 @@ namespace CodeWalker.GameFiles public uint Unk05Count { get; set; } public uint[] Unk05Arr { get; set; } public MetaHash[] Unk05Hashes { get; set; } - public uint Unk06Count { get; set; } - public uint[] Unk06Arr { get; set; } - public MetaHash[] Unk06Hashes { get; set; } + public uint ContainerCount { get; set; } + public uint[] ContainerUnkArr { get; set; } + public MetaHash[] ContainerHashes { get; set; } public RelData[] RelDatas { get; set; } public RelData[] RelDatasSorted { get; set; } //testing zone for decoding .rel audio files. + public Dictionary RelDataDict { get; set; } = new Dictionary(); + + public RelFile() { } @@ -82,6 +85,9 @@ namespace CodeWalker.GameFiles else break; } names[i] = sb.ToString(); + + //JenkIndex.Ensure(names[i]); //really need both here..? + JenkIndex.Ensure(names[i].ToLowerInvariant()); } NameTable = names; } @@ -145,22 +151,22 @@ namespace CodeWalker.GameFiles Unk05Hashes = d05h; } - Unk06Count = br.ReadUInt32(); - if (Unk06Count != 0) + ContainerCount = br.ReadUInt32(); + if (ContainerCount != 0) { - uint[] d06 = new uint[Unk06Count]; - MetaHash[] d06h = new MetaHash[Unk06Count]; - for (uint i = 0; i < Unk06Count; i++) + uint[] cunks = new uint[ContainerCount]; + MetaHash[] chashes = new MetaHash[ContainerCount]; + for (uint i = 0; i < ContainerCount; i++) { - d06[i] = br.ReadUInt32(); + cunks[i] = br.ReadUInt32(); var pos = ms.Position; - ms.Position = d06[i]; - d06h[i] = new MetaHash(br.ReadUInt32()); + ms.Position = cunks[i]; + chashes[i] = new MetaHash(br.ReadUInt32()); ms.Position = pos; } - Unk06Arr = d06; - Unk06Hashes = d06h; + ContainerUnkArr = cunks; + ContainerHashes = chashes; } if (ms.Position != ms.Length) @@ -244,6 +250,60 @@ namespace CodeWalker.GameFiles ms.Dispose(); + + + RelDataDict.Clear(); + foreach (var reldata in RelDatas) + { + if ((reldata.NameHash == 0) && !string.IsNullOrEmpty(reldata.Name)) + { + reldata.NameHash = JenkHash.GenHash(reldata.Name); //should this be lower case? + JenkIndex.Ensure(reldata.Name); + JenkIndex.Ensure(reldata.Name.ToLowerInvariant()); //which one to use? + } + + //if (reldata.NameHash == 0) + //{ }//no hits here + //if (RelDataDict.ContainsKey(reldata.NameHash)) + //{ }//no hits here + + RelDataDict[reldata.NameHash] = reldata; + } + foreach (var reldata in RelDatas) + { + RelSound snd = reldata as RelSound; + if (snd != null) + { + if (snd.AudioTracksCount > 0) + { + snd.AudioTracks = new RelData[snd.AudioTracksCount]; + for (int i = 0; i < snd.AudioTracksCount; i++) + { + var audhash = snd.AudioTrackHashes[i]; + RelData auddata = null; + if (RelDataDict.TryGetValue(audhash, out auddata)) + { + snd.AudioTracks[i] = auddata; + } + else + { } + } + } + if (snd.AudioContainers != null) + { + foreach (var cnt in snd.AudioContainers) + { + string cname = JenkIndex.TryGetString(cnt.Hash); + if (!string.IsNullOrEmpty(cname)) + { } + else + { } + } + } + } + } + + #region test //foreach (var d in RelDatas) //{ // using (BinaryReader dbr = new BinaryReader(new MemoryStream(d.Data))) @@ -282,7 +342,7 @@ namespace CodeWalker.GameFiles // } // } //} - + #endregion } @@ -428,8 +488,8 @@ namespace CodeWalker.GameFiles { switch ((Dat151RelType)d.TypeID) { - case Dat151RelType.Unk37: return new Dat151Unk37(d, br); - case Dat151RelType.Unk38: return new Dat151Unk38(d, br); + case Dat151RelType.AmbientZone: return new Dat151AmbientZone(d, br); + case Dat151RelType.AmbientEmitter: return new Dat151AmbientEmitter(d, br); default: return new Dat151RelData(d, br); } @@ -1078,7 +1138,8 @@ namespace CodeWalker.GameFiles { public RelSoundHeader Header { get; set; } public byte AudioTracksCount { get; set; } - public MetaHash[] AudioTracks { get; set; } + public RelData[] AudioTracks { get; set; } + public MetaHash[] AudioTrackHashes { get; set; } public MetaHash[] AudioContainers { get; set; } //Relative path to parent wave container (i.e. "RESIDENT/animals") public RelSound(RelData d, BinaryReader br) : base(d) @@ -1086,13 +1147,13 @@ namespace CodeWalker.GameFiles Header = new RelSoundHeader(br); } - public void ReadAudioTracks(BinaryReader br) + public void ReadAudioTrackHashes(BinaryReader br) { AudioTracksCount = br.ReadByte(); - AudioTracks = new MetaHash[AudioTracksCount]; + AudioTrackHashes = new MetaHash[AudioTracksCount]; for (int i = 0; i < AudioTracksCount; i++) { - AudioTracks[i] = br.ReadUInt32(); + AudioTrackHashes[i] = br.ReadUInt32(); } } } @@ -1167,7 +1228,7 @@ namespace CodeWalker.GameFiles UnkShort1 = br.ReadInt16(); UnkShort2 = br.ReadInt16(); AudioHash = br.ReadUInt32(); - AudioTracks = new[] { AudioHash }; + AudioTrackHashes = new[] { AudioHash }; ParameterHash = br.ReadUInt32(); } } @@ -1222,7 +1283,7 @@ namespace CodeWalker.GameFiles ParameterHash5 = br.ReadUInt32(); //0x40-0x44 UnkFloat0 = br.ReadSingle(); //0x44-0x48 UnkFloat1 = br.ReadSingle(); //0x48-0x4C - AudioTracks = new[] { AudioHash }; + AudioTrackHashes = new[] { AudioHash }; } } [TC(typeof(EXP))] public class Dat54TwinLoopSound : Dat54Sound @@ -1249,7 +1310,7 @@ namespace CodeWalker.GameFiles ParameterHash2 = br.ReadUInt32(); ParameterHash3 = br.ReadUInt32(); - ReadAudioTracks(br); + ReadAudioTrackHashes(br); } } [TC(typeof(EXP))] public class Dat54SpeechSound : Dat54Sound @@ -1278,7 +1339,7 @@ namespace CodeWalker.GameFiles AudioHash0 = br.ReadUInt32(); AudioHash1 = br.ReadUInt32(); AudioHash2 = br.ReadUInt32(); - AudioTracks = new[] { AudioHash0, AudioHash1, AudioHash2 }; + AudioTrackHashes = new[] { AudioHash0, AudioHash1, AudioHash2 }; } } [TC(typeof(EXP))] public class Dat54WrapperSound : Dat54Sound @@ -1305,14 +1366,14 @@ namespace CodeWalker.GameFiles } UnkByteData = br.ReadBytes(ItemCount); - AudioTracks = new[] { AudioHash0, AudioHash1 }; + AudioTrackHashes = new[] { AudioHash0, AudioHash1 }; } } [TC(typeof(EXP))] public class Dat54SequentialSound : Dat54Sound { public Dat54SequentialSound(RelData d, BinaryReader br) : base(d, br) { - ReadAudioTracks(br); + ReadAudioTrackHashes(br); } } [TC(typeof(EXP))] public class Dat54StreamingSound : Dat54Sound @@ -1323,7 +1384,7 @@ namespace CodeWalker.GameFiles { UnkInt = br.ReadInt32(); - ReadAudioTracks(br); + ReadAudioTrackHashes(br); } } [TC(typeof(EXP))] public class Dat54RetriggeredOverlappedSound : Dat54Sound @@ -1349,7 +1410,7 @@ namespace CodeWalker.GameFiles AudioHash0 = br.ReadUInt32(); AudioHash1 = br.ReadUInt32(); AudioHash2 = br.ReadUInt32(); - AudioTracks = new[] { AudioHash0, AudioHash1, AudioHash2 }; + AudioTrackHashes = new[] { AudioHash0, AudioHash1, AudioHash2 }; } } [TC(typeof(EXP))] public class Dat54CrossfadeSound : Dat54Sound @@ -1371,7 +1432,7 @@ namespace CodeWalker.GameFiles { AudioHash0 = br.ReadUInt32(); AudioHash1 = br.ReadUInt32(); - AudioTracks = new[] { AudioHash0, AudioHash1 }; + AudioTrackHashes = new[] { AudioHash0, AudioHash1 }; UnkByte = br.ReadByte(); UnkFloat0 = br.ReadSingle(); UnkFloat1 = br.ReadSingle(); @@ -1403,7 +1464,7 @@ namespace CodeWalker.GameFiles { AudioHash0 = br.ReadUInt32(); AudioHash1 = br.ReadUInt32(); - AudioTracks = new[] { AudioHash0, AudioHash1 }; + AudioTrackHashes = new[] { AudioHash0, AudioHash1 }; UnkFloat0 = br.ReadSingle(); //0x8 UnkFloat1 = br.ReadSingle(); //0xC ParameterHash0 = br.ReadUInt32(); //0x10 @@ -1434,7 +1495,7 @@ namespace CodeWalker.GameFiles { public Dat54MultitrackSound(RelData d, BinaryReader br) : base(d, br) { - ReadAudioTracks(br); + ReadAudioTrackHashes(br); } } [TC(typeof(EXP))] public class Dat54RandomizedSound : Dat54Sound @@ -1451,11 +1512,11 @@ namespace CodeWalker.GameFiles UnkBytesCount = br.ReadByte(); UnkBytes = br.ReadBytes(UnkBytesCount); ItemCount = br.ReadByte(); - AudioTracks = new MetaHash[ItemCount]; + AudioTrackHashes = new MetaHash[ItemCount]; AudioTrackUnkFloats = new float[ItemCount]; for (int i = 0; i < ItemCount; i++) { - AudioTracks[i] = br.ReadUInt32(); + AudioTrackHashes[i] = br.ReadUInt32(); AudioTrackUnkFloats[i] = br.ReadSingle(); } } @@ -1496,7 +1557,7 @@ namespace CodeWalker.GameFiles ParameterHash0 = br.ReadUInt32(); ParameterHash1 = br.ReadUInt32(); - ReadAudioTracks(br); + ReadAudioTrackHashes(br); } } [TC(typeof(EXP))] public class Dat54ModularSynthSound : Dat54Sound @@ -1516,10 +1577,10 @@ namespace CodeWalker.GameFiles UnkFloat = br.ReadSingle(); //0x8-0xC UnkInt = br.ReadInt32(); //0xC-0x10 TrackCount = br.ReadInt32(); //0x10-0x14 - AudioTracks = new MetaHash[4]; + AudioTrackHashes = new MetaHash[4]; for (int i = 0; i < 4; i++) { - AudioTracks[i] = br.ReadUInt32(); + AudioTrackHashes[i] = br.ReadUInt32(); } UnkItemCount = br.ReadInt32(); UnkItems = new Dat54ModularSynthSoundData[UnkItemCount]; @@ -1612,7 +1673,7 @@ namespace CodeWalker.GameFiles TrackName = br.ReadUInt32(); - AudioTracks = new[] { TrackName }; + AudioTrackHashes = new[] { TrackName }; UnkVecCount = br.ReadByte(); UnkVecData = new Vector2[UnkVecCount]; @@ -1672,7 +1733,7 @@ namespace CodeWalker.GameFiles public Dat54DirectionalSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); - AudioTracks = new[] { AudioHash }; + AudioTrackHashes = new[] { AudioHash }; UnkFloat0 = br.ReadSingle(); UnkFloat1 = br.ReadSingle(); UnkFloat2 = br.ReadSingle(); @@ -1690,7 +1751,7 @@ namespace CodeWalker.GameFiles public Dat54KineticSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); - AudioTracks = new[] { AudioHash }; + AudioTrackHashes = new[] { AudioHash }; UnkFloat0 = br.ReadSingle(); UnkFloat1 = br.ReadSingle(); UnkFloat2 = br.ReadSingle(); @@ -1704,7 +1765,7 @@ namespace CodeWalker.GameFiles { ParameterHash = br.ReadUInt32(); - ReadAudioTracks(br); + ReadAudioTrackHashes(br); } } [TC(typeof(EXP))] public class Dat54VariableCurveSound : Dat54Sound @@ -1717,7 +1778,7 @@ namespace CodeWalker.GameFiles public Dat54VariableCurveSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); - AudioTracks = new[] { AudioHash }; + AudioTrackHashes = new[] { AudioHash }; ParameterHash0 = br.ReadUInt32(); ParameterHash1 = br.ReadUInt32(); UnkCurvesHash = br.ReadUInt32(); @@ -1743,7 +1804,7 @@ namespace CodeWalker.GameFiles public Dat54VariableBlockSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); - AudioTracks = new[] { AudioHash }; + AudioTrackHashes = new[] { AudioHash }; VariableCount = br.ReadByte(); Variables = new Dat54VariableData[VariableCount]; for (int i = 0; i < VariableCount; i++) @@ -1785,7 +1846,7 @@ namespace CodeWalker.GameFiles { AudioHash1 = br.ReadUInt32(); AudioHash2 = br.ReadUInt32(); - AudioTracks = new[] { AudioHash1, AudioHash2 }; + AudioTrackHashes = new[] { AudioHash1, AudioHash2 }; ParameterHash1 = br.ReadUInt32(); UnkByte = br.ReadByte(); UnkFloat = br.ReadSingle(); @@ -1801,7 +1862,7 @@ namespace CodeWalker.GameFiles public Dat54MathOperationSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); - AudioTracks = new[] { AudioHash }; + AudioTrackHashes = new[] { AudioHash }; UnkDataCount = br.ReadByte(); UnkData = new Dat54MathOperationSoundData[UnkDataCount]; for (int i = 0; i < UnkDataCount; i++) @@ -1847,7 +1908,7 @@ namespace CodeWalker.GameFiles public Dat54ParameterTransformSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); - AudioTracks = new[] { AudioHash }; + AudioTrackHashes = new[] { AudioHash }; ItemCount = br.ReadInt32(); //0x4-0x8 Items = new Dat54ParameterTransformSoundData[ItemCount]; for (int i = 0; i < ItemCount; i++) @@ -1921,7 +1982,7 @@ namespace CodeWalker.GameFiles public Dat54FluctuatorSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); - AudioTracks = new[] { AudioHash }; + AudioTrackHashes = new[] { AudioHash }; ItemCount = br.ReadInt32(); //0x4-0x8 Items = new Dat54FluctuatorSoundData[ItemCount]; for (int i = 0; i < ItemCount; i++) @@ -1989,7 +2050,7 @@ namespace CodeWalker.GameFiles UnkFloat1 = br.ReadSingle(); ParameterHash = br.ReadUInt32(); AudioHash1 = br.ReadUInt32(); - AudioTracks = new[] { AudioHash0, AudioHash1 }; + AudioTrackHashes = new[] { AudioHash0, AudioHash1 }; WaveSlotId = br.ReadInt32(); UnkHash1 = br.ReadUInt32(); UnkDataCount = br.ReadInt32(); @@ -2020,7 +2081,7 @@ namespace CodeWalker.GameFiles { public Dat54ExternalStreamSound(RelData d, BinaryReader br) : base(d, br) { - ReadAudioTracks(br); + ReadAudioTrackHashes(br); //FlagsUint u1 = br.ReadUInt32(); //FlagsUint u2 = br.ReadUInt32(); @@ -2041,11 +2102,11 @@ namespace CodeWalker.GameFiles { ItemCount = br.ReadInt32(); Items = new Dat54SoundSetItem[ItemCount]; - AudioTracks = new MetaHash[ItemCount]; + AudioTrackHashes = new MetaHash[ItemCount]; for (int i = 0; i < ItemCount; i++) { Items[i] = new Dat54SoundSetItem(br); - AudioTracks[i] = Items[i].SoundName; + AudioTrackHashes[i] = Items[i].SoundName; } } } @@ -2074,11 +2135,11 @@ namespace CodeWalker.GameFiles { UnkDataCount = br.ReadByte(); UnkData = new Dat54UnknownSoundData[UnkDataCount]; - AudioTracks = new MetaHash[UnkDataCount]; + AudioTrackHashes = new MetaHash[UnkDataCount]; for (int i = 0; i < UnkDataCount; i++) { UnkData[i] = new Dat54UnknownSoundData(br); - AudioTracks[i] = br.ReadUInt32(); + AudioTrackHashes[i] = br.ReadUInt32(); } } } @@ -2141,17 +2202,47 @@ namespace CodeWalker.GameFiles public enum Dat151RelType : byte //not sure how correct these are? { + Collision = 1, //maybe for vehicle + Vehicle = 3, + VehicleEngine = 4, + VehicleEntity = 5, //not sure about this + RadioStation = 6,//possibly, audio "stream" + + Helicopter = 8, //maybe + SpeechParams = 14, - Unk37 = 37, //audio zone? eg parent for sos/altruist - contains coords - toggle sound? - Unk38 = 38, //eg sos, altruist morse - contains coords + Weapon = 17, + + RadioStationsDLC = 24, // + RadioDLC = 25, + DLCMusic = 26, + + PedPVG = 30, //maybe Ped Voice Group? + + AmbientEmitterList = 32, + AmbientZone = 37, + AmbientEmitter = 38, + AmbientZoneList = 39, + + WeaponAudioItem = 50, + + Aeroplane = 57, + + Mood = 62, StartTrackAction = 63, StopTrackAction = 64, SetMoodAction = 65, + PlayerAction = 66, StartOneShotAction = 67, StopOneShotAction = 68, AnimalParams = 73, + + VehicleScannerParams = 76, //maybe not just vehicle + Explosion = 87, + VehicleEngineGranular = 88, //maybe not just vehicle + ShoreLinePool = 90, ShoreLineLake = 91, ShoreLineRiver = 92, @@ -2214,7 +2305,7 @@ namespace CodeWalker.GameFiles Line = 2, } - [TC(typeof(EXP))] public class Dat151Unk37 : Dat151RelData //audio zone? toggle sound? + [TC(typeof(EXP))] public class Dat151AmbientZone : Dat151RelData { public uint UnkOffset0 { get; set; } public FlagsUint Flags00 { get; set; } @@ -2266,7 +2357,7 @@ namespace CodeWalker.GameFiles - public Dat151Unk37(RelData d, BinaryReader br) : base(d, br) + public Dat151AmbientZone(RelData d, BinaryReader br) : base(d, br) { br.BaseStream.Position = 0; //1 byte was read already (TypeID) @@ -2353,7 +2444,7 @@ namespace CodeWalker.GameFiles } } - [TC(typeof(EXP))] public class Dat151Unk38 : Dat151RelData + [TC(typeof(EXP))] public class Dat151AmbientEmitter : Dat151RelData { public uint UnkOffset0 { get; set; } public FlagsUint Unk00 { get; set; } @@ -2402,7 +2493,7 @@ namespace CodeWalker.GameFiles } - public Dat151Unk38(RelData d, BinaryReader br) : base(d, br) + public Dat151AmbientEmitter(RelData d, BinaryReader br) : base(d, br) { br.BaseStream.Position = 0; //1 byte was read already (TypeID) diff --git a/GameFiles/GameFileCache.cs b/GameFiles/GameFileCache.cs index c587650..87c5899 100644 --- a/GameFiles/GameFileCache.cs +++ b/GameFiles/GameFileCache.cs @@ -2526,10 +2526,10 @@ namespace CodeWalker.GameFiles } sbh.AppendLine(); } - if (rel.Unk06Hashes != null) + if (rel.ContainerHashes != null) { - sbh.AppendLine(rfe.Path + ": " + rel.Unk06Hashes.Length.ToString() + " Hashes2:"); - foreach (var unk in rel.Unk06Hashes) + sbh.AppendLine(rfe.Path + ": " + rel.ContainerHashes.Length.ToString() + " Hashes2:"); + foreach (var unk in rel.ContainerHashes) { sbh.Append(unk.Hash.ToString("X8")); string strval; diff --git a/GameFiles/Resources/RpfManager.cs b/GameFiles/Resources/RpfManager.cs index 0b6a6ad..7291ddf 100644 --- a/GameFiles/Resources/RpfManager.cs +++ b/GameFiles/Resources/RpfManager.cs @@ -112,6 +112,8 @@ namespace CodeWalker.GameFiles } } + BuildBaseJenkIndex(); + IsInited = true; } @@ -346,6 +348,7 @@ namespace CodeWalker.GameFiles public void BuildBaseJenkIndex() { JenkIndex.Clear(); + StringBuilder sb = new StringBuilder(); foreach (RpfFile file in AllRpfs) { try @@ -410,8 +413,67 @@ namespace CodeWalker.GameFiles } } } + if (nlow.EndsWith(".awc")) //create audio container path hashes... + { + string[] parts = entry.Path.Split('\\'); + int pl = parts.Length; + if (pl > 2) + { + string fn = parts[pl - 1]; + string fd = parts[pl - 2]; + string hpath = fn.Substring(0, fn.Length - 4); + if (fd.EndsWith(".rpf")) + { + fd = fd.Substring(0, fd.Length - 4); + } + hpath = fd + "/" + hpath; + if (parts[pl - 3] != "sfx") + { }//no hit + JenkIndex.Ensure(hpath); + } + } + if (nlow.EndsWith(".nametable")) + { + RpfBinaryFileEntry binfe = entry as RpfBinaryFileEntry; + if (binfe != null) + { + byte[] data = file.ExtractFile(binfe); + if (data != null) + { + sb.Clear(); + for (int i = 0; i < data.Length; i++) + { + byte c = data[i]; + if (c == 0) + { + string str = sb.ToString(); + if (!string.IsNullOrEmpty(str)) + { + string strl = str.ToLowerInvariant(); + //JenkIndex.Ensure(str); + JenkIndex.Ensure(strl); + ////DirMod_Sounds_ entries apparently can be used to infer SP audio strings + ////no luck here yet though + //if (strl.StartsWith("dirmod_sounds_") && (strl.Length > 14)) + //{ + // strl = strl.Substring(14); + // JenkIndex.Ensure(strl); + //} + } + sb.Clear(); + } + else + { + sb.Append((char)c); + } + } + } + } + else + { } + } } } diff --git a/World/AudioZones.cs b/World/AudioZones.cs index 6391191..0801d66 100644 --- a/World/AudioZones.cs +++ b/World/AudioZones.cs @@ -47,11 +47,11 @@ namespace CodeWalker.World AllItems.Clear(); - Dictionary dat151entries = new Dictionary(); + Dictionary datrelentries = new Dictionary(); var audrpf = rpfman.FindRpfFile("x64\\audio\\audio_rel.rpf"); if (audrpf != null) { - AddRpfDat151s(audrpf, dat151entries); + AddRpfDatRels(audrpf, datrelentries); } if (gameFileCache.EnableDlc) @@ -59,29 +59,29 @@ namespace CodeWalker.World var updrpf = rpfman.FindRpfFile("update\\update.rpf"); if (updrpf != null) { - AddRpfDat151s(updrpf, dat151entries); + AddRpfDatRels(updrpf, datrelentries); } foreach (var dlcrpf in GameFileCache.DlcActiveRpfs) //load from current dlc rpfs { - AddRpfDat151s(dlcrpf, dat151entries); + AddRpfDatRels(dlcrpf, datrelentries); } } - foreach (var dat151entry in dat151entries.Values) + foreach (var dat151entry in datrelentries.Values) { var relfile = rpfman.GetFile(dat151entry); if (relfile != null) { foreach (var reldata in relfile.RelDatas) { - if (reldata is Dat151Unk37) + if (reldata is Dat151AmbientZone) { - Zones.Add(new AudioPlacement(relfile, reldata as Dat151Unk37)); + Zones.Add(new AudioPlacement(relfile, reldata as Dat151AmbientZone)); } - else if (reldata is Dat151Unk38) + else if (reldata is Dat151AmbientEmitter) { - Emitters.Add(new AudioPlacement(relfile, reldata as Dat151Unk38)); + Emitters.Add(new AudioPlacement(relfile, reldata as Dat151AmbientEmitter)); } } } @@ -95,7 +95,7 @@ namespace CodeWalker.World - private void AddRpfDat151s(RpfFile rpffile, Dictionary dat151entries) + private void AddRpfDatRels(RpfFile rpffile, Dictionary datrelentries) { if (rpffile.AllEntries == null) return; foreach (var entry in rpffile.AllEntries) @@ -103,11 +103,17 @@ namespace CodeWalker.World if (entry is RpfFileEntry) { RpfFileEntry fentry = entry as RpfFileEntry; + //if (entry.NameLower.EndsWith(".rel")) + //{ + // datrelentries[entry.NameHash] = fentry; + //} + if (entry.NameLower.EndsWith(".dat54.rel")) + { + datrelentries[entry.NameHash] = fentry; + } if (entry.NameLower.EndsWith(".dat151.rel")) { - if (dat151entries.ContainsKey(entry.NameHash)) - { } - dat151entries[entry.NameHash] = fentry; + datrelentries[entry.NameHash] = fentry; } } } @@ -124,8 +130,8 @@ namespace CodeWalker.World public string Name { get; set; } public MetaHash NameHash { get; set; } public RelFile RelFile { get; set; } - public Dat151Unk37 AudioZone { get; set; } - public Dat151Unk38 AudioEmitter { get; set; } + public Dat151AmbientZone AudioZone { get; set; } + public Dat151AmbientEmitter AudioEmitter { get; set; } public Dat151ZoneShape Shape { get; set; } public string ShortTypeName { get; set; } public string FullTypeName { get; set; } @@ -148,7 +154,7 @@ namespace CodeWalker.World - public AudioPlacement(RelFile rel, Dat151Unk37 zone) + public AudioPlacement(RelFile rel, Dat151AmbientZone zone) { RelFile = rel; AudioZone = zone; @@ -201,7 +207,7 @@ namespace CodeWalker.World HitboxPos = InnerPos; } } - public AudioPlacement(RelFile rel, Dat151Unk38 emitter) + public AudioPlacement(RelFile rel, Dat151AmbientEmitter emitter) { RelFile = rel; AudioEmitter = emitter;