private void level(StageBuilder builder, int monsters = 0, int items = 0, List <string> breeds = null, List <Rarity> drop = null, QuestBuilder quest = null ) { if (quest == null) { quest = _currentQuest; } var breedList = new List <Breed>(); foreach (var name in breeds) { var breed = BreedFactory.Instance.Breeds[name]; if (breed == null) { throw new ApplicationException($"Could not find breed '{name}'"); } breedList.Add(breed); } _currentArea.Levels.Add( new Level( (stage) => builder.Generate(stage), monsters, items, DropFactory.dropOneOf(drop), breedList, quest) ); }
private void initialize() { var stageNumber = 0; var currentLevelNumber = 0; var currentAreaName = "Friendly Forest"; area(currentAreaName, 80, 34, 3.0); level(new Forrest(), monsters: 14, items: 6, breeds: new List <string>() { "butterfly", "field mouse", "vole", "robin", "garter snake", "frog", "slug", }, drop: new List <Rarity>() { DropFactory.RarityDrop(1, "Rock"), DropFactory.RarityDrop(1, "Flower"), DropFactory.RarityDrop(1, "treasure", 1), DropFactory.RarityDrop(2, "Stick"), DropFactory.RarityDrop(3, "magic", 1) }, quest: kill("fuzzy bunny", 1)); AreaLevelMaps.Add(new AreaLevelMap(currentAreaName, currentLevelNumber++, stageNumber++)); level(new Forrest(), monsters: 18, items: 8, breeds: new List <string>() { "white mouse", "bee", "giant earthworm", "garden spider", "tree snake", "wasp", "forest sprite" }, drop: new List <Rarity>() { DropFactory.RarityDrop(1, "Rock"), DropFactory.RarityDrop(2, "Flower"), DropFactory.RarityDrop(3, "Stick"), DropFactory.RarityDrop(1, "treasure", 1), DropFactory.RarityDrop(2, "magic", 2), DropFactory.RarityDrop(2, "equipment", 2) }, quest: kill("fox", 1)); AreaLevelMaps.Add(new AreaLevelMap(currentAreaName, currentLevelNumber++, stageNumber++)); // --------------------------------------------------------------------------------------------- currentAreaName = "Training Grounds"; currentLevelNumber = 0; area(currentAreaName, 79, 33, 7.0); level(new TrainingGrounds(), monsters: 40, items: 6, breeds: new List <string>() { "mangy cur", "giant slug", "brown bat", "stray cat", "giant cockroach", "simpering knave", "decrepit mage", "lazy eye" }, drop: new List <Rarity>() { DropFactory.RarityDrop(3, "Rock"), DropFactory.RarityDrop(3, "magic", 2), DropFactory.RarityDrop(1, "treasure", 2), DropFactory.RarityDrop(1, "equipment", 2) }, quest: kill("wild dog", 3)); AreaLevelMaps.Add(new AreaLevelMap(currentAreaName, currentLevelNumber++, stageNumber++)); level(new TrainingGrounds(), monsters: 46, items: 7, breeds: new List <string>() { "brown spider", "crow", "wild dog", "sewer rat", "drunken priest" }, drop: new List <Rarity>() { DropFactory.RarityDrop(3, "Rock"), DropFactory.RarityDrop(2, "magic", 3), DropFactory.RarityDrop(1, "treasure", 3), DropFactory.RarityDrop(1, "equipment", 3) }, quest: kill("giant spider")); AreaLevelMaps.Add(new AreaLevelMap(currentAreaName, currentLevelNumber++, stageNumber++)); level(new TrainingGrounds(), monsters: 52, items: 8, breeds: new List <string>() { "giant spider", "unlucky ranger", "raven", "tree snake", "giant earthworm" }, drop: new List <Rarity>() { DropFactory.RarityDrop(3, "Rock"), DropFactory.RarityDrop(2, "magic", 4), DropFactory.RarityDrop(2, "treasure", 4), DropFactory.RarityDrop(1, "equipment", 4) }, quest: kill("giant cave worm")); AreaLevelMaps.Add(new AreaLevelMap(currentAreaName, currentLevelNumber++, stageNumber++)); // --------------------------------------------------------------------------------------------- currentAreaName = "Goblin Stronghold"; currentLevelNumber = 0; area(currentAreaName, 85, 39, 12.0, quest: tileType("the stairs", TileTypeFactory.Instance.StairsUp)); level(new GoblinStronghold(), monsters: 48, items: 12, breeds: new List <string>() { "scurrilous imp", "vexing imp", "goblin peon", "house sprite", "wild dog", "lizard guard", "blood worm", "giant cave worm" }, drop: new List <Rarity>() { DropFactory.RarityDrop(10, "Rock"), DropFactory.RarityDrop(1, "item", 4) }); AreaLevelMaps.Add(new AreaLevelMap(currentAreaName, currentLevelNumber++, stageNumber++)); level(new GoblinStronghold(), monsters: 50, items: 13, breeds: new List <string>() { "green slime", "juvenile salamander", "imp incanter", "kobold", "goblin fighter", "lizard protector", "giant bat" }, drop: new List <Rarity>() { DropFactory.RarityDrop(10, "Rock"), DropFactory.RarityDrop(1, "item", 5) }); AreaLevelMaps.Add(new AreaLevelMap(currentAreaName, currentLevelNumber++, stageNumber++)); level(new GoblinStronghold(), monsters: 52, items: 14, quest: kill("Feng"), breeds: new List <string>() { "kobold shaman", "mongrel", "giant centipede", "frosty slime", "kobold trickster", "imp warlock", "goblin archer", "armored lizard", }, drop: new List <Rarity>() { DropFactory.RarityDrop(10, "Rock"), DropFactory.RarityDrop(1, "item", 6) }); AreaLevelMaps.Add(new AreaLevelMap(currentAreaName, currentLevelNumber++, stageNumber++)); level(new GoblinStronghold(), monsters: 54, items: 15, breeds: new List <string>() { "kobold priest", "goblin warrior", "smoking slime", "cave snake", "floating eye", "plague rat", "salamander", "scaled guardian" }, drop: new List <Rarity>() { DropFactory.RarityDrop(10, "Rock"), DropFactory.RarityDrop(1, "item", 7) }); AreaLevelMaps.Add(new AreaLevelMap(currentAreaName, currentLevelNumber++, stageNumber++)); level(new GoblinStronghold(), monsters: 56, items: 16, quest: kill("Erlkonig, the Goblin Prince"), breeds: new List <string>() { "goblin ranger", "goblin mage", "mischievous sprite", "cave bat", "fire worm", "sparkling slime", "saurian" }, drop: new List <Rarity>() { DropFactory.RarityDrop(10, "Rock"), DropFactory.RarityDrop(1, "item", 7) }); AreaLevelMaps.Add(new AreaLevelMap(currentAreaName, currentLevelNumber++, stageNumber++)); }