public void populateFauna(
    final Species... species
  ) {
    //
    //  Okay.  First of all, there ought to be a minimum distance between lairs.
    //  Secondly, it might be simplest to just sample the dozen closest lairs
    //  and their occupants to get an idea of predator quotients.
    //
    //  Thirdly... well, terrain sampling can proceed as before.  But
    //  reproduction should probably be limited to once every couple of days-
    //  and longer, for predators.
    //
    //  Fourthly, for animals, maturation should probably be spurred primarily
    //  by food ingestion.  (Lifespan is a maximum only.)  And lairs have no
    //  maximum occupancy- crowding is rated based on abundance of nearby
    //  food sources.
    //
    //  During setup, whichever species is considered least abundant at a given
    //  site will be installed first.
    
    final int SS = World.SECTOR_SIZE ;
    int numAttempts = (world.size * world.size * 4) / (SS * SS) ;
    I.say("No. of attempts: "+numAttempts) ;
    final Base wildlife = world.baseWithName(Base.KEY_WILDLIFE, true, true) ;
    
    while (numAttempts-- > 0) {
      Tile tried = world.tileAt(
        Rand.index(world.size),
        Rand.index(world.size)
      ) ;
      tried = Spacing.nearestOpenTile(tried, tried) ;
      if (tried == null) continue ;
      Nest toPlace = null ;
      float bestRating = 0 ;
      
      for (Species s : species) {
        final Nest nest = Nest.siteNewLair(s, tried, world) ;
        if (nest == null) continue ;
        final float
          idealPop = Nest.idealNestPop(s, nest, world, false),
          adultMass = s.baseBulk * s.baseSpeed,
          rating = (idealPop * adultMass) + 0.5f ;
        if (rating > bestRating) { toPlace = nest ; bestRating = rating ; }
      }
      
      if (toPlace != null) {
        I.say("New lair for "+toPlace.species+" at "+toPlace.origin()) ;
        toPlace.doPlace(toPlace.origin(), null) ;
        toPlace.assignBase(wildlife) ;
        toPlace.structure.setState(Structure.STATE_INTACT, 1) ;
        final Species s = toPlace.species ;
        final float adultMass = s.baseBulk * s.baseSpeed ;
        float bestPop = bestRating / adultMass ;
        
        while (bestPop-- > 0) {
          final Fauna f = toPlace.species.newSpecimen() ;
          f.health.setupHealth(Rand.num(), 0.9f, 0.1f) ;
          f.mind.setHome(toPlace) ;
          f.assignBase(wildlife) ;
          f.enterWorldAt(toPlace, world) ;
          f.goAboard(toPlace, world) ;
        }
      }
    }
  }