public IMapInfo InsertMap(int levelId, Point origin, IMapInfo parentMap = null) { var levelDetails = engineDataManager.Levels.First(x => x.Id == levelId); if (levelDetails.LevelPreset == null) { // There is no preset level, so we must generate one var generator = getRandomizedMapGenerator(levelDetails.LevelName); if (generator == null) { throw new OpenDiablo2Exception($"Could not locate a map generator for '{levelDetails.LevelName}'."); } generator.Generate(parentMap, origin); // There is no core map so we cannot return a value here. If anyone actually uses // this value on a generated map they are making a terrible mistake anyway... return(null); } // Some maps have variations, so lets pick a random one var mapNames = new List <string>(); if (levelDetails.LevelPreset.File1 != "0") { mapNames.Add(levelDetails.LevelPreset.File1); } if (levelDetails.LevelPreset.File2 != "0") { mapNames.Add(levelDetails.LevelPreset.File2); } if (levelDetails.LevelPreset.File3 != "0") { mapNames.Add(levelDetails.LevelPreset.File3); } if (levelDetails.LevelPreset.File4 != "0") { mapNames.Add(levelDetails.LevelPreset.File4); } if (levelDetails.LevelPreset.File5 != "0") { mapNames.Add(levelDetails.LevelPreset.File5); } if (levelDetails.LevelPreset.File6 != "0") { mapNames.Add(levelDetails.LevelPreset.File6); } var random = new Random(Seed); // ------------------------------------------------------------------------------------- // var mapName = "data\\global\\tiles\\" + mapNames[random.Next(mapNames.Count)].Replace("/", "\\"); // ------------------------------------------------------------------------------------- // TODO: ***TEMP FOR TESTING var mapName = "data\\global\\tiles\\" + mapNames[0].Replace("/", "\\"); // ------------------------------------------------------------------------------------- MapName = levelDetails.LevelPreset.Name; Act = levelDetails.LevelType.Act; var fileData = resourceManager.GetMPQDS1(mapName, levelDetails.LevelPreset, levelDetails.LevelType); var result = new MapInfo { LevelId = levelId, FileData = fileData, CellInfo = new Dictionary <eRenderCellType, MapCellInfo[]>(), TileLocation = new Rectangle(origin, new Size(fileData.Width - 1, fileData.Height - 1)) }; mapInfo.Add(result); // Only change music if loading a 'core' map if (Enum.IsDefined(typeof(eLevelId), levelId)) { soundProvider.StopSong(); soundProvider.LoadSong(mpqProvider.GetStream(ResourcePaths.GetMusicPathForLevel((eLevelId)levelId))); soundProvider.PlaySong(); } return(result); }