MARCH MADNESS LEGACY — FICTIONAL NON-D1 ROSTERS
2026–27 preseason authoring model, version 1

Scope
244 user-listed schools; 15 fictional players per school (3,660 total).
The target is the unweighted mean of the ten players assigned positive minutes.
Five additional reserves receive zero initial rotation minutes. West Virginia
Tech uses the user's clarified 61 target. The user allowed fictional player
histories only if consistent with ratings. All people, biographies and player
statistics generated here are fiction, declared in companion metadata.

The only calibration input is the existing native 2K14 roster. No BUR code,
database, data snapshot, service, app change or scouting information is used.
The exact r420 ROS and companion are an immutable native roster baseline.

Overall calibration
overall.py transcribes the supplied Sigil 2K14 editor's position/height formula
using the same float32 operations, 42 attribute coefficients, post-hook/fade
bands, position-specific bounds and height coefficients. The source EXE was
statically decoded; it was never launched and its modules were never executed.
overall-coefficients.json and overall-static-code.json retain the evidence.
The native Overall_I field stays at the ROS placeholder 1. It is not a writable
visible overall rating. Calculated overalls are authoring targets; no current
gameplay or in-game overall readback is claimed.

For each school, the ten rotation offsets begin as
  [11, 8, 5, 3, 1, -1, -3, -5, -8, -11] × depth spread (0.70–1.15).
Integer offsets are balanced to sum to zero. The five reserves target 12–22
points below the supplied mean, with a 25 floor. Player-specific ability is
solved against the native position/height formula, retaining the role-specific
strengths and independent physical traits. The saved ROS is recalculated in
the audit: all 244 rotation means must equal the supplied targets.

Individual skill profiles
Sixteen position-compatible archetypes supply latent shooting, handling,
passing, finishing, defense, rebounding, post play, athleticism and decision
making. Every latent dimension gets a separate residual; individual attributes
also get noise. Exact coefficients for all 42 fields are in rating_profile()
in model.py. There is no one-number copy across all attributes.

Technical skills respond to the calibrated ability, position, latent profile
and attribute residual. Speed, quickness and vertical are primarily driven by
position, height and independent athleticism. Strength also uses body weight.
Dunking combines vertical reach, height and finishing coordination. Stamina,
durability, hustle and emotion retain separate distributions. Potential uses
the current overall and a class-dependent development range, capped at 96.

Tendencies and presentation
All 58 tendencies are authored. Four shot-distance tendencies sum to 100.
Shot volume and touches follow role; make probability follows skill. Creation,
driving, post use, dribble preferences, passing, rebounding and defensive risk
remain distinct. Four native play types are ranked from the player's role.
Seven fictional coaching systems influence pace, shot distribution, pressure,
zone use, transition and set-play frequency. They are fictional team designs,
not claims about those schools' real current coaches or playbooks.

Every player receives position-compatible generic layups, varied generic
shooting/dribble animations, bounded dunk packages, 14 hot zones and up to
three threshold-earned signature skills. Unsafe dunk packages are excluded.
The 2K14 signature-skill table is RED MC Enums.txt line 97, rather than the
older 2K13 table at line 20. Generic 2K14 layups use Guard 0, Swing 1, Big 2.
The supplied Sigil enums module explicitly documents the two-version lists.
Some current Studio dropdown labels use the old list; numeric native values
in this package use the 2K14 meanings. No Studio source was changed here.

512 new private headshapes use small correlated morphology adjustments.
Players combine these with individual hair, facial hair, skin, body and gear
choices. Existing D1 headshapes are untouched. Names are unique among all
generated players and do not duplicate existing native full names. Coaches
have independent names, grades, tactics and playbook choices; their visual
assets remain known-valid stock staff assets. No custom coach art is claimed.

Rotations
Ten players fill two primary-position groups of five. Each position gets
40 total minutes, for 200 per team. Starting, bench, three-point, free-throw,
defensive, tall and quick lineups each contain five distinct team members.
Assignments use a position penalty and group-specific skill scores. The bench
lineup is disjoint from the starters. Three scoring options use shot tendency
and offensive awareness. Jersey numbers are unique within every team.

Biographies and histories
Freshmen have no invented college season. Sophomores, juniors and seniors
receive one, two or three prior seasons ending in 2026, 2025 and 2024. All
current-season stats and season highs remain empty for preseason. Ages,
classes, experience, eligibility and history lengths are mutually checked.
573 fictional transfers have prior-school names that agree with native stat
team references; transfers are among the listed fictional-roster schools.

Historical ability backs out bounded development from each player's current
calibrated ability while retaining his archetype and individual residuals.
Let s = (historical attribute - 25) / 74. Shooting probabilities are:
  Inside:    0.34 + 0.45 × s(standing layup)
  Close:     0.32 + 0.47 × s(close shot)
  Midrange:  0.18 + 0.39 × s(midrange shot)
  Three:     0.10 + 0.36 × s(three-point shot)
  Free throw:0.30 + 0.62 × s(free throw)
These are fictional authoring curves, not estimates of engine make rates.
Season makes equal rounded attempts × probability. Made shots are distributed
among the fictional games, so career highs and season totals reconcile. Shot
volume follows role, pace and minutes; other counting stats use their relevant
ratings and creation/position. See histories.py for every rate coefficient.
Historical returning cohorts cannot exceed 200 minutes or five starts in a
team game. Graduated/omitted players may account for the remainder.

5,456 player seasons reconcile to 138,777 fictional box scores. Every game and
season obeys points = 2 × field goals made + threes made + free throws made.
All shooting totals, GP/GS, minutes, rebounds, assists, steals, blocks, turnovers,
fouls and career highs are checked. Inherited NBA awards are cleared on the new
player histories. Plus/minus stays neutral rather than inventing impact claims.
Team-season ledgers are cleared for these fictional rosters; a complete team
schedule or team record is not fabricated from a partial returning cohort.

Native integration and validation
The baseline contains unique target player slots but a shared head coach.
The build adds 244 independent staff rows, 512 headshapes, 225 missing college
rows and 3,715 player-stat rows. Another 1,741 previously unreferenced stat rows
are reused. Original referenced histories and other teams' staff remain intact.
Seven structural clone operations precede 31 CSV batches. Each CSV binds the
native and companion preimages; the manifest also guards combined revision
hashes, sequential revisions and structural epochs. Duplicate/stale imports
must fail. Never restamp or force a file onto a changed workspace.

audit.py compares every original native record, every unchanged mapped field,
unmapped bits and both text arenas. It preserves all D1 players/teams, 905
arenas, 3,779 uniforms and all unrelated companion fields. It then rereads the
saved ROS, checks all targets and histories, independently replays the exact
on-disk native UI files, and verifies the resulting hashes. No game/GPU test
or runtime change is part of this work.
