Beispiel #1
0
        public static void NextLevel()
        {
            Rogue.GameWorld.StoreLevel();

            Rogue.GameWorld.DungeonLevel += 1;
            MessageLog.AddMessage("You descend deeper into the dungeon.");

            LevelMemory loadedLevel = Rogue.GameWorld.LoadLevel();

            if (loadedLevel != null)
            {
                Rogue.GameWorld.Map     = loadedLevel.Map;
                Rogue.GameWorld.Objects = loadedLevel.Objects;
                Rogue.GameWorld.Objects.Add(Rogue.GameWorld.Player);

                Rogue.GameWorld.Player.X = loadedLevel.Upstairs.X;
                Rogue.GameWorld.Player.Y = loadedLevel.Upstairs.Y;

                Camera.SetCamera();
            }
            else
            {
                MakeMap(Constants.Direction.Down);
            }
        }
        public static bool Fireball(GameObject user)
        {
            MessageLog.AddMessage("Fireball: " + user.Name + " casts Fireball.", "white");

            GameObject spell = new GameObject("Fireball", Tiles.Effect.FireballTile, user.X, user.Y);

            spell.Spell         = true;
            spell.AlwaysVisible = false;

            Rogue.GameWorld.Objects.Add(spell);

            Rendering.RenderAll();
            Terminal.Refresh();

            ThrowingAnimation(spell, user);

            MessageLog.AddMessage("Fireball: The fireball explodes.", "white");

            foreach (GameObject obj in Rogue.GameWorld.Objects)
            {
                if (obj.Fighter != null && obj.Fighter.AI.Type != Constants.AI.None && obj.X == spell.X && obj.Y == spell.Y)
                {
                    int amount = 12;
                    MessageLog.AddMessage("Fireball: " + obj.Name + " is damaged for " + amount.ToString() + " Hit Points.", "white");

                    obj.Fighter.TakeDamage(amount);
                    break;
                }
            }

            Rogue.GameWorld.Objects.Remove(spell);

            return(false);
        }
Beispiel #3
0
        internal void Drop(GameObject user)
        {
            user.Fighter.Inventory.Remove(Owner);
            Rogue.GameWorld.Objects.Add(Owner);
            Owner.X = user.X;
            Owner.Y = user.Y;

            MessageLog.AddMessage(user.Name + " drops " + Owner.Name + ".", "white");
        }
        internal void MeleeAttack(GameObject target)
        {
            int damage = Attack - target.Fighter.Defense;

            MessageLog.AddMessage(Owner.Name + " hits " + target.Name + " for " + damage.ToString() + " Hit Points.", "white");

            target.Fighter.TakeDamage(damage);

            if (target != Rogue.GameWorld.Player)
            {
                target.Fighter.TurnToFaceAttacker(Owner);
            }
        }
        internal void AddXP(int amount)
        {
            XP += amount;
            if (XP >= Constants.LevelProgression[Level - 1])
            {
                MessageLog.AddMessage(string.Format("Level up! You reached level {0}.", Level + 1));

                XP      -= Constants.LevelProgression[Level - 1];
                Level   += 1;
                Max_HP  += 6;
                HP      += 6;
                Attack  += 1;
                Defense += 1;
            }
        }
        public static bool HealingPotion(GameObject user)
        {
            if (Rogue.GameWorld.Player.Fighter.HP == Rogue.GameWorld.Player.Fighter.Max_HP)
            {
                MessageLog.AddMessage("You are already at full health", "white");
                return(false);
            }

            int amount = 6;

            MessageLog.AddMessage(user.Name + " is healed for " + amount.ToString() + " Hit Points.", "white");

            Rogue.GameWorld.Player.Fighter.Heal(amount);

            return(true);
        }
