anchor.diff:          _toggleFlag(x, y);
         } else if(ss == SquareState.revealed) {
           if(game.canReveal(x, y)) {
  -          _addDartAnimation(new dartlib.Coordinate(x, y));
  +          // get adjacent ballons
  +          final adjHidden = dartlib.$(game.field.getAdjacentIndices(x, y))
  +              .select((i) {
  +                final t = game.field.getCoordinate(i);
  +                return new dartlib.Coordinate(t.Item1, t.Item2);
  +              })
  +              .where((t) => game.getSquareState(t.x, t.y) == SquareState.hidden)
  +              .toList();
  +
  +          assert(adjHidden.length > 0);
  +
  +          _startDartAnimation(adjHidden);
             reveals = game.reveal(x, y);
           }
         }
       } else {
         if(ss == SquareState.hidden) {
  -        _addDartAnimation(new dartlib.Coordinate(x, y));
  +        _startDartAnimation([new dartlib.Coordinate(x, y)]);
           reveals = game.reveal(x, y);
         }
       }
  
positive.code:     }
    }
  
    void _addDartAnimation(dartlib.Coordinate point) {
      final squareOffset = _dartAnimationOffset +
          new dartlib.Vector(SquareElement._size * point.x, SquareElement._size * point.y);
  
      _dartAnimationLayer.add(new TextAniRequest('dart_fly_shadow', 56, squareOffset));
      _dartAnimationLayer.add(new TextAniRequest('dart_fly', 56, squareOffset));
    }
  
    void _squareClicked(ElementMouseEventArgs args) {
  
negative.code:         assert(first.x == x);
          assert(first.y == y);
        }
        _startPopAnimation(new dartlib.Coordinate(x, y), reveals);
      } else if(game.state == GameState.lost) {
        _startPopAnimation(new dartlib.Coordinate(x, y));
      }
    }
  
  