public boolean actionDoTreat(Actor actor, Actor patient) {
    if (! canTreat()) return false ;
    
    final Item used = Item.withAmount(accessory, 0.1f) ;
    final boolean hasUsed = actor.gear.hasItem(used) ;
    
    float checkMod = hasUsed ? 0 : +5 ;
    checkMod -= diagnoseBonus() ;
    float success = Rand.num(), speed = 1 ;
    if (actor.traits.test(majorSkill, treatDC + checkMod, 0.5f)) {
      success++ ;
    }
    else success-- ;
    if (actor.traits.test(minorSkill, treatDC + checkMod - 5, 0.5f)) {
      success++ ;
    }
    else success-- ;
    if (actor.gear.hasItem(used) && success > 0) {
      success += 2 ;
      speed++ ;
      actor.gear.removeItem(used) ;
    }
    
    if (success > 0) {
      final Item treatResult = treatResult() ;
      if (treatResult != null && treatResult != result) result = treatResult ;
      
      Item added = Item.withAmount(result, speed * 0.1f) ;
      added = Item.withQuality(added, (int) success) ;
      patient.gear.addItem(added) ;
      actionAsItem(patient, patient) ;
      return true ;
    }
    return false ;
  }