diff --git a/docs/specification-v1.adoc b/docs/specification-v1.adoc index bb61b8a..9b2ff27 100644 --- a/docs/specification-v1.adoc +++ b/docs/specification-v1.adoc @@ -1,4 +1,4 @@ -= Open Coaching Format — Open Standard for Basketball Drill Diagrams += Open Coaching Format — Open Standard for Team-Sport Coaching Diagrams :version: 1.2.0 :doctype: book :toc: left @@ -22,7 +22,7 @@ [abstract] == Abstract -*{ocf} v{version}* is an open, ruleset-aware JSON schema for representing basketball drill diagrams and multi-step animations. +*{ocf} v{version}* is an open, ruleset-aware JSON schema for representing team-sport coaching diagrams and multi-step animations — targeting invasion team sports, with basketball fully defined first. It defines a court coordinate system based on real-world units (meters or feet), a registry of named court positions per ruleset, a semantic entity model, and a frame-based animation structure. @@ -40,7 +40,7 @@ The format is designed to be: === Motivation -No open standard exists for basketball drill diagrams. +No open standard exists for team-sport coaching diagrams. All major tools (FIBA Europe Coaching App, FastDraw, Sportplan.net) use proprietary formats with image-only export. This prevents programmatic drill creation, LLM-assisted coaching tools, and cross-platform interoperability. @@ -1295,7 +1295,7 @@ Coordinate <|-- RelativeCoordinate | `area.form` | `rectangle`, `ellipse`, `triangle` | `color_role` | `offense`, `defense`, `black`, `grey`, `yellow`, `green`, `red`, `blue`, `white` | `unit` | `m`, `ft` -| Action `type` | move, cut, screen, defend, dribble, pass, shoot, rebound, pickup +| Action `type` | move, cut, screen, defend, dribble, pass, shoot, rebound, pickup, tackle, clear, faceoff, check (valid subset depends on `sport` — see the Sport section) | Cut `variant` | backdoor, give_and_go, flash, v_cut, l_cut, curl, flare, fade, basket | Screen `variant` | ball_screen, back_screen, down_screen, flare_screen, cross_screen, pin_down | Defend `variant` | on_ball, deny, help, hedge, switch, box_out diff --git a/examples/sport-soccer.ocf.json b/examples/sport-soccer.ocf.json index afeb122..14a72d8 100644 --- a/examples/sport-soccer.ocf.json +++ b/examples/sport-soccer.ocf.json @@ -5,12 +5,13 @@ "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.0, "y": 30.0 }, + { "type": "offense", "nr": 8, "x": 12.0, "y": 28.0 }, { "type": "defense", "nr": 4, "x": 0.0, "y": 40.0 } ], "balls": [ { "id": "ball_1", "carried_by": "offense_9" } ], "frames": [ - { "id": "f1", "label": "Tackle", "description": "defender challenges", - "actions": [ { "player": "defense_4", "type": "tackle" }, { "player": "offense_9", "type": "pass", "to_player": "offense_9" } ], - "end_state": { "offense_9": { "x": 0.0, "y": 30.0 }, "defense_4": { "x": 0.0, "y": 38.0 } } } + { "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.0, "y": 30.0 }, "offense_8": { "x": 12.0, "y": 28.0 }, "defense_4": { "x": 0.0, "y": 38.0 } } } ] }