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