public virtual void ReadChildData(BinaryReader reader) { int x = 0; for (x = 0; (x < _soundClasses.Count); x = (x + 1)) { SoundClasses.Add(new SoundClassBlockBlock()); SoundClasses[x].Read(reader); } for (x = 0; (x < _soundClasses.Count); x = (x + 1)) { SoundClasses[x].ReadChildData(reader); } }
// HO uses ODST classes, with H3 structure private SoundClasses ConvertSoundClasses(SoundClasses sncl, CacheVersion version) { // setup class with "default" values var sClass = new SoundClasses.Class() { MaxSoundsPerTag = 4, MaxSoundsPerObject = 1, PreemptionTime = 100, InternalFlags = (SoundClasses.Class.InternalFlagBits.ClassIsValid | SoundClasses.Class.InternalFlagBits.Bit4 | SoundClasses.Class.InternalFlagBits.Bit5 | SoundClasses.Class.InternalFlagBits.Bit6 | SoundClasses.Class.InternalFlagBits.Bit8 | SoundClasses.Class.InternalFlagBits.Bit9), Priority = 5, DistanceBoundsMin = 8.0f, DistanceBoundsMax = 120.0f, TransmissionMultiplier = 1.0f }; // hud class, unique to HO. the above values seem to be okay if (sncl.Classes.Count >= 50) { sncl.Classes.Insert(50, sClass); } if (version <= CacheVersion.Halo3Retail) { // add classes missing from H3 for (int i = sncl.Classes.Count; i < 65; i++) { sncl.Classes.Add(sClass); } } // ms23 requires this flag to play a class on the mainmenu sncl.Classes[32].Flags |= SoundClasses.Class.ClassFlagBits.ClassPlaysOnMainmenu; // Music sncl.Classes[52].Flags |= SoundClasses.Class.ClassFlagBits.ClassPlaysOnMainmenu; // UI return(sncl); }