public float priorityFor(Actor actor) {
    if (stage >= STAGE_DONE || ! canTalk(other)) return 0 ;
    float
      value    = actor.mind.relationValue(other),
      novelty  = actor.mind.relationNovelty(other),
      solitude = actor.mind.solitude() ;
    
    novelty *= (actor.traits.scaleLevel(INQUISITIVE) + 1) / 2f ;
    if (! actor.mind.hasRelation(other)) novelty *= solitude ;
    else novelty *= (1 + solitude) / 2f ;
    
    float impetus = (IDLE * value * 2) + (novelty * ROUTINE) ;
    if (other.base() == actor.base()) {
      impetus += actor.base().communitySpirit() ;
    }
    impetus *= actor.traits.scaleLevel(SOCIABLE) ;
    
    if (verbose && I.talkAbout == actor) {
      I.say("\n  Priority for talking to "+other+" is: "+impetus) ;
      I.say("  Value/novelty: "+value+"/"+novelty) ;
    }
    return Visit.clamp(impetus, 0, URGENT) ;
  }