OPENHOOPS / 2K14Final team archive · November 9, 2026Reference libraryChecksums

Dated source reference. Current release status: handoff state. Full original relative paths are in the developer archive.

Live coaching and defensive configuration — development49

Current extension: Match controls51 completes the three planned additions: game-clock rotation intent with native entry observations, original native timeout calls and connected-input/team assignment.510 Windows API tests/84 schemas and focused live52w/52za/52x pass; multi-controller physical input remains unverified because no gamepads are available. This closes the planned match-control implementation, with that hardware verification outstanding. Presentation, broad modding/rule semantics and public packaging remain separate. The earlier evidence/version paragraphs below remain their recorded checkpoints; consult the new ledger for current implementation and exact limits.

This is the accepted49 checkpoint and client contract. Current development50/ABI25 adds startup defense, native substitutions and complete result handoff, with up to426 startup values. Capture-time49 counts and unfinished items below remain historical evidence.

October18,2026 UTC. The user authorized matchups and defensive settings first, with API access to native in-game coaching and substitutions afterward. Storage50 is complete. All builds/tests/game work stays isolated on the Dell; MVP files/processes, stable35, original95 saves, public packages and hosts are protected. No new app GUI, presentation or artwork task is included.

Current private source is development49 /HTTPv1/snapshotABI24, eventABI4/profile4/court3 unchanged. It extends startup coaching47 through the same public API for any third-party client. Frozen source49z archive 820f60c78c581df826727ca07180e7c81a5075f4c2d1f10718ceebf721ab8049 identifies179 inputs. Non-probe DLL 0a99df4af3d5864a1e2bbc0c5cfc08b94921bca59c0264a72ac43b6106eaa961 compiles on Dell MSVC19.51 /W4 /WX. 471 Windows API tests, 1,104 defensive/coaching instruction cases, 27 pause/ownership/prologue cases, and 71 schemas/37 fixtures plus historical-result compatibility pass. These synthetic instruction cases do not certify complete game AI or worker races.

Public-SDK live49zf loads the stock roster, applies18 startup coaching values, binds external identities at phase4 and reaches natural college play. All42 distinct changes pass:18 team settings plus all six defensive fields for first/last opponents on both sides. Readbacks persist after resume and restore through the API.89 commands pass, including pause/resume/expiry; running writes/stale revisions refuse; old command IDs preserve receipts; owned cancellation abandons without a result. Errors0, generated input0. Game/shot/backcourt clocks and every reported player position are identical across the pause observation interval. An unrefreshed one-second pause expires and natural play returns. Both runs are closed and all98 pre-research saves restored. This is private development acceptance, not a new public/full-match/fullscreen/hardware/rare-rule certification.

Public client contract

Read coaching, defense, simulation_control in /v1/snapshot and the corresponding catalogs in /v1/settings. Deltas include these fields. Capabilities depend on the attached hook.

  • coaching.set changes any of the nine existing settings for either home/away team. Startup still accepts18 coaching values before reveal, maximum282 startup settings overall.
  • defense.set configures an instantiated opponent for the explicitly named defending side.
  • simulation.pause acquires or refreshes an expiring adapter-owned native pause layer and suspends the complete simulation dispatch without input/menu automation.
  • simulation.resume releases that layer and restores normal dispatch. Other native pause layers remain independent.
Defensive setting ID Choices, in numeric order starting at0
on_ball_pressure Auto; Sag Off; Moderate; Play Tight
off_ball_pressure Auto; Sag Off; Moderate; Play Tight; Deny Ball
double_team Manual; Never; In The Post; On Drive; Always
screen_defense Auto; Go Over; Go Under; Switch
hedge Auto; No Hedge; Soft Hedge; Hard Hedge; Double
preferred_defender Own currently on-court player key, or null for automatic

The native on-ball menu wraps at3, so the fifth localized “Crowd” label is not exposed. There are12 native opponent rows per team; extra uninstantiated ROS entries are not fabricated as players. Unknown preferred-defender references remain null with preferred_defender_known=false. side="home" requires an away opponent and a home preferred defender from current eligible_defender_player_keys. Managed mappings/external IDs resolve application players to these run-scoped keys. Configuration does not prove physical guarding or every downstream AI effect.

Acquire the normal control lease. Every command includes type, unique command_id, client_id, private lease_token, current run_id, expected_period and expected_revision from coaching.revision. Pause additionally requires boolean expected_owned and integer duration_seconds1–60; resume requires expected_owned=true and no duration. Pause cannot claim an existing native menu pause. Refresh uses expected_owned=true without incrementing native depth again. Expiry runs on the game thread; a hung process cannot provide a wall-clock release guarantee. Releasing a lease does not release the pause; expiry remains bounded separately.

Poll for owned pause, then observe an unchanged game clock for at least750ms before writes. Coaching/defense require active unfinished paused non-replay phase10, current revision and exact value preimage; the adapter rechecks the frozen-clock duration on the game thread. For coaching.set, add side, setting_id, expected_value, value. For defense.set, also add opponent_player_key, for example away:4 when defending home. Preferred-defender values are own keys such as home:1 or null; other values are catalog integers. Use fresh snapshots after each change. Running writes refuse. These gates do not establish legal live/dead ball or possession.

