diff --git a/d2app/app.go b/d2app/app.go index ca5b4eb1..5e694128 100644 --- a/d2app/app.go +++ b/d2app/app.go @@ -251,6 +251,7 @@ func (a *App) loadDataDict() error { {d2resource.AutoMagic, d2datadict.LoadAutoMagicRecords}, {d2resource.TreasureClass, d2datadict.LoadTreasureClassRecords}, {d2resource.States, d2datadict.LoadStates}, + {d2resource.SoundEnvirons, d2datadict.LoadSoundEnvirons}, } d2datadict.InitObjectRecords() diff --git a/d2common/d2data/d2datadict/soundenviron.go b/d2common/d2data/d2datadict/soundenviron.go new file mode 100644 index 00000000..e33c60a9 --- /dev/null +++ b/d2common/d2data/d2datadict/soundenviron.go @@ -0,0 +1,81 @@ +package d2datadict + +import ( + "log" + + "github.com/OpenDiablo2/OpenDiablo2/d2common" +) + +// SoundEnvironRecord describes the different sound environments. Not listed on Phrozen Keep. +type SoundEnvironRecord struct { + Handle string + Index int + Song int + DayAmbience int + NightAmbience int + DayEvent int + NightEvent int + EventDelay int + Indoors int + Material1 int + Material2 int + EAXEnviron int + EAXEnvSize int + EAXEnvDiff int + EAXRoomVol int + EAXRoomHF int + EAXDecayTime int + EAXDecayHF int + EAXReflect int + EAXReflectDelay int + EAXReverb int + EAXRevDelay int + EAXRoomRoll int + EAXAirAbsorb int +} + +// SoundEnvirons contains the SoundEnviron records +//nolint:gochecknoglobals // Currently global by design, only written once +var SoundEnvirons map[string]*SoundEnvironRecord + +// LoadSoundEnvirons loads SoundEnvirons from the supplied file +func LoadSoundEnvirons(file []byte) { + SoundEnvirons = make(map[string]*SoundEnvironRecord) + + d := d2common.LoadDataDictionary(file) + for d.Next() { + record := &SoundEnvironRecord{ + Handle: d.String("Handle"), + Index: d.Number("Index"), + Song: d.Number("Song"), + DayAmbience: d.Number("Day Ambience"), + NightAmbience: d.Number("Night Ambience"), + DayEvent: d.Number("Day Event"), + NightEvent: d.Number("Night Event"), + EventDelay: d.Number("Event Delay"), + Indoors: d.Number("Indoors"), + Material1: d.Number("Material 1"), + Material2: d.Number("Material 2"), + EAXEnviron: d.Number("EAX Environ"), + EAXEnvSize: d.Number("EAX Env Size"), + EAXEnvDiff: d.Number("EAX Env Diff"), + EAXRoomVol: d.Number("EAX Room Vol"), + EAXRoomHF: d.Number("EAX Room HF"), + EAXDecayTime: d.Number("EAX Decay Time"), + EAXDecayHF: d.Number("EAX Decay HF"), + EAXReflect: d.Number("EAX Reflect"), + EAXReflectDelay: d.Number("EAX Reflect Delay"), + EAXReverb: d.Number("EAX Reverb"), + EAXRevDelay: d.Number("EAX Rev Delay"), + EAXRoomRoll: d.Number("EAX Room Roll"), + EAXAirAbsorb: d.Number("EAX Air Absorb"), + } + SoundEnvirons[record.Handle] = record + } + + if d.Err != nil { + panic(d.Err) + } + + log.Printf("Loaded %d SoundEnviron records", len(SoundEnvirons)) +} diff --git a/d2common/d2resource/resource_paths.go b/d2common/d2resource/resource_paths.go index 76187e7d..710781a7 100644 --- a/d2common/d2resource/resource_paths.go +++ b/d2common/d2resource/resource_paths.go @@ -195,7 +195,8 @@ const ( Skills = "/data/global/excel/skills.txt" SkillDesc = "/data/global/excel/skilldesc.txt" TreasureClass = "/data/global/excel/TreasureClassEx.txt" - States = "/data/global/excel/states.txt" + States = "/data/global/excel/states.txt" + SoundEnvirons = "/data/global/excel/soundenviron.txt" MonProp = "/data/global/excel/Monprop.txt"