}  if ( ae.getJumpType() == Mech.JUMP_BOOSTER) { return new ToHitData(ToHitData.IMPOSSIBLE, "Can't D.F.A. using mechanical jump boosters.");
    public static ToHitData toHit(IGame game, int attackerId, Targetable target, MovePath md) {        final Entity ae = game.getEntity(attackerId);        // Do to pretreatment of physical attacks, the target may be null.        if (target == null) {            return new ToHitData(ToHitData.IMPOSSIBLE, "Target is null");        }        Entity te = null;        if ( target.getTargetType() == Targetable.TYPE_ENTITY ) {            te = (Entity) target;        }        Coords chargeSrc = ae.getPosition();        MoveStep chargeStep = null;        // Infantry CAN'T dfa!!!        if ( ae instanceof Infantry ) {            return new ToHitData(ToHitData.IMPOSSIBLE, "Infantry can't D.F.A.");        }        // let's just check this        if (!md.contains(MovePath.STEP_DFA)) {            return new ToHitData(ToHitData.IMPOSSIBLE, "D.F.A. action not found in movment path");        }        // have to jump        if (!md.contains(MovePath.STEP_START_JUMP)) {            return new ToHitData(ToHitData.IMPOSSIBLE, "D.F.A. must involve jumping");        }        // Can't target a transported entity.        if ( te != null && Entity.NONE != te.getTransportId() ) {            return new ToHitData(ToHitData.IMPOSSIBLE, "Target is a passenger.");        }        // can't make physical attacks while spotting        if (ae.isSpotting()) {            return new ToHitData(ToHitData.IMPOSSIBLE, "Attacker is spotting this turn");        }        // Can't target a entity conducting a swarm attack.        if ( te != null && Entity.NONE != te.getSwarmTargetId() ) {            return new ToHitData(ToHitData.IMPOSSIBLE, "Target is swarming a Mek.");        }        // determine last valid step        md.compile(game, ae);        for (final Enumeration i = md.getSteps(); i.hasMoreElements();) {            final MoveStep step = (MoveStep)i.nextElement();            if (!step.isLegal()) {                break;            } else {                if (step.getType() == MovePath.STEP_DFA) {                    chargeStep = step;                } else {                    chargeSrc = step.getPosition();                }            }        }        // need to reach target        if (chargeStep == null || !target.getPosition().equals(chargeStep.getPosition())) {            return new ToHitData(ToHitData.IMPOSSIBLE, "Could not reach target with movement");        }        // target must have moved already        if ( te != null && !te.isDone() ) {            return new ToHitData(ToHitData.IMPOSSIBLE, "Target must be done with movement");        }        return toHit(game, attackerId, target, chargeSrc);    }