From a54c002ecad10278eed19ded273c6a64134ce6be Mon Sep 17 00:00:00 2001 From: ginks21z Date: Fri, 17 Jul 2026 03:11:46 +0430 Subject: [PATCH] idk --- .../src/main/java/org/project/Main.java | 333 +++++++++++++++++- .../main/java/org/project/entity/Entity.java | 10 +- .../org/project/entity/enemies/Dragon.java | 78 ++++ .../org/project/entity/enemies/Enemy.java | 100 +++++- .../org/project/entity/enemies/Goblin.java | 50 +++ .../org/project/entity/enemies/Skeleton.java | 71 +++- .../org/project/entity/enemies/Vampire.java | 45 +++ .../org/project/entity/players/Assassin.java | 95 +++++ .../entity/players/ICombatActions.java | 19 + .../org/project/entity/players/Knight.java | 81 ++++- .../org/project/entity/players/Player.java | 127 ++++++- .../org/project/entity/players/Wizard.java | 85 +++++ .../src/main/java/org/project/item/Item.java | 6 +- .../java/org/project/item/armors/Armor.java | 48 ++- .../org/project/item/armors/AssassinMask.java | 7 + .../org/project/item/armors/KnightArmor.java | 8 +- .../org/project/item/armors/WizardRobe.java | 8 + .../project/item/consumables/Consumable.java | 32 +- .../org/project/item/consumables/Flask.java | 38 +- .../project/item/consumables/GreatFlask.java | 7 + .../project/item/consumables/HealthFlask.java | 7 + .../project/item/consumables/ManaFlask.java | 21 ++ .../org/project/item/weapons/BoneDagger.java | 8 + .../java/org/project/item/weapons/Dagger.java | 12 + .../org/project/item/weapons/DragonClaw.java | 8 + .../java/org/project/item/weapons/Rapier.java | 8 + .../java/org/project/item/weapons/Sword.java | 32 +- .../org/project/item/weapons/ToothedHook.java | 8 + .../java/org/project/item/weapons/Wand.java | 10 + .../java/org/project/item/weapons/Weapon.java | 18 +- .../java/org/project/location/AnsiColors.java | 30 ++ .../java/org/project/location/Location.java | 68 +++- .../org/project/location/LocationManager.java | 66 ++++ .../project/location/NarrativeConsole.java | 53 +++ .../target/classes/org/project/Main.class | Bin 0 -> 10993 bytes .../classes/org/project/entity/Entity.class | Bin 0 -> 273 bytes .../org/project/entity/enemies/Dragon.class | Bin 0 -> 2747 bytes .../org/project/entity/enemies/Enemy.class | Bin 0 -> 2839 bytes .../org/project/entity/enemies/Goblin.class | Bin 0 -> 1984 bytes .../org/project/entity/enemies/Skeleton.class | Bin 0 -> 2552 bytes .../org/project/entity/enemies/Vampire.class | Bin 0 -> 2068 bytes .../org/project/entity/players/Assassin.class | Bin 0 -> 3442 bytes .../entity/players/ICombatActions.class | Bin 0 -> 283 bytes .../org/project/entity/players/Knight.class | Bin 0 -> 3040 bytes .../org/project/entity/players/Player.class | Bin 0 -> 4988 bytes .../org/project/entity/players/Wizard.class | Bin 0 -> 3252 bytes .../classes/org/project/item/Item.class | Bin 0 -> 153 bytes .../org/project/item/armors/Armor.class | Bin 0 -> 2385 bytes .../project/item/armors/AssassinMask.class | Bin 0 -> 337 bytes .../org/project/item/armors/KnightArmor.class | Bin 0 -> 334 bytes .../org/project/item/armors/WizardRobe.class | Bin 0 -> 331 bytes .../project/item/consumables/Consumable.class | Bin 0 -> 832 bytes .../org/project/item/consumables/Flask.class | Bin 0 -> 1874 bytes .../project/item/consumables/GreatFlask.class | Bin 0 -> 381 bytes .../item/consumables/HealthFlask.class | Bin 0 -> 385 bytes .../project/item/consumables/ManaFlask.class | Bin 0 -> 1390 bytes .../org/project/item/weapons/BoneDagger.class | Bin 0 -> 335 bytes .../org/project/item/weapons/Dagger.class | Bin 0 -> 352 bytes .../org/project/item/weapons/DragonClaw.class | Bin 0 -> 336 bytes .../org/project/item/weapons/Rapier.class | Bin 0 -> 324 bytes .../org/project/item/weapons/Sword.class | Bin 0 -> 876 bytes .../project/item/weapons/ToothedHook.class | Bin 0 -> 339 bytes .../org/project/item/weapons/Wand.class | Bin 0 -> 346 bytes .../org/project/item/weapons/Weapon.class | Bin 0 -> 984 bytes .../org/project/location/AnsiColors.class | Bin 0 -> 1046 bytes .../org/project/location/Location.class | Bin 0 -> 2350 bytes .../project/location/LocationManager.class | Bin 0 -> 3124 bytes .../project/location/NarrativeConsole.class | Bin 0 -> 2106 bytes 68 files changed, 1496 insertions(+), 101 deletions(-) create mode 100644 Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java create mode 100644 Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java create mode 100644 Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java create mode 100644 Java-Knight/src/main/java/org/project/entity/players/Assassin.java create mode 100644 Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java create mode 100644 Java-Knight/src/main/java/org/project/entity/players/Wizard.java create mode 100644 Java-Knight/src/main/java/org/project/item/armors/AssassinMask.java create mode 100644 Java-Knight/src/main/java/org/project/item/armors/WizardRobe.java create mode 100644 Java-Knight/src/main/java/org/project/item/consumables/GreatFlask.java create mode 100644 Java-Knight/src/main/java/org/project/item/consumables/HealthFlask.java create mode 100644 Java-Knight/src/main/java/org/project/item/consumables/ManaFlask.java create mode 100644 Java-Knight/src/main/java/org/project/item/weapons/BoneDagger.java create mode 100644 Java-Knight/src/main/java/org/project/item/weapons/Dagger.java create mode 100644 Java-Knight/src/main/java/org/project/item/weapons/DragonClaw.java create mode 100644 Java-Knight/src/main/java/org/project/item/weapons/Rapier.java create mode 100644 Java-Knight/src/main/java/org/project/item/weapons/ToothedHook.java create mode 100644 Java-Knight/src/main/java/org/project/item/weapons/Wand.java create mode 100644 Java-Knight/src/main/java/org/project/location/AnsiColors.java create mode 100644 Java-Knight/src/main/java/org/project/location/LocationManager.java create mode 100644 Java-Knight/src/main/java/org/project/location/NarrativeConsole.java create mode 100644 Java-Knight/target/classes/org/project/Main.class create mode 100644 Java-Knight/target/classes/org/project/entity/Entity.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Dragon.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Enemy.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Goblin.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class create mode 100644 Java-Knight/target/classes/org/project/entity/enemies/Vampire.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/Assassin.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/ICombatActions.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/Knight.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/Player.class create mode 100644 Java-Knight/target/classes/org/project/entity/players/Wizard.class create mode 100644 Java-Knight/target/classes/org/project/item/Item.class create mode 100644 Java-Knight/target/classes/org/project/item/armors/Armor.class create mode 100644 Java-Knight/target/classes/org/project/item/armors/AssassinMask.class create mode 100644 Java-Knight/target/classes/org/project/item/armors/KnightArmor.class create mode 100644 Java-Knight/target/classes/org/project/item/armors/WizardRobe.class create mode 100644 Java-Knight/target/classes/org/project/item/consumables/Consumable.class create mode 100644 Java-Knight/target/classes/org/project/item/consumables/Flask.class create mode 100644 Java-Knight/target/classes/org/project/item/consumables/GreatFlask.class create mode 100644 Java-Knight/target/classes/org/project/item/consumables/HealthFlask.class create mode 100644 Java-Knight/target/classes/org/project/item/consumables/ManaFlask.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/BoneDagger.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/Dagger.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/DragonClaw.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/Rapier.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/Sword.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/ToothedHook.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/Wand.class create mode 100644 Java-Knight/target/classes/org/project/item/weapons/Weapon.class create mode 100644 Java-Knight/target/classes/org/project/location/AnsiColors.class create mode 100644 Java-Knight/target/classes/org/project/location/Location.class create mode 100644 Java-Knight/target/classes/org/project/location/LocationManager.class create mode 100644 Java-Knight/target/classes/org/project/location/NarrativeConsole.class diff --git a/Java-Knight/src/main/java/org/project/Main.java b/Java-Knight/src/main/java/org/project/Main.java index 6bde20e..977d988 100644 --- a/Java-Knight/src/main/java/org/project/Main.java +++ b/Java-Knight/src/main/java/org/project/Main.java @@ -1,15 +1,338 @@ package org.project; -import org.project.location.Location; +import org.project.entity.players.*; +import org.project.entity.enemies.*; +import org.project.location.*; +import org.project.item.weapons.*; +import org.project.item.consumables.*; +import org.project.item.armors.*; import java.util.ArrayList; import java.util.List; +import java.util.Random; +import java.util.Scanner; public class Main { - public static void main(String[] args) { - // TODO: ADD LOCATIONS TO YOUR GAME - List locations = new ArrayList<>(); + private static Scanner scanner = new Scanner(System.in); + private static Random random = new Random(); - // TODO: IMPLEMENT GAMEPLAY + private static Player player; + + //Collected keys + private static boolean hasGoblinKey = false; + private static boolean hasSkeletonKey = false; + private static boolean hasVampireKey = false; + + private static boolean castleUnlocked = false; + + public static void main(String[] args) { + System.out.println("⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️"); + NarrativeConsole.printNormal(" JAVA KNIGHT - THE DRAGON'S CURSE"); + System.out.println("⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️⚔️"); + NarrativeConsole.printNormal("\nFor centuries, the land of Javanest lived in peace..."); + NarrativeConsole.printNormal("Until a magical Dragon attacked, plunging the realm into darkness!"); + NarrativeConsole.printNormal("You are the last hope. Gather the 3 keys and slay the Dragon!\n"); + + //Choosing a role + createPlayer(); + + gameLoop(); + } + + private static void createPlayer() { + System.out.println("=".repeat(20)); + System.out.println("CHOOSE YOUR HERO:"); + System.out.println("1. Knight ⚔️ - High damage, strong armor"); + System.out.println("2. Wizard 🧙‍♂️ - High HP, healing spells"); + System.out.println("3. Assassin 🗡️ - High mana, critical strikes"); + System.out.print("\nEnter choice (1-3): "); + + int choice = getIntInput(); + scanner.nextLine(); + + System.out.print("Enter your hero's name: "); + String name = scanner.nextLine(); + + switch (choice) { + case 1: + player = new Knight(name); + break; + case 2: + player = new Wizard(name); + break; + case 3: + player = new Assassin(name); + break; + default: + System.out.println("Invalid choice! Defaulting to Knight."); + player = new Knight(name); + } + + System.out.println("\n✨ " + player.getName() + " the " + + player.getClass().getSimpleName() + " has entered Javanest!"); + NarrativeConsole.printHeal("💚 HP: " + player.getHp() + "/" + player.getMaxHP()); + NarrativeConsole.printMana("💙 MP: " + player.getMp() + "/" + player.getMaxMP()); + System.out.println("\nPress Enter to begin your journey..."); + scanner.nextLine(); + } + + private static void gameLoop() { + boolean gameRunning = true; + boolean firstLocation = true; + + while (gameRunning && player.isAlive()) { + //Entering a new location + if (!firstLocation) { + System.out.println("\n" + "=".repeat(30)); + System.out.println("You move to a new location..."); + } + firstLocation = false; + + Enemy currentEnemy = spawnRandomEnemy(); + NarrativeConsole.printWarning("\n⭕⭕⭕ A " + + currentEnemy.getName(currentEnemy).toUpperCase() + " appears before you! ⭕⭕⭕"); + NarrativeConsole.printWarning("❤️ " + currentEnemy.getName(currentEnemy) + " HP: " + + currentEnemy.getHp() + "/" + currentEnemy.getMaxHP()); + + //Pre-battle menu + boolean locationExited = false; + + while (!locationExited && player.isAlive() && gameRunning) { + displayMainMenu(); + int choice = getIntInput(); + + if (choice == 1) { + //Option 1: Starting the battle + boolean victory = startBattle(currentEnemy); + + if (victory) { + handleVictory(currentEnemy); + locationExited = true; //Moving on the next location + } else { + gameRunning = false; //Player's death + } + + } else if (choice == 2) { + //Option 2: Move to another location1 + System.out.println("\n🚶 You flee to another location..."); + currentEnemy = spawnRandomEnemy(); + NarrativeConsole.printWarning("⭕ A " + currentEnemy.getName(currentEnemy) + + " appears in this new location!"); + + } else if (choice == 3 && castleUnlocked) { + //Option 3: Going to the castle and fight the dragon (only with 3 keys) + System.out.println("\n🏰🏰🏰 YOU STAND BEFORE THE DRAGON'S CASTLE! 🏰🏰🏰"); + System.out.println("The gates slowly open... A massive shadow emerges...\n"); + + boolean victory = startBattle(new Dragon()); + if (victory) { + System.out.println("\n🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉"); + NarrativeConsole.printSuccess(" THE DRAGON IS DEFEATED! YOU SAVED JAVANEST!"); + System.out.println("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉"); + gameRunning = false; + } else { + NarrativeConsole.printError("\n💀 The Dragon's flames consume you... GAME OVER!"); + gameRunning = false; + } + break; + } + + //Checking the condition for opening the castle + if (hasAllKeys() && !castleUnlocked) { + castleUnlocked = true; + System.out.println("\n🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑"); + NarrativeConsole.printSuccess(" YOU HAVE COLLECTED ALL 3 KEYS!"); + NarrativeConsole.printSuccess("🏰 THE PATH TO THE DRAGON'S CASTLE IS NOW OPEN! 🏰"); + System.out.println("🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑🔑"); + } + + displayKeyProgress(); + + //End game + if (!player.isAlive()) { + NarrativeConsole.printError("\n💀💀💀 GAME OVER! 💀💀💀"); + NarrativeConsole.printError("Your journey ends here. The curse of Javanest remains unbroken..."); + } + } + } + } + + private static void displayMainMenu() { + System.out.println("\n" + "-".repeat(30)); + System.out.println("WHAT WILL YOU DO?"); + System.out.println("1. ⚔️ FIGHT the enemy"); + System.out.println("2. 🚶 MOVE to another location"); + + if (castleUnlocked) { + System.out.println("3. 🏰 GO TO THE CASTLE (Fight the Dragon!)"); + } + System.out.print("\nChoose: "); + } + + private static boolean startBattle(Enemy enemy) { + System.out.println("\n" + "🔥".repeat(30)); + System.out.println(" BATTLE BEGINS!"); + System.out.println("🔥".repeat(30)); + + while (player.isAlive() && enemy.isAlive()) { + displayBattleStatus(enemy); + + playerTurn(enemy); + if (!enemy.isAlive()) { + break; + } + + enemyTurn(enemy); + } + + return player.isAlive(); + } + + private static void playerTurn(Enemy enemy) { + System.out.println("\n" + "-".repeat(30)); + System.out.println("YOUR TURN"); + System.out.println("1. ⚔️ Light Attack (0 Mana)"); + System.out.println("2. 💥 Heavy Attack (-8 Mana)"); + System.out.println("3. 🛡️ Defend (-6 Mana)"); + System.out.println("4. 💚 Heal (-12 Mana)"); + System.out.println("5. ⭐ Special Ability (-15 Mana)"); + System.out.print("Choose action: "); + + int choice = getIntInput(); + + switch (choice) { + case 1: + player.lightAttack(enemy); + break; + case 2: + player.heavyAttack(enemy); + break; + case 3: + player.defend(); + break; + case 4: + player.heal(12); + break; + case 5: + player.specialAbility(enemy); + break; + default: + NarrativeConsole.printWarning("❌ Invalid choice! You hesitate and lose your turn!"); + } + + //Checking the death of enemy + if (!enemy.isAlive()) { + NarrativeConsole.printSuccess("\n💀 " + + enemy.getName(enemy).toUpperCase() + " HAS BEEN DEFEATED! 💀"); + } + } + + private static void enemyTurn(Enemy enemy) { + System.out.println("\n" + "-".repeat(30)); + System.out.println("ENEMY TURN"); + enemy.attack(player); + } + + private static void displayBattleStatus(Enemy enemy) { + System.out.println("\n" + "═".repeat(45)); + System.out.printf("❤️ %s: %d/%d HP | 💙 Mana: %d/%d%n", + player.getName(), player.getHp(), player.getMaxHP(), + player.getMp(), player.getMaxMP()); + System.out.printf("👾 %s: %d/%d HP%n", + enemy.getName(enemy), enemy.getHp(), enemy.getMaxHP()); + System.out.println("═".repeat(45)); + } + + private static Enemy spawnRandomEnemy() { + int roll = random.nextInt(3); // 0, 1, 2 + + switch (roll) { + case 0: + return new Goblin(); + case 1: + return new Skeleton(); + default: + return new Vampire(); + } + } + + private static void handleVictory(Enemy defeatedEnemy) { + NarrativeConsole.printSuccess("\n✨✨✨ VICTORY! ✨✨✨"); + NarrativeConsole.printSuccess(defeatedEnemy.getName(defeatedEnemy).toUpperCase() + + " has been defeated!"); + + //Getting Higher Max HP and MP + player.setMaxHP(player.getMaxHP() + getXpReward(defeatedEnemy)/5); + player.setMaxMP(player.getMaxMP() + getXpReward(defeatedEnemy)/5); + + //Full HP and Mana Recovery (Post-Combat Recovery) + player.setHp(player.getMaxHP()); + player.setMp(player.getMaxMP()); + NarrativeConsole.printHeal("💚 HP and Mana fully restored in higher levels!"); + + //Key Drop (20% chance) + attemptKeyDrop(defeatedEnemy); + } + + private static int getXpReward(Enemy enemy) { + if (enemy instanceof Goblin) return 50; + if (enemy instanceof Skeleton) return 65; + if (enemy instanceof Vampire) return 85; + if (enemy instanceof Dragon) return 300; + return 40; + } + + private static void attemptKeyDrop(Enemy enemy) { + //Checking if we already have this key or not + if (enemy instanceof Goblin && hasGoblinKey) { + return; + } + if (enemy instanceof Skeleton && hasSkeletonKey) { + return; + } + if (enemy instanceof Vampire && hasVampireKey) { + return; + } + + //Dropping the key (20% Chance) + int dropChance = random.nextInt(100); + if (dropChance > 80) { + if (enemy instanceof Goblin) { + hasGoblinKey = true; + NarrativeConsole.printSuccess("\n🔑🔑🔑 YOU FOUND THE GOBLIN KEY! (1/3) 🔑🔑🔑"); + } else if (enemy instanceof Skeleton) { + hasSkeletonKey = true; + NarrativeConsole.printSuccess("\n🔑🔑🔑 YOU FOUND THE SKELETON KEY! (2/3) 🔑🔑🔑"); + } else if (enemy instanceof Vampire) { + hasVampireKey = true; + NarrativeConsole.printSuccess("\n🔑🔑🔑 YOU FOUND THE VAMPIRE KEY! (3/3) 🔑🔑🔑"); + } + } else { + System.out.println("🔑 No key dropped this time... Keep fighting!"); + } + } + + private static boolean hasAllKeys() { + return hasGoblinKey && hasSkeletonKey && hasVampireKey; + } + + private static void displayKeyProgress() { + System.out.println("\n" + "-".repeat(40)); + System.out.println("KEY PROGRESS:"); + System.out.println(" " + (hasGoblinKey ? "👹" : "⬜") + " Goblin Key " + (hasGoblinKey ? "(Obtained)" : "(Missing)")); + System.out.println(" " + (hasSkeletonKey ? "💀" : "⬜") + " Skeleton Key " + (hasSkeletonKey ? "(Obtained)" : "(Missing)")); + System.out.println(" " + (hasVampireKey ? "🦇" : "⬜") + " Vampire Key " + (hasVampireKey ? "(Obtained)" : "(Missing)")); + System.out.println("-".repeat(40)); + } + + private static int getIntInput() { + while (true) { + try { + int input = Integer.parseInt(scanner.nextLine().trim()); + return input; + } catch (NumberFormatException e) { + NarrativeConsole.printWarning("❌ Invalid input! Please enter a number: "); + } + } } } \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/entity/Entity.java b/Java-Knight/src/main/java/org/project/entity/Entity.java index 2a060f9..218b7cb 100644 --- a/Java-Knight/src/main/java/org/project/entity/Entity.java +++ b/Java-Knight/src/main/java/org/project/entity/Entity.java @@ -1,7 +1,7 @@ + package org.project.entity; public interface Entity { - void attack(Entity target); void defend(); @@ -15,7 +15,7 @@ public interface Entity { int getMaxMP(); - /* - TODO: ADD OTHER REQUIRED AND BONUS METHODS - */ -} + int getHp(); + + int getMp(); +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java b/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java new file mode 100644 index 0000000..ea8a32c --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java @@ -0,0 +1,78 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; +import org.project.entity.players.Player; +import org.project.item.weapons.BoneDagger; +import org.project.item.weapons.DragonClaw; +import org.project.location.NarrativeConsole; + +import java.util.Random; + +public class Dragon extends Enemy { + private Random random; + + public Dragon() { + super("Dragon", 150, 100, new DragonClaw()); + this.random = new Random(); + } + + @Override + public void attack(Entity target) { + int chance = random.nextInt(100); + + if (chance > 40) { //Fire breath chance 60% + //Fire breath attack + fireBreath(target); + } else { + //Normal claw attack + normalAttack(target); + } + } + + private void normalAttack(Entity target) { + int damage = 25; + + if (target instanceof Player) { + Player player = (Player) target; + if (player.isDefending()) { + NarrativeConsole.printCombat("🐉 Dragon ignores your pathetic shield!"); + //Complete damage is done + } + } + + target.takeDamage(damage); + NarrativeConsole.printCombat("🐉 Dragon strikes with its claw!"); + NarrativeConsole.printDamage("💥 " + damage + " damage dealt to " + getName(target) + "!"); + } + + private void fireBreath(Entity target) { + int damage = 45; + + NarrativeConsole.printSpecial("🐉🐉🐉 DRAGON BREATHES FIRE! 🐉🐉🐉"); + NarrativeConsole.printSpecial("🔥🔥🔥 FIERY BREATH ENGULFS EVERYTHING! 🔥🔥🔥"); + + if (target instanceof Player) { + Player player = (Player) target; + if (player.isDefending()) { + NarrativeConsole.printSpecial("🛡️ Your shield MELTS under the dragon's breath!"); + NarrativeConsole.printSpecial("🔥 Defense is USELESS against this attack!"); + player.setDefending(false); //The defense is invalid + } + } + + target.takeDamage(damage); + NarrativeConsole.printDamage("💥 " + getName(target) + " takes " + damage + " MASSIVE damage!"); + } + + @Override + public int getMaxHP() { + return 150; + } + + @Override + public int getMaxMP() { + return 100; + } + + +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java index e019acb..cbc8463 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java @@ -1,29 +1,100 @@ package org.project.entity.enemies; +import org.project.entity.Entity; +import org.project.item.weapons.Sword; import org.project.item.weapons.Weapon; +import org.project.location.NarrativeConsole; -// TODO: UPDATE IMPLEMENTATION -public abstract class Enemy { +public abstract class Enemy implements Entity { Weapon weapon; private int hp; private int mp; + private boolean isStunned = false; + private int stunTurns = 0; + private String name; + private final int defendCost = 6; + private boolean isDefending = false; + private final int healCost = 12; - public Enemy(int hp, int mp, Weapon weapon) { + public Enemy(String name, int hp, int mp, Weapon weapon) { + this.name = name; this.hp = hp; this.mp = mp; - this.weapon = weapon; } + public abstract void attack(Entity target); + @Override public void takeDamage(int damage) { hp -= damage; } + public void setStunned(boolean stunned) { + this.isStunned = stunned; + if (stunned) { + this.stunTurns = 1; //Stunned in one turn + } + } + + //Decreasing the stunned turns + public void decrementStun() { + if (isStunned) { + stunTurns--; + if (stunTurns <= 0) { + isStunned = false; + } + } + } + + @Override + public void fillMana(int mana) { + int oldMana = mp; + mp += mana; + + mp += mana; + if (mp > getMaxMP()) { + mp = getMaxMP(); + } + } + + @Override + public void defend() { + //checking mana + + //reducing mana + mp -= defendCost; + + //activating defense mode + isDefending = true; + } + + public boolean isStunned() { + return isStunned; + } + public int getHp() { return hp; } + @Override + public void heal(int health) { + //checking mana + if (mp < healCost) { + NarrativeConsole.printWarning("❌ Not enough mana to heal!"); + return; + } + + //reducing mana + mp -= healCost; + + //increasing health + hp += health; + if (hp > getMaxHP()) { + hp = getMaxHP(); + } + } + public int getMp() { return mp; } @@ -31,4 +102,25 @@ public abstract class Enemy { public Weapon getWeapon() { return weapon; } + + public String getName(Entity target) { + if (target instanceof Skeleton) { + return "Skeleton"; + } + else if (target instanceof Goblin) { + return "Goblin"; + } + else if (target instanceof Vampire) { + return "Vampire"; + } + return "Dragon"; + } + + public void setHp(int newHp) { + hp = newHp; + } + + public boolean isAlive() { + return (getHp() > 0); + } } diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java new file mode 100644 index 0000000..0b4b65a --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java @@ -0,0 +1,50 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; +import org.project.item.weapons.BoneDagger; +import org.project.item.weapons.ToothedHook; +import org.project.location.NarrativeConsole; + +import java.util.Random; + +public class Goblin extends Enemy { + private Random random; + + public Goblin() { + super("Goblin", 30, 20, new ToothedHook()); + this.random = new Random(); + } + + @Override + public void attack(Entity target) { + int damage = 10; + boolean isCritical = false; + + //Checking Critical Chance + int chance = random.nextInt(100); + if (chance > 30) { //Critical Chance = 70% + damage *= 2; + isCritical = true; + } + + target.takeDamage(damage); + + if (isCritical) { + NarrativeConsole.printSpecial("💣 Goblin used CRITICAL STRIKE! "); + NarrativeConsole.printDamage("💥 Goblin dealt " + damage + " damage to " + getName(target) + "!"); + } else { + NarrativeConsole.printCombat("👹 Goblin attacked " + getName(target) + "!"); + NarrativeConsole.printDamage("💥 Goblin dealt " + damage + " damage to " + getName(target) + "!"); + } + } + + @Override + public int getMaxHP() { + return 30; + } + + @Override + public int getMaxMP() { + return 20; + } +} diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java b/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java index 8a6a555..148341b 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java @@ -1,6 +1,69 @@ package org.project.entity.enemies; -// TODO: UPDATE IMPLEMENTATION -public class Skeleton { - // TODO: DESIGN ENEMY AND IMPLEMENT THE CONSTRUCTOR -} +import org.project.entity.Entity; +import org.project.item.weapons.BoneDagger; +import org.project.location.NarrativeConsole; + +public class Skeleton extends Enemy { + private boolean hasResurrected = false; + + public Skeleton() { + super("Skeleton", 45, 25, new BoneDagger()); + } + + @Override + public void attack(Entity target) { + int damage = 10; + + target.takeDamage(damage); + + NarrativeConsole.printWarning("💀 Skeleton attacked " + getName(target) + "!"); + NarrativeConsole.printDamage("💥 Skeleton dealt " + damage + " damage to " + + getName(target) + "!"); + } + + @Override + public void takeDamage(int damage) { + int newHp = getHp() - damage; + + if (newHp <= 0 && !hasResurrected) { + //Resurrecting + int resurrectedHp = getMaxHP() * 50 / 100; + setHp(resurrectedHp); + hasResurrected = true; + + NarrativeConsole.printSuccess("💀 Skeleton has been defeated..."); + NarrativeConsole.printSpecial("☠️ But Skeleton rises again! Resurrected with " + + resurrectedHp + " HP!"); + return; + } + + setHp(newHp); + if (getHp() < 0) setHp(0); + + NarrativeConsole.printDamage("💥 Skeleton took " + damage + " damage! HP: " + + getHp() + "/" + getMaxHP()); + + if (getHp() <= 0) { + NarrativeConsole.printSuccess("☠️ Skeleton has been destroyed for good!"); + } + } + + @Override + public int getMaxHP() { + return 45; + } + + @Override + public int getMaxMP() { + return 25; + } + + public boolean hasResurrected() { + return hasResurrected; + } + + public void setHasResurrected(boolean hasResurrected) { + this.hasResurrected = hasResurrected; + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java new file mode 100644 index 0000000..59e4457 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java @@ -0,0 +1,45 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; +import org.project.item.weapons.ToothedHook; +import org.project.location.NarrativeConsole; + +public class Vampire extends Enemy { + public Vampire() { + super("Vampire", 50, 40, new ToothedHook()); + } + + @Override + public void attack(Entity target) { + int damage = 12; + + target.takeDamage(damage); + + //Adding to Vampire HP + int healAmount = damage * 30 / 100; + int newHp = getHp() + healAmount; + if (newHp > getMaxHP()) { + newHp = getMaxHP(); + } + setHp(newHp); + + NarrativeConsole.printCombat("🦇 Vampire attacks " + getName(target) + "!"); + NarrativeConsole.printDamage("💥 Dealt " + damage + " damage!"); + NarrativeConsole.printSpecial("🩸 Life steal: Vampire drains " + healAmount + " HP and regenerates!"); + NarrativeConsole.printSpecial("💚 Vampire HP: " + getHp() + "/" + getMaxHP()); + + if (getHp() == getMaxHP()) { + NarrativeConsole.printInfo("🦇 Vampire is fully satiated!"); + } + } + + @Override + public int getMaxHP() { + return 50; + } + + @Override + public int getMaxMP() { + return 40; + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/entity/players/Assassin.java b/Java-Knight/src/main/java/org/project/entity/players/Assassin.java new file mode 100644 index 0000000..708355d --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/players/Assassin.java @@ -0,0 +1,95 @@ +package org.project.entity.players; + +import org.project.entity.Entity; +import org.project.entity.enemies.Enemy; +import org.project.item.armors.Armor; +import org.project.item.armors.AssassinMask; +import org.project.item.weapons.Dagger; +import org.project.item.weapons.Weapon; +import org.project.location.NarrativeConsole; + +public class Assassin extends Player implements Entity, ICombatActions { + public Assassin(String name) { + super(name, 45, 60, new Dagger(), new AssassinMask()); + setHp(getMaxHP()); + setMp(getMaxMP()); + } + + @Override + public void specialAbility(Enemy target) { + //Checking if the mana is enough of not + if (getMp() < 15) { + NarrativeConsole.printWarning("❌ Not enough mana for Devastating Spell!"); + return; + } + + //Consuming mana + setMp(getMp()-15); + + setInvisible(true); + setNextAttackCritical(true); + + NarrativeConsole.printSpecial("💜 " + getName() + " turns INVISIBLE!"); + NarrativeConsole.printSpecial("⚡ Next attack will be CRITICAL (2x damage)!"); + NarrativeConsole.printSpecial("🛡️ Will dodge the next incoming attack completely!"); + NarrativeConsole.printMana("💙 Mana left: " + getMp()); + } + + public void lightAttack(Enemy target) { + int damage = 10; + + //Critical Action (if enabled) + if (isNextAttackCritical()) { + damage *= 2; + NarrativeConsole.printSpecial("⚡ CRITICAL HIT! Damage doubled to " + damage + "!"); + setNextAttackCritical(false); + } + + target.takeDamage(damage); + NarrativeConsole.printDamage("⚔️ " + getName() + " used Light Attack! Dealt " + damage + " damage."); + } + + @Override + public void heavyAttack(Enemy target) { + if (getMp() < 8) { + NarrativeConsole.printWarning("❌ Not enough mana for Heavy Attack!"); + return; + } + setMp(getMp() - 8); + int damage = 20; + + //Critical Action (if enabled) + if (isNextAttackCritical()) { + damage *= 2; + NarrativeConsole.printSpecial("⚡ CRITICAL HIT! Damage doubled to " + damage + "!"); + setNextAttackCritical(false); + } + + target.takeDamage(damage); + NarrativeConsole.printDamage("💥 " + getName() + " used Heavy Attack! Dealt " + damage + " damage."); + } + + @Override + public void defend() { + if (getMp() < 6) { + NarrativeConsole.printWarning("❌ Not enough mana to defend!"); + return; + } + setMp(getMp() - 6); + setDefending(true); + NarrativeConsole.printCombat("🛡️ " + getName() + " is defending! Next attack will be halved."); + } + + @Override + public void heal() { + if (getMp() < 12) { + NarrativeConsole.printWarning("❌ Not enough mana to heal!"); + return; + } + setMp(getMp() - 12); + int healAmount = 20; + setHp(getHp() + healAmount); + if (getHp() > getMaxHP()) setHp(getMaxHP()); + NarrativeConsole.printHeal("💚 " + getName() + " healed " + healAmount + " HP!"); + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java b/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java new file mode 100644 index 0000000..8d1ea8e --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java @@ -0,0 +1,19 @@ +package org.project.entity.players; + +import org.project.entity.Entity; +import org.project.entity.enemies.Enemy; + +import java.util.ArrayList; + +public interface ICombatActions { + + void lightAttack(Enemy target); + + void heavyAttack(Enemy target); + + void defend(); + + void heal(); + + void specialAbility(Enemy target); +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/entity/players/Knight.java b/Java-Knight/src/main/java/org/project/entity/players/Knight.java index 14d8fa2..0b78c19 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Knight.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Knight.java @@ -1,6 +1,81 @@ package org.project.entity.players; -// TODO: UPDATE IMPLEMENTATION -public class Knight { - // TODO: DESIGN KNIGHT'S WEAPON AND ARMOR AND IMPLEMENT THE CONSTRUCTOR +import org.project.entity.Entity; +import org.project.entity.enemies.Enemy; +import org.project.item.armors.Armor; +import org.project.item.armors.KnightArmor; +import org.project.item.weapons.Sword; +import org.project.item.weapons.Weapon; +import org.project.location.NarrativeConsole; + +import java.util.ArrayList; + + +public class Knight extends Player implements ICombatActions { + public Knight(String name) { + super(name, 45, 45, new Sword(), new KnightArmor()); + setHp(getMaxHP()); + setMp(getMaxMP()); + } + + @Override + public void specialAbility(Enemy target) { + //Checking if the mana is enough of not + if (getMp() < 15) { + NarrativeConsole.printWarning("❌ Mana is not enough for Shield Bash!"); + return; + } + + //Consuming mana + setMp(getMp()-15); + + //Stunning the enemies + if (getWeapon() instanceof Sword) { + ((Sword) getWeapon()).uniqueAbility(target); + } + + NarrativeConsole.printSpecial("💥 Shield Bash! Enemy is stunned!"); + } + + public void lightAttack(Enemy target) { + int damage = 10; + target.takeDamage(damage); + NarrativeConsole.printCombat("⚔️ " + getName() + " used Light Attack! Dealt " + damage + " damage."); + } + + @Override + public void heavyAttack(Enemy target) { + if (getMp() < 8) { + NarrativeConsole.printWarning("❌ Mana is not enough for Heavy Attack!"); + return; + } + setMp(getMp() - 8); + int damage = 20; + target.takeDamage(damage); + NarrativeConsole.printDamage("💥 " + getName() + " used Heavy Attack! Dealt " + damage + " damage."); + } + + @Override + public void defend() { + if (getMp() < 6) { + NarrativeConsole.printWarning("❌ Not enough mana to defend!"); + return; + } + setMp(getMp() - 6); + setDefending(true); + NarrativeConsole.printCombat("🛡️ " + getName() + " is defending! Next attack will be halved."); + } + + @Override + public void heal() { + if (getMp() < 12) { + NarrativeConsole.printWarning("❌ Not enough mana to heal!"); + return; + } + setMp(getMp() - 12); + int healAmount = 20; + setHp(getHp() + healAmount); + if (getHp() > getMaxHP()) setHp(getMaxHP()); + NarrativeConsole.printHeal("💚 " + getName() + " healed " + healAmount + " HP!"); + } } diff --git a/Java-Knight/src/main/java/org/project/entity/players/Player.java b/Java-Knight/src/main/java/org/project/entity/players/Player.java index ff5385c..b3d64ef 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Player.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Player.java @@ -1,11 +1,15 @@ package org.project.entity.players; import org.project.entity.Entity; +import org.project.entity.enemies.Enemy; import org.project.item.armors.Armor; import org.project.item.weapons.Weapon; +import org.project.location.NarrativeConsole; -// TODO: UPDATE IMPLEMENTATION -public abstract class Player { +import java.util.ArrayList; + + +public abstract class Player implements Entity { protected String name; Weapon weapon; Armor armor; @@ -13,34 +17,86 @@ public abstract class Player { private int maxHP; private int mp; private int maxMP; + private final int defendCost = 6; + private boolean isDefending = false; + private final int healCost = 12; + private boolean isInvisible = false; + private boolean nextAttackCritical = false; - public Player(String name, int hp, int mp, Weapon weapon, Armor armor) { + public Player(String name, int maxHP, int maxMP, Weapon weapon, Armor armor) { this.name = name; - this.hp = hp; - this.mp = mp; - + this.maxMP = maxMP; + this.maxHP = maxHP; this.weapon = weapon; this.armor = armor; } - @Override - public void attack(Entity target) { - target.takeDamage(weapon.getDamage()); - } + public abstract void specialAbility(Enemy enemy); + + public abstract void lightAttack(Enemy enemy); + + public abstract void heavyAttack(Enemy enemy); @Override public void defend() { - // TODO - } + //checking mana + if (mp < defendCost) { + NarrativeConsole.printWarning("❌ Not enough mana to defend!"); + return; + } + //reducing mana + mp -= defendCost; + + //activating defense mode + isDefending = true; + + NarrativeConsole.printCombat("🛡️ " + name + " raises shield, preparing to block next attack!"); + } @Override public void takeDamage(int damage) { - hp -= damage - armor.getDefense(); + int actualDamage = damage; + + //reducing damage if the player is in defend mode + if (isDefending()) { + actualDamage = damage / 2; + NarrativeConsole.printCombat("🛡️ Defense reduced damage from " + damage + " to " + actualDamage); + setDefending(false); + } + + if (armor != null && !armor.isBroke()) { + int defense = armor.getDefense(); + actualDamage -= defense; + if (actualDamage < 0) actualDamage = 0; + + armor.reduceDurability(1); + NarrativeConsole.printCombat("🛡️ Armor blocked " + defense + + " damage! Remaining durability: " + armor.getDurability()); + } + + setHp(getHp() - actualDamage); + NarrativeConsole.printDamage("💥 " + getName() + " took " + + actualDamage + " damage! HP: " + getHp()); + + if (getHp() < 0) { + setHp(0); + NarrativeConsole.printDamage("💀 " + getName() + " has been defeated!"); + } } @Override public void heal(int health) { + //checking mana + if (mp < healCost) { + NarrativeConsole.printWarning("❌ Not enough mana to heal!"); + return; + } + + //reducing mana + mp -= healCost; + + //increasing health hp += health; if (hp > maxHP) { hp = maxHP; @@ -49,12 +105,20 @@ public abstract class Player { @Override public void fillMana(int mana) { + int oldMana = mp; + mp += mana; + mp += mana; if (mp > maxMP) { mp = maxMP; } - } + if (mp == maxMP) { + NarrativeConsole.printMana("🩵 Mana is now full! (" + mp + "/" + maxMP + ")"); + } else { + NarrativeConsole.printMana("🩵 Mana increased from " + oldMana + " to " + mp); + } + } public String getName() { return name; @@ -86,4 +150,39 @@ public abstract class Player { return armor; } + public boolean isDefending() { + return isDefending; + } + + public boolean isInvisible() { return isInvisible; } + + public boolean isNextAttackCritical() { return nextAttackCritical; } + + public boolean isAlive() { + return (getHp() != 0); + } + + public void setInvisible(boolean invisible) { this.isInvisible = invisible; } + + public void setNextAttackCritical(boolean critical) { this.nextAttackCritical = critical; } + + public void setHp(int hp) { + this.hp = hp; + } + + public void setMp(int mp) { + this.mp = mp; + } + + public void setDefending(boolean defending) { + isDefending = defending; + } + + public void setMaxHP(int maxHP) { + this.maxHP = maxHP; + } + + public void setMaxMP(int maxMP) { + this.maxMP = maxMP; + } } diff --git a/Java-Knight/src/main/java/org/project/entity/players/Wizard.java b/Java-Knight/src/main/java/org/project/entity/players/Wizard.java new file mode 100644 index 0000000..69094d5 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/players/Wizard.java @@ -0,0 +1,85 @@ +package org.project.entity.players; + +import org.project.entity.Entity; +import org.project.entity.enemies.Enemy; +import org.project.item.armors.Armor; +import org.project.item.armors.AssassinMask; +import org.project.item.armors.WizardRobe; +import org.project.item.weapons.Sword; +import org.project.item.weapons.Wand; +import org.project.item.weapons.Weapon; +import org.project.location.NarrativeConsole; + +public class Wizard extends Player implements Entity,ICombatActions { + public Wizard (String name) { + super(name, 60, 45, new Wand(), new WizardRobe()); + setHp(getMaxHP()); + setMp(getMaxMP()); + } + + @Override + public void specialAbility(Enemy target) { + //Checking if the mana is enough of not + if (getMp() < 15) { + NarrativeConsole.printWarning("❌ Not enough mana for Devastating Spell!"); + return; + } + + //Consuming mana + setMp(getMp()-15); + + target.takeDamage(30); + NarrativeConsole.printSpecial("🔮 " + getName() + "used DEVASTATING SPELL Dealt" + 30 + " damage!"); + + int newHp = getHp() + 10; + if (newHp > getMaxHP()) newHp = getMaxHP(); + setHp(newHp); + + NarrativeConsole.printSpecial("💚 " + getName() + " healed " + 10 + " HP! (Now: " + + getHp() + "/" + getMaxHP() + ")"); + NarrativeConsole.printMana("💙 Mana left: " + getMp()); + } + + public void lightAttack(Enemy target) { + int damage = 10; + target.takeDamage(damage); + NarrativeConsole.printCombat("⚔️ " + getName() + " used Light Attack! Dealt " + damage + " damage."); + } + + @Override + public void heavyAttack(Enemy target) { + if (getMp() < 8) { + NarrativeConsole.printWarning("❌ Not enough mana for Heavy Attack!"); + return; + } + setMp(getMp() - 8); + int damage = 20; + target.takeDamage(damage); + NarrativeConsole.printDamage("💥 " + getName() + " used Heavy Attack! Dealt " + damage + " damage."); + } + + @Override + public void defend() { + if (getMp() < 6) { + NarrativeConsole.printWarning("❌ Not enough mana to defend!"); + return; + } + setMp(getMp() - 6); + setDefending(true); + NarrativeConsole.printCombat("🛡️ " + getName() + " is defending! Next attack will be halved."); + } + + @Override + public void heal() { + if (getMp() < 12) { + NarrativeConsole.printWarning("❌ Not enough mana to heal!"); + return; + } + setMp(getMp() - 12); + int healAmount = 20; + setHp(getHp() + healAmount); + if (getHp() > getMaxHP()) setHp(getMaxHP()); + NarrativeConsole.printHeal("💚 " + getName() + " healed " + healAmount + " HP!"); + } + +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/Item.java b/Java-Knight/src/main/java/org/project/item/Item.java index 6d6b5ad..6f0684d 100644 --- a/Java-Knight/src/main/java/org/project/item/Item.java +++ b/Java-Knight/src/main/java/org/project/item/Item.java @@ -4,8 +4,4 @@ import org.project.entity.Entity; public interface Item { void use(Entity target); - - /* - TODO: ADD OTHER REQUIRED AND BONUS METHODS - */ -} +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/armors/Armor.java b/Java-Knight/src/main/java/org/project/item/armors/Armor.java index 7ca8774..ad078d0 100644 --- a/Java-Knight/src/main/java/org/project/item/armors/Armor.java +++ b/Java-Knight/src/main/java/org/project/item/armors/Armor.java @@ -1,31 +1,55 @@ package org.project.item.armors; -// TODO: UPDATE IMPLEMENTATION -public abstract class Armor { +import org.project.entity.Entity; +import org.project.item.Item; + +public abstract class Armor implements Item { private int defense; private int maxDefense; private int durability; private int maxDurability; - - private boolean isBroke; + public boolean isBroke; public Armor(int defense, int durability) { this.defense = defense; this.durability = durability; + this.maxDefense = defense; + this.maxDurability = durability; + this.isBroke = false; } - public void checkBreak() { + public boolean checkBreak() { if (durability <= 0) { isBroke = true; defense = 0; + durability = 0; + System.out.println("Armor is broken!"); + } + return isBroke; + } + + public void repair() { + if (isBroke) { + isBroke = false; + defense = maxDefense; + durability = maxDurability; + System.out.println("🔧 Armor repaired! Defense: " + defense + ", Durability: " + durability); + } + else { + System.out.println("Armor is not broken. No need to repair."); } } - // TODO: (BONUS) UPDATE THE REPAIR METHOD - public void repair() { - isBroke = false; - defense = maxDefense; - durability = maxDurability; + public void reduceDurability(int amount) { + if (!isBroke) { + durability -= amount; + checkBreak(); + } + } + + @Override + public void use(Entity target) { + System.out.println("🛡️ " + getClass().getSimpleName() + " equipped. Defense: " + defense); } public int getDefense() { @@ -39,4 +63,8 @@ public abstract class Armor { public boolean isBroke() { return isBroke; } + + public void setDefense(int defense) { + this.defense = defense; + } } diff --git a/Java-Knight/src/main/java/org/project/item/armors/AssassinMask.java b/Java-Knight/src/main/java/org/project/item/armors/AssassinMask.java new file mode 100644 index 0000000..9fe7ae3 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/armors/AssassinMask.java @@ -0,0 +1,7 @@ +package org.project.item.armors; + +public class AssassinMask extends Armor { + public AssassinMask() { + super(4, 20); + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/armors/KnightArmor.java b/Java-Knight/src/main/java/org/project/item/armors/KnightArmor.java index eb59a46..77d79ef 100644 --- a/Java-Knight/src/main/java/org/project/item/armors/KnightArmor.java +++ b/Java-Knight/src/main/java/org/project/item/armors/KnightArmor.java @@ -1,6 +1,8 @@ package org.project.item.armors; -// TODO: UPDATE IMPLEMENTATION -public class KnightArmor { - // TODO: DESIGN ARMOR'S ATTRIBUTES IMPLEMENT THE CONSTRUCTOR +//The knight's armor +public class KnightArmor extends Armor { + public KnightArmor() { + super(5, 25); + } } \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/armors/WizardRobe.java b/Java-Knight/src/main/java/org/project/item/armors/WizardRobe.java new file mode 100644 index 0000000..14fa971 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/armors/WizardRobe.java @@ -0,0 +1,8 @@ +package org.project.item.armors; + +//The Wizard's armor +public class WizardRobe extends Armor { + public WizardRobe() { + super(3, 15); + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/consumables/Consumable.java b/Java-Knight/src/main/java/org/project/item/consumables/Consumable.java index 028e13d..81fb69d 100644 --- a/Java-Knight/src/main/java/org/project/item/consumables/Consumable.java +++ b/Java-Knight/src/main/java/org/project/item/consumables/Consumable.java @@ -1,8 +1,28 @@ package org.project.item.consumables; -// TODO: UPDATE IMPLEMENTATION -public abstract class Consumable { - /* - TODO: ADD OTHER REQUIRED AND BONUS METHODS - */ -} +import org.project.item.Item; + +public abstract class Consumable implements Item { + protected String name; + protected int healingPercent; + + public Consumable(String name) { + this.name = name; + } + + public Consumable(String name, int healingPercent) { + this(name); + this.healingPercent = healingPercent; + } + + public String getName() { + return name; + } + + public int getHealingPercent() { + return healingPercent; + } + + @Override + public abstract void use(org.project.entity.Entity target); +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/consumables/Flask.java b/Java-Knight/src/main/java/org/project/item/consumables/Flask.java index c0e7a6d..d5add2f 100644 --- a/Java-Knight/src/main/java/org/project/item/consumables/Flask.java +++ b/Java-Knight/src/main/java/org/project/item/consumables/Flask.java @@ -1,16 +1,38 @@ package org.project.item.consumables; import org.project.entity.Entity; +import org.project.location.NarrativeConsole; -// TODO: UPDATE IMPLEMENTATION -public class Flask { - /* - THIS IS AN EXAMPLE OF A CONSUMABLE DESIGN. - */ +public class Flask extends Consumable { + public Flask(String name, int healingPercent) { + super(name , healingPercent); + } - // TODO: UPDATE USE METHOD @Override public void use(Entity target) { - target.heal(target.getMaxHP() / 10); + //Checking if the target is alive + if (target == null || target.getHp() <= 0) { + NarrativeConsole.printWarning("❌ Target is dead already!"); + return; + } + + int healAmount = target.getMaxHP() * healingPercent / 100; + if (healAmount < 10) { + healAmount = 10; + } + + int oldHp = target.getHp(); + target.heal(healAmount); + int actualHeal = target.getHp() - oldHp; + + NarrativeConsole.printHeal("🧪🧪🧪 ============== 🧪🧪🧪"); + NarrativeConsole.printHeal("💚 " + getName() + " drinks the Healing Flask!"); + NarrativeConsole.printHeal("✨ Restored " + actualHeal + " HP!"); + NarrativeConsole.printHeal("💚 HP: " + target.getHp() + "/" + target.getMaxHP()); + + if (target.getHp() == target.getMaxHP()) { + NarrativeConsole.printHeal("💪 " + getName() + " is fully healed!"); + } + NarrativeConsole.printHeal("🧪🧪🧪 ============== 🧪🧪🧪"); } -} +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/consumables/GreatFlask.java b/Java-Knight/src/main/java/org/project/item/consumables/GreatFlask.java new file mode 100644 index 0000000..8ac8051 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/consumables/GreatFlask.java @@ -0,0 +1,7 @@ +package org.project.item.consumables; + +public class GreatFlask extends Flask { + public GreatFlask() { + super("Great Flask", 50); //50% healing + } +} diff --git a/Java-Knight/src/main/java/org/project/item/consumables/HealthFlask.java b/Java-Knight/src/main/java/org/project/item/consumables/HealthFlask.java new file mode 100644 index 0000000..1273ad0 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/consumables/HealthFlask.java @@ -0,0 +1,7 @@ +package org.project.item.consumables; + +public class HealthFlask extends Flask { + public HealthFlask() { + super("Health Flask",25); //25% healing + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/consumables/ManaFlask.java b/Java-Knight/src/main/java/org/project/item/consumables/ManaFlask.java new file mode 100644 index 0000000..0041f3f --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/consumables/ManaFlask.java @@ -0,0 +1,21 @@ +package org.project.item.consumables; + +import org.project.entity.Entity; +import org.project.entity.players.Player; +import org.project.location.NarrativeConsole; + +public class ManaFlask extends Flask { + public ManaFlask() { + super("Mana Flask",30); //30% mana increasing + } + + @Override + public void use(Entity target) { + if (target instanceof Player) { + Player player = (Player) target; + int manaAmount = player.getMaxMP() / 3; + player.setMp(Math.min(player.getMp() + manaAmount, player.getMaxMP())); + NarrativeConsole.printMana("💙 Restored " + manaAmount + " Mana!"); + } + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/weapons/BoneDagger.java b/Java-Knight/src/main/java/org/project/item/weapons/BoneDagger.java new file mode 100644 index 0000000..cc92cf8 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/weapons/BoneDagger.java @@ -0,0 +1,8 @@ +package org.project.item.weapons; + +//The skeleton's weapon +public class BoneDagger extends Weapon { + public BoneDagger() { + super(10, 5); + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/weapons/Dagger.java b/Java-Knight/src/main/java/org/project/item/weapons/Dagger.java new file mode 100644 index 0000000..62e5c84 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/weapons/Dagger.java @@ -0,0 +1,12 @@ +package org.project.item.weapons; + +import org.project.item.Item; + +//The assassin's weapon +public class Dagger extends Weapon { + int abilityCharge; + + public Dagger() { + super(15, 10); + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/weapons/DragonClaw.java b/Java-Knight/src/main/java/org/project/item/weapons/DragonClaw.java new file mode 100644 index 0000000..3908eae --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/weapons/DragonClaw.java @@ -0,0 +1,8 @@ +package org.project.item.weapons; + +//The dragon's weapon +public class DragonClaw extends Weapon { + public DragonClaw() { + super(25, 20); + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/weapons/Rapier.java b/Java-Knight/src/main/java/org/project/item/weapons/Rapier.java new file mode 100644 index 0000000..675ae77 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/weapons/Rapier.java @@ -0,0 +1,8 @@ +package org.project.item.weapons; + +//The vampire's weapon +public class Rapier extends Weapon { + public Rapier() { + super(20, 10); + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/weapons/Sword.java b/Java-Knight/src/main/java/org/project/item/weapons/Sword.java index 96226ee..2cbf432 100644 --- a/Java-Knight/src/main/java/org/project/item/weapons/Sword.java +++ b/Java-Knight/src/main/java/org/project/item/weapons/Sword.java @@ -1,26 +1,32 @@ package org.project.item.weapons; import org.project.entity.Entity; +import org.project.entity.enemies.Enemy; +import org.project.item.Item; import java.util.ArrayList; -// TODO: UPDATE IMPLEMENTATION -public class Sword { - /* - THIS IS AN EXAMPLE OF A WEAPON DESIGN. - */ - - int abilityCharge; +//The knight's weapon +public class Sword extends Weapon { + private int abilityCharge; public Sword() { - // TODO: DESIGN SWORD'S ATTRIBUTES IMPLEMENT THE CONSTRUCTOR + super(10, 8); + this.abilityCharge = 0; } - // TODO: (BONUS) UPDATE THE UNIQUE ABILITY - public void uniqueAbility(ArrayList targets) { + //Bonus method + public void uniqueAbility(Entity target) { abilityCharge += 2; - for (Entity target : targets) { - target.takeDamage(getDamage()); + int totalDamage = getDamage() + (abilityCharge / 2); + + target.takeDamage(totalDamage); + if (target instanceof Enemy) { + ((Enemy) target).setStunned(true); } } -} + + public int getAbilityCharge() { + return abilityCharge; + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/weapons/ToothedHook.java b/Java-Knight/src/main/java/org/project/item/weapons/ToothedHook.java new file mode 100644 index 0000000..f9ad15b --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/weapons/ToothedHook.java @@ -0,0 +1,8 @@ +package org.project.item.weapons; + +//The goblin's weapon +public class ToothedHook extends Weapon { + public ToothedHook() { + super(15, 6); + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/weapons/Wand.java b/Java-Knight/src/main/java/org/project/item/weapons/Wand.java new file mode 100644 index 0000000..4440e86 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/weapons/Wand.java @@ -0,0 +1,10 @@ +package org.project.item.weapons; + +//The wizard's weapon +public class Wand extends Weapon{ + int abilityCharge; + + public Wand() { + super(12, 6); + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/weapons/Weapon.java b/Java-Knight/src/main/java/org/project/item/weapons/Weapon.java index cb9fcf2..16b5a95 100644 --- a/Java-Knight/src/main/java/org/project/item/weapons/Weapon.java +++ b/Java-Knight/src/main/java/org/project/item/weapons/Weapon.java @@ -1,16 +1,12 @@ package org.project.item.weapons; import org.project.entity.Entity; +import org.project.item.Item; -// TODO: UPDATE IMPLEMENTATION -public abstract class Weapon { +public abstract class Weapon implements Item { private int damage; private int manaCost; - /* - TODO: ADD OTHER REQUIRED AND BONUS ATTRIBUTES - */ - public Weapon(int damage, int manaCost) { this.damage = damage; this.manaCost = manaCost; @@ -29,7 +25,11 @@ public abstract class Weapon { return manaCost; } - /* - TODO: ADD OTHER REQUIRED AND BONUS METHODS - */ + public void setDamage(int damage) { + this.damage = damage; + } + + public void setManaCost(int manaCost) { + this.manaCost = manaCost; + } } diff --git a/Java-Knight/src/main/java/org/project/location/AnsiColors.java b/Java-Knight/src/main/java/org/project/location/AnsiColors.java new file mode 100644 index 0000000..4064d6b --- /dev/null +++ b/Java-Knight/src/main/java/org/project/location/AnsiColors.java @@ -0,0 +1,30 @@ +package org.project.location; + +public class AnsiColors { + // Reset + public static final String RESET = "\u001B[0m"; + + // Regular Colors + public static final String BLACK = "\u001B[30m"; + public static final String RED = "\u001B[31m"; + public static final String GREEN = "\u001B[32m"; + public static final String YELLOW = "\u001B[33m"; + public static final String BLUE = "\u001B[34m"; + public static final String PURPLE = "\u001B[35m"; + public static final String CYAN = "\u001B[36m"; + public static final String WHITE = "\u001B[37m"; + + // Bold Colors + public static final String BOLD_RED = "\u001B[1;31m"; + public static final String BOLD_GREEN = "\u001B[1;32m"; + public static final String BOLD_YELLOW = "\u001B[1;33m"; + public static final String BOLD_BLUE = "\u001B[1;34m"; + public static final String BOLD_PURPLE = "\u001B[1;35m"; + public static final String BOLD_CYAN = "\u001B[1;36m"; + + // Background Colors + public static final String BG_RED = "\u001B[41m"; + public static final String BG_GREEN = "\u001B[42m"; + public static final String BG_YELLOW = "\u001B[43m"; + public static final String BG_BLUE = "\u001B[44m"; +} diff --git a/Java-Knight/src/main/java/org/project/location/Location.java b/Java-Knight/src/main/java/org/project/location/Location.java index b0b4b98..468d8b8 100644 --- a/Java-Knight/src/main/java/org/project/location/Location.java +++ b/Java-Knight/src/main/java/org/project/location/Location.java @@ -1,28 +1,72 @@ package org.project.location; -import org.project.entity.enemies.Enemy; - +import org.project.entity.enemies.*; import java.util.ArrayList; +import java.util.Random; public class Location { + private String name; + private String description; + private ArrayList possibleEnemies; + private Enemy currentEnemy; + private Random random; - private ArrayList enemies; - - public Location(ArrayList locations, ArrayList enemies) { - this.locations = locations; - this.enemies = enemies; + public Location(String name, String description) { + this.name = name; + this.description = description; + this.possibleEnemies = new ArrayList<>(); + this.random = new Random(); } + //Adding enemy to location + public void addEnemy(Enemy enemy) { + possibleEnemies.add(enemy); + } + + //Spawning a random enemy from among the enemies in this location + public void spawnRandomEnemy() { + if (possibleEnemies.isEmpty()) { + //If no enemy was defined + addDefaultEnemies(); + } + + int index = random.nextInt(possibleEnemies.size()); + currentEnemy = copyEnemy(possibleEnemies.get(index)); + } + + private void addDefaultEnemies() { + possibleEnemies.add(new Goblin()); + possibleEnemies.add(new Skeleton()); + possibleEnemies.add(new Vampire()); + } + + //Copying the enemy to have a new instance each time + private Enemy copyEnemy(Enemy original) { + if (original instanceof Goblin) return new Goblin(); + if (original instanceof Skeleton) return new Skeleton(); + if (original instanceof Vampire) return new Vampire(); + return new Goblin(); + } + + public String getName() { return name; } - public ArrayList getLocations() { - return locations; + public String getDescription() { + return description; } - public ArrayList getEnemies() { - return enemies; + public Enemy getCurrentEnemy() { + return currentEnemy; } -} + + public void setCurrentEnemy(Enemy enemy) { + this.currentEnemy = enemy; + } + + public boolean hasEnemy() { + return currentEnemy != null && currentEnemy.isAlive(); + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/location/LocationManager.java b/Java-Knight/src/main/java/org/project/location/LocationManager.java new file mode 100644 index 0000000..ec9c572 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/location/LocationManager.java @@ -0,0 +1,66 @@ +package org.project.location; + +import org.project.entity.enemies.*; +import java.util.ArrayList; +import java.util.Random; + +public class LocationManager { + + private ArrayList locations; + private Location currentLocation; + private Random random; + + public LocationManager() { + locations = new ArrayList<>(); + random = new Random(); + createLocations(); + } + + private void createLocations() { + //Creating different game locations + Location forest = new Location("Dark Forest", "A mysterious forest filled with dangerous creatures"); + forest.addEnemy(new Goblin()); + forest.addEnemy(new Skeleton()); + + Location crypt = new Location("Ancient Crypt", "An old crypt where skeletons roam"); + crypt.addEnemy(new Skeleton()); + crypt.addEnemy(new Vampire()); + + Location castleGate = new Location("Castle Gate", "The entrance to the Dragon's castle"); + castleGate.addEnemy(new Goblin()); + castleGate.addEnemy(new Vampire()); + + locations.add(forest); + locations.add(crypt); + locations.add(castleGate); + } + + public void moveToRandomLocation() { + int index = random.nextInt(locations.size()); + currentLocation = locations.get(index); + currentLocation.spawnRandomEnemy(); + } + + public void moveToLocation(int index) { + if (index >= 0 && index < locations.size()) { + currentLocation = locations.get(index); + currentLocation.spawnRandomEnemy(); + } + } + + public Location getCurrentLocation() { + return currentLocation; + } + + public void displayLocations() { + NarrativeConsole.printInfo("\n=== Available Locations ==="); + for (int i = 0; i < locations.size(); i++) { + NarrativeConsole.printInfo((i + 1) + ". " + locations.get(i).getName()); + NarrativeConsole.printInfo(" " + locations.get(i).getDescription()); + } + } + + public ArrayList getLocations() { + return locations; + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/location/NarrativeConsole.java b/Java-Knight/src/main/java/org/project/location/NarrativeConsole.java new file mode 100644 index 0000000..d93f46e --- /dev/null +++ b/Java-Knight/src/main/java/org/project/location/NarrativeConsole.java @@ -0,0 +1,53 @@ +package org.project.location; + +public class NarrativeConsole { + //Normal + public static void printNormal(String message) { + System.out.println(AnsiColors.WHITE + "⭐ " + message + AnsiColors.RESET); + } + + //Damage + public static void printDamage(String message) { + System.out.println(AnsiColors.RED + "💥 " + message + AnsiColors.RESET); + } + + //Heal + public static void printHeal(String message) { + System.out.println(AnsiColors.GREEN + "💚 " + message + AnsiColors.RESET); + } + + //Mana + public static void printMana(String message) { + System.out.println(AnsiColors.BLUE + "💙 " + message + AnsiColors.RESET); + } + + //Warning + public static void printWarning(String message) { + System.out.println(AnsiColors.YELLOW + "⚠️ " + message + AnsiColors.RESET); + } + + //Success + public static void printSuccess(String message) { + System.out.println(AnsiColors.BOLD_GREEN + "✨ " + message + AnsiColors.RESET); + } + + //Info + public static void printInfo(String message) { + System.out.println(AnsiColors.CYAN + "ℹ️ " + message + AnsiColors.RESET); + } + + //Error + public static void printError(String message) { + System.out.println(AnsiColors.BOLD_RED + "❌ " + message + AnsiColors.RESET); + } + + //Combat + public static void printCombat(String message) { + System.out.println(AnsiColors.PURPLE + "⚔️ " + message + AnsiColors.RESET); + } + + //Special + public static void printSpecial(String message) { + System.out.println(AnsiColors.BOLD_YELLOW + "⭐ " + message + AnsiColors.RESET); + } +} \ No newline at end of file diff --git a/Java-Knight/target/classes/org/project/Main.class b/Java-Knight/target/classes/org/project/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..13fd6e9f4167e654dd9fccfec6ea892ada90ebec GIT binary patch literal 10993 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 literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/Entity.class b/Java-Knight/target/classes/org/project/entity/Entity.class new file mode 100644 index 0000000000000000000000000000000000000000..ba5f0fbaf206a25a45ab719280e224ba3c17f59f GIT binary patch literal 273 zcmX|*OOC=Y5Jby-k`RXPjvK%RUjjz3hz1FXeFIGhm;^-z!PQuB01kzw9U?Y%X=I)lN=YHKbmR%0C}zoHwh`TCi=sCF29X4Hna$20M#6BJUGfe8CPs?Q rkIdM4cnVS%c_0wCIy^W>A3?!J$*^P-KSkau*)G{}luKQCE9m_Lkt;NY literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Dragon.class b/Java-Knight/target/classes/org/project/entity/enemies/Dragon.class new file mode 100644 index 0000000000000000000000000000000000000000..41222e4588d0e80b77b6c3ba665bdf89cad82308 GIT binary patch literal 2747 zcmaJ@+fy4=82=rTk~C}~#NH6Z1EnQEA=+AcNpD;hNDV0xno8^Kker4s$!^?Tp!^9w z`R3@G&e(Cr@j;zRu^k%J_z8N-$J%(@f}%XBjSrHPtYPauM34Kc(?_Of9b?p20J zdZ3g*0xdCU>f0d(9@ZsI*Kjv7(v)>WIvJhj4TcNp{C%+|GBsgVGey@n%xX55%ZCMb zfVk~}$qtlaXk$ovva7C9%ghV2V$~C9Me{+V@LCLqH5|cFhMuspT_}7`#KQK(8B#u+ zkjkvmd0ayWUT27z@`0N(U502nH;_w^r7jI`pqn9a&#>jVErq+x(4F2vA+V}@E+Ftq zj%(;qa++z`bx|90T~S_%;l%!c8#S>ZZ6`D5%?b44q=r-IXJ|2;NqJA26>^;yg*$N! zFbqBW`nP94e#U)<+^CWn>F^C})#eStC|#q>on=GTDm@7d;dBhc8b**|I2m?W%_E+I=Xs!F#Y>ZBy|$|&qj zycE^M6%AK$jp10G&=6H(f16Ax(ylOFhoL{6+bcS-_egnlOvAWxsqZSETpW`OS)WyS zDuzd|n@0n9+-TDmSn9@bDFXtrSmbm{y84F9yYiEE}R0M~-1iU3&B|Jd!4T zelbwY^}_V6{8W+aB|2P~$rYx3BRgf{c$Z;RX?gn1KU<&kMU^;yzVKN+zfk0>W<}bZ zGKp8b=cC`@OJ4f-#4*b-;v?W*aypV54!>2@^Lnw!MO7H&PLicV;UzvruopKq%;7yE z+#MHQO`6@k6p&g~NcN}~y@LW$6pH%wVrtuIM?K`g1cOOUbKJ6AswB~v zmF}`tapJg7_*KMye#ja3)$@uJHHwnO8HKb)@A>uxRjLkMoE<9`b0s|x=xJ+)nSg~x z44E+m)#kF{)Cp8fh+3^korj#QtKot7ckLi>2`v?dH5a&^?%9?f4>Dd5Xy5V;p#lgM&}eO3UOg zX#a_BHlajgEA?ogjkG4IKegjF?KILw8t^_AX=b=XYhU{YNvZqYgOAXjtZd@gm9Av^ zTeJ)gZKCr##MS(!(jM`&AH@M$A0foYNPh>8qf2!`&kFZ71y+>3yZC_YByboX;v=&3 zG0Dcz^c=@ol(y6c0~p_vXp}yVCOfVS{fXYMaCqns^cIFU(f1YNsq_{Ghq`{nTTMuf z(z;8*y6^;-fh}Br3GWmRl9nFQc7n|IksD5uOHZMbUd~>eMn8sej+&iv${<;6BiDQa z;Q=4r20j`9kKinpwt-Vvo}*KRNfGwl_ZRIHZaq1CB{i`HJvBpv&!9WRAeFkIKIUl{ zj%=b3aPe4lJ;D4g8fOR=sDUZ~acZE4FiJi=PyW6Dj*CR<62Z?RgKPBVIwmo;O{s$j zzo4XVQ_{C7jqj#J&4i(hN1S1CZ9q$N&HU literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Enemy.class b/Java-Knight/target/classes/org/project/entity/enemies/Enemy.class new file mode 100644 index 0000000000000000000000000000000000000000..6ad9fcbb5c6e6216d22a138a8993d314f26ac988 GIT binary patch literal 2839 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 literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Vampire.class b/Java-Knight/target/classes/org/project/entity/enemies/Vampire.class new file mode 100644 index 0000000000000000000000000000000000000000..258fdbb0eb28b9cf6b86809e337db821af63a73e GIT binary patch literal 2068 zcmaJ?-Bue_6#h;UNC;C%(?ZLyLrXD$?I>1S3B|SnOf*n5G+1kE56K~!GMUMmIZ$~5 zU%}-S7kcN7UQmk5K7jAS6S!8F`(&n=KLx~VPzbn`xX8}c1>N5YIsk<>F|`Yx*5}O1y?D{q_)ayguqC( z&}#vko;;h5B-QGgh6%jSaH&RAGLBv1a>JBWl03<6=`l>SNn{&maZF+=ifIiW;5x&# zX6BYdZcWEFR=Mkvw5uX{jzyTe>r@$;acY}fGW4~JRZN1oDV!fFjokkPpV9EKitKyz ztCB03LN zwWoW;g-cN$Qy~^Ke5OKlHA3XP~G_xa)jV(N5+mC03EUraA|g z5m_}U;p6S9c&cmC^gg(hytK_Q`p&W!NmFu{nuKAfooBz9mBVt-$t*{$T@~EAS95l3 zvg@$L3)P|L3M%3XuLppG4qaIz{erXOmc+8D*l9tgZm1W?kho7T+>eKObHWtG}D#-EvU&nv^sxJ}_sWaUNN8dIWZYk4OhkD-J61pczWA3ClWtW>a zdC{|LI=9QZD=L&b>N??(@uRnne?BqDuFdJpV7;Aq9LINf62(*16W>!I{u>~sz3Xg? zV2=3DWSN(wr%!Z>h< z)bJ5*DB+`#BivNNC(2f-AK`Y(c^|Q4`Ve;%)Nljp9C}FZp;LmuUZCH@MGO-4tLUfa ze;Edy<}pN&hp~zgJf(?kLWfOrT2Z^{!w;wt5qyp;kqg5@4qp(xB%a_)lEUQaA@U?e zutJvI2))51W9%Qw3R8avKPR|OyUK7lG4mU3eoFnMPc)@7e3H)9Hm0f5rqgXq!+6jL iu!gT_A0%MkQsl22>w04?Hr8+OjK0U|8%GHO1OEanEC(Y1 literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/players/Assassin.class b/Java-Knight/target/classes/org/project/entity/players/Assassin.class new file mode 100644 index 0000000000000000000000000000000000000000..544265d844ff9e2b3bc46324f1ce2a53ce26eef1 GIT binary patch literal 3442 zcma)<+jkpR6~@0~JC>|WVxh(@X`E!7t1pQ~0!`aEN$dC~QQ2{7W0RzX9!nEx;?azl z89Onza&5U3%B6)Sv_M(#z*@YN2RF-Euz2Rr$a@$6Ko^T|&&ZZsE5L)#XwGGy-`?lj zdyfD4?~T6$n85E6Xj3@s`Q>cQ_ikCmFl&caHGA9AHO~#QgSWY2UTU(v(6^ix|gF z3>i3u(_BFB^6sh~*h{j$qyKt5o;C0p8SmlvjCCg*4MSaA9`o(cE^0^oJ8R&x_?$w5 z{>|tr7w_vI*mgU$6T_^u^036`LWT0*?;zqS<+Qqwg&o=cuwKjkADBR zj~=}LulsMBi!!<7mCBYGRxHyMJGNW&s&XiGgM6zwR%khEeHmuXsQ7hR!klm6xxkJa zOhv+WMdvcj^On#}8OR~efZ4&$*hUJxo~9g*iKu8L;3^EX7~U*q`Iu_7DEUYocZ_)@ zWXPNp>nO1@1tzVtpnY53>zy58#pa^p+iKb)YSajgyHT2DcIJh`-XKnd z(IwkqwWZPiR#vykg~gIpKh!=mSmDV3p0BWHPRhWvuGKx*?bzi?y*SWToLdTt;@-{E zSY3-%Aw$ve(g`^v3RNDXRd2=R)~Pvf#V=Zuwv?bfn^k#OJ`W1%%bphop|5MxR#@>$ zK@zX=%p`ID`mU+WaK(26Ge5JCpUYn^Ofav1pzv5UeAkqWGac(@c-~Y={D_4{YQ$DO z$mQqz%vj<~{S}@}$)rLRjl7{S^zhzWQW=!F5^$g(u5QYlC0jcohhmq9llUnYM7#cJ za{&d`$cvo|ex~qLqx>k-4(h4F9O!FV$12)cwMyLU7pytaUiY|{M3Q*Q%+2<7cjB!S z-o~#I__gHzJN$?@zOuHv>MdLKk8NCsCv`FOeCp+$<`Pk#7zaG3-I8Mk#|oaeyiyz4 zslKM3Z42kuYF3NsH=5>OS(2N{NOSe9n;6rMGsg=6b#LTd*Yd|4UOB8Ff!|QvJA7(| zn!tOkLjQd#l^OfRk9C@tm^Lh<3b11E%Z&lH9^Wdw=oxbn@>e`2Be}DuZ zT^}MfIJl1Pb@a${|2ld<;M_LU*h)DB_V6mP7l+Y}licMi?0G!42Ok07Xc-|^xSPT% zZr6AH3oE$nIz_98)7^hSSLVol9Q#0a;d_Z24R)+!P?}-(o!P)szy=jI$Ay8E>;im90~?bN<)y4Ppo%5A$R6N^rlqh4>Gy6vVuQ zD4mqxE;NFhl;EcK{eSRZ`~>`27&Ls2;eDFm&oI2_8Qu{F_!5Kp9MAfBoWUq(jI(!w zcY(&H=W{*sN{x(djnq* z;4e3#eTeb~kERPR5V%0#83JFS9%dQ)s}Y TwLiyQu8{wm?%`eh7W@AL!zO8r literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/players/ICombatActions.class b/Java-Knight/target/classes/org/project/entity/players/ICombatActions.class new file mode 100644 index 0000000000000000000000000000000000000000..ffd9894940244ee7757a60abae930e7cd38e27e1 GIT binary patch literal 283 zcmZvXL23d)5Ji6(oiUn7z%vNCNgp7qAs7e*TnO%a+H!2ub`LWhVXl@%4v<5IREt>% z+0>`%^FOb?e?GqeEHTN^BP>Ewsk#XVHc_#UHg>9Zy5pu*ug~FF>R6a)gKu;62@eN- z(#mOHsa2UWgt4>LJ{B=*^G=w}-~MT2&qvFxT8eg0i;blAtWVuvD%?MWS|?nD(K>uIhF`2>!t@&NF_C2i>5%t;fzS?+AyMZS9pd)9k1je+cS+pI H?BV_w};}4A_rnNCjrMD1LE z_6Quf{q5)GsC1-h`KIFrrgGfcY}vfzdgesgQg+EaA^mb!3j44>fdd9|=n>f0sEF;( z$iQ-){FwAS-p#9Fw$ingfKjD{!IbnIDk-q3iM$bmJ_GmTpg;$qMWV9Nxt_JcE*m9Q zURxz^pdW_??x{J}D>XGVZQ1NCU6xxF9=H5d*m?FOi3dsKukU{S>zAKaaWzjlsX-%gy?9i}VnU+Bk1%cdM98pkme$gBX0y#6+m8JAUI@MVNBP*#QZb^)>0Xo&# zim58vXMt;$)FtI;RWlej@D!e=s#hlHCC%kEAPCV)(as!!bM_FO3%{I@yoWLY%yq0Gn+0~h_-`4rglPmWY?NQV7(vN zv2Oi+O|8Gmid+HQT?6USc>>+dFsz=>1va4@KPsy+{!TmGa6>yVS1EM0fGE;d6nlO# za*F;Gww5Gx54Z^QFjR4C4ojyd+?qF|PFq^1&WP_Jy#fR>CtNr115Z{*RZwhBw0n8K|2s$`C65X+`CPcn1BPZ5|yNxaH{c#+2e?Cgq**9N>UFrWi&eIFI! zJ`lmDGrP<&btN!mNZDMlY}=exW?9E7va*GRVT_pm|k?@3B81G8AO@jDmDZw(|Fmxb9r7I=I#s4R2Nj zo?oo0Cetr8%s)4+kLJO~6&9x$mbN{?GmwrnirgH%VO#pX@)P)oyXhKE&7dam3HOG( zPo-xfUOcffJjVrI2GGuN9eQ|`d@A#hZ{e8h?aLg@9J~eb+;z0xLV`obb)I zv+mBMe?UjJ`v&%2(^dFfVj%*ItXiWFw=46Ff!R|oMkL1@DiLJ)=qF}VW5h*UbN?epyRi`uTd;V=CoI_nN5zU?=0 zK?8hYMZNum2AtuwK!8O8JWGHhRBx1)9>Zfe$FJiJJ}SgOcanh5envjxGD`o0UjETU mz=SQRVV>hQ8tg4jSqQI-;q|rf`UXDWcm3b%Lwt-+vGqTO2l{^i literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/players/Player.class b/Java-Knight/target/classes/org/project/entity/players/Player.class new file mode 100644 index 0000000000000000000000000000000000000000..2464b9cd075793a2851dbc8e1a8bb948f814d866 GIT binary patch literal 4988 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 literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/entity/players/Wizard.class b/Java-Knight/target/classes/org/project/entity/players/Wizard.class new file mode 100644 index 0000000000000000000000000000000000000000..413e2f4f84437f25bb76f22221c1b7593dbea7c4 GIT binary patch literal 3252 zcmai1YjYdb8GerKShBoCLL?3$cCt=FB3}|YCEV-;5VjKuWW_|rhR{Netz&uP)vj2r z?HFijq2|vnyM2Ea+(FoZYkU<$0g? zva5gpZ}WQqllUltHi16ZE2pcTdrd9)Y0FoY^qP`Y*QurFq*IDPpu@l(bP9ByvmDER zNT5A6FdIQs;OH)0=~Y~hs@4nAD_wTyRSXey#Lx{Rg4?vAy#oEsYRd5~e?48b<+`Hg zbg&D|rSjM0s!ZF`DW{9RXF27uTrS_Nxf5&vdTh5q9Z^OD8ylF7A%WW?NE)~U`+glt z7=%Eyto$i?Jv$vlp3@e33>?6n0()x8&sIrMDi@l*%fKORx2`iat)=@69NvI_ZM+JYKD;apuysm4Hzti~gMS9GVi?--2Ns#1MufIA!3phHN(5 zuBS>ls$!{HdXoFPK+KoRYC=|InaNII#K0N+Mj*n_3bI1K`%(kDbD3lbo;7eU?h`mr zp#{Pu@;S?2(tv&G_%(qOtuXF3rU`k#z=N8NFiH}&U`bm88Z&Tii|cGP$%1}J`+Zm- z)xvr%*Ai?SGFs_TO}g8_W=^9l=$BgDr|{ zG8hLD%nJ;(c)T?xav>?11zqbbl#X$?#8QjrEk_krD)Y*lk@LFflX*6TJu5v+-`5X2 z{3VM@$97DMTLw|s{bMxk1XY~eU3LO{Yhj&b<}I63j0sA$vbm#UID|M$ed)15I70uw zJjaBi*7TSWIf2`XI>%G8T92jMw#rL>n0eYQ1&zqkVFp&$8^=Kg8H`R0dsc6mio4s@W^#p#W^sBlpXbDqwtvrv8Di;=;`bc1TIcIeOkrx*R68?bW~ckjRKZ;vHAPws zMDen~9f8>2P2D}FtrmSgi{eiLLqB}-(N8ztrGDTvuY=yI_s}69g$_?g@hTMpOaIzZ z$Tl~~ZiT-H+^ZFCeik~hYV}@V(f6ALb=@~*&|K!4W!vVwGMA*is!H_rI%mSI!3iB( zyc2K6@K^jTg17V#cw69jdvV6n1_;O6}lc5dIK?0m2Yyk{#UEtjkzbM+crv`@-=MtxGLOlH~ z+HWGlt?OIF1_w6~-@tyoAKXCiSCnl-iL0KAK%B4c1diZ#oaBk(Nl$1GizxGsmg&Qy zH-T$du6z9tM|nG+m1*@zBK}WwC6C^~@vpQO-k0cTC~LB6w;V!~A`5VSj zoW(I@a2ywKf-jAenB#thAuN(G9h@1$-VUw|8x;n1mKYtl482MzQX2m+&ght*-;Vhz zAL^KU60!3`L>1+Hvo2OfP) z?h%5^5ZpMyO)!&_{N%b205d}Sbzn^(R<=QWK@ht7vjGT0gLt|D!U$P9r!zHr=xSJK zL6LoqZhaUu2Js!*#4{S;ZyW5LAT;1Hu8$L7o&XC3c!}&yv#g#Vf0uC)#QmP&lm0ko HArAfw%ONZE literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/Item.class b/Java-Knight/target/classes/org/project/item/Item.class new file mode 100644 index 0000000000000000000000000000000000000000..3db1242f701c66f9514c4e119996f6235d620d7b GIT binary patch literal 153 zcmX^0Z`VEs1_oCKPId++Mh4ORqICU&qWrAXrmQu?7#X;N^Gl18Q{6IifT}q`2I_&# cVq;_g8UeJNfq@ZdJ}Uzoh{eDTB$*gE0AD~Qwg{ zF)@Iwz{q|3fn9Ce?rQbg%6-`k1+r%y*9p%Fq)T(lLm0%6ft-n5Fa-{J{%W=Bd&;uv zgtAk${f_4c)eCA8Fk14SbOR|M>dJMuiDBiJYxR74#c4a?hC1G3qM(mE_E#4p4|TlP z#6ESLSI65N#!T$T0mgTNdEZ-C@ox`d0+R*~nwY|&ZJ9JS0#aiFUXS_gThuu^UiG@~ zxM3sorQN9wVwyghw&euYii+w^=Wqlw29BC|1+xO9eLP8`tKzg>hAu_1b^RFFaaU_| z%LP_?&O{ln3XFB^b-CcVO*_2lglk*{q3wo&K(SP>&+T*{#BqVyOn7g7DS^RN87{Q#fViWjB&t5F z}vWI^DKhvOBE)-fcnR%nJ~BN99fJ%=W2FzjO_pXBl^> zs;>Jtph~nXkXi6r1RY*a?Pc3{)IL7Ugli7-JhZqYYEr9A zGv5g9=K58;8#`vBs!|rdZ1tLQOM;|O(oC{;$LqNiRl27{K2_QVBHfSzuU^sz=Y>J&+uf@& zT=QDNAU+W|@%-T*&mTXsB3VUg%GR_MW1g|ZF>4Eq+d$ zQ$MN(lptPiN3Nh5@h65z zYZ~Loa$O{uF$UaE0tdJoC)A{-5WyXZDZHos#1s*)&@syVYlc#sYAW(~sOUt?+>9t_ z&Z7}JR|bFiXD9(A@(8;Wr(;~IvP68MvRLFZO+JUQmtTNM%-|$u`54Y6IMouIGDw{? zNTQDSV^Vh+FU6>1L@a)fLirYvCt9i_Pf@wK1z2DQfMWza&g3gh{)7f8M(&%nAHxT_ z_HhY{#974E8134BXiSLlPd>$)D%)o`t25o|y7~x!-+&@c{SV3#t}&>-`BaZ*@1K9sglj=%kW|e sF7oPJN|YeGS?Fvm@-%MfTtCJ#=iQ8ThZ*10<1N@c%W=Pg7VhD|zgb824FCWD literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/armors/AssassinMask.class b/Java-Knight/target/classes/org/project/item/armors/AssassinMask.class new file mode 100644 index 0000000000000000000000000000000000000000..2883e8364b907bc24df7f83330a5ca41719a4f1c GIT binary patch literal 337 zcma)2Jxc>Y5PfrB8_!b{Noyg9Boo@138*{g^d+~o+1uXId{88d8 zTBHd$18?3N=7X89@6Qc@d-PHS2nC`HF%rUwvCsLNH49a>xo%aROIsW3@{tdOiVdz_Qb>1HC`DVOG0#Ko)qDz(2aUr)pKQMa=zruabYUCETz?6 z|0SdLMLWWI@t+mfgmh|Fwo(t;Pwb7h_FpdKyTmC3-|LOoW9%`etga9;13DL?+h2n| cmgfT$(2m0|%^8f$< literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/armors/KnightArmor.class b/Java-Knight/target/classes/org/project/item/armors/KnightArmor.class new file mode 100644 index 0000000000000000000000000000000000000000..250ca3eed5fa2dd845d5224e383bf3d3d8ee6c10 GIT binary patch literal 334 zcma)2Jxc>Y6r6Y8o~K^yEG$HXBt@>XQ3MGI1P>eK`pvl{8*;Z{v+;jf2^RhUf0X1c zNnsOk7v{}8-t6%9=lAOyzzCfb9{dPx6aT&Bb5Pfr>aGoC8TRi)O*JUmT;_D4h#R46^R8ufFEU? zjV4xvo#f4XlbLy$J$!%d0X*R{f&({%7sE$DxYlN#z8SrgWu2;8R;e(RHk)){6Crp| zYgIoI{N8BP&qFi_ontdo^&!k`tP4qSd;Of?4fTvglBu)ta4$L z)qh2=UZ@SBo1HeeCq%D$YfAa7?7rmR`*tbb1=6{TU$Oxezh4__q(|xM0N=j1F2qGYCsz literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/consumables/Consumable.class b/Java-Knight/target/classes/org/project/item/consumables/Consumable.class new file mode 100644 index 0000000000000000000000000000000000000000..4edc46a8fd2c70f1a156fd64565ee246fd150a0c GIT binary patch literal 832 zcmZuu+iufP5S&e%m^da$Zz-1oEg+G&68?Z7UaD3^iVCPG?@l;MPnFonagg{Y9zde1 z!~-9|M35q&%(Ep3pLFI z^;bI9*=s?y*B>`<2MrgVk0yM)V2zUip8%bi>Ccwgjzn70o&JPNh>7Q=SZ6>~ONAWJo#Odz5_S z-u6hx>U6c3sPuyoXOtwUi#MriMwTCX@T~yWjoJ`Of|F=RXI}0Nljq z8oCfmBCeww34!yjx09`V?p?DKWUaugWlOH(H)?X*HvR0-kygj16Ij7s_GZ`#bnlo!zAg~U%oI}S6FB|+ z{Lr(}V zPq!Mw&FGlHtU!_&)?|(F2QxG6SxQp^7j(Reivq(nSygP2z%47NDBc3;1irwzPE>Vr zCh(ea_PS!X(DAx1yrC@Sm1qi`O=7q}VwT)8gYI9k9CNKv+cv!oB|w4n3NvhPO3zaB z=3+dkSd4RO<^MC2qi-i9B;AgH0&Muarz2v`&1_QoK`2e?^d*J@n#%I^n%htU z=yvV0(zqr|K||UqQv$u~fh<*5Wxa_+TX!22%(A7hYN3`cs<$ODaKm*2Kk#II)eI_b z*-xQBEgtUwe)!9ehA_%hchxt7ifJgS`H#?Z$X|cbxt*ThARf$a( zOVYO2`F1G>z2G>ex5Q`bn|>0Xu%fhK>J(}cpHV3FY{T$tda?BZ(!TWSFbwwF08 zAjU6{oShqc4Dl#5c#Ewn%V5Pwpa)ktG9oj)jjNpT0CKoSCu+p96uMo&V&qm_;k=uB z_vZe9KKB$!f&1u5_dY@YBTk0|W`D)0%0Ss(7#q+YATgjVL}rU~V^49W3(;)6d^w(; ze1fUj-*El_a{$Lf@dISTQDhW3Jiw*4wSDwQ2j2|0LQe`}3<}~hjfBq<#(9E_m~dpnUCPUpywXm!Mh}55?|qZ zNY5om+~6oie?|Vr5yyMHzZdb|?!PcB{)QB+0Q^r>Nm|DH>_=%-q?>%$eh{`RVY`M+ O?rYrJ!l$@{k$(ZSzvprQ literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/consumables/GreatFlask.class b/Java-Knight/target/classes/org/project/item/consumables/GreatFlask.class new file mode 100644 index 0000000000000000000000000000000000000000..102d29e69d852a77c31432264720d6f3b890de42 GIT binary patch literal 381 zcma)2Jx{|h6ug(DO_~N$g2W6gGz?f`=}^RiC_;)@in6=G3NA^E9EbnKgv7uP;71{x zQi%;=OXoZ5y?Y;@U+*6PuCX7$A&hUd;O1~q@%AZ%hk=h_1Rnw6Sm}~IYqb`IVbX}2 z6{=~wny)I+vP}kIcp)2UE(r(IY|URdt9VngrO~n}=eKF@BP5*s>9px!Yv)eWoZwxl z2SJE4*@(NYUI~5Q7bPT_DtMK1EqlHF^vt7d32FAvDsw`(RGluwLiVQdZv$uj2spyX zZlXVAuaB|C$f_A!%Ye~oLX-11xUW_?*s&Pe7Z@PG5WAK|KY@rbv5K%~(LwSJ8qi!5 literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/consumables/HealthFlask.class b/Java-Knight/target/classes/org/project/item/consumables/HealthFlask.class new file mode 100644 index 0000000000000000000000000000000000000000..47aff07c4f80065167b0fccfa294e0becb6f6b4e GIT binary patch literal 385 zcma)2Jx{|h6uj4@Ng4tTK|*2!rnCbd8H!jC6-W_FQFb?2sY?SzgAVhb9S7voOuXy_$!o|>s7r{qBI9Ix4FIufdVVE?c zW`%0nuI9^1wCpE?;9bc^nrp&wnyvYUvx+w*TNo{ya&|w-eT0PcPp54QJ3l9#ZQ<+eN{q|se)HI*Rt2UPuHwuOPFT=Ei)s83)SgD%w_Ky|7zi)p8{tX z*=6*H?Der{F|z6sj%C1TnoxZ52Itj^0roA1_63Fr;NifsXd8$zVyg&;76(Ya0WIBK AiU0rr literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/consumables/ManaFlask.class b/Java-Knight/target/classes/org/project/item/consumables/ManaFlask.class new file mode 100644 index 0000000000000000000000000000000000000000..a36a7207f4237740a32e052dd5277593418cabe1 GIT binary patch literal 1390 zcma)6U2hXd6g`s!e=JK993X`>sRIF=&xO)9ZJnkCL%@lFwSE=bqM{)!8PSirFRjSS{4*X{WWL;w{%9 zfkKU`MB6eB-99}WvHKx;m1-Xsq|9n|5`xW~_DGxfsN2i3OC!^3sKAX=&}Vj=s9uXa z?zc=wTLDp}zm+k&D=>AIe;P>O!lsptW?i;ZKHjG3#0|9(I>w{_7iY!IguwU%V{Bq$ z*{&wyI`z(HNlW|{Q?qs$?eQ260 z9qrz*Y{&)yjs$+~?`CS)i}*z9U0#>Dnla5zyFA$RzLQgqTSskmhWU#=`yY4Q)hzc9 zXbMr0QMAd?Az8nwwTdge--$}Hc*t=b;B;21S!}TDA2wyzdc1faZt?MOzaa=dA0>Y0 zxm(3BB_O|05aTm{V)*y2$pXI~O{qYR(jq0lXNV;%b0@HZAO-n_AP#(G@n7U$VSe!+ zuM5zKqLeb5AMy2;z5%@VDX}?=gFqoOh|UZWTW5ZN$}tY_)#If zDtHp?ftsqOYl`X5-TMcC5jrs(xFNg*J_5q2v1PipX2C_B>Y7*S3#+xMHtEyXO$e@a zrRy7l-=9ndd5DP6{nK@8Djuq`WJ_@SgPh>qnHdvWnXdSLyPC3nRMVw&PBK%dWv;Al z^iR{P=XyivW&cRHBE%17YYQIh=E2r)_{Bm!E1V&e-!?^Zd>jbIqAuYI1ETYG9KC^F cg*!MDY_A?TpJ2iS5j=R<;(0J+ o60*C5+nt@qQ5<}Lb_^YiSljPvb-bB)7T|7xdpdH#{hoXxb2uqh@JwLaHJz4k3bJf4AQ{bULz&}cy zt-zDe416=+Ff$)ByZ!bXz!1#<7Hl6*2p1lqqs=s47(J6&8LLvxukCe{L1@cG)xh}}h!zR>rE7%XlkAq4QPz`4;-^t7;x%fY74;1l=` z-k4~OUKqXgnT&DHE|`+2H}i95=9_P3&W~STz5>`o(?$wu3x)#|8HTMe8u;TVJQjWB zOC?7Bso>)+s z(LgY;mQ4sn2TLe1TZOdN-y)(%20TiPKVB2IARt z)DzJ@?+xi?xgGZTu*)N<{n?|Tj^u=Tw=Xtd*k-(q9a_gUkgulVQL+@;pSw`AFyoG< zlTmtaieddfi41uaDn6XAqtH>jfAW-%XZ%WpFl#x#gWUA2Y% zGGwp7*8hbLyNOkTuAoWxtx=?wfX^CJ8{EV#YOQl`6Ri|n%F2NKM3ep|>O?ph(imF#K^o=j!_naYc^8ovQIJhk8e literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/weapons/ToothedHook.class b/Java-Knight/target/classes/org/project/item/weapons/ToothedHook.class new file mode 100644 index 0000000000000000000000000000000000000000..9de6964ee59af8d69ce676fa0c890effc8413d3d GIT binary patch literal 339 zcma)2%Sr=L3_Y1=JC1hj4-`S9b>S>sDBXx+VQ|wjUEfYG_SSY%Zg2IwTnR4x06$91 zs0%lO37q7FoP^~4iR#lU5t9xB2ud5~52} z8#g3`{n2Pp#%K|a|5Qzw-9pcAnI8y#e^3&FE1qjYr!cj?+pTBXPSk8Am2Sb6T9wM0 zhW``;w=i46N%5Z*7ldTYJ6q`+(@e~Mtv_3;M};HAa&TiL9-=Ln2s?)_8PGn>I$87r edKThgPq6tA5TPZ~RI>ED5&Jk0CWi=m$UXt&Gfr&) literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/item/weapons/Wand.class b/Java-Knight/target/classes/org/project/item/weapons/Wand.class new file mode 100644 index 0000000000000000000000000000000000000000..d8c9018a8ad0319f625a26797de30e91d303adf2 GIT binary patch literal 346 zcmaKo&rZTX5XQf0OG|5!if3cIfd_l^pz%U5Y0`Mnl=HT1U`gqcWzqOpoJ>6U06vsq zid;3DnVs)9+4-~IKc8O!COD7azzyKV=)fmjYBNvQMlWS$Q)T5UeUoCXn@u`B+ywt# zHOf8^I>Rg*6#=@0i@#rqW=80VQq{`7j~BwsC4n-6I~)}RZ>(nw`nhW4({@!#^CHTc z$spI2s0(3KtB=sL3$@`P^MCu@5u#_kHI;l+ZK-g|L)n{_ oW_1hqH+P-HiT?rGF?7&l-+mO(fgc5Pj=7c4IqD2?PjfQ&PT?AmJZS)JrImr2q#|5XVhw1((FG90$aI;(|nl z;J^>yM`}5cL9{`TgabTce!}L&uC9rcU-%EcY| zQcJlD;UB4YG+R{MfWUQHL%kT^+)xidZ!urQP1-u6H_R94E8VXU-NrfW?(R9tpLN46 z+A2(1ht@@j0NW^|!OZPN8+NhBhya>K=#wH+^iAyNG(E-!@7#yoFR;I1$H0<8eMRs) zI3!chYHF5VK)WPs5lG+wcXB{q$3RixePX!*HLY3>sA(8apNlz+z}=0_<;%_Wjm`H6 yx=`$hRBAp;t95ycJ!;!r*}}Tm!pa2_xW5@|Mf8OtEn*$~14~J)6nUUmZ~q3FF`lCU literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/location/AnsiColors.class b/Java-Knight/target/classes/org/project/location/AnsiColors.class new file mode 100644 index 0000000000000000000000000000000000000000..7202aba2c04c9d88c7ef1e854612952ccc1fb2e6 GIT binary patch literal 1046 zcmaiy-BQy)7>3{NZ(56m;vZJUDk`87N(-n(v`s@nGL&gc8KwtLS~E3FNSrkFzC3cq z124dfa{M;i414Cu&OXn(yYtTO{`vdsHvk>SS;P=eBauTADTet=^Sh}!raM;K!%J%v zFr@Zu*ADg>;;U=@G!%wq&mXJbe2?d<z=di~rL%KL9*DAb8HuSSPFQbGPx)CN(tBok)y)t1W%9W#l*Asi9j@2mQ zEyW&DbvFul*;Jz?dc6zVR(UIh+^o}kVR@qr*{IJ)p?RA$Y0*U!k~c|c-WQ7@Z`iJN zGQApFe$N~_WC{kowbM6!oAXR2g0D8cc**$Br=W+=cD<=TvJPy1SpNFIZ17Kl64LY+ zfkiAKgDmJuh+@bQ-;_8{ydZIb_?E=CiSJ5$kNCdCMdF7NKO%lCaf$e;#4E(lC4ND? zChIJGiE9$?5${Xt1#Wo3swxmr=AzV{hhqQ4@n)JHZTW1q{*IKWW(1)sj zBfp?8eV|ftq(-XRmp=4IRsCjmF@_+hEbYvhIhXG{=gjdx|Nj05fDIHigbk(!yZQ!qTs zu`{_~BM`BTiYd^WJ93-%T+1$HrK2t#3F)PyXx0j@Rh7nZ^a%7R^}1)3Gb^rZ?B%SQ zr=c5RY1OY|0D}UFs#B|3yJd63HY=7{6BzKr9JkBHap91cy18fAMW>=+$ai;9$6L5W znyxx;f^E^w%Gjei#xTw-7{ww(C0i)@naZXfNxexOS1=_Iw`v=es<)@|#+x=w>qyER z_t3+-`MpsudjWK5m)0?Zt4vwV`hh89vbQA0SsfY7(VcC+@V0E$Ba+;bSKW9=$Gdos zswI=h13Z2cQykX?##*an+Mea@WlTS58Hr#|qWeI{4cruHFF4gbbtzI7b81jf(6aogD~TegN}*~n`GlV|AWpPFUUbEv&4wKoMO z&d}a5DpkuhH9nNEh6QZt_&BKTO4)kGGPUQel5Kc(m-`#1wcq0T1edY`)2;m!Jdu`a z1}CWU~<&_#vyqv1f>JXkx{L04#bMhO)l@=MfC8n!()Y5`m=@6_FbxoOEfb{>we zSviF;&gKnqRz~^d%;PR3r9iCsHZcDu78-c}09hF}3`ua1IRf*g zVU*-1xSPZr=}B@vg!ur%B~pHXFBtlvvKC#8&50UdDbk_jJu8E~#xhg6A{qMPD#i69 zaf9OR)DQ(RS|3M$17 zC90tNhgyn*%zz(wmVq-2JjcNEE$kPX1z5l%RRGC8ig2Q zLMp#9J;3!AD$&5Bz}Kf5cb+u9d8+X@`1X{@*^|agry76PY{{h{i81*mRA2bG{dQa> z(>3M6?}b=18?k0P8f<#M9dleI+aabP`!{;z(!fXT%E-@%gn!|c-*kRbHd~+#1&;mX Oh6Zj)PrE9Mh5rC7{_EQS literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/location/LocationManager.class b/Java-Knight/target/classes/org/project/location/LocationManager.class new file mode 100644 index 0000000000000000000000000000000000000000..0b48b97854fe50059bc1a5740f96585362bdd25a GIT binary patch literal 3124 zcma)8SyL2O6#g#T3}YiWE<{jilpSH>5`zLN4zeVGMhFJYVl#7rmY(iOcLS1LWA^Pe zRe4BNUh$be}%=-1D9DopaBfKmUI48-R=WCV>)^ z#!#lA92EjJH;rW@Wf}H->eB2@nehcG`b^vO&kB^bwNJ+o7uX#bE%~OE8gN}>b_*%{5To}P7LU|RnM2M=`4BrT(F?enU*E9`iki<=vfjeU9}iME^%i9 zb!b#<9~NkB3j+=Kp7dSQp6`89qgZbeXe+prlc)%ru0(7&a7qH2^>MG^53eV z4ebJPBb&WQlU0G{wy|yY2S&XLs8is`Hinan(vrSIs1B6I(JfFlU}sE*qo>`~JZX8B zkq+3pV`Z5$HTueebfxY^8$I21j9d)I1rBe6Gi~JZrYjRTreK~U_i4lPEvXN)aB)1( zD5n;rPF&VJBX!@=eSQzR#=K*Wqy=KOyycJDJP&1UqwQRZ;i85i4AXR8QoWbzqS{5i)rlC@@B&^` zZMWpQjJVKu0u7sLQaA?dCxlH~hj9%P!O8UU#)=(wb5O20E(;t;^!NAc1IvbK8MCCP z;M>!wPv8nBW0=zLGN#!A#eA=WO&C1FzPT*Zj_o-XQ?Jak5t-|p^B7-Ihqh0vxL(mP zgKH#)*-scb?%UH=Oh9Cu<>V~C^9nl@ZheMibNf5BwNE!#Veh9kXKgkwdZJUC7QiLkfT zK_KTjXIV};VOtc6Pg~Q@%3A_rlsttd8;h!e*$!2czL8lRH}ZvO$!GfU4sB#jw``k& zJ4RTOHNCvWYaklz%ubjB8vPZiY75=5nPBek*?Q&wP@kA|mfVaSG8Nr>3TP2|-Rde~ zco!VU_c$l=?8(Gq88grb*rTi9yy{Nx8ZJb)o%Pq{W7ugp^SCJ}m zkv1%A()1;X)kbYwx@pVsJjqM$3yy#%a@s1?7`_rXw7n@CGt3K(9C0N)<)wV`+UGHp z{3^j5|2g*pnb$MlF|P4f2A}i%n&A$?cSFa0h>nMd&D=-jJtQdBP)y##?v6Fo{v0@1 z;By~0163#sV5&I^YH$dkGV{8Q22$7vhpV@EvEN2hkZDJlO_ZsIWmqIx zaQ_r?luEe!IBZIaUT2+$xu8Hm3j^D&f?Gr18qW81D7k(OgTJHh9!B^zvWBsZSd#%> zD+}AksM^uYn_n@$k4W?u#Zk>H@_3Vo0xmp0Rf(MfX8m_)s*gZ_!2YLWmO@oJ#Oxww zH!)MhJhla!)nDZ*rJpF21in>Y04IyOraa0)U}c@H@1w{^ zl9ztPOQn4q!S~dc-6*1L4ObtqR-n};?Hdm;8))we@#8;#C_cm7>WBgKu$NCW&ok&m zF9s+Nqklce7|yfiicMf7icaNNiITq%6OV9?ORIQ`DJhzZGfh06>G>@(4G-wsjOZP1 fFTuNbkMEt7KBVLKgXe90MqPs6pW{n>js5=u^so)! literal 0 HcmV?d00001 diff --git a/Java-Knight/target/classes/org/project/location/NarrativeConsole.class b/Java-Knight/target/classes/org/project/location/NarrativeConsole.class new file mode 100644 index 0000000000000000000000000000000000000000..bbb25051aa872adbf7e2f41a93458e89ef8710e3 GIT binary patch literal 2106 zcma)+O;a327{~w3+px>~onh=EqP?-?&qHaXZ1_WJ5bdel5HA@QV zE_6HSanXxDhLMN-fO`RtcD;Ms4@Dzk=)3JlezM5WJw3BoKtBo&iY^A=p0L*s<3xny zk}XOas~M0lz5B|Kl6s;94=W|=bI8RoMi|b9d|y;$)ZobjKiQ*NobV`#87@z!$z~Lk z=|{VjnbV;nN;u=-1s7u&XE};OTU%^ zh8$dCn38JOYbvQ1#|tD4-?ljXskMMdMsjN~#QAmEkt0jZY!I&-#W}onRz~JfB!{h{vb8qAoAB8=GDwhU1oC`?!!k#)Uf7YU0;WL43o#(=0^u| zUwG;6r8i`mHxj818NTT}#Ye_;(N=i06Nq@SCgpysSvh@QIwB_$Hx8S^V&CfUr%%C& zOL&B+@*t@DiJ(nzSEER%YQW=I#11~8t8!{iwxK%MV7Tz#R(gffdEpW!=(g(L09{>r zvq)c|mPaL{vUm0uu%D^Yg;z=SXVA@_Bz02*rf`{B1zf>6MRan7+}bzz1kUU;3<6Iv zdJNHTq(-^)92|oNF^w4mn#}{9wSws7q`wXHS{~>{D`m Ml>ag6_!Q^<0S2w69smFU literal 0 HcmV?d00001