// Free/unbound uniques. These are not assigned to a specific map at the time the map is generated. // VAPORWARE: Father Time's day job was running a martial arts dojo. Make him a shop owner for one; would change his status to a bound unique. // VAPORWARE: Father Time is elderly. However, he's not deconditioned so shouldn't be using a standard elderly civilian model private void init_FatherTime(BaseTownGenerator tgen) // unused parameter...haven't decided on full item complement yet. { #if DEBUG if (null != FatherTime) { throw new InvalidOperationException("only call UniqueActors::init_FatherTime once"); } #endif Actor named = GameActors.MaleCivilian.CreateNamed(GameFactions.TheCivilians, "Father Time", 0); named.IsUnique = true; named.Doll.AddDecoration(DollPart.SKIN, GameImages.ACTOR_FATHER_TIME); named.StartingSkill(Skills.IDs.HAULER, 3); named.StartingSkill(Skills.IDs.MARTIAL_ARTS, 5); // to get the most out of his scythe named.StartingSkill(Skills.IDs.AGILE, 5); named.StartingSkill(Skills.IDs.HIGH_STAMINA, 5); named.Inventory.AddAll(new ItemMeleeWeapon(GameItems.UNIQUE_FATHER_TIME_SCYTHE)); named.Inventory.AddAll(GameItems.ARMY_RATION.instantiate()); // Doesn't want to be a target, so only one ration FatherTime = new UniqueActor(named, false, true, null, "You hear new year's music."); // XXX \todo GameMusics.FATHER_TIME_THEME_SONG (Auld Lang Syne?) }
private void init_SewersThing(BaseTownGenerator tgen) { #if DEBUG if (null != TheSewersThing) { throw new InvalidOperationException("only call UniqueActors::init_SewersThing once"); } #endif Map map = tgen.RandomDistrictInCity().SewersMap; Actor named = GameActors.SewersThing.CreateNamed(GameFactions.TheUndeads, "The Sewers Thing", 0); DiceRoller roller = new DiceRoller(map.Seed); if (!MapGenerator.ActorPlace(roller, map, named)) { throw new InvalidOperationException("could not spawn unique The Sewers Thing"); } Zone zoneByPartialName = map.GetZoneByPartialName("Sewers Maintenance"); if (zoneByPartialName != null) { MapGenerator.MapObjectPlaceInGoodPosition(map, zoneByPartialName.Bounds, pt => { return(map.IsWalkable(pt) && !map.HasActorAt(in pt) && !map.HasItemsAt(pt) && !map.HasExitAt(in pt)); }, roller, pt => BaseMapGenerator.MakeObjBoard(GameImages.OBJ_BOARD, new string[] {