Commands use POST /v1/commands and existing durable IDs. Reusing an ID returns its original immutable receipt. Changed revisions/preimages require a fresh observation and new intent; do not retry an indeterminate mutation blindly with a new ID. Read /v1/commands/{id} for its stored outcome.

Native implementation and evidence history

Original getter9F41E0 indexes defending side/opponent slot into24-byte rows. Complete native menu paths directly store these six fields then refresh widgets; AI reads the same table. The adapter reproduces that data transition with bounds/byte guards/readback independently of absent widgets. Defensive setters do not call complete native menu handlers. The nine coaching setters retain original guarded handler suffixes from coaching47.

ABI23 appends596 control bytes and a56-byte mailbox to ABI22, total68480bytes. Revision includes settings, defense, phase, native roster/actor identities and on-court masks. ABI24 appends16 owned-pause bytes, total68496. ABI1–23 remain readable with capability gating. Current pause availability revision2 and OpenHoopsSimulationControlVersion=2 distinguish the dispatch-suspending implementation; current readers advertise counter-only revision1 as unavailable.

Current pause retains original first-entry/last-exit functions and additionally gates complete9F1D20 simulation dispatch while owned. Native passthrough replays its exact six-byte prologue. The surrounding application loop remains active for API commands and expiry; no clock values are rewritten to simulate a freeze. Compiled cases verify nested native counter preservation and reset/expiry handling. Live49zf does not open nested native menus, so exhaustive menu/replay/mode behavior is not certified.9F2640 is a rendering path, not evidence of complete simulation suspension.

Earlier source49f/API48/ABI23 DLL78cdf7a5 passed464 Windows API tests/1,104 compiled cases. Source49l/API49/ABI24 DLLf9d3bbc7 and API-only decoder correction49o retain their original evidence; they are superseded by49z.

Source49l/API49/ABI24 compiles with /W4 /WX as DLLf9d3bbc725377e16c5b68542e33a2486d9c4a17d5a0f369d809267762da69cd6. It additionally calls the complete original pause-counter enter/leave functions for one expiring adapter-owned layer. Source49o (archive5311b49c9a90e3c551d86378c0c29e7081da68dd6215874b8bc0a977456dfdfb) differs only by an API observation fix for an uninstantiated preferred-defender slot and its test. All61 native inputs match49l; the exact DLL/Map and existing optional runtime are copied into49o.471 exact-source Windows API tests,1,104 compiled defensive/coaching cases,23 pause-counter cases and71 schemas/37 fixtures pass. The first pause harness incorrectly modeled a getter's stack cleanup; corrected49s preserves the original instruction behavior and its earlier failure evidence.

Live49v successfully loads/binds at phase4 and reaches natural phase10 with zero adapter errors and no generated input. The running coaching write is refused. The owned pause command changes the native counter, but players and game/shot clocks continue updating: the saved trace moves598.7801→596.3525 while paused=true. This is a failed simulation-pause acceptance, not a failed launch or a game crash. No live coaching/defense mutations were attempted after that failure. The frozen-clock guard remains intact.49v is closed,98 baseline files restored and original INI/candidate isolation preserved. Diagnostic49w reads disposable database copies and verifies original DB/WAL/SHM hashes. Counter-based rendering pause and full simulation suspension require further recovery before accepting this control.

Implementation files: native/api/coaching_control.inc, simulation_control.inc, original guards, append-only protocol; Python defense/simulation modules, transport, broker validation and catalogs. Direct substitution requests and optional startup defensive presets remain unfinished. Static49zg–49zk identify queue/cancel helpers6C0EF0/6C0F40 and user-request flag6C0FA0, distinct from defensive mapping9AFCB0. Their pending/processing lifecycle, eligibility and natural stoppage completion require further verification before a public substitution command. A queued request must not be labeled completed. Exact rotation schedules, presentation and roster artwork remain separate. Stable35,95 originals, INI, fixtures, immutable public ZIPs and both hosts stay protected; no release promotion is implied.

Final documentation source49zm, archivea97f838c3a8532253633a1eb271d159289e570d9e086308ac359ee4228ed5fbf, keeps all171 non-Markdown inputs identical to tested49z, including61 native inputs. Live schema validation passes190 checks over89 commands/receipts and current responses. Final preservation49zn,01:42:11UTC, verifies95 originals in both games, all98 restored isolated files,179 frozen inputs, original EXE/INI/stable35/fixtures/public ZIPs and all four unchanged hosting identities. Both game/broker runs are closed; two exact-body idle tasks are removed, no owned game/API remains and24.04GB is free. Future work must explicitly stage this matching source/hook; public/installed baselines stay separate. Evidence and one-shot helpers remain under coaching49. Research49b's fallback function-boundary scan could start at text+3 when no padding was found; those apparent instruction streams are not valid candidate functions. Narrow49c fixes that fallback and records true candidate boundaries. No patches or calls rely on those malformed49b streams.