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.

Event contracts, startup persistence and rule-policy evidence

Earlier API checkpoint (October15,2026): 0.2.0.dev36, HTTP v1, snapshot ABI14/event ABI4, college profile4/court definition3. Use the current contract, verification ledger and remaining scope. Research milestones below retain their original versions, results and uncertainties; their former next-step statements are historical. Latest natural college OT/export and18 both-end release-contact cases passed; rare live exceptions remain unverified. No public release or extra live smoke is required for this documentation pass.

Current scope (October13,2026): Windows-first deep editing and a public extension API; Mac/Linux compatibility follows later. Earlier native-port goals and next-step proposals in this evidence history are superseded. Technical observations and verification limits remain as recorded.

Research performed October 12–13, 2026. Continues EVENT-SEMANTICS and LIVE-DATA. The user requires an extension platform for any developer's tools, not one bundled dynasty application. PUBLIC-API-REQUIREMENTS records the resulting requirements; no production API is claimed.

Latest follow-up: rule/event mapping adds live overtime/reset/final evidence, bonus/correction tests and bounded internal event storage. Its coverage table identifies what remains unfinished.

What this milestone establishes

A temporary source-built tracer intercepted 25 guarded routine entries in the supplied Windows x86 game. Its complete 15-minute file has 57,160 contiguous entry records, one observed game thread, and zero producer drops. It covers idle-demo startup, loading a saved exhibition, gameplay, fouls, free throws, rebounds, a timeout-state interval and the Q1→Q2 intermission. It is not a whole-match trace or proof that every relevant engine event is intercepted.

Six made-two entries and three alternate-path made-free-throw entries account for all 15 added points, both team totals, and every one of 24 player point deltas (37 explicit observation checks). Two calls to the block-correction routine left the player's block count unchanged and generated no subtraction notification. An entry into a correction routine cannot itself be published as a retracted block.

Evidence: trace findings, archived raw trace / restore guide, decoder, layout. Raw register/argument values are meaningful only under that routine's recovered ABI.

Persistence across executable startups

The supported ISO EXE is SHA-256 7cb5fdaa30586558a3146dcf9023880b1cceeaabfe0f92f967f461c4644f3704. Its image base is 0x400000, DYNAMIC_BASE is unset, relocations are stripped and its relocation directory is empty. The fresh run PID13044 used the same base and accepted all 25 exact runtime entry guards. The previous process was PID13108.

The phase-manager root and object remained 0x146B734 → 0x146B940; all 24 player actor addresses changed. The 24 roster-node addresses happened to remain unchanged in this fixture; that is not a stable external player-ID contract. Fixed global/code addresses and structure offsets are build-specific locations, not permanent game values. Memory edits vanish on process exit unless a save/config or startup adapter reapplies them. Different executables, mods or platforms require their own validation.

The game must resolve actors and other live pointers afresh. External IDs should come from an explicit roster/match identity mapping; appearance IDs are not sufficient identity. See restart comparison, PE layout.

Save/load is a rewind boundary

