public boolean actionPlant(Actor actor, Tile t) {
    final Flora f = new Flora(t.habitat()) ;
    f.setPosition(t.x, t.y, t.world) ;
    if (! f.canPlace()) {
      stage = STAGE_RETURN ;
      return false ;
    }
    
    float growStage = -0.5f ;
    for (Item seed : actor.gear.matches(seedMatch())) {
      growStage += (1 + seed.quality) / 2f ;
      break ;
    }
    
    if (actor.traits.test(CULTIVATION, MODERATE_DC, 5f)) growStage += 0.75f ;
    if (actor.traits.test(HARD_LABOUR, ROUTINE_DC , 5f)) growStage += 0.75f ;
    if (growStage <= 0) return false ;
    
    f.enterWorld() ;
    f.incGrowth(growStage * (Rand.num() + 1) / 4, t.world, true) ;
    
    //
    //  TODO:  If you still have seed left, try picking another site...
    stage = STAGE_RETURN ;
    return true ;
  }