public float afterShields(float damage, boolean physical) {
    if (damage <= 0 || ! actor.health.conscious()) return damage ;
    float reduction = shieldCharge() * Rand.num() ;
    if (physical) reduction /= 2 ;
    if (reduction > damage) reduction = damage ;
    currentShields -= reduction / SHIELD_CHARGE ;
    return damage - reduction ;
  }