Search in sources :

Example 1 with Attack

use of eidolons.game.battlecraft.rules.combat.attack.Attack in project Eidolons by IDemiurge.

the class ActionAnimation method drawDamageFormulaBonuses.

// TODO include RESISTANCE; add EXTENDED MAP that will update things like
// SIDE_MOD, CLOSE_QUARTERS...
protected boolean drawDamageFormulaBonuses(AnimPhase phase) {
    Attack attack = (Attack) phase.getArgs()[0];
    Map<MOD_IDENTIFIER, Integer> modsMap = (Map<MOD_IDENTIFIER, Integer>) phase.getArgs()[1];
    Map<MOD_IDENTIFIER, Integer> bonusesMap = (Map<MOD_IDENTIFIER, Integer>) phase.getArgs()[2];
    drawIconMap(getImageMapFromIds(attack, new ListMaster<MOD_IDENTIFIER>().getStringMap(bonusesMap)));
    Integer totalMod = 0;
    for (Integer mod : modsMap.values()) {
        totalMod += mod;
    }
    if (totalMod == 0) {
        return true;
    }
    String text = StringMaster.getModifierString(totalMod);
    int y = (h - fontHeight) / 2;
    drawTextOnTarget(text, font, w, y, getColorForModifier(totalMod));
    addMouseItem(false, w, y, FontMaster.getStringWidth(font, text), fontHeight, new MouseItemImpl(MOUSE_ITEM.SUB_PHASE, PHASE_TYPE.DAMAGE_FORMULA_MODS));
    return true;
}
Also used : MOD_IDENTIFIER(eidolons.game.battlecraft.rules.combat.attack.AttackCalculator.MOD_IDENTIFIER) Attack(eidolons.game.battlecraft.rules.combat.attack.Attack) XLinkedMap(main.data.XLinkedMap)

Example 2 with Attack

use of eidolons.game.battlecraft.rules.combat.attack.Attack in project Eidolons by IDemiurge.

the class FutureBuilder method getDamage.

public static int getDamage(DC_ActiveObj active, Obj targetObj, Effect e, Boolean min_max_normal) {
    Integer damage;
    Ref ref = active.getOwnerObj().getRef().getCopy();
    ref.setTarget(targetObj.getId());
    ref.setID(KEYS.ACTIVE, active.getId());
    e.setRef(ref);
    if (e instanceof DealDamageEffect) {
        ref.setAmount(e.getFormula().getInt(ref));
        if (((DealDamageEffect) e).getDamageType() != null) {
            ref.setValue(KEYS.DAMAGE_TYPE, ((DealDamageEffect) e).getDamageType().toString());
        }
        damage = DamageCalculator.precalculateDamage(ref);
    } else {
        Attack attack = ((AttackEffect) e).initAttack();
        // attack.setAttacked((DC_HeroObj) targetObj);
        Map<String, Integer> _cache = getCache(min_max_normal);
        damage = _cache.get(getCacheKey(active, targetObj));
        if (damage == null) {
            damage = DamageCalculator.precalculateDamage(attack, min_max_normal);
            _cache.put(getCacheKey(active, targetObj), damage);
        }
    }
    // active.toBase();
    LogMaster.log(1, active.getName() + " on " + targetObj.getName() + " - damage precalculated: " + damage);
    return damage;
}
Also used : Ref(main.entity.Ref) AttackEffect(eidolons.ability.effects.oneshot.attack.AttackEffect) DealDamageEffect(eidolons.ability.effects.oneshot.DealDamageEffect) Attack(eidolons.game.battlecraft.rules.combat.attack.Attack)

Example 3 with Attack

use of eidolons.game.battlecraft.rules.combat.attack.Attack in project Eidolons by IDemiurge.

the class AttackDamageTest method testDamageCalc.

@Test
public void testDamageCalc() {
    DC_ActiveObj action = entity.getAttack().getSubActions().get(0);
    // setAveraged(true);
    action.activateOn(entity2);
    Attack attack = DC_AttackMaster.getAttackFromAction(action);
    int precalc = DamageCalculator.precalculateDamage(attack);
    // DamageFactory.getDamageFromAttack(attack);
    printingAsserts.assertEqualAndLog(action.getDamageDealt().getAmount(), precalc, action + " dmg precalc", action + " Damage Dealt");
}
Also used : Attack(eidolons.game.battlecraft.rules.combat.attack.Attack) DC_ActiveObj(eidolons.entity.active.DC_ActiveObj) TwoUnitsTest(tests.entity.TwoUnitsTest) Test(org.junit.Test)

Example 4 with Attack

use of eidolons.game.battlecraft.rules.combat.attack.Attack in project Eidolons by IDemiurge.

the class InstantAttackRule method getInterruptChance.