Beispiel #7
0
        public static Constants.PlayerAction PreviousLevel()
        {
            if (Rogue.GameWorld.DungeonLevel == 1)
            {
                int?choice = Menu.BasicMenu("Are you sure you want to exit the dungeon?", new List <string>()
                {
                    "Yes"
                }, "No");

                if (choice != null)
                {
                    return(Constants.PlayerAction.ExitWithoutSave);
                }
                else
                {
                    return(Constants.PlayerAction.NotUsedTurn);
                }
            }
            else
            {
                Rogue.GameWorld.StoreLevel();

                Rogue.GameWorld.DungeonLevel -= 1;
                MessageLog.AddMessage("You ascend higher into the dungeon.");

                LevelMemory loadedLevel = Rogue.GameWorld.LoadLevel();
                if (loadedLevel != null)
                {
                    Rogue.GameWorld.Map     = loadedLevel.Map;
                    Rogue.GameWorld.Objects = loadedLevel.Objects;
                    Rogue.GameWorld.Objects.Add(Rogue.GameWorld.Player);

                    Rogue.GameWorld.Player.X = loadedLevel.Downstairs.X;
                    Rogue.GameWorld.Player.Y = loadedLevel.Downstairs.Y;

                    Camera.SetCamera();
                }
                else
                {
                    MakeMap(Constants.Direction.Up);
                }

                return(Constants.PlayerAction.UsedTurn);
            }
        }
        internal void TakeDamage(int amount)
        {
            if (amount > 0)
            {
                HP -= amount;

                if (HP <= 0)
                {
                    if (Owner != Rogue.GameWorld.Player)
                    {
                        MessageLog.AddMessage(string.Format("{0} dies. {1} receives {2} XP.", Owner.Name, Rogue.GameWorld.Player.Name, XP), "red");
                        Rogue.GameWorld.Player.Fighter.AddXP(XP);
                    }

                    Death();
                }
            }
        }
        public static void ConfusedMonster(GameObject self)
        {
            if (self.Fighter.HP <= 0)
            {
                return;
            }

            self.Fighter.AI.TempAILength -= 1;

            if (self.Fighter.AI.TempAILength == 0)
            {
                self.Fighter.AI.Type = self.Fighter.AI.OldAIType;

                MessageLog.AddMessage(self.Name + " is no longer confused.");
                return;
            }

            int choice = Constants.Angles[new Random().Next(0, Constants.Angles.Length)];

            if (choice == self.Fighter.Direction)
            {
                if (self.Fighter.Direction == 0)
                {
                    self.Move(0, -1);
                }
                else if (self.Fighter.Direction == 90)
                {
                    self.Move(-1, 0);
                }
                else if (self.Fighter.Direction == 180)
                {
                    self.Move(0, 1);
                }
                else if (self.Fighter.Direction == 270)
                {
                    self.Move(1, 0);
                }
            }
            else
            {
                self.Fighter.Direction = choice;
            }
        }
        public static bool Throw(GameObject item, GameObject user)
        {
            MessageLog.AddMessage("Throw: " + user.Name + " throws " + item.Name + ".", "white");

            GameObject thrownItem = item.Clone();

            thrownItem.Item.Count = 1;
            thrownItem.X          = user.X;
            thrownItem.Y          = user.Y;

            Rogue.GameWorld.Objects.Add(thrownItem);

            Rendering.RenderAll();
            Terminal.Refresh();

            ThrowingAnimation(thrownItem, user);

            return(false);
        }
Beispiel #11
0
        internal void Pick(GameObject user)
        {
            MessageLog.AddMessage(user.Name + " picks up " + Owner.Name + ".", "white");

            Rogue.GameWorld.Objects.Remove(Owner);

            if (Equipment == null)
            {
                foreach (GameObject existingItem in user.Fighter.Inventory)
                {
                    if (existingItem.Name == Owner.Name)
                    {
                        existingItem.Item.Count += Count;
                        return;
                    }
                }
            }

            user.Fighter.Inventory.Add(Owner);
        }
 internal void UnEquip(GameObject user)
 {
     IsEquipped = false;
     MessageLog.AddMessage(user.Name + " unequips " + Owner.Owner.Name + ".", "white");
 }
 internal void Equip(GameObject user)
 {
     IsEquipped = true;
     MessageLog.AddMessage(user.Name + " equips " + Owner.Owner.Name + ".", "white");
 }