ae.setMakingDfa(false);
ae.setDisplacementAttack(null);
    private void resolveDfaAttack(DfaAttackAction daa, int lastEntityId) {        final Entity ae = game.getEntity(daa.getEntityId());        final Entity te = game.getEntity(daa.getTargetId());                // is the attacker dead?  because that sure messes up the calculations        if (ae == null) {            return;        }                final int direction = ae.getFacing();        if (lastEntityId != daa.getEntityId()) {            phaseReport.append("\nPhysical attacks for " + ae.getDisplayName() + "\n");        }        // entity isn't charging any more        ae.setMakingDfa(false);        // should we even bother?        if (te == null || te.isDestroyed() || te.isDoomed() || te.crew.isDead()) {            phaseReport.append("    Death from above cancelled as the target has been destroyed.\n");            return;        }        phaseReport.append("    Attempting death from above on " + te.getDisplayName());        // target still in the same position?        if (!te.getPosition().equals(daa.getTargetPos())) {            phaseReport.append(" but the target has moved.\n");            return;        }                // compute to-hit        ToHitData toHit = Compute.toHitDfa(game, daa);        // hack: if the attacker's prone, fudge the roll        int roll;        if (ae.isProne()) {            roll = -12;            phaseReport.append(" but the attacker is prone : ");        } else if (toHit.getValue() == ToHitData.IMPOSSIBLE) {            roll = -12;            phaseReport.append(" but the attack is impossible (" + toHit.getDesc() + ") : ");        } else {            // roll            roll = Compute.d6(2);            phaseReport.append("; needs " + toHit.getValue() + ", ");            phaseReport.append("rolls " + roll + " : ");        }        // do we hit?        if (roll < toHit.getValue()) {            Coords src = ae.getPosition();            Coords dest = te.getPosition();            Coords targetDest = Compute.getPreferredDisplacement(game, te.getId(), dest, direction);            phaseReport.append("misses.\n");            if (targetDest != null) {                // move target to preferred hex                doEntityDisplacement(te, dest, targetDest, null);                // attacker falls into destination hex                phaseReport.append(ae.getDisplayName() + " falls into hex " + dest.getBoardNum() + ".\n");                doEntityFall(ae, dest, 2, 3, Compute.getBasePilotingRoll(game, ae.getId()));            } else {                // attacker destroyed                phaseReport.append("*** " + ae.getDisplayName()                                   + " DESTROYED due to impossible displacement! ***");                ae.setDoomed(true);            }            return;        }        // we hit...        int damage = Compute.getDfaDamageFor(ae);        int damageTaken = Compute.getDfaDamageTakenBy(ae);        phaseReport.append("hits.");        phaseReport.append("\n  Defender takes " + damage + " damage" + toHit.getTableDesc() + ".");        while (damage > 0) {            int cluster = Math.min(5, damage);            HitData hit = te.rollHitLocation(toHit.getHitTable(), toHit.getSideTable());            phaseReport.append(damageEntity(te, hit, cluster));            damage -= cluster;        }        phaseReport.append("\n  Attacker takes " + damageTaken + " damage.");        while (damageTaken > 0) {            int cluster = Math.min(5, damageTaken);            HitData hit = te.rollHitLocation(ToHitData.HIT_KICK, toHit.SIDE_FRONT);            phaseReport.append(damageEntity(ae, hit, cluster));            damageTaken -= cluster;        }        phaseReport.append("\n");                // defender pushed away or destroyed        Coords src = ae.getPosition();        Coords dest = te.getPosition();        Coords targetDest = Compute.getValidDisplacement(game, te.getId(), dest, direction);        if (targetDest != null) {            doEntityDisplacement(te, dest, targetDest, new PilotingRollData(te.getId(), 2, "hit by death from above"));        } else {            // ack!  automatic death!            phaseReport.append("*** " + te.getDisplayName() + " DESTROYED due to impossible displacement! ***");            te.setDoomed(true);        }        doEntityDisplacement(ae, src, dest, new PilotingRollData(ae.getId(), 4, "executed death from above"));    }