Examples
Real OCF documents, from a fully-annotated set play to a minimal quick-mode sketch. Each one validates against the current JSON Schema.
3-Man Weave
Classic 3-player weave from full court. Players pass and follow their pass, weaving across the court to finish at the basket.
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"sport": "basketball",
"meta": {
"id": "a3c2e1d0-9b8f-4a7e-b6c5-1d2e3f4a5b6c",
"title": "3-Man Weave",
"description": "Classic 3-player weave from full court. Players pass and follow their pass, weaving across the court to finish at the basket.",
"author": "OCF Examples",
"tags": [
"passing",
"transition",
"full-court",
"3-player",
"beginner",
"conditioning"
],
"difficulty": "beginner",
"created": "2025-02-27T10:00:00Z",
"source_format": "open"
},
"court": {
"ruleset": "fiba",
"type": "full_court",
"drill_focus": "offense"
},
"entities": [
{
"type": "offense",
"nr": 1,
"x": 0,
"y": -14
},
{
"type": "offense",
"nr": 2,
"x": -5,
"y": -14
},
{
"type": "offense",
"nr": 3,
"x": 5,
"y": -14
}
],
"balls": [
{
"id": "ball_1",
"carried_by": "offense_1"
}
],
"frames": [
{
"id": "frame_1",
"label": "Start",
"description": "offense_1 passes to offense_2 and follows the pass, cutting behind offense_2.",
"actions": [
{
"player": "offense_1",
"type": "pass",
"to_player": "offense_2",
"ball_id": "ball_1",
"variant": "chest",
"intensity": "normal"
},
{
"player": "offense_1",
"type": "cut",
"intensity": "fast",
"moves": [
{
"to": {
"x": -3,
"y": -11
}
}
],
"after": "offense_1.pass"
}
],
"end_state": {
"offense_1": {
"x": -3,
"y": -11
},
"offense_2": {
"x": -5,
"y": -14
},
"offense_3": {
"x": 5,
"y": -14
},
"balls": {
"ball_1": {
"carried_by": "offense_2"
}
}
}
},
{
"id": "frame_2",
"label": "First Exchange",
"description": "offense_2 dribbles to the middle and passes to offense_3, then follows the pass.",
"actions": [
{
"player": "offense_2",
"type": "dribble",
"ball_id": "ball_1",
"intensity": "normal",
"moves": [
{
"to": {
"x": 0,
"y": -8
}
}
]
},
{
"player": "offense_2",
"type": "pass",
"to_player": "offense_3",
"ball_id": "ball_1",
"variant": "chest",
"intensity": "normal",
"after": "offense_2.dribble"
},
{
"player": "offense_2",
"type": "cut",
"intensity": "fast",
"moves": [
{
"to": {
"x": 3.5,
"y": -4
}
}
],
"after": "offense_2.pass"
},
{
"player": "offense_1",
"type": "move",
"intensity": "normal",
"moves": [
{
"to": {
"x": -5,
"y": -8
}
}
]
}
],
"end_state": {
"offense_1": {
"x": -5,
"y": -8
},
"offense_2": {
"x": 3.5,
"y": -4
},
"offense_3": {
"x": 5,
"y": -8
},
"balls": {
"ball_1": {
"carried_by": "offense_3"
}
}
}
},
{
"id": "frame_3",
"label": "Second Exchange",
"description": "offense_3 dribbles toward the middle and passes to offense_1 cutting from the left, then follows.",
"actions": [
{
"player": "offense_3",
"type": "dribble",
"ball_id": "ball_1",
"intensity": "normal",
"moves": [
{
"to": {
"x": 0,
"y": 0
}
}
]
},
{
"player": "offense_3",
"type": "pass",
"to_player": "offense_1",
"ball_id": "ball_1",
"variant": "chest",
"intensity": "normal",
"after": "offense_3.dribble"
},
{
"player": "offense_3",
"type": "cut",
"intensity": "fast",
"moves": [
{
"to": {
"x": -3,
"y": 5
}
}
],
"after": "offense_3.pass"
},
{
"player": "offense_1",
"type": "move",
"intensity": "normal",
"moves": [
{
"to": {
"x": -5,
"y": 0
}
}
]
},
{
"player": "offense_2",
"type": "move",
"intensity": "normal",
"moves": [
{
"to": {
"x": 5,
"y": 0
}
}
]
}
],
"end_state": {
"offense_1": {
"x": -5,
"y": 0
},
"offense_2": {
"x": 5,
"y": 0
},
"offense_3": {
"x": -3,
"y": 5
},
"balls": {
"ball_1": {
"carried_by": "offense_1"
}
}
}
},
{
"id": "frame_4",
"label": "Finish",
"description": "offense_1 attacks the basket for the layup. offense_2 fills the right wing as the kick-out option.",
"actions": [
{
"player": "offense_1",
"type": "dribble",
"ball_id": "ball_1",
"intensity": "fast",
"moves": [
{
"variant": "speed",
"to": {
"named": "basket"
}
}
]
},
{
"player": "offense_1",
"type": "shoot",
"ball_id": "ball_1",
"variant": "layup",
"result": "make",
"intensity": "normal",
"after": "offense_1.dribble"
},
{
"player": "offense_2",
"type": "move",
"intensity": "normal",
"moves": [
{
"to": {
"named": "right_wing"
}
}
]
}
],
"end_state": {
"offense_1": {
"named": "basket"
},
"offense_2": {
"named": "right_wing"
},
"balls": {
"ball_1": {
"dead": true
}
}
}
}
]
}Curl around a screen (side + arc)
Shooter curls tight around a down-screen; the action-level defaults are overridden on the curl step.
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"sport": "basketball",
"meta": {
"id": "3c9f7a2e-4b1d-4e6f-8a0c-2d5e9a1b3c7f",
"title": "Curl around a screen (side + arc)",
"description": "Shooter curls tight around a down-screen; the action-level defaults are overridden on the curl step.",
"created": "2026-08-28T10:00:00Z",
"source_format": "open"
},
"court": {
"ruleset": "fiba",
"type": "half_court",
"drill_focus": "offense"
},
"entities": [
{
"type": "offense",
"nr": 2,
"x": -6.75,
"y": 13.98
},
{
"type": "offense",
"nr": 5,
"x": -2.45,
"y": 8.2
}
],
"balls": [
{
"id": "ball_1",
"carried_by": "offense_2"
}
],
"frames": [
{
"id": "f1",
"label": "Curl",
"description": "offense_2 curls tightly around offense_5's screen, passing on the right of the screener.",
"actions": [
{
"player": "offense_2",
"type": "cut",
"variant": "curl",
"side": "left",
"arc": "normal",
"moves": [
{
"to": {
"named": "right_elbow"
},
"around_player": "offense_5",
"side": "right",
"arc": "tight",
"intensity": "fast"
}
]
}
],
"end_state": {
"offense_2": {
"named": "right_elbow"
}
}
}
]
}4-Out-1-In Variant with Lineage
Starts from the 4 Out 1 In formation with a tighter big, recorded as a variant of an existing play.
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"sport": "basketball",
"meta": {
"id": "9f8b7c6d-5e4a-4b3c-2d1e-0f9a8b7c6d5e",
"title": "4-Out-1-In Variant with Lineage",
"description": "Starts from the 4 Out 1 In formation with a tighter big, recorded as a variant of an existing play.",
"author": "OCF Examples",
"tags": [
"example",
"external-references"
],
"difficulty": "intermediate",
"created": "2026-08-26T10:00:00Z",
"source_format": "open",
"based_on_formation": {
"id": "4_out_1_in",
"title": "4 Out 1 In",
"source": "https://opencoachingformat.org/registry/formations/basketball-v1.json",
"source_version": "1.0.0",
"adjustments": [
{
"entity": "offense_5",
"dx": -0.5,
"dy": 0,
"note": "tighter to the block for this play"
}
]
},
"based_on_play": {
"id": "7c9e4f2a-1b3d-4a6e-8f0c-2d5e9a1b3c7f",
"title": "Pick the Picker BLOB",
"source": "https://opencoachingformat.org/playbooks/hoopsgeek-classics/index.json",
"relationship": "variant"
}
},
"court": {
"ruleset": "fiba",
"type": "half_court",
"drill_focus": "offense"
},
"entities": [
{
"type": "offense",
"nr": 1,
"x": 0,
"y": 5.68
},
{
"type": "offense",
"nr": 2,
"x": -6.75,
"y": 8.6
},
{
"type": "offense",
"nr": 3,
"x": 6.75,
"y": 8.6
},
{
"type": "offense",
"nr": 4,
"x": -7.5,
"y": 13.98
},
{
"type": "offense",
"nr": 5,
"x": -0.5,
"y": 10.5
}
],
"balls": [
{
"id": "ball_1",
"carried_by": "offense_1"
}
],
"frames": [
{
"id": "frame_1",
"label": "Set",
"description": "Players hold the adjusted 4 Out 1 In shape.",
"actions": [],
"end_state": {
"offense_1": {
"named": "top_of_the_key"
},
"offense_5": {
"x": -0.5,
"y": 10.5
}
}
}
]
}Continuous Ball Screen Set
Multi-frame offensive set with consecutive ball screens. PG passes to wing and cuts, center screens and rolls, with options to kick out or reset.
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"sport": "basketball",
"meta": {
"id": "7f3e2a1b-9c4d-4e6f-8a2b-1d3c5e7f9a0b",
"title": "Continuous Ball Screen Set",
"description": "Multi-frame offensive set with consecutive ball screens. PG passes to wing and cuts, center screens and rolls, with options to kick out or reset.",
"author": "OCF Examples",
"tags": [
"offense",
"half-court",
"ball-screen",
"continuous",
"pick-and-roll"
],
"difficulty": "advanced"
},
"court": {
"ruleset": "fiba",
"type": "half_court"
},
"entities": [
{
"type": "offense",
"nr": 1,
"x": 0,
"y": 7
},
{
"type": "offense",
"nr": 2,
"x": 6.75,
"y": 8.6
},
{
"type": "offense",
"nr": 3,
"x": -6.75,
"y": 8.6
},
{
"type": "offense",
"nr": 4,
"x": -2.45,
"y": 11
},
{
"type": "offense",
"nr": 5,
"x": 2.45,
"y": 11
}
],
"balls": [
{
"id": "ball_1",
"carried_by": "offense_1"
}
],
"frames": [
{
"id": "frame_1",
"label": "Pass to Wing & Cut",
"description": "PG (1) passes to SG (2) on right wing, then cuts through to strong corner.",
"actions": [
{
"player": "offense_1",
"type": "pass",
"to_player": "offense_2",
"variant": "chest",
"intensity": "normal"
},
{
"player": "offense_1",
"type": "cut",
"moves": [
{
"to": {
"named": "right_corner"
}
}
],
"intensity": "fast"
}
],
"end_state": {
"offense_1": {
"named": "right_corner"
},
"balls": {
"ball_1": {
"carried_by": "offense_2"
}
}
}
},
{
"id": "frame_2",
"label": "Center Ball Screen & Roll",
"description": "C (5) sets inside ball screen for SG (2). SG penetrates into paint, C rolls to baseline. PG lifts from corner to wing.",
"actions": [
{
"player": "offense_5",
"type": "screen",
"for_player": "offense_2",
"variant": "ball_screen",
"at": {
"x": 3,
"y": 9.5
},
"physicality": "aggressive"
},
{
"player": "offense_2",
"type": "dribble",
"moves": [
{
"to": {
"x": 2,
"y": 11.5
}
}
],
"intensity": "normal"
},
{
"player": "offense_5",
"type": "cut",
"moves": [
{
"to": {
"named": "right_block"
}
}
],
"tags": [
"roll"
],
"intensity": "fast"
},
{
"player": "offense_1",
"type": "move",
"moves": [
{
"to": {
"named": "right_wing"
}
}
],
"intensity": "normal"
}
],
"end_state": {
"offense_1": {
"named": "right_wing"
},
"offense_2": {
"x": 2,
"y": 11.5
},
"offense_5": {
"named": "right_block"
},
"balls": {
"ball_1": {
"carried_by": "offense_2"
}
}
}
},
{
"id": "frame_3",
"label": "Kick to Left Wing",
"description": "If no shot, SG (2) passes to SF (3) spotting up on left wing, then cuts through to left corner.",
"actions": [
{
"player": "offense_2",
"type": "pass",
"to_player": "offense_3",
"variant": "chest",
"intensity": "normal"
},
{
"player": "offense_2",
"type": "cut",
"moves": [
{
"to": {
"named": "left_corner"
}
}
],
"intensity": "fast"
}
],
"end_state": {
"offense_2": {
"named": "left_corner"
},
"balls": {
"ball_1": {
"carried_by": "offense_3"
}
}
}
},
{
"id": "frame_4",
"label": "Second Ball Screen",
"description": "PF (4) sets inside ball screen for SF (3). SF penetrates and can score, dump off to big, or kick out to wing.",
"actions": [
{
"player": "offense_4",
"type": "screen",
"for_player": "offense_3",
"variant": "ball_screen",
"at": {
"x": -3,
"y": 9.5
},
"physicality": "aggressive"
},
{
"player": "offense_3",
"type": "dribble",
"moves": [
{
"to": {
"x": -2,
"y": 11.5
}
}
],
"intensity": "normal"
},
{
"player": "offense_4",
"type": "cut",
"moves": [
{
"to": {
"named": "left_block"
}
}
],
"tags": [
"roll"
],
"intensity": "fast"
}
],
"end_state": {
"offense_3": {
"x": -2,
"y": 11.5
},
"offense_4": {
"named": "left_block"
},
"balls": {
"ball_1": {
"carried_by": "offense_3"
}
}
}
},
{
"id": "frame_5",
"label": "Reset to PG",
"description": "SF (3) kicks out to PG (1) on wing. PG runs pick with center to reset the continuous set.",
"actions": [
{
"player": "offense_3",
"type": "pass",
"to_player": "offense_1",
"variant": "chest",
"intensity": "normal"
},
{
"player": "offense_5",
"type": "move",
"moves": [
{
"to": {
"x": 0,
"y": 9.5
}
}
],
"intensity": "normal"
},
{
"player": "offense_5",
"type": "screen",
"for_player": "offense_1",
"variant": "ball_screen",
"at": {
"x": 0,
"y": 9
},
"physicality": "aggressive"
}
],
"end_state": {
"offense_5": {
"x": 0,
"y": 9
},
"balls": {
"ball_1": {
"carried_by": "offense_1"
}
}
}
}
]
}Declares a minimum schema version
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"sport": "basketball",
"meta": {
"id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"title": "Declares a minimum schema version",
"min_schema_version": "1.4.0"
},
"court": {
"ruleset": "fiba",
"type": "half_court"
},
"entities": [
{
"type": "offense",
"nr": 2,
"x": -6.75,
"y": 13.98
}
],
"frames": [
{
"id": "f1",
"label": "Static",
"actions": [
{
"player": "offense_2",
"type": "move",
"moves": [
{
"to": {
"named": "right_wing"
}
}
]
}
],
"end_state": {
"offense_2": {
"named": "right_wing"
}
}
}
]
}Basic Pick & Roll
Ball handler uses a ball screen at the top of the key. Screener rolls to the basket for the finish.
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"sport": "basketball",
"meta": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"title": "Basic Pick & Roll",
"description": "Ball handler uses a ball screen at the top of the key. Screener rolls to the basket for the finish.",
"author": "OCF Examples",
"tags": [
"pick-and-roll",
"offense",
"half-court",
"2-player",
"beginner"
],
"difficulty": "beginner",
"created": "2025-02-27T10:00:00Z",
"source_format": "open"
},
"court": {
"ruleset": "fiba",
"type": "half_court",
"drill_focus": "offense"
},
"entities": [
{
"type": "offense",
"nr": 1,
"x": 0,
"y": 5.68
},
{
"type": "offense",
"nr": 4,
"x": -2.45,
"y": 8.2
},
{
"type": "defense",
"nr": 1,
"x": 0.5,
"y": 5.2
},
{
"type": "defense",
"nr": 4,
"x": -2.8,
"y": 7.8
}
],
"balls": [
{
"id": "ball_1",
"carried_by": "offense_1"
}
],
"frames": [
{
"id": "frame_1",
"label": "Step 1 — Screen",
"description": "offense_4 moves up from the left elbow to set a ball screen for offense_1 at the top of the key.",
"actions": [
{
"player": "offense_4",
"type": "screen",
"for_player": "offense_1",
"on_player": "defense_1",
"variant": "ball_screen",
"at": {
"x": -0.5,
"y": 6.7
},
"physicality": "hard"
}
],
"end_state": {
"offense_1": {
"named": "top_of_the_key"
},
"offense_4": {
"x": -0.5,
"y": 6.2
},
"balls": {
"ball_1": {
"carried_by": "offense_1"
}
}
}
},
{
"id": "frame_2",
"label": "Step 2 — Attack",
"description": "offense_1 uses the screen and dribbles hard left toward the elbow; offense_4 rolls to the right block.",
"actions": [
{
"player": "offense_1",
"type": "dribble",
"ball_id": "ball_1",
"intensity": "normal",
"moves": [
{
"variant": "hesitation"
},
{
"variant": "speed",
"to": {
"named": "left_elbow"
},
"around_player": "defense_1",
"side": "left",
"arc": "tight",
"intensity": "explosive"
}
]
},
{
"player": "offense_4",
"type": "cut",
"variant": "basket",
"intensity": "fast",
"moves": [
{
"to": {
"named": "right_block"
}
}
],
"tags": [
"roll"
]
}
],
"end_state": {
"offense_1": {
"named": "left_elbow"
},
"offense_4": {
"named": "right_block"
},
"balls": {
"ball_1": {
"carried_by": "offense_1"
}
}
}
},
{
"id": "frame_3",
"label": "Step 3 — Finish",
"description": "offense_1 throws a bounce pass to the rolling offense_4, who finishes with a layup.",
"actions": [
{
"player": "offense_1",
"type": "pass",
"to_player": "offense_4",
"ball_id": "ball_1",
"variant": "bounce",
"intensity": "hard"
},
{
"player": "offense_4",
"type": "shoot",
"ball_id": "ball_1",
"variant": "layup",
"result": "make",
"on_catch": true,
"intensity": "soft"
}
],
"end_state": {
"offense_1": {
"named": "left_elbow"
},
"offense_4": {
"named": "right_block"
},
"balls": {
"ball_1": {
"dead": true
}
}
}
}
],
"areas": [
{
"form": "rectangle",
"color": "yellow",
"opacity": 0.2,
"x": 0,
"y": 10.5,
"width": 4.9,
"height": 4,
"rotation": 0
}
],
"labels": [
{
"text": "Roll!",
"x": 3.2,
"y": 9.5,
"color": "black"
}
]
}Quick Sketch — Give and Go
Minimal example: a coach sketches a give-and-go without any detail annotations.
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"meta": {
"id": "b1e2d3c4-5f6a-4b7c-8d9e-0f1a2b3c4d5e",
"title": "Quick Sketch — Give and Go",
"description": "Minimal example: a coach sketches a give-and-go without any detail annotations.",
"author": "OCF Examples",
"tags": [
"quick-mode",
"give-and-go"
],
"source_format": "open"
},
"court": {
"ruleset": "fiba",
"type": "half_court"
},
"entities": [
{
"type": "offense",
"nr": 1,
"x": -3,
"y": 6
},
{
"type": "offense",
"nr": 2,
"x": 3,
"y": 6
}
],
"balls": [
{
"id": "ball_1",
"carried_by": "offense_1"
}
],
"frames": [
{
"id": "frame_1",
"actions": [
{
"player": "offense_1",
"type": "pass",
"to_player": "offense_2"
},
{
"player": "offense_1",
"type": "cut",
"moves": [
{
"to": {
"named": "basket"
}
}
]
}
],
"end_state": {
"offense_1": {
"named": "basket"
},
"balls": {
"ball_1": {
"carried_by": "offense_2"
}
}
}
},
{
"id": "frame_2",
"actions": [
{
"player": "offense_2",
"type": "pass",
"to_player": "offense_1"
},
{
"player": "offense_1",
"type": "shoot"
}
],
"end_state": {
"balls": {
"ball_1": {
"dead": true
}
}
}
}
]
}Sport-tagged basketball
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"sport": "basketball",
"meta": {
"id": "a1b2c3d4-1111-4a6e-8f0c-2d5e9a1b3c7f",
"title": "Sport-tagged basketball",
"created": "2026-08-27T10:00:00Z",
"source_format": "open"
},
"court": {
"ruleset": "fiba",
"type": "half_court",
"drill_focus": "offense"
},
"entities": [
{
"type": "offense",
"nr": 1,
"x": 0,
"y": 5.68
},
{
"type": "offense",
"nr": 4,
"x": -2.45,
"y": 8.2
}
],
"balls": [
{
"id": "ball_1",
"carried_by": "offense_1"
}
],
"frames": [
{
"id": "f1",
"label": "Screen",
"description": "big sets a ball screen",
"actions": [
{
"player": "offense_4",
"type": "screen",
"for_player": "offense_1",
"variant": "ball_screen"
}
],
"end_state": {
"offense_1": {
"named": "top_of_the_key"
},
"offense_4": {
"x": -0.5,
"y": 6.7
}
}
}
]
}Sport-tagged soccer (provisional)
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"sport": "soccer",
"meta": {
"id": "b2c3d4e5-2222-4a6e-8f0c-2d5e9a1b3c7f",
"title": "Sport-tagged soccer (provisional)",
"created": "2026-08-27T10:00:00Z",
"source_format": "open"
},
"court": {
"ruleset": "custom",
"type": "full_court",
"custom_dimensions": {
"unit": "m",
"length": 105,
"width": 68,
"basket_from_baseline": 0,
"three_point_distance": 0,
"paint_width": 40.3,
"paint_depth": 16.5,
"free_throw_distance": 11
}
},
"entities": [
{
"type": "offense",
"nr": 9,
"x": 0,
"y": 30
},
{
"type": "offense",
"nr": 8,
"x": 12,
"y": 28
},
{
"type": "defense",
"nr": 4,
"x": 0,
"y": 40
}
],
"balls": [
{
"id": "ball_1",
"carried_by": "offense_9"
}
],
"frames": [
{
"id": "f1",
"label": "Tackle",
"description": "defender challenges the ball carrier, who releases a pass",
"actions": [
{
"player": "defense_4",
"type": "tackle"
},
{
"player": "offense_9",
"type": "pass",
"to_player": "offense_8"
}
],
"end_state": {
"offense_9": {
"x": 0,
"y": 30
},
"offense_8": {
"x": 12,
"y": 28
},
"defense_4": {
"x": 0,
"y": 38
}
}
}
]
}3v2 Transition
Three offensive players attack two defenders in transition and create a quality shot through ball movement and spacing.
{
"$schema": "https://opencoachingformat.org/schema/v1.json",
"sport": "basketball",
"meta": {
"id": "c9d8e7f6-5a4b-3c2d-1e0f-9a8b7c6d5e4f",
"title": "3v2 Transition",
"description": "Three offensive players attack two defenders in transition and create a quality shot through ball movement and spacing.",
"author": "OCF Examples",
"tags": [
"transition",
"3v2",
"full-court",
"offense",
"intermediate"
],
"difficulty": "intermediate",
"created": "2025-02-27T10:00:00Z",
"source_format": "open"
},
"court": {
"ruleset": "fiba",
"type": "full_court",
"drill_focus": "transition"
},
"entities": [
{
"type": "offense",
"nr": 1,
"x": 0,
"y": -12
},
{
"type": "offense",
"nr": 2,
"x": -4,
"y": -10
},
{
"type": "offense",
"nr": 3,
"x": 4,
"y": -10
},
{
"type": "defense",
"nr": 1,
"x": -2,
"y": 2
},
{
"type": "defense",
"nr": 2,
"x": 2,
"y": 2
}
],
"balls": [
{
"id": "ball_1",
"carried_by": "offense_1"
}
],
"frames": [
{
"id": "frame_1",
"label": "Push",
"description": "offense_1 pushes the ball up the middle; offense_2 and offense_3 fill the wings at full speed.",
"actions": [
{
"player": "offense_1",
"type": "dribble",
"ball_id": "ball_1",
"intensity": "fast",
"moves": [
{
"variant": "speed",
"to": {
"x": 0,
"y": 1
}
}
]
},
{
"player": "offense_2",
"type": "move",
"intensity": "fast",
"moves": [
{
"to": {
"named": "left_wing"
}
}
]
},
{
"player": "offense_3",
"type": "move",
"intensity": "fast",
"moves": [
{
"to": {
"named": "right_wing"
}
}
]
}
],
"end_state": {
"offense_1": {
"x": 0,
"y": 1
},
"offense_2": {
"named": "left_wing"
},
"offense_3": {
"named": "right_wing"
},
"balls": {
"ball_1": {
"carried_by": "offense_1"
}
}
}
},
{
"id": "frame_2",
"label": "Draw and Kick",
"description": "offense_1 attacks defense_1 to commit the help, then kicks to offense_3 in the right corner for the shot.",
"actions": [
{
"player": "offense_1",
"type": "dribble",
"ball_id": "ball_1",
"intensity": "fast",
"moves": [
{
"to": {
"named": "left_elbow"
},
"around_player": "defense_1",
"side": "right",
"arc": "wide"
}
]
},
{
"player": "offense_3",
"type": "cut",
"variant": "fade",
"intensity": "fast",
"moves": [
{
"to": {
"named": "right_corner"
}
}
]
},
{
"player": "offense_1",
"type": "pass",
"to_player": "offense_3",
"ball_id": "ball_1",
"variant": "overhead",
"intensity": "hard",
"after": "offense_1.dribble"
},
{
"player": "offense_3",
"type": "shoot",
"ball_id": "ball_1",
"variant": "three",
"on_catch": true,
"intensity": "normal"
}
],
"end_state": {
"offense_1": {
"named": "left_elbow"
},
"offense_3": {
"named": "right_corner"
},
"balls": {
"ball_1": {
"at": {
"named": "basket"
}
}
}
},
"branches": {
"make": "frame_reset",
"miss": "frame_oreb"
}
},
{
"id": "frame_oreb",
"label": "Offensive Rebound",
"description": "On a miss, offense_2 crashes from the left wing for the offensive rebound and finishes.",
"start_state": {
"offense_2": {
"named": "left_wing"
},
"balls": {
"ball_1": {
"at": {
"named": "basket"
}
}
}
},
"actions": [
{
"player": "offense_2",
"type": "rebound",
"ball_id": "ball_1",
"variant": "offensive",
"tags": [
"put_back"
],
"physicality": "aggressive"
},
{
"player": "offense_2",
"type": "shoot",
"ball_id": "ball_1",
"variant": "layup",
"result": "make",
"intensity": "normal",
"after": "offense_2.rebound"
}
],
"end_state": {
"offense_2": {
"named": "basket"
},
"balls": {
"ball_1": {
"dead": true
}
}
}
},
{
"id": "frame_reset",
"label": "Reset",
"description": "On a make, the ball is dead and the rep ends.",
"actions": [],
"end_state": {
"balls": {
"ball_1": {
"dead": true
}
}
}
}
]
}