Exhibition1.EXG was created through Save and Quit, backed up and hash-recorded, then loaded in a new process. Before saving: Q1 227.282959s, shot clock 4.873008s, score home6/away4, phase10. The earliest traced loaded state already has phase8 and clock 246.884781s, shot clock24 and the same score: a 19.601822s rollback relative to the pre-save observation. By the later paused read-only capture it had advanced to238.101837s (the earlier progress message's approximately11s difference was this later observation, not the initial load boundary).

A new Haslem foul and turnover happened between load and that paused capture. They must not be mistaken for fields restored from disk. Minutes played also rewind. The exact checkpoint selection policy has not been recovered. API requirements: preserve match identity, create a new run/checkpoint revision, identify superseded event history and reconcile a fresh snapshot. A reconnect alone must not create a new match or duplicate final exports.

The idle demonstration used the same recorded mode value1 as this exhibition. That single mode field does not exclude demo matches. Require an explicit managed-session handshake/lifecycle identity before a dynasty client accepts results.

Live notification ordering

  • Alternate FT scorer 0x8BE550 executed three times; 0x8BE3E0 did not execute in this window. Hooking only the latter loses all three makes. The observed notification IDs were17,14,11. ID17 sees the old player points/FT counters;14/11 see the updated player counters while the team score is still old. A later entry sees the updated team score. Two final free throws had remaining=0 before credit.
  • The two block-correction calls 0x8A39A0 at seq15840/34815 preceded foul processing. Counts1/0 respectively were unchanged at the immediately following foul entry, with no 0x884820 subtraction. This validates a real no-op correction path, not a live decrement.
  • Foul type14, flag0 (Haslem/Green, seq3739) was followed by turnover type11 and phase18. Type5, flag1 (James/Leonard, seq15841) led to a made two and one FT. These establish concrete sequences, not a complete named foul enumeration. Do not universally label every numeric type from one incident.
  • Stop-clock routine 0x880460 ran3,901 times, often repeatedly during FT state. It is an operation, not an event count of whistles.
  • The assist notification bypass 0x884750 was observed once, seq55567. The general add hook alone remains insufficient.
  • Same-phase transitions occur. The first loaded state calls8→8. Trace ends after10→11→12 with raw period2 and clock0; the later paused screenshot is Q2 5:51. Display and lifecycle need phase-aware interpretation.

Rule policy: counters, thresholds, resets and display

Exact captured x86, including real threshold callees, passed 1,792 numeric predicate cases. Another 42 cases cover the counter writer, period-reset prefix and overtime length; normal-mode queries alone were mocked for the counter writer. These are bounded code tests, not live college-rule verification. Runtime reads of ten relevant code ranges matched earlier captures except the five entry bytes deliberately replaced at two traced routines. Runtime comparison.

Site / field Established behavior Limit
team+0x30, state+0xC Qualifying team foul counter; writer881C00 increments when EDX!=0 Qualification is selected by callers; enumerate exclusions before public rule commands
state+0x10 Same writer increments only when game clock is strictly below120s Exactly120s does not increment; alternate roster-mode routing not tested
8A2110 True when late counter reaches2 (selector0) /5 (other), or full counter reaches5 in regulation,4 in OT for selector0,5 otherwise Selector1/2 names not assigned; no live bonus threshold fixture yet
1E85DBC Selector consumed by thresholds/reset policy Not a free arbitrary threshold value
8BDBC0 prefix Clears late counters each period; clears full counters for selector0 or raw period<5; other selectors retain full count in OT Synthetic prefix verified, broader routine not fully reconstructed
8BDEB0 branch at8BDF23 Calls8A2110; true sets FT type4,total2,remaining2; another branch uses constant5/type3 Complete caller eligibility and one-and-one behavior unresolved
967F70 Uses same team counters and120s boundary to return five numeric display-status codes0..4 UI labels not yet proven
882800 OT duration is derived from quarter length 1–2min quarters→60s OT;3–4→120s;5–7→180s;8–11→240s;12→300s tested
87FB10 Initializes two32-byte team-state records at1DEE590/1DEE5B0 and team pointers state+0 is court direction; period setup negates it at halftime
87FC60 Serializes game state including the64-byte pair and FT state Serialization invocation and disk format are not fully decoded

This makes bonus customization a coordinated policy: qualifying fouls, team counters, thresholds, FT awards, reset/carry rules and display. Changing the visible foul counter alone cannot implement a consistent college rule set. Existing shot-clock reset, three-point geometry and final-match findings remain in the preceding reports; no arbitrary rule replacement is declared complete here.

What is ready to use versus unresolved

Consumer need Current evidence Remaining acceptance work
Scoreboard basics Scores, clock, displayed-period handling, named players, shooting splits, basic box score Coherent publication boundary; reliable pause/replay/legal-ball state; timeout/bonus UI semantics
Possession and play-by-play Attached owner, rebound/steal/TO/foul/scoring sequences, correction no-ops Legal team control, all loose-ball/inbound/violation reasons, correction commits, complete ordered history
Final result export Earlier natural regulation final reconciled50–43; current trace point deltas reconcile Multi-OT, abandonment, save/load forks, crash recovery, stable roster IDs, revision/dedup protocol
Rule mods Three-point predicate, clock operations, bonus counters/reset/award branch, OT length Every enforcement consumer, AI/UI consistency, named rule types, deterministic mod conflict policy
Public SDK Requirements recorded, private version-aware adapter approach No production API/SDK/transport implemented yet

Instrumentation and preservation

Research DLL SHA-256 50c6eb9b5460778e9bca205a15ebb83313b1f783096546738b895c61284c9282; built MSVCx86 /W4 /WX /O2 /MT. All25 wrappers passed four stack-alignment cases each (100 tests) for general registers, flags, XMM/MXCSR/control-word and stack restoration. This does not quantify frame overhead or prove complete AVX/x87 data preservation. Runtime-only five-byte detours preserve/relocate whole stolen instructions; ring capacity4096, fixed512-byte records, bounded writer15min. Production adapter source/package was not replaced by this experiment.

Original game corpus and EXE files were preserved. Both exhibition save fixtures and adapter backups are retained. Cleanup receipt records restoration of stable external-modev0.2. Evidence manifest pins every new file and relevant shared source; no community installer executed, network API published, or recurring automation created.

Next semantic work: trace authoritative rule-counter qualification and named violation/display reason consumers; obtain real correction/bonus/OT fixtures; map GameTrack reconciliation storage; establish managed-match identity and checkpoint boundaries before exposing committed events publicly.