return new PhysicalOption(entity, best_pod, final_dmg, best_brush);
return new PhysicalOption(entity, best_pod, final_dmg, best_brush, null);
    PhysicalOption getBestPhysical(Entity entity, IGame game) {        // Infantry can't conduct physical attacks.        if (entity instanceof Infantry) {            return null;        }        // if you're charging, it's already declared        if (entity.isCharging() || entity.isMakingDfa()) {            return null;        }        PhysicalOption best = null;        ToHitData odds;        double breach, breach_a, l_dmg, r_dmg, final_dmg;        int best_brush = PhysicalOption.NONE;        // If the attacker is a Mech                if (entity instanceof Mech){                        l_dmg = 0.0;            r_dmg = 0.0;            final_dmg = 0.0;            breach_a = 0.0;                        // If the attacker is being swarmed                        if (entity.getSwarmAttackerId() != Entity.NONE){                        // Check for left arm punch damage to self                                odds = BrushOffAttackAction.toHit(game, entity.getId(),                        game.getEntity(entity.getSwarmAttackerId()), BrushOffAttackAction.LEFT);                if (odds.getValue() != ToHitData.IMPOSSIBLE) {                                        l_dmg = BrushOffAttackAction.getDamageFor(entity, BrushOffAttackAction.LEFT);                    l_dmg *= (1 - Compute.oddsAbove(odds.getValue()) / 100.0);                    breach = punchThroughMod(entity, game, ToHitData.HIT_PUNCH, ToHitData.SIDE_FRONT,                            l_dmg, l_dmg);                    if (breach < 1.5){                        best_brush = PhysicalOption.BRUSH_LEFT;                        breach_a = breach;                        final_dmg = BrushOffAttackAction.getDamageFor(entity, BrushOffAttackAction.LEFT);                    }                }                        // Check for right arm punch damage to self                odds = BrushOffAttackAction.toHit(game, entity.getId(),                        game.getEntity(entity.getSwarmAttackerId()), BrushOffAttackAction.RIGHT);                if (odds.getValue() != ToHitData.IMPOSSIBLE) {                        // If chance of breaching armor is minimal set brush left                                        r_dmg = BrushOffAttackAction.getDamageFor(entity, BrushOffAttackAction.RIGHT);                    r_dmg *= (1 - Compute.oddsAbove(odds.getValue()) / 100.0);                    breach = punchThroughMod(entity, game, ToHitData.HIT_PUNCH, ToHitData.SIDE_FRONT,                            r_dmg, r_dmg);                    if (breach < Math.min(breach_a, 1.5)){                        best_brush = PhysicalOption.BRUSH_RIGHT;                        breach_a = breach;                        final_dmg = BrushOffAttackAction.getDamageFor(entity, BrushOffAttackAction.RIGHT);                    }                }                        // If both arms are capable of punching, check double punch damage                                if (l_dmg > 0 && r_dmg > 0){                            // If chance of breaching armor is minimal set double brush                                        breach = punchThroughMod(entity, game, ToHitData.HIT_PUNCH, ToHitData.SIDE_FRONT,                            l_dmg + r_dmg, (l_dmg + r_dmg)/2);                    if (breach < Math.min(breach_a, 1.5)){                        best_brush = PhysicalOption.BRUSH_BOTH;                        breach_a = breach;                        final_dmg = BrushOffAttackAction.getDamageFor(entity, BrushOffAttackAction.LEFT);                        final_dmg += BrushOffAttackAction.getDamageFor(entity, BrushOffAttackAction.RIGHT);                    }                }                        // Construct and return Physical option                if (best_brush != PhysicalOption.NONE){                    return new PhysicalOption(entity, game.getEntity(entity.getSwarmAttackerId()),                             final_dmg, best_brush);                }            }                    // If the attacker has attached iNarc pods, assign            // a competing damage value for comparison with other            // attacks            if (entity.hasINarcPodsAttached()){                double test_ranking, pod_ranking;                INarcPod test_pod, best_pod;                pod_ranking = 0.0;                Enumeration pod_list = entity.getINarcPodsAttached();                best_pod = (INarcPod) pod_list.nextElement();                for (pod_list = entity.getINarcPodsAttached(); pod_list.hasMoreElements();){                    test_ranking = 1.0;                    test_pod = (INarcPod) pod_list.nextElement();                    // If pod is homing and attacker has no ECM                    if ((test_pod.getType() == INarcPod.HOMING) && !entity.hasActiveECM()){                        // Pod is +1                        test_ranking += 1.0;                    }                    // If pod is ECM and attacker has C3 link                    if ((test_pod.getType() == INarcPod.ECM) && ((entity.hasC3()) ||                             (entity.hasC3i()))){                        // Pod is +2                        test_ranking += 2.0;                    }                    // If pod is Nemesis                    if (test_pod.getType() == INarcPod.NEMESIS){                        // Pod is +variable, based on movement                        test_ranking += (double) (entity.getWalkMP() + entity.getJumpMP())/2;                    }                    // If this pod is best, retain it and its ranking                    if (test_ranking > pod_ranking){                        pod_ranking = test_ranking;                        best_pod = test_pod;                    }                }                if (best_pod != null){                    // Check for left arm punch damage to self                    odds = BrushOffAttackAction.toHit(game, entity.getId(),                            best_pod, BrushOffAttackAction.LEFT);                    if (odds.getValue() != ToHitData.IMPOSSIBLE) {                                                l_dmg = BrushOffAttackAction.getDamageFor(entity,                                 BrushOffAttackAction.LEFT);                        l_dmg *= (1 - Compute.oddsAbove(odds.getValue()) / 100.0);                        breach = punchThroughMod(entity, game, ToHitData.HIT_PUNCH,                                 ToHitData.SIDE_FRONT, l_dmg, l_dmg);                        if (breach < 1.5){                            best_brush = PhysicalOption.BRUSH_LEFT;                            breach_a = breach;                            final_dmg = BrushOffAttackAction.getDamageFor(entity,                                     BrushOffAttackAction.LEFT);                        }                    }                                // Check for right arm punch damage to self                    odds = BrushOffAttackAction.toHit(game, entity.getId(),                            best_pod, BrushOffAttackAction.RIGHT);                    if (odds.getValue() != ToHitData.IMPOSSIBLE) {                                // If chance of breaching armor is minimal set brush left                                                r_dmg = BrushOffAttackAction.getDamageFor(entity, BrushOffAttackAction.RIGHT);                        r_dmg *= (1 - Compute.oddsAbove(odds.getValue()) / 100.0);                        breach = punchThroughMod(entity, game, ToHitData.HIT_PUNCH, ToHitData.SIDE_FRONT,                                r_dmg, r_dmg);                        if (breach < Math.min(breach_a, 1.5)){                            best_brush = PhysicalOption.BRUSH_RIGHT;                            breach_a = breach;                            final_dmg = BrushOffAttackAction.getDamageFor(entity, BrushOffAttackAction.RIGHT);                        }                    }                                // If both arms are capable of punching, check double punch damage                                        if (l_dmg > 0 && r_dmg > 0){                                    // If chance of breaching armor is minimal set double brush                                                breach = punchThroughMod(entity, game, ToHitData.HIT_PUNCH, ToHitData.SIDE_FRONT,                                l_dmg + r_dmg, (l_dmg + r_dmg)/2);                        if (breach < Math.min(breach_a, 1.5)){                            best_brush = PhysicalOption.BRUSH_BOTH;                            breach_a = breach;                            final_dmg = BrushOffAttackAction.getDamageFor(entity, BrushOffAttackAction.LEFT);                            final_dmg += BrushOffAttackAction.getDamageFor(entity, BrushOffAttackAction.RIGHT);                        }                    }                                // Construct and return Physical option                    if(best_brush != PhysicalOption.NONE){                        return new PhysicalOption(entity, best_pod, final_dmg, best_brush);                    }                }            }        }                for (Enumeration e = game.getEntities(); e.hasMoreElements();) {            Entity target = (Entity) e.nextElement();            if (target.equals(entity))                continue;            if (!target.isEnemyOf(entity))                continue;            if (null == target.getPosition())                continue;            if (Compute.effectiveDistance(game, entity, target) > 1)                continue;                        PhysicalOption one = getBestPhysicalAttack(entity, target, game);            if (one != null) {                if (best == null || one.expectedDmg > best.expectedDmg) {                    best = one;                }            }        }        if(best == null) best = new PhysicalOption(entity);           return best;    }