diff --git a/d2common/music_defs.go b/d2common/music_defs.go new file mode 100644 index 00000000..90006316 --- /dev/null +++ b/d2common/music_defs.go @@ -0,0 +1,59 @@ +package d2common + +import "github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum" + +type MusicDef struct { + Region d2enum.RegionIdType + InTown bool + MusicFile string +} + +var musicDefs = [...]MusicDef{ + {d2enum.RegionAct1Town, false, "/data/global/music/Act1/town1.wav"}, + {d2enum.RegionAct1Wilderness, false, "/data/global/music/Act1/wild.wav"}, + {d2enum.RegionAct1Cave, false, "/data/global/music/Act1/caves.wav"}, + {d2enum.RegionAct1Crypt, false, "/data/global/music/Act1/crypt.wav"}, + {d2enum.RegionAct1Monestary, false, "/data/global/music/Act1/monastery.wav"}, + {d2enum.RegionAct1Courtyard, false, "/data/global/music/Act1/wild.wav"}, // ? + {d2enum.RegionAct1Barracks, false, "/data/global/music/Act1/wild.wav"}, // ? + {d2enum.RegionAct1Jail, false, "/data/global/music/Act1/wild.wav"}, // ? + {d2enum.RegionAct1Cathedral, false, "/data/global/music/Act1/monastery.wav"}, // ? + {d2enum.RegionAct1Catacombs, false, "/data/global/music/Act1/crypt.wav"}, // ? + {d2enum.RegionAct1Tristram, false, "/data/global/music/Act1/tristram.wav"}, // ? + {d2enum.RegionAct2Town, false, "/data/global/music/Act2/town2.wav"}, + {d2enum.RegionAct2Sewer, false, "/data/global/music/Act2/sewer.wav"}, + {d2enum.RegionAct2Harem, false, "/data/global/music/Act2/harem.wav"}, + {d2enum.RegionAct2Basement, false, "/data/global/music/Act2/lair.wav"}, // ? + {d2enum.RegionAct2Desert, false, "/data/global/music/Act2/desrt.wav"}, + {d2enum.RegionAct2Tomb, false, "/data/global/music/Act2/tombs.wav"}, + {d2enum.RegionAct2Lair, false, "/data/global/music/Act2/lair.wav"}, + {d2enum.RegionAct2Arcane, false, "/data/global/music/Act2/sanctuary.wav"}, // ? + {d2enum.RegionAct3Town, false, "/data/global/music/Act3/town3.wav"}, + {d2enum.RegionAct3Jungle, false, "/data/global/music/Act3/jungle.wav"}, + {d2enum.RegionAct3Kurast, false, "/data/global/music/Act3/kurast.wav"}, + {d2enum.RegionAct3Spider, false, "/data/global/music/Act3/spider.wav"}, + {d2enum.RegionAct3Dungeon, false, "/data/global/music/Act3/kurastsewer.wav"}, // ? + {d2enum.RegionAct3Sewer, false, "/data/global/music/Act3/kurastsewer.wav"}, + {d2enum.RegionAct4Town, false, "/data/global/music/Act4/town4.wav"}, + {d2enum.RegionAct4Mesa, false, "/data/global/music/Act4/mesa.wav"}, + {d2enum.RegionAct4Lava, false, "/data/global/music/Act4/diablo.wav"}, // ? + {d2enum.RegonAct5Town, false, "/data/global/music/Act5/xtown.wav"}, + {d2enum.RegionAct5Siege, false, "/data/global/music/Act5/siege.wav"}, + {d2enum.RegionAct5Barricade, false, "/data/global/music/Act5/shenkmusic.wav"}, // ? + {d2enum.RegionAct5Temple, false, "/data/global/music/Act5/xtemple.wav"}, + {d2enum.RegionAct5IceCaves, false, "/data/global/music/Act5/icecaves.wav"}, + {d2enum.RegionAct5Baal, false, "/data/global/music/Act5/baal.wav"}, + {d2enum.RegionAct5Lava, false, "/data/global/music/Act5/nihlathakmusic.wav"}, // ? +} + +func GetMusicDef(regionType d2enum.RegionIdType) *MusicDef { + for idx := range musicDefs { + if musicDefs[idx].Region != regionType { + continue + } + + return &musicDefs[idx] + } + + return &musicDefs[0] +} diff --git a/d2game/d2gamescreen/game.go b/d2game/d2gamescreen/game.go index 3583957d..e160aac8 100644 --- a/d2game/d2gamescreen/game.go +++ b/d2game/d2gamescreen/game.go @@ -2,6 +2,7 @@ package d2gamescreen import ( "fmt" + "github.com/OpenDiablo2/OpenDiablo2/d2common" "image/color" "github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen" @@ -86,14 +87,9 @@ func (v *Game) Advance(tickTime float64) error { if v.localPlayer != nil { tile := v.gameClient.MapEngine.TileAt(v.localPlayer.TileX, v.localPlayer.TileY) if tile != nil { - switch tile.RegionType { - case d2enum.RegionAct1Town: // Rogue encampent - v.localPlayer.SetIsInTown(true) - d2audio.PlayBGM("/data/global/music/Act1/town1.wav") - case d2enum.RegionAct1Wilderness: // Blood Moore - v.localPlayer.SetIsInTown(false) - d2audio.PlayBGM("/data/global/music/Act1/wild.wav") - } + musicInfo := d2common.GetMusicDef(tile.RegionType) + v.localPlayer.SetIsInTown(musicInfo.InTown) + d2audio.PlayBGM(musicInfo.MusicFile) // skip showing zone change text the first time we enter the world if v.lastRegionType != d2enum.RegionNone && v.lastRegionType != tile.RegionType {