anchor.diff:    }
   
     bool isBorder(int x, int y) {
  -    return x.abs() == 2 || y.abs() == 2;
  +    return x.abs() >= 2 || y.abs() >= 2;
     }
   
     @override
  
positive.code:   final double tunnelLength = 500.0;
    int segmentsPerTunnelSegment = 64 * 2;
    int lastSegmentType = 0;
    final int segmentTypes = 2;
  
    @override
    void processSystem() {
  
negative.code:     while (p.xyz.z ~/ tunnelLength > lastSegment - tunnelLength) {
        world.createAndAddEntity([
          new Position(0.0, 0.0, tunnelLength * lastSegment),
          new TunnelSegment(tunnelLength, createTunnelSegments(175.0 * 175.0 * PI ))
        ]);
        lastSegment++;
      }
    }
  
    Float32List createTunnelSegments(double area) {
      var nextSegmentType = (random.nextDouble() < 0.8)
          ? lastSegmentType
          : random.nextInt(segmentTypes);
      var segmentType = [lastSegmentType, nextSegmentType];
      var radius = [
        GeometryGenerator.shapeRadiusCalculators[lastSegmentType](area),
        GeometryGenerator.shapeRadiusCalculators[nextSegmentType](area)
      ];
      lastSegmentType = nextSegmentType;
      var segments = new Float32List(segmentsPerTunnelSegment * 2);
  
      for (int segment = 0; segment < segmentsPerTunnelSegment; segment += 1) {
        var x = 0.0, y = 0.0;
        switch (segmentType[segment % 2]) {
          case 0:
            var segmentMod = segment - segmentsPerTunnelSegment ~/ 8;
            final angle = 2 * PI * segmentMod / segmentsPerTunnelSegment;
            x = cos(angle);
            y = sin(angle);
            break;
          case 1:
            var i = segment ~/ (segmentsPerTunnelSegment ~/ 4);
            var j = segment % (segmentsPerTunnelSegment ~/ 4);
            switch (i) {
  