Example #1
0
 public void useAbility(Player p)
 {
     if (p.stats.mana >= etherCost)
     {
         p.stats.mana -= etherCost;
         p.hurt(healthCost, true, "You drained some health to perform " + name + "!");
         if (effect == AbilityEffect.RESTHEAL)
         {
             p.stats.health += (int)(0.25f * p.stats.maxHealth);
             if (p.stats.health > p.stats.maxHealth)
             {
                 p.stats.health = p.stats.maxHealth;
             }
             Program.msgLog.Add("You feel rested!");
         }
         if (effect == AbilityEffect.TOGGLEFLIGHT)
         {
             if (p.status.hasAttr("Fly"))
             {
                 p.status.removeAttr("Fly");
             }
             else
             {
                 p.status.addStatus(new Status("Fly", 1, true, ConsoleForeground.Cyan, ConsoleBackground.Black));
             }
         }
     }
 }
Example #2
0
 public void useAbility(Player p)
 {
     if (p.stats.mana >= etherCost)
     {
         p.stats.mana -= etherCost;
         p.hurt(healthCost, true, "You drained some health to perform " + name + "!");
         if (effect == AbilityEffect.RESTHEAL)
         {
             p.stats.health += (int)(0.25f * p.stats.maxHealth);
             if (p.stats.health > p.stats.maxHealth)
             {
                 p.stats.health = p.stats.maxHealth;
             }
             Program.msgLog.Add("You feel rested!");
         }
         if (effect == AbilityEffect.TOGGLEFLIGHT)
         {
             if (p.status.hasAttr("Fly"))
             {
                 p.status.removeAttr("Fly");
             }
             else
             {
                 p.status.addStatus(new Status("Fly", 1, true, ConsoleForeground.Cyan, ConsoleBackground.Black));
             }
         }
     }
 }
