anchor.diff:    bool trimmed;
     Rectangle spriteSourceSize;
     Point sourceSize;
  -  _Asset(Map<String, dynamic> asset)
  -      : frame = _createRectangle(asset["frame"]),
  -        trimmed = asset["trimmed"],
  -        spriteSourceSize = _createRectangle(asset["spriteSourceSize"]),
  -        sourceSize = _createPoint(asset["sourceSize"]);
  -}
  -
  -Rectangle<int> _createRectangle(Map<String, int> rect) =>
  -    Rectangle(rect['x'], rect['y'], rect['w'], rect['h']);
  -
  -Point<int> _createPoint(Map<String, int> rect) => Point(rect['w'], rect['h']);
  +  _Asset(_FrameValue asset)
  +      : frame = _createRectangle(asset.frame),
  +        trimmed = asset.trimmed,
  +        spriteSourceSize = _createRectangle(asset.spriteSourceSize),
  +        sourceSize = _createPoint(asset.sourceSize);
  +}
  +
  +Rectangle<int> _createRectangle(_SpriteSourceSizeClass rect) =>
  +    Rectangle(rect.x, rect.y, rect.w, rect.h);
  +
  +Point<int> _createPoint(_Size size) => Point(size.w, size.h);
   
   Future<Map<String, String>> _processAchievementAssets(String assetJson) =>
       Future.value(json.decode(assetJson));
  
positive.code:         String assetJson) =>
      Future.value(json.decode(assetJson));
  
  Future<Map<String, dynamic>> _processAssets(String assetJson) =>
      Future.value(json.decode(assetJson));
  
negative.code:   Rectangle<int> dst;
    Vector2 offset;
    Vector2 trimmed;
    Sprite(_FrameValue singleAsset) {
      final _Asset asset = _Asset(singleAsset);
      src = asset.frame;
      var cx, cy;
  