From a18e15592b72ef5de4a254ecf778390e721e2656 Mon Sep 17 00:00:00 2001 From: gaven Date: Fri, 26 Sep 2025 16:45:05 +0000 Subject: [PATCH] Upload files to "WitchGame" --- WitchGame/DamageType.java | 18 ++ WitchGame/Enemy.java | 434 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 452 insertions(+) create mode 100644 WitchGame/DamageType.java create mode 100644 WitchGame/Enemy.java diff --git a/WitchGame/DamageType.java b/WitchGame/DamageType.java new file mode 100644 index 0000000..9474709 --- /dev/null +++ b/WitchGame/DamageType.java @@ -0,0 +1,18 @@ +package witchGame; + +public enum DamageType { + None, + Acid, + Bludgeoning, + Cold, + Fire, + Force, + Lightning, + Necrotic, + Piercing, + Poison, + Psychic, + Radiant, + Slashing, + Thunder, +} diff --git a/WitchGame/Enemy.java b/WitchGame/Enemy.java new file mode 100644 index 0000000..3451dba --- /dev/null +++ b/WitchGame/Enemy.java @@ -0,0 +1,434 @@ +package witchGame; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Random; + +//import com.sun.tools.javac.code.Attribute.Array; + +public class Enemy { + private String name = "Enemy"; + private int maxHealth = 1; + private int health = 1; + private int healthDie = 0; + private int healthOf = 0; + private int healthBonus = 0; + private int armorClass = 10; + private DamageType[] resistances; + private DamageType[] vulnerabilities; + private int strength = 0; + private int dexterity = 0; + private int constitution = 0; + private int intelligence = 0; + private int wisdom = 0; + private int charisma = 0; + private EnemyAttack[] attacks; //new EnemyAttack(1, "Rake", 1, 1, 4, -1, 2) + private int CR = 0; + private int[] biome; + private ArrayList conditions; + + public Enemy(String name, int healthDie, int healthOf, int healthBonus, int armorClass, DamageType[] resistances, DamageType[] vulnerabilities, + int strength, int dexterity, int constitution, int intelligence, int wisdom, int charisma, EnemyAttack[] attacks, int CR, int[] biome) { + this.name = name; + this.healthDie = healthDie; + this.healthOf = healthOf; + this.healthBonus = healthBonus; + this.armorClass = armorClass; + this.resistances = resistances; + this.vulnerabilities = vulnerabilities; + this.strength = strength; + this.dexterity = dexterity; + this.constitution = constitution; + this.intelligence = intelligence; + this.wisdom = wisdom; + this.charisma = charisma; + this.attacks = attacks; + this.CR = CR; + this.biome = biome; + this.conditions = new ArrayList(); + this.calcHealth(); + + } + + public Enemy(String name, int healthDie, int healthOf, int healthBonus, int armorClass, DamageType[] resistances, DamageType[] vulnerabilities, + int strength, int dexterity, int constitution, int intelligence, int wisdom, int charisma, EnemyAttack[] attacks, int CR, int[] biome, ArrayList conditions) { + this.name = name; + this.healthDie = healthDie; + this.healthOf = healthOf; + this.healthBonus = healthBonus; + this.armorClass = armorClass; + this.resistances = resistances; + this.vulnerabilities = vulnerabilities; + this.strength = strength; + this.dexterity = dexterity; + this.constitution = constitution; + this.intelligence = intelligence; + this.wisdom = wisdom; + this.charisma = charisma; + this.attacks = attacks; + this.CR = CR; + this.biome = biome; + this.conditions = conditions; + this.calcHealth(); + + } + + public String getName() { + return name; + } + + public int getHealth() { + return health; + } + + public int getMaxHealth() { + return maxHealth; + } + + public void setHealth(int health) { + this.health = health; + } + + public int dealDamage(int damage, DamageType damageType) { + damage = damage * (Arrays.binarySearch(vulnerabilities, damageType) > -1 ? 2 : 1) / (Arrays.binarySearch(resistances, damageType) > -1 ? 2 : 1); + health -= damage; + return damage; + } + + public void deathMessage() { + if (health < 1) { + System.out.println(name + " has been defeated."); + } + } + + public Enemy clone() { + return new Enemy(name, healthDie, healthOf, healthBonus, armorClass, resistances, vulnerabilities, strength, dexterity, constitution, intelligence, wisdom, charisma, attacks, CR, biome); + } + + public int getAC() { + return armorClass; + } + + public DamageType[] getResistances() { + return resistances; + } + + public DamageType[] getVulnerabilities() { + return vulnerabilities; + } + + public int getStrength() { + return strength; + } + + public int getDexterity() { + return dexterity; + } + + public int getConstitution() { + return constitution; + } + + public int getIntelligence() { + return intelligence; + } + + public int getWisdom() { + return wisdom; + } + + public int getCharisma() { + return charisma; + } + + public int getCR() { + return CR; + } + + public int getXP() { + switch(CR) { + case 0: return 10; + case -8: return 25; + case -4: return 50; + case -2: return 100; + case 1: return 200; + case 2: return 450; + case 3: return 700; + case 4: return 1_100; + case 5: return 1_800; + case 6: return 2_300; + case 7: return 2_900; + case 8: return 3_900; + case 9: return 5_000; + case 10: return 5_900; + case 11: return 7_200; + case 12: return 8_400; + case 13: return 10_000; + case 14: return 11_500; + case 15: return 13_000; + case 16: return 15_000; + case 17: return 18_000; + case 18: return 20_000; + case 19: return 22_000; + case 20: return 25_000; + case 21: return 33_000; + case 22: return 41_000; + case 23: return 50_000; + case 24: return 62_000; + case 25: return 75_000; + case 26: return 90_000; + case 27: return 105_000; + case 28: return 120_000; + case 29: return 135_000; + case 30: return 155_000; + default: return -1; + } + } + + public int[] getBiome() { + return biome; + } + + public ArrayList getConditions() { + return conditions; + } + + public static void setRand(Random rand) { + Enemy.rand = rand; + } + + public boolean addCondition(Condition condition) { + return conditions.add(condition); + } + + static Random rand = new Random(); + private static int dice(int num, int of) { + int dieTotal = 0; + for (int i = 0; i < num; i++) { + dieTotal += rand.nextInt(of) + 1; + } + return dieTotal; + } +// Enemy[] enemyList = {}; + public static ArrayList enemyList = new ArrayList(); +// public static ArrayList> enemyListHealth = new ArrayList>(); + + // public Enemy(String name, int healthDie, int healthOf, int healthBonus, int armorClass, int[] resistances, int[] vulnerabilities, int strength, int dexterity, int constitution, int intelligence, int wisdom, int charisma, EnemyAttack[] attacks, double CR, int biome) { + // final static String[] damageTypes = {"acid", "bludgeoning", "cold", "fire", "force", "lightning", "necrotic", "piercing", "poison", "psychic", "radiant", "slashing", "thunder"}; + // 0 1 2 3 4 5 6 7 8 9 10 11 12 + // final static String[] biomes = {"arctic", "coastal", "desert", "forest", "grassland", "hills", "mountains", "swampland", "underdark", "underwater", "urban"}; + // 0 1 2 3 4 5 6 7 8 9 10 + // public EnemyAttack(int numberHits, String name, int toHit, int die, int sides, int damage, int damageType, [int saveThrow]) { + + + // public Enemy(String name, int healthDie, int healthOf, int healthBonus, int armorClass, int[] resistances, int[] vulnerabilities, int strength, int dexterity, int constitution, int intelligence, int wisdom, int charisma, EnemyAttack[] attacks, int CR, int[] biome) { + static { + // CR: 0 + enemyList.add(new Enemy("Awakened Shrub" , 3, 6, 0, 9, new DamageType[] {DamageType.Piercing} , new DamageType[] {DamageType.Fire} , -4, -1, +0, +0, +0, -2, new EnemyAttack[] {new EnemyAttack(1, "Rake" , 1, 1, 4, -1, 11 )}, 0, new int[] {3} )); // + enemyList.add(new Enemy("Baboon" , 1, 6, 0, 12, new DamageType[] {} , new DamageType[] {} , -1, +2, +0, -3, +1, -2, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 1, 1, 4, -1, 7 )}, 0, new int[] {3,5,} )); // Pack Tactics + enemyList.add(new Enemy("Badger" , 1, 4, 1, 10, new DamageType[] {} , new DamageType[] {} , -3, +0, +1, -4, +1, -3, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 2, 1, 1, 0, 7 )}, 0, new int[] {3,4} )); // + enemyList.add(new Enemy("Bat" , 1, 4, -1, 12, new DamageType[] {} , new DamageType[] {} , -4, +2, -1, -4, +1, -3, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 0, 1, 1, 0, 7 )}, 0, new int[] {8} )); // Fly, Immune to Blind + enemyList.add(new Enemy("Cat" , 1, 4, 0, 12, new DamageType[] {} , new DamageType[] {} , -4, +2, +0, -4, +1, -2, new EnemyAttack[] {new EnemyAttack(1, "Claw" , 0, 1, 1, 0, 11 )}, 0, new int[] {3,4,10} )); // + enemyList.add(new Enemy("Commoner" , 1, 8, 0, 10, new DamageType[] {} , new DamageType[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Crab" , 1, 4, 0, 11, new DamageType[] {} , new DamageType[] {} , -4, +0, +0, -5, -1, -4, new EnemyAttack[] {new EnemyAttack(1, "Claw" , 0, 1, 1, 0, 1 )}, 0, new int[] {1} )); // + enemyList.add(new Enemy("Deer" , 1, 8, 0, 13, new DamageType[] {} , new DamageType[] {} , +0, +3, +0, +2, +2, -3, new EnemyAttack[] {new EnemyAttack(1, "Gore" , 2, 1, 4, 0, 7 )}, 0, new int[] {3,4} )); // + enemyList.add(new Enemy("Eagle" , 1, 6, 0, 12, new DamageType[] {} , new DamageType[] {} , -2, +2, +0, -4, +2, -2, new EnemyAttack[] {new EnemyAttack(1, "Talons" , 4, 1, 4, 2, 11 )}, 0, new int[] {5,6} )); // Fly + enemyList.add(new Enemy("Giant Fire Beetle" , 1, 6, 1, 13, new DamageType[] {} , new DamageType[] {} , -1, +0, +1, -5, -2, -4, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 1, 1, 5, 0, 11 )}, 0, new int[] {3,8} )); // Illumninates + enemyList.add(new Enemy("Goat" , 1, 8, 0, 10, new DamageType[] {} , new DamageType[] {} , +6, +5, +0, -4, +0, -3, new EnemyAttack[] {new EnemyAttack(1, "Ram" , 3, 1, 4, 1, 1 ) , new EnemyAttack(1, "Charge", 3, 1, 4, 0, 1, 1)}, 0, new int[] {4,5,6})); // Advantage against Prone + enemyList.add(new Enemy("Hawk" , 1, 4, -1, 13, new DamageType[] {} , new DamageType[] {} , -3, +3, -1, -4, +2, -2, new EnemyAttack[] {new EnemyAttack(1, "Talons" , 5, 1, 1, 2, 11 )}, 0, new int[] {0} )); // Fly + enemyList.add(new Enemy("Homunculus" , 2, 4, 0, 13, new DamageType[] {} , new DamageType[] {} , -3, +2, +0, +0, +0, -2, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 4, 1, 1, 0, 7, 3)}, 0, new int[] {0} )); // Poison, Telepathy, Darkvision + enemyList.add(new Enemy("Hyena" , 1, 8, 1, 11, new DamageType[] {} , new DamageType[] {} , +0, +1, +1, -4, +1, -3, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 2, 1, 6, 0, 7 )}, 0, new int[] {0} )); // Pack Tactics + enemyList.add(new Enemy("Jackal" , 1, 6, 0, 12, new DamageType[] {} , new DamageType[] {} , -1, +2, +0, -4, +1, -2, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 1, 1, 3, 0, 7 )}, 0, new int[] {0} )); // Pack Tactics + enemyList.add(new Enemy("Lemure" , 3, 8, 0, 7, new DamageType[] {DamageType.Cold, DamageType.Fire, DamageType.Piercing}, new DamageType[] {} , +0, -3, +0, -5, +0, -4, new EnemyAttack[] {new EnemyAttack(1, "Punch" , 3, 1, 4, 0, 1 )}, 0, new int[] {0} )); // Darkvision + enemyList.add(new Enemy("Lizard" , 1, 4, 0, 10, new DamageType[] {} , new DamageType[] {} , -4, +0, +0, -5, +1, -4, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 0, 1, 1, 0, 7 )}, 0, new int[] {0} )); // + enemyList.add(new Enemy("Owl" , 1, 4, -1, 11, new DamageType[] {} , new DamageType[] {} , -4, +1, -1, -4, +1, -2, new EnemyAttack[] {new EnemyAttack(1, "Talons" , 3, 1, 1, 0, 11 )}, 0, new int[] {0} )); // Darkvision + enemyList.add(new Enemy("Quipper" , 1, 4, -1, 13, new DamageType[] {} , new DamageType[] {} , -4, +3, -1, -5, -2, -4, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 5, 1, 1, 0, 7 )}, 0, new int[] {9} )); // + enemyList.add(new Enemy("Rat" , 1, 4, -1, 10, new DamageType[] {} , new DamageType[] {} , -4, +0, -1, -4, +0, -3, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 0, 1, 1, 0, 7 )}, 0, new int[] {0} )); // + enemyList.add(new Enemy("Raven" , 1, 4, -1, 12, new DamageType[] {} , new DamageType[] {} , -4, +2, -1, -4, +1, -2, new EnemyAttack[] {new EnemyAttack(1, "Beak" , 4, 1, 1, 0, 7 )}, 0, new int[] {0} )); // + enemyList.add(new Enemy("Scorpion" , 1, 4, -1, 11, new DamageType[] {} , new DamageType[] {} , -4, +0, -1, -5, +1, -4, new EnemyAttack[] {new EnemyAttack(1, "Sting" , 2, 1, 1, 0, 7, 3)}, 0, new int[] {0} )); // Poison damage + enemyList.add(new Enemy("Spider" , 1, 4, -1, 12, new DamageType[] {} , new DamageType[] {} , -4, +2, -1, -5, +0, -4, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 4, 1, 1, 0, 7, 3)}, 0, new int[] {0} )); // Poison damage + enemyList.add(new Enemy("Vulture" , 1, 8, 1, 10, new DamageType[] {} , new DamageType[] {} , -2, +0, +1, -4, +1, -3, new EnemyAttack[] {new EnemyAttack(1, "Beak" , 2, 1, 4, 0, 7 )}, 0, new int[] {0} )); // Pack Tactics + enemyList.add(new Enemy("Weasel" , 1, 4, -1, 13, new DamageType[] {} , new DamageType[] {} , -4, +3, -1, -4, +1, -4, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 5, 1, 1, 0, 7 )}, 0, new int[] {0} )); // + + // CR: 1/8 public Enemy(String name, int healthDie, int healthOf, int healthBonus, int armorClass, int[] resistances, int[] vulnerabilities, int strength, int dexterity, int constitution, int intelligence, int wisdom, int charisma, EnemyAttack[] attacks, double CR, int biome) { + + enemyList.add(new Enemy("Bandit" , 2, 8, 2, 12, new DamageType[] {} , new DamageType[] {} , +0, +1, +1, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Light Crossbow", 3, 1, 8, 1, 7 )}, -8, new int[] {3} )); // + enemyList.add(new Enemy("Blood Hawk" , 2, 6, 0, 12, new DamageType[] {} , new DamageType[] {} , -2, +2, +0, -4, +2, -3, new EnemyAttack[] {new EnemyAttack(1, "Beak" , 4, 1, 4, 2, 7 )}, -8, new int[] {3} )); // Pack Tactics + enemyList.add(new Enemy("Camel" , 2, 10, 4, 9, new DamageType[] {} , new DamageType[] {} , +3, -1, +2, -4, -1, -3, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 5, 1, 4, 0, 1 )}, -8, new int[] {3} )); // + enemyList.add(new Enemy("Cultist" , 1, 6, 0, 12, new DamageType[] {} , new DamageType[] {} , +0, +1, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Scimitar" , 3, 1, 6, 1, 11 )}, -8, new int[] {3} )); // Advantage against charm + enemyList.add(new Enemy("Diseased Giant Rat" , 0, 1, 7, 12, new DamageType[] {} , new DamageType[] {} , -2, +2, +0, -4, +0, -3, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 4, 1, 4, 2, 7, 3)}, -8, new int[] {3} )); // Disease Effect, Pack Tactics + enemyList.add(new Enemy("Flying Snake" , 2, 4, 0, 14, new DamageType[] {} , new DamageType[] {} , -3, +4, +0, -4, +1, -3, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 6, 3, 4, 1, 8 )}, -8, new int[] {3} )); // Fly + enemyList.add(new Enemy("Giant Crab" , 3, 8, 0, 15, new DamageType[] {} , new DamageType[] {} , +1, +2, +0, -5, -1, -4, new EnemyAttack[] {new EnemyAttack(1, "Claw" , 3, 1, 6, 1, 1, 1)}, -8, new int[] {3} )); // Grapple + enemyList.add(new Enemy("Giant Rat" , 2, 6, 0, 12, new DamageType[] {} , new DamageType[] {} , -2, +2, +0, -4, +0, -3, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 4, 1, 4, 2, 7 )}, -8, new int[] {3} )); // + enemyList.add(new Enemy("Giant Weasel" , 2, 8, 0, 13, new DamageType[] {} , new DamageType[] {} , +0, +3, +0, -3, +1, -3, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 5, 1, 4, 3, 7 )}, -8, new int[] {3} )); // + enemyList.add(new Enemy("Guard" , 2, 8, 2, 16, new DamageType[] {} , new DamageType[] {} , +1, +1, +1, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Spear" , 3, 1, 8, 1, 7 )}, -8, new int[] {3} )); // + enemyList.add(new Enemy("Kobold" , 2, 6, -2, 12, new DamageType[] {} , new DamageType[] {} , -2, +2, -1, -1, -2, -1, new EnemyAttack[] {new EnemyAttack(1, "Sling" , 4, 1, 4, 2, 1 )}, -8, new int[] {3} )); // Pack Tactics, Sunlight Sensitivity + enemyList.add(new Enemy("Mastiff" , 1, 8, 1, 12, new DamageType[] {} , new DamageType[] {} , +1, +2, +1, -4, +1, -2, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 3, 1, 6, 1, 7, 1)}, -8, new int[] {3} )); // Prone + enemyList.add(new Enemy("Merfolk" , 2, 8, 2, 11, new DamageType[] {} , new DamageType[] {} , +0, +1, +1, +0, +0, +1, new EnemyAttack[] {new EnemyAttack(1, "Spear" , 2, 1, 6, 0, 7 )}, -8, new int[] {3} )); // Amphibious + enemyList.add(new Enemy("Mule" , 2, 8, 2, 10, new DamageType[] {} , new DamageType[] {} , +2, +0, +1, -4, +0, -3, new EnemyAttack[] {new EnemyAttack(1, "Hooves" , 2, 1, 4, 2, 1 )}, -8, new int[] {3} )); // + enemyList.add(new Enemy("Noble" , 2, 8, 0, 15, new DamageType[] {} , new DamageType[] {} , +0, +1, +0, +1, +2, +3, new EnemyAttack[] {new EnemyAttack(1, "Rapier" , 3, 1, 8, 1, 7 )}, -8, new int[] {3} )); // + enemyList.add(new Enemy("Poisonous Snake" , 1, 4, 0, 13, new DamageType[] {} , new DamageType[] {} , -4, +3, +0, -5, +0, -4, new EnemyAttack[] {new EnemyAttack(1, "Bite" , 5, 2, 4, 0, 8, 3)}, -8, new int[] {3} )); // Poison Damage + enemyList.add(new Enemy("Pnoy" , 2, 8, 2, 10, new DamageType[] {} , new DamageType[] {} , +2, +0, +1, -4, +0, -2, new EnemyAttack[] {new EnemyAttack(1, "Hooves" , 4, 2, 4, 2, 1 )}, -8, new int[] {3} )); // + enemyList.add(new Enemy("Stirge" , 1, 4, 0, 14, new DamageType[] {} , new DamageType[] {} , -3, +3, +0, -4, -1, -2, new EnemyAttack[] {new EnemyAttack(1, "Blood Drain" , 5, 1, 4, 3, 1 )}, -8, new int[] {3} )); // Lifesteal + enemyList.add(new Enemy("Tribal Warrior" , 2, 8, 2, 12, new DamageType[] {} , new DamageType[] {} , +1, +0, +1, -1, +0, -1, new EnemyAttack[] {new EnemyAttack(1, "Spear" , 3, 1, 8, 1, 7 )}, -8, new int[] {3} )); // Pack Tactics + + // CR: 1/4 + /* + enemyList.add(new Enemy("Acolyte" , 2, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Axe Beak" , 3, 10, 3, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Blink Dog" , 4, 8, 4, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Boar" , 2, 8, 2, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Constrictor Snake" , 2, 10, 2, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Draft Horse" , 3, 10, 3, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Dretch" , 4, 6, 4, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Drow" , 3, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Elk" , 2, 10, 2, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Flying Sword" , 5, 6, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Giant Badger" , 2, 8, 4, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Giant Bat" , 4, 10, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Giant Centipede" , 1, 6, 1, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Giant Frog" , 4, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Giant Lizard" , 3, 10, 3, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Giant Owl" , 3, 10, 3, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Giant Poisonous Snake", 2, 8, 2, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Giant Wolf Spider" , 2, 8, 2, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Goblin" , 2, 6, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Grimlock" , 2, 6, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Panther" , 3, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Pseudodragon" , 2, 4, 2, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Riding Horse" , 2, 10, 2, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Skeleton" , 2, 8, 4, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Sprite" , 1, 4, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Steam Mephit" , 6, 6, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Swarm of Bats" , 5, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Swarm of Rats" , 7, 8, -7, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Swarm of Ravens" , 7, 8, -7, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Violet Fungus" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Wolf" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Zombie" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + + // CR: 1/2 + + enemyList.add(new Enemy("Ape" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Black Bear" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Cockatrice" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Crocodile" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Darkmantle" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Deep Gnome" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Dust Mephit" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Giant Goat" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Giant Sea Horse" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Giant Wasp" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Gnoll" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Gray Ooze" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Hobogoblin" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Ice Mephit" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Lizardfolk" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Magma Mephit" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Magmin" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Orc" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Reef Shark" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Rust Monster" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Sahuagin" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Satyr" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Scout" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Shadow" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Swarm of Beetles" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Swarm of Centipedes" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Swarm of Insects" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Swarm of Spiders" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Swarm of Wasps" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Thug" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Warhorse" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Warhorse Skeleton" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Worg" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + + // CR: 1 + + enemyList.add(new Enemy("Commoner" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Commoner" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Commoner" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Commoner" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Commoner" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Commoner" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + enemyList.add(new Enemy("Commoner" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + + + enemyList.add(new Enemy("Commoner" , 1, 8, 0, 10, new int[] {} , new int[] {} , +0, +0, +0, +0, +0, +0, new EnemyAttack[] {new EnemyAttack(1, "Club" , 2, 1, 4, 0, 1 )}, 0, new int[] {10} )); // + +*/ + } +// public EnemyAttack(String name, int toHit, int die, int sides, int damage, int damageType, int numberHits) { + + public boolean handleConditions() { + if (conditions.size()==0) + return false; + System.out.println(this.getName() + ": "); + for (int i = 0; i < conditions.size();i++) + { + System.out.println(conditions.get(i).toString()); + } + for (int i = 0; i < conditions.size(); i++) { + Condition condition = conditions.get(i); + switch (condition.getConditionType()) { + case DamagePerRound: + int damage = witch.dice(condition.getNum(), condition.getOf()); + System.out.println("You dealt " + damage + " residual " + condition.getDamageType().toString() + " damage to the " + this.name + "."); + this.dealDamage(damage, condition.getDamageType()); + break; + case Prone: + System.out.println(this.name + "stands up."); + condition.setnTurns(0); + default: + break; + } + condition.setnTurns(condition.getnTurns()-1); + if (condition.getnTurns() < 1) { + conditions.remove(condition); + i--; + } + } + if (this.getHealth() < 1) { + witch.removeEnemy(this); + return true; + } + return false; + } + + public int attack() { + System.out.println(name + " -"); + int totalDamage = 0; + for (int a = 0; a < attacks.length; a++) { + totalDamage += attacks[a].attack(conditions); + } + witch.playerHealth -= totalDamage; + return totalDamage; + } + + public void calcHealth() { + this.setHealth(dice(healthDie, healthOf) + healthBonus); + if (health < 1) + health = 1; + maxHealth = health; + } + + @Override + public String toString() { + String ret = (name + "\nCR: " + (CR >= 0 ? CR : "1/" + -CR) + "\nHealth: " + healthDie + "d" + healthOf + " + " + healthBonus + "\nArmor Class: " + armorClass + "\nAttacks: \n"); + ret += "Attacks: "; + return ret; +// return "Enemy [name=" + name + ", healthDie=" + healthDie + ", healthOf=" + healthOf + ", healthBonus=" +// + healthBonus + ", armorClass=" + armorClass + ", resistances=" + Arrays.toString(resistances) +// + ", vulnerabilities=" + Arrays.toString(vulnerabilities) + ", strength=" + strength + ", dexterity=" +// + dexterity + ", constitution=" + constitution + ", intelligence=" + intelligence + ", wisdom=" + wisdom +// + ", charisma=" + charisma + ", attacks=" + Arrays.toString(attacks) + ", CR=" + CR + ", biome=" +// + Arrays.toString(biome) + "]"; + } + + + +} + +//public static void newEnemy() { +// witchRunner.enemies.add(new Enemy("Enemy", 0 + dice(1, 10), 10, new int[] {}, new int[] {}, 0, 0, 0, 0, 0, 0, new int[] {})); +//} \ No newline at end of file