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); }
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); }
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); }
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"); }