phaseReport.append("hits" + toHit.getTableDesc() + " " + te.getLocationAbbr(hit));
phaseReport.append("hits" ).append( toHit.getTableDesc() ).append( " " ).append( te.getLocationAbbr(hit));
    private void resolvePunchAttack(PunchAttackAction paa, int lastEntityId) {        final Entity ae = game.getEntity(paa.getEntityId());        final Entity te = game.getEntity(paa.getTargetId());        final String armName = paa.getArm() == PunchAttackAction.LEFT        ? "Left Arm" : "Right Arm";                if (lastEntityId != paa.getEntityId()) {            phaseReport.append("\nPhysical attacks for " + ae.getDisplayName() + "\n");        }                phaseReport.append("    Punch (" +armName + ") at " + te.getDisplayName());        //        // should we even bother?//        if (te.isDestroyed() || te.isDoomed() || te.crew.isDead()) {//            phaseReport.append(" but the target is already destroyed!\n");//            return;//        }        // compute to-hit        ToHitData toHit = Compute.toHitPunch(game, paa);        if (toHit.getValue() == ToHitData.IMPOSSIBLE) {            phaseReport.append(", but the punch is impossible (" + toHit.getDesc() + ")\n");            return;        }        phaseReport.append("; needs " + toHit.getValue() + ", ");                // roll        int roll = Compute.d6(2);        phaseReport.append("rolls " + roll + " : ");                // do we hit?        if (roll < toHit.getValue()) {            phaseReport.append("misses.\n");            return;        }        int damage = Compute.getPunchDamageFor(ae, paa.getArm());                HitData hit = te.rollHitLocation(toHit.getHitTable(), toHit.getSideTable());        phaseReport.append("hits" + toHit.getTableDesc() + " " + te.getLocationAbbr(hit));        phaseReport.append(damageEntity(te, hit, damage));                phaseReport.append("\n");    }