private static int getInterruptChance(INSTANT_ATTACK_TYPE type, DC_ActiveObj attackAction, Unit attacked) {
    Unit attacker = attackAction.getOwnerObj();
    Attack a = DC_AttackMaster.getAttackFromAction(attackAction);
    int damage = a.getDamageDealt();
    if (damage == 0) {
        return 0;
    }
    // attackAction.getIntParam(PARAMS.DAMAGE_LAST_DEALT);
    int chance = damage * 100 / attacked.getIntParam(PARAMS.TOUGHNESS);
    // TODO force vs weight?
    // if (InterruptRule.isDamageInterrupting(damage, attacked))
    PARAMS stopChanceMod = null;
    PARAMS passChanceMod = null;
    // ContentManager.getPARAM(valueName)
    switch(type) {
        case DISENGAGEMENT:
            stopChanceMod = PARAMS.STOP_DISENGAGEMENT_CHANCE_MOD;
            passChanceMod = PARAMS.PASS_DISENGAGEMENT_CHANCE_MOD;
            break;
        case ENGAGEMENT:
            stopChanceMod = PARAMS.STOP_ENGAGEMENT_CHANCE_MOD;
            passChanceMod = PARAMS.PASS_ENGAGEMENT_CHANCE_MOD;
            break;
        case FLIGHT:
            stopChanceMod = PARAMS.STOP_FLIGHT_CHANCE_MOD;
            passChanceMod = PARAMS.PASS_FLIGHT_CHANCE_MOD;
            break;
        case PASSAGE:
            stopChanceMod = PARAMS.STOP_PASSAGE_CHANCE_MOD;
            passChanceMod = PARAMS.PASS_PASSAGE_CHANCE_MOD;
            break;
        case STUMBLE:
            // also apply Interrupt effect on sta/foc?
            return chance;
    }
    // String tip = "Chance: " + StringMaster.wrapInParenthesis(value)
    int stop = chance * 100 * attacker.getIntParam(stopChanceMod);
    int pass = chance * 100 * attacked.getIntParam(passChanceMod);
    return chance - pass + stop;
}
Also used : Attack(eidolons.game.battlecraft.rules.combat.attack.Attack) PARAMS(eidolons.content.PARAMS) Unit(eidolons.entity.obj.unit.Unit)

Example 5 with Attack

use of eidolons.game.battlecraft.rules.combat.attack.Attack in project Eidolons by IDemiurge.

the class DC_ImageMaster method getImageDynamic.

// units - by status
public static Image getImageDynamic(MOD_IDENTIFIER mod, Object... values) {
    Image image = null;
    int value = StringMaster.getInteger((values.length == 0 ? 0 : values[0]).toString());
    Attack attack = (Attack) (values.length < 2 ? null : values[1]);
    switch(mod) {
        case AMMO:
            return getProcessedImage(attack.getWeapon().getRef().getObj(KEYS.AMMO).getImage());
        case ATK_DEF:
            return // ACCURACY
            value > 0 ? // ACCURACY
            ImageManager.getValueIcon(PARAMS.ATTACK) : ImageManager.getValueIcon(PARAMS.DEFENSE);
        case RANDOM:
            int n = attack.getWeapon().getIntParam(PARAMS.DIE_SIZE) * attack.getWeapon().getIntParam(PARAMS.DICE) / 2;
            Boolean luck = RollMaster.getLuck(value, n);
            return ImageManager.getDiceIcon(luck, true);
        case WEAPON:
            image = attack.getWeapon().getIcon().getImage();
            return getProcessedImage(image);
        case ACTION:
            image = attack.getAction().getIcon().getImage();
            return getProcessedImage(image);
        case UNIT:
            image = attack.getAttacker().getIcon().getImage();
            return getProcessedImage(image);
        case EXTRA_ATTACK:
            if (attack.isAttackOfOpportunity()) {
                image = STD_IMAGES.ATTACK_OF_OPPORTUNITY.getImage();
            } else if (attack.isCounter()) {
                image = STD_IMAGES.COUNTER_ATTACK.getImage();
            } else if (attack.isInstant()) {
                image = STD_IMAGES.INSTANT_ATTACK.getImage();
            }
            image = ImageManager.applyBorder(image, BORDER.CIRCLE_GLOW_32);
            return image;
        case RESISTANCE:
            if (value > 0) {
                return ImageManager.getValueIcon(PARAMS.RESISTANCE);
            }
            return ImageManager.getValueIcon(PARAMS.RESISTANCE_PENETRATION);
        case ARMOR:
            if (value > 0) {
                return ImageManager.getValueIcon(PARAMS.ARMOR);
            }
            return ImageManager.getValueIcon(PARAMS.ARMOR_PENETRATION);
    }
    return ImageManager.getEmptyEmblem().getImage();
}
Also used : Attack(eidolons.game.battlecraft.rules.combat.attack.Attack) BufferedImage(java.awt.image.BufferedImage)

Aggregations

Attack (eidolons.game.battlecraft.rules.combat.attack.Attack)6 MOD_IDENTIFIER (eidolons.game.battlecraft.rules.combat.attack.AttackCalculator.MOD_IDENTIFIER)2 XLinkedMap (main.data.XLinkedMap)2 DealDamageEffect (eidolons.ability.effects.oneshot.DealDamageEffect)1 AttackEffect (eidolons.ability.effects.oneshot.attack.AttackEffect)1 PARAMS (eidolons.content.PARAMS)1 DC_ActiveObj (eidolons.entity.active.DC_ActiveObj)1 Unit (eidolons.entity.obj.unit.Unit)1 BufferedImage (java.awt.image.BufferedImage)1 Ref (main.entity.Ref)1 Test (org.junit.Test)1 TwoUnitsTest (tests.entity.TwoUnitsTest)1