private void describeSkills(Description d, HUD UI) {
    //
    //  Describe attributes, skills and psyonic techniques.
    d.append("Attributes: ") ;
    for (Skill skill : traits.attributes()) {
      final int level = (int) traits.traitLevel(skill) ;
      final int bonus = (int) traits.effectBonus(skill) ;
      d.append("\n  "+skill.name+" "+level+" ") ;
      d.append(Skill.attDesc(level), Skill.skillTone(level)) ;
      if (bonus != 0) {
        d.append((bonus >= 0 ? " (+" : " (-")+Math.abs(bonus)+")") ;
      }
    }
    d.append("\n\nSkills: ") ;
    final List <Skill> sorting = new List <Skill> () {
      protected float queuePriority(Skill skill) {
        return traits.traitLevel(skill) ;
      }
    } ;
    
    for (Skill skill : traits.skillSet()) sorting.add(skill) ;
    sorting.queueSort() ;
    for (Skill skill : sorting) {
      final int level = (int) traits.traitLevel(skill) ;
      final int bonus = (int) (
          traits.rootBonus(skill) +
          traits.effectBonus(skill)
      ) ;
      final Colour tone = Skill.skillTone(level) ;
      d.append("\n  "+skill.name+" "+level+" ", tone) ;
      if (bonus != 0) {
        d.append((bonus >= 0 ? "(+" : "(-")+Math.abs(bonus)+")") ;
      }
    }
    
    /*
    d.append("\n\nTechniques: ") ;
    for (Power p : traits.powers()) {
      d.append("\n  "+p.name) ;
    }
    //*/
  }