Example #3
0
        public static void startGame()
        {
            Boolean turn = false;

            while (!dead)
            {
                if (showingItem == null)
                {
                    if (!turn)
                    {
                        renderGame();
                        turn = true;
                    }
                    int iteration = 0;
                    while (turn)
                    {
                        if (iteration > 0)
                        {
                            ConsoleEx.CursorVisible = false;
                            renderGame();
                        }
                        ConsoleKeyInfo keyInfo = Console.ReadKey();
                        if (keyInfo.Key == ConsoleKey.RightArrow)
                        {
                            if (canMoveRight())
                            {
                                renderX = Math.Min(renderX + 1, 999);
                                stuck   = false;
                            }
                            else
                            {
                                stuck = true;
                            }
                        }

                        if (keyInfo.Key == ConsoleKey.LeftArrow)
                        {
                            if (canMoveLeft())
                            {
                                renderX = Math.Max(renderX - 1, 0);
                                stuck   = false;
                            }
                            else
                            {
                                stuck = true;
                            }
                        }
                        if (keyInfo.Key == ConsoleKey.DownArrow)
                        {
                            if (canMoveDown())
                            {
                                renderY = Math.Min(renderY + 1, 999);
                                stuck   = false;
                            }
                            else
                            {
                                stuck = true;
                            }
                        }
                        if (keyInfo.Key == ConsoleKey.UpArrow)
                        {
                            if (canMoveUp())
                            {
                                renderY = Math.Max(renderY - 1, 0);
                                stuck   = false;
                            }
                            else
                            {
                                stuck = true;
                            }
                        }
                        if (world.map[renderX, renderY] == Tile.stairCase)
                        {
                            msgLog.Add("You descend into the darkness...");
                            Program.floor++;
                            if (!levelMap.ContainsKey(Program.area + ":" + Program.floor))
                            {
                                World w = new World();
                                w.genMap();
                                levelMap.Add(Program.area + ":" + Program.floor, w);
                            }
                            else
                            {
                                world = levelMap[Program.area + ":" + Program.floor];
                            }
                            Mob.mobList.Clear();
                            player.stats.xp += World.rand.Next(2, 6);
                        }
                        if (world.map[renderX, renderY] == Tile.upStairCase)
                        {
                            if (Program.floor - 1 > 0)
                            {
                                msgLog.Add("You climb to the previous floor...");
                                Program.floor--;
                                world = levelMap[Program.area + ":" + Program.floor];
                                //player.stats.xp += World.rand.Next(2, 6);
                            }
                        }
                        if (world.gold[renderX, renderY] > 0)
                        {
                            player.addGold(world.gold[renderX, renderY]);
                            world.gold[renderX, renderY] = 0;
                        }
                        if (world.items[renderX, renderY] != null)
                        {
                            player.addToInventory(world.items[renderX, renderY]);
                            world.items[renderX, renderY] = null;
                        }
                        turn = false;
                        if (keyInfo.Key == ConsoleKey.A)
                        {
                            showAbilities = !showAbilities;
                            turn          = true;
                        }
                        if (keyInfo.Key == ConsoleKey.W && !Console.CapsLock)
                        {
                            turn = true;
                            Program.selectedSlot--;
                            if (Program.selectedSlot < 0)
                            {
                                if (!showAbilities)
                                {
                                    Program.selectedSlot = player.inventory.Length - 1;
                                }
                                else
                                {
                                    Program.selectedSlot = player.abilities.Count - 1;
                                }
                            }
                        }
                        if (keyInfo.Key == ConsoleKey.S && !Console.CapsLock)
                        {
                            turn = true;
                            Program.selectedSlot++;
                            if (showAbilities)
                            {
                                if (Program.selectedSlot > player.abilities.Count - 1)
                                {
                                    Program.selectedSlot = 0;
                                }
                            }
                            else
                            {
                                if (Program.selectedSlot > player.inventory.Length - 1)
                                {
                                    Program.selectedSlot = 0;
                                }
                            }
                        }
                        if (keyInfo.Key == ConsoleKey.Enter && showAbilities)
                        {
                            player.abilities[Program.selectedSlot].useAbility(player);
                        }
                        if (keyInfo.Key == ConsoleKey.Q && !Console.CapsLock && !showAbilities)
                        {
                            if (player.inventoryStacks[Program.selectedSlot] > 0)
                            {
                                player.inventory[Program.selectedSlot].useItem(player);
                                if (player.inventory[Program.selectedSlot].consumable)
                                {
                                    player.inventoryStacks[Program.selectedSlot]--;
                                }
                            }
                        }
                        if (keyInfo.Key == ConsoleKey.I && !Console.CapsLock && !showAbilities)
                        {
                            showingItem = player.inventory[Program.selectedSlot];
                        }
                        if (keyInfo.Key == ConsoleKey.E && !Console.CapsLock && !showAbilities)
                        {
                            if (player.inventoryStacks[Program.selectedSlot] > 0 && player.inventory[Program.selectedSlot].equippable && player.canEquipSelectedItem())
                            {
                                try
                                {
                                    if (player.inventoryStacks[Program.selectedSlot] > 0 && !(player.inventory[Program.selectedSlot].bound && player.inventory[Program.selectedSlot].discoveredBound))
                                    {
                                        player.inventory[Program.selectedSlot].equipped = !player.inventory[Program.selectedSlot].equipped;
                                        if (player.inventory[Program.selectedSlot].equipped)
                                        {
                                            player.equipment.equipSlots[player.inventory[Program.selectedSlot].slotEquip] = player.inventory[Program.selectedSlot];
                                            player.inventory[Program.selectedSlot].addBrand("used");
                                        }
                                        else
                                        {
                                            player.equipment.equipSlots[player.inventory[Program.selectedSlot].slotEquip] = null;
                                        }
                                        turn = false;
                                    }
                                    else if (player.inventory[Program.selectedSlot].bound && player.inventory[Program.selectedSlot].discoveredBound && player.inventory[Program.selectedSlot].equipped)
                                    {
                                        msgLog.Add("You can't unequip a bound item!");
                                    }
                                }
                                catch
                                {
                                    player.inventory[Program.selectedSlot].equipped = true;
                                    player.inventory[Program.selectedSlot].addBrand("used");
                                    if (player.inventory[Program.selectedSlot].equipped)
                                    {
                                        player.equipment.equipSlots[player.inventory[Program.selectedSlot].slotEquip] = player.inventory[Program.selectedSlot];
                                    }
                                    else
                                    {
                                        player.equipment.equipSlots[player.inventory[Program.selectedSlot].slotEquip] = null;
                                    }
                                    turn = false;
                                }
                                try
                                {
                                    if (player.inventory[Program.selectedSlot].equipped && !player.inventory[Program.selectedSlot].discoveredBound)
                                    {
                                        player.inventory[Program.selectedSlot].discoveredBound = true;
                                        if (player.inventory[Program.selectedSlot].bound)
                                        {
                                            if (player.status.hasAttr("Accursed"))
                                            {
                                                if (World.rand.Next(10) < player.status.getLvl("Accursed"))
                                                {
                                                    player.inventory[Program.selectedSlot].discoveredBound = false;
                                                    player.inventory[Program.selectedSlot].bound           = false;
                                                    player.inventory[Program.selectedSlot].addBrand("was bound");
                                                    msgLog.Add(player.inventory[Program.selectedSlot].name + " was not strong enough to bind to you!");
                                                }
                                            }
                                        }
                                        else
                                        {
                                            player.inventory[Program.selectedSlot].addBrand("not bound");
                                        }
                                    }
                                }
                                catch
                                {
                                }
                            }
                            else if (!player.canEquipSelectedItem() && player.inventoryStacks[Program.selectedSlot] > 0)
                            {
                                if (player.inventory[Program.selectedSlot].equippable)
                                {
                                    msgLog.Add("You can't equip anything in that slot!");
                                }
                            }
                            else
                            {
                                turn = true;
                            }
                            //else
                            //{
                            //    turn = true;
                            //    msgLog.Add("You are intangible and cannot wield any items!");
                            //}
                        }
                        iteration++;
                    }
                    if (player.species != Species._faerie)
                    {
                        player.hunger -= (1 + player.status.getLvl("Fast Metabolism"));
                        if (player.hunger < -4500 && World.rand.Next(100) < 73)
                        {
                            player.hurt(World.rand.Next(4) + 1, true, Player.chooseHungerMsg());
                        }
                    }
                    Mob.updatePaths();
                    Mob.updateMobs();
                    player.stats.calcStats();
                    if ((world.map[renderX, renderY] == Tile.shallowWater || world.map[renderX, renderY] == Tile.swampWater) && !player.status.hasAttr("Fly"))
                    {
                        player.status.removeAttr("Wet");
                        player.status.addStatus(new Status("Wet", 1, true, ConsoleForeground.Blue, ConsoleBackground.Black));
                    }
                    else
                    {
                        player.status.removeAttr("Wet");
                    }
                    if (world.map[renderX, renderY] == Tile.deepWater && !player.status.hasAttr("Fly"))
                    {
                        player.status.removeAttr("Wet+");
                        player.status.addStatus(new Status("Wet+", 1, true, ConsoleForeground.Navy, ConsoleBackground.Black));
                    }
                    else
                    {
                        player.status.removeAttr("Wet+");
                    }
                    player.update();
                    currTurn++;
                }
                else
                {
                    Console.Clear();
                    ConsoleEx.DrawRectangle(BorderStyle.Text, 0, 0, Console.LargestWindowWidth - 10, Console.LargestWindowHeight - 10, false);
                    Util.writeLn("Press enter to exit...", 2, 2);
                    Util.writeLn(showingItem.name + " (weight: " + showingItem.weight + ")", 2, 4);
                    Util.writeLn(showingItem.compileTags(), 2, 5);
                    Util.writeLn(showingItem.compileEnchant(), 2, 6);
                    Console.SetCursorPosition(Console.LargestWindowWidth - 1, Console.LargestWindowHeight - 1);
                    Console.ReadKey();
                    showingItem = null;
                }
            }
            Morgue.update(player);
            Morgue.show();
        }