Example #1
0
        // 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?)
        }
Example #2
0
        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[] {