"""Offensive plays and defensive calls. Route points are (yards downfield, yards toward the bottom sideline) relative to the player's alignment. Players are referenced by formation slot id.""" def R(*pts, delay=0.0): return dict(pts=[tuple(p) for p in pts], delay=delay) OFFENSE_PLAYS = { "Inside Zone": dict(kind="run", formation="I-Form (21p)", runner="RB", lead="FB", aim=(2.5, 1.2), mesh=(-4.3, 0.9), min_handoff=0.45), "Outside Zone": dict(kind="run", formation="I-Form (21p)", runner="RB", lead="FB", aim=(1.0, 7.0), mesh=(-4.5, 1.6), min_handoff=0.45), "Draw": dict(kind="run", formation="Shotgun Trips (10p)", runner="RB", lead=None, fake_pass=True, aim=(3.0, -0.3), mesh=(-5.0, 1.0), min_handoff=1.1), "RPO Slant": dict(kind="rpo", formation="Shotgun 11p (2x1 + TE)", runner="RB", lead=None, aim=(2.5, -2.2), mesh=(-5.0, -1.0), min_handoff=0.7, tgt="X", routes={"X": R((3, 0), (10, 7), (18, 15))}), "Quick Slants": dict(kind="pass", formation="Shotgun 11p (2x1 + TE)", drop=5.0, t_first=0.75, blockers=["TE", "RB"], prog=["X", "Z", "SL"], routes={"X": R((3, 0), (10, 7), (18, 15)), "Z": R((3, 0), (10, -7), (18, -15)), "SL": R((1, -4), (3, -9))}), "Mesh": dict(kind="pass", formation="Shotgun 11p (2x1 + TE)", drop=5.0, t_first=1.3, blockers=["TE"], prog=["SL", "Z", "X", "RB"], routes={"SL": R((2, 0), (3, 16)), "Z": R((2, 0), (3, -15)), "X": R((10, 0), (10, 8)), "RB": R((0.5, -6), (2, -10), delay=0.6)}), "Four Verticals": dict(kind="pass", formation="Shotgun Trips (10p)", drop=5.0, t_first=2.0, blockers=["RB"], prog=["H", "SL", "Z", "X"], routes={"X": R((40, 0)), "Z": R((40, 0)), "SL": R((40, 0)), "H": R((40, 2))}), "Sideline Fade": dict(kind="pass", formation="Shotgun Trips (10p)", drop=5.0, t_first=1.8, blockers=["RB"], prog=["X", "Z", "H"], routes={"X": R((35, -4.4)), "Z": R((40, 0)), "SL": R((30, 0)), "H": R((12, 0), (12, 6))}), "PA Post": dict(kind="pass", formation="I-Form (21p)", drop=7.0, t_first=1.8, play_action=True, aim=(2.5, 1.2), blockers=["FB"], prog=["X", "Z", "TE"], routes={"X": R((12, 0), (26, 9)), "Z": R((10, 0), (10, -9)), "TE": R((5, 0), (8, 5))}), "RB Screen": dict(kind="pass", formation="Shotgun 11p (2x1 + TE)", drop=7.0, t_first=2.0, screen=True, blockers=["TE"], prog=["RB"], routes={"X": R((30, 0)), "SL": R((30, 0)), "Z": R((30, 0)), "RB": R((3.0, -7.0), delay=1.2)}), } DEFENSE_CALLS = { "4-3 Over · Cover 3": dict(formation="4-3 Over", coverage="cover3", blitz=[]), "4-3 Over · Cover 1": dict(formation="4-3 Over", coverage="cover1", blitz=[]), "4-3 Over · Cover 0 Blitz": dict(formation="4-3 Over", coverage="cover0", blitz=["MIKE", "WILL"]), "Nickel · Cover 2": dict(formation="Nickel 4-2-5", coverage="cover2", blitz=[]), "Nickel · Cover 3": dict(formation="Nickel 4-2-5", coverage="cover3", blitz=[]), "Nickel · Cover 1 Mike Blitz": dict(formation="Nickel 4-2-5", coverage="cover1", blitz=["MIKE"]), "3-4 · Cover 3": dict(formation="3-4", coverage="cover3", blitz=[]), "3-4 · Zone Blitz": dict(formation="3-4", coverage="cover3", blitz=["OLB1", "ILB1"]), }