public void combatAction(Robot source, Robot target, Ability ability) {
        int power = ability.getBasePower();
        boolean crit = RNG.proc(ability.getCritChance());
        boolean hit = RNG.proc(ability.getHitChance());

        System.out.println(source.getName() + " used " + ability.getName() + "");
        if (ability.isTargetEnemy()) {
            if (hit) {
                if (crit) {
                    System.out.println("CRIT!");
                    power += source.getBasePhysAttack();
                }

                if (ability.isPhysical()) {
                    power += source.getBasePhysAttack();
                    power -= target.getBasePhysDefense();
                } else {
                    power += source.getBaseSpecAttack();
                    power -= target.getBaseSpecDefense();
                }

                if (target.getShield() > 0) {
                    target.setShield(target.getShield() - power);
                } else {
                    target.setHealth(target.getHealth() - power);
                }
                System.out.println(target.getName() + " shield is at " + target.getShield());
                System.out.println(target.getName() + " health is at " + target.getHealth() + "\n");
            } else {
                System.out.println("MISS!\n");
                power = 0;
            }
        } else {
            if (hit) {
                if (crit) {
                    power += ability.getBasePower();
                }
                source.setHealth(source.getHealth() + power);
                System.out.println(source.getName() + " health is at " + source.getHealth() + "\n");
            } else {
                System.out.println(ability.getName() + " does nothing...\n");
            }
        }
    }