public static BankenAbandonedFortress GetTownInstance()
        {
            if (_AbandonedFortress == null)
            {
                _AbandonedFortress = new BankenAbandonedFortress();
            }

            return(_AbandonedFortress);
        }
        public Location LoadEntranceHall()
        {
            Location returnData;

            returnData             = new Location();
            returnData.Name        = "Entrance Hall";
            returnData.Description = "A grand entrance hall. There are stairs leading upstairs but they are blocked by a magical barrier. Skeletons lay in wait.";
            //Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefintions = new Dictionary <string, LocationDefinition>();

            LocationDefinition locationDefinition = BankenAbandonedFortress.GetTownInstance().GetDeterioratingStairsDefinition();

            adjacentLocationDefintions.Add(locationDefinition.LocationKey, locationDefinition);

            returnData.AdjacentLocationDefinitions = adjacentLocationDefintions;

            return(returnData);
        }
        public Location LoadServantsHallway()
        {
            Location returnData;

            returnData             = new Location();
            returnData.Name        = "Servant's Hallway";
            returnData.Description = "A narrow and unkempt hallway. Several skeletons and stone guards block the way forward";
            //Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefintions = new Dictionary <string, LocationDefinition>();

            LocationDefinition locationDefinition = BankenAbandonedFortress.GetTownInstance().GetEntranceHallDefinition();

            adjacentLocationDefintions.Add(locationDefinition.LocationKey, locationDefinition);

            returnData.AdjacentLocationDefinitions = adjacentLocationDefintions;

            return(returnData);
        }
        public Location LoadGarden()
        {
            Location returnData;

            returnData             = new Location();
            returnData.Name        = "Garden";
            returnData.Description = "A small garden. Its flowers and plants have long since died and returned to the ground.";
            //Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefintions = new Dictionary <string, LocationDefinition>();

            LocationDefinition locationDefinition = BankenAbandonedFortress.GetTownInstance().GetEntranceDefinition();

            adjacentLocationDefintions.Add(locationDefinition.LocationKey, locationDefinition);

            returnData.AdjacentLocationDefinitions = adjacentLocationDefintions;

            return(returnData);
        }
        public Location LoadDeterioratingStairs()
        {
            Location returnData;

            returnData             = new Location();
            returnData.Name        = "Deteriorating Stairs";
            returnData.Description = "The stairs leading up to the fortress door were once grand. They are now crumbling to dust with large holes in them. Skeletons block the path forward";
            //Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefintions = new Dictionary <string, LocationDefinition>();

            LocationDefinition locationDefinition = BankenAbandonedFortress.GetTownInstance().GetEntranceDefinition();

            adjacentLocationDefintions.Add(locationDefinition.LocationKey, locationDefinition);

            returnData.AdjacentLocationDefinitions = adjacentLocationDefintions;

            return(returnData);
        }
        public Location LoadBarn()
        {
            Location returnData;

            returnData             = new Location();
            returnData.Name        = "Barn";
            returnData.Description = "A large barn. Horse armor still hangs on its walls. Skeletons meander about.";
            //Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefintions = new Dictionary <string, LocationDefinition>();

            LocationDefinition locationDefinition = BankenAbandonedFortress.GetTownInstance().GetEntranceDefinition();

            adjacentLocationDefintions.Add(locationDefinition.LocationKey, locationDefinition);

            returnData.AdjacentLocationDefinitions = adjacentLocationDefintions;

            return(returnData);
        }
        public Location LoadWarDogPen()
        {
            Location returnData;

            returnData             = new Location();
            returnData.Name        = "Ward Dog Pen";
            returnData.Description = "A circular pen, home to war dogs that were bred for the defense of the fortress. The pen is full of the animated skeletons of the war dogs";
            //Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefintions = new Dictionary <string, LocationDefinition>();

            LocationDefinition locationDefinition = BankenAbandonedFortress.GetTownInstance().GetEntranceDefinition();

            adjacentLocationDefintions.Add(locationDefinition.LocationKey, locationDefinition);

            returnData.AdjacentLocationDefinitions = adjacentLocationDefintions;

            return(returnData);
        }
        public Location LoadAbandonedFortressGates()
        {
            Location returnData;

            returnData      = new Location();
            returnData.Name = "Abandoned Fortress Gates";
            bool           defeatedMobs      = Convert.ToBoolean(LocationHandler.GetLocationStateValue(Banken.LOCATION_STATE_KEY, BankenForestWilderness.ABANDONED_FORTRESS_MOBS));
            bool           defeatedShadeLord = Convert.ToBoolean(LocationHandler.GetLocationStateValue(Banken.LOCATION_STATE_KEY, BankenForestWilderness.SHADE_LORD));
            bool           inspectGate       = Convert.ToBoolean(LocationHandler.GetLocationStateValue(Banken.LOCATION_STATE_KEY, BankenForestWilderness.INSPECT_GATE));
            bool           tookTreasure      = Convert.ToBoolean(LocationHandler.GetLocationStateValue(Banken.LOCATION_STATE_KEY, BankenForestWilderness.TREASURE));
            Accomplishment abandonedFortressAccomplishment = Banken.GetBankenAccomplishments().Find(x => x.Name.Contains("Abandoned Fortress"));
            bool           abandonedFortress = GameState.Hero.Accomplishments.Contains(abandonedFortressAccomplishment);
            string         before            = GameState.Hero.Identifier + ", you dare enter my domain? This fortress stands as a testement to my masters. The void shall claim you!";
            string         after             = "The shade lord cries out a piercing scream as it fades back into the void that spawned it.";
            string         action            = "Inspect";
            string         itemName          = "Gate";
            string         actionText        = "You inspect the gate. It seems to be sealed by very powerful dark magic. You'll have to go back to Banken and see if the rangers know of any mages that could help you unseal the gates. \nBefore you can turn back around to head back to town a Shade Lord materializes at the entrance of the gates and terror fills your heart.";

            //Once the player defeats the shades, have him/her try to open the gate
            //That will fail and a Shade Lord will appear.
            //The player will have to report back to Gilan after defeating the Shade Lord
            //Gilan will then tell the player that (s)he will have to find
            //some very power mages to help him/her blast open the gate

            List <LocationAction> locationActions = new List <LocationAction>();

            if (!defeatedMobs)
            {
                returnData.Description = "Just beyond the creek landing are the gates to an abandoned fortress. The gates appear sealed shut by some dark magic. A large group of shades hover before the gate to vanquish any that dare approach it.";

                List <Mob> mobs = new List <Mob>();
                mobs.Add(new Shade());
                mobs.Add(new Shade());
                mobs.Add(new Shade());
                mobs.Add(new Shade());
                mobs.Add(new Shade());
                mobs.Add(new Shade());
                mobs.Add(new Shade());
                mobs.Add(new Shade());
                mobs.Add(new Shade());
                mobs.Add(new Shade());
                CombatAction combatAction = new CombatAction("Shades", mobs);
                combatAction.PostCombat += AbandonedFortressMobs;
                locationActions.Add(combatAction);
                returnData.Actions = locationActions;
            }
            else if (!inspectGate)
            {
                returnData.Description = "Just beyond the creek landing are the gates to an abandoned fortress. The gates appear sealed shut by some dark magic.";
                TakeItemAction itemAction = new TakeItemAction(action, itemName, actionText);
                locationActions.Add(itemAction);
                itemAction.PostItem += GateResults;
                returnData.Actions   = locationActions;
            }
            else if (!defeatedShadeLord)
            {
                returnData.Description = "Just beyond the creek landing are the gates to an abandoned fortress. The gates appear sealed shut by some dark magic. A Shade Lord hovers before the gates, dark energy radiating from its body in waves.";

                List <Mob> mobs = new List <Mob>();
                mobs.Add(new ShadeLord());
                CombatAction combatAction = new CombatAction("Shade Lord", mobs, before, after);
                combatAction.PostCombat += ShadeLord;
                locationActions.Add(combatAction);
                returnData.Actions = locationActions;
            }
            else if (!tookTreasure)
            {
                returnData.Description = "Just beyond the creek landing are the gates to an abandoned fortress. The gates appear sealed shut by some dark magic. There is a treasure chest in front of the gates.";
                TreasureChestAction itemAction = new TreasureChestAction(5);
                locationActions.Add(itemAction);
                itemAction.PostItem += TreasureChest;
                returnData.Actions   = locationActions;
            }
            else if (!abandonedFortress)
            {
                returnData.Description = "Just beyond the creek landing are the gates to an abandoned fortress. The gates appear sealed shut by some dark magic.";
            }
            else
            {
                returnData.Description = "Just beyond the creek landing lay the crumpled gates of the Abandoned Fortress. THe gates have crumpled to dust. Whatever magic was sustaining them has imploded on itself.";
            }

            //Once the player gets the mages there will be an action to begin unsealing the gate and then the player can proceed into the "abandoned" fortress

            //Adjacent Locations
            Dictionary <string, LocationDefinition> adjacentLocationDefintions = new Dictionary <string, LocationDefinition>();

            //Town Center
            LocationDefinition locationDefinition = BankenForestWilderness.GetTownInstance().GetCreekLandingDefinition();

            adjacentLocationDefintions.Add(locationDefinition.LocationKey, locationDefinition);

            if (defeatedMobs && inspectGate && defeatedShadeLord)
            {
                locationDefinition = Banken.GetTownInstance().GetTownCenterDefinition();
                adjacentLocationDefintions.Add(locationDefinition.LocationKey, locationDefinition);
            }

            if (abandonedFortress)
            {
                locationDefinition = BankenAbandonedFortress.GetTownInstance().GetEntranceDefinition();
                adjacentLocationDefintions.Add(locationDefinition.LocationKey, locationDefinition);
            }

            returnData.AdjacentLocationDefinitions = adjacentLocationDefintions;

            return(returnData);
        }