public void GenerateMap() { string floorType = "basement"; float[] floorChance = new float[5] { 20f, 40f, 60f, 80f, 100f }; Coords start = new Coords(), end = new Coords(), stairs = new Coords(); int id = 1; //critical room locations start.Set(Random.Range(0, distanceX), Random.Range(0, distanceZ), 1); end.Set(Random.Range(0, distanceX), Random.Range(0, distanceZ), floors - 1); do { stairs.Set(Random.Range(0, distanceX), Random.Range(0, distanceZ)); } while (stairs.CompairIgnoreFloor(start) || stairs.CompairIgnoreFloor(end)); //room generation for (int f = 0; f < floors; f++) { for (int x = 0; x < distanceX; x++) { for (int z = 0; z < distanceZ; z++) { Coords coords = new Coords(x, z, f); bool criticalRoom = false; if (start.Compair(x, z, f)) { criticalRoom = true; } else if (end.Compair(x, z, f)) { criticalRoom = true; } else if (stairs.Compair(x, z)) { criticalRoom = true; } if (criticalRoom) { if (start.Compair(x, z, f)) { RoomDetails(id, "entrance porch", coords, 4); visualMap[x, z, f] = "Ep "; } //start room else if (end.Compair(x, z, f)) { RoomDetails(id, "attic", coords, 10); visualMap[x, z, f] = "At "; } //end room else if (stairs.Compair(x, z)) { RoomDetails(id, "stairs", coords, 13); visualMap[x, z, f] = "Sr "; } } //make critical rooms else { float roll = Random.Range(0f, 100f); switch (floorType) { case "basement": if (roll <= floorChance[0]) { RoomDetails(id, "cellar", coords, 1); visualMap[x, z, f] = "Cr "; } else if (roll > floorChance[0] && roll <= floorChance[1]) { RoomDetails(id, "ritual room", coords, 2); visualMap[x, z, f] = "Rr "; } else if (roll > floorChance[1] && roll <= floorChance[2]) { RoomDetails(id, "living room", coords, 3); visualMap[x, z, f] = "Lr "; } else if (roll > floorChance[2] && roll <= floorChance[3]) { RoomDetails(id, "side corridor", coords, 11); visualMap[x, z, f] = "Sc "; } else if (roll > floorChance[3] && roll <= floorChance[4]) { RoomDetails(id, "bedroom", coords, 12); visualMap[x, z, f] = "Br "; } break; case "main": if (roll <= floorChance[0]) { RoomDetails(id, "living room", coords, 3); visualMap[x, z, f] = "Lr "; } else if (roll > floorChance[0] && roll <= floorChance[1]) { RoomDetails(id, "main hall", coords, 5); visualMap[x, z, f] = "Mh "; } else if (roll > floorChance[1] && roll <= floorChance[2]) { RoomDetails(id, "kitchen", coords, 6); visualMap[x, z, f] = "Kt "; } else if (roll > floorChance[2] && roll <= floorChance[3]) { RoomDetails(id, "parlor", coords, 7); visualMap[x, z, f] = "Pl "; } else if (roll > floorChance[3] && roll <= floorChance[4]) { RoomDetails(id, "side corridor", coords, 11); visualMap[x, z, f] = "Sc "; } else if (roll > floorChance[4] && roll <= floorChance[5]) { RoomDetails(id, "bedroom", coords, 12); visualMap[x, z, f] = "Br "; } break; case "upper": if (roll <= floorChance[0]) { RoomDetails(id, "parlor", coords, 7); visualMap[x, z, f] = "Pl "; } else if (roll > floorChance[0] && roll <= floorChance[1]) { RoomDetails(id, "balcony", coords, 8); visualMap[x, z, f] = "Bl "; } else if (roll > floorChance[1] && roll <= floorChance[2]) { RoomDetails(id, "study", coords, 9); visualMap[x, z, f] = "St "; } else if (roll > floorChance[2] && roll <= floorChance[3]) { RoomDetails(id, "side corridor", coords, 11); visualMap[x, z, f] = "Sc "; } else if (roll > floorChance[3] && roll <= floorChance[4]) { RoomDetails(id, "bedroom", coords, 12); visualMap[x, z, f] = "Br "; } break; } } //make filler rooms id++; map[x, z, f] = roomGen; } } if (floorType == "basement") { floorType = "main"; floorChance = new float[6] { 20f, 40f, 60f, 80f, 90f, 100f }; } else if (floorType == "main") { floorType = "upper"; floorChance = new float[5] { 20f, 40f, 60f, 80f, 100f }; } } }