protected void addTrees( GridNode64 terrain, double x, double y, double size, List<double[]> atCoords ) {
		double subSize = size/8;
		if( size <= 8 ) {
			for( int sy=0; sy<8; ++sy ) {
				for( int sx=0; sx<8; ++sx ) {
					Block[] stack = terrain.blockStacks[sx + 8 * sy];
					boolean canPlaceHere = false;
					for( int z=0; z<stack.length; ++z ) {
						if( (stack[z].flags & Block.FLAG_WALKABLE) != 0 ) {
							canPlaceHere = true; break;
						}
					}
					if( canPlaceHere && r.nextInt(64) < 1 ) {
						atCoords.add( new double[]{ x + (sx+0.5)*subSize, y + (sx+0.5)*subSize } );
					}
				}
			}
		} else {
			for( int sy=0; sy<8; ++sy ) {
				for( int sx=0; sx<8; ++sx ) {
					addTrees( terrain.subNodes[sx + 8 * sy], x + sx*subSize, y + sy*subSize, subSize, atCoords );
				}
			}
		}
	}