DOCUMENT 01 / FAIR PLAY

Why 2K's shot cheaters
never go away.

Updated October 25, 2026, checked against update 2.0.H1 · 50 min read

ALL DOCUMENTSBADGES AND TAKEOVER

The short version

A cheat device doesn't change the game. It only changes when your release arrives. Everything 2K does against it has to work on timing, and the game has no rule that treats a half-court step-back or a contested jumper differently from any other shot.

How a 2K27 shot works

Every jump shot, layup and dunk goes through the same five steps. The game rates the shot, works out the defense, grades your release, adds a timing bonus to the chance, then decides make or miss. Each part below shows the code first, paraphrased in our own words, then what it means in plain language.

From the moment you shoot to make or miss 1 · The lookratings, distance, badges:the chance before timing 2 · The defensethe contest, then cut byjump-shot grade and badges 3 · The windowsized by up tothirteen factors 4 · The gradeExcellent, unless the lookor the defense rules it out 5 · The bonusadded to the chance,capped by the look 6 · Make or missforced on a luck streak,otherwise drawn from a deck
Figure 1 · How 2K27 judges a shotSteps light up in order

The grades

NBA 2K27 · TIMING GRADES AND CONTEST LEVELS (OUR WORDING)

// Seven timing grades plus "no timing", the same set as 2K19 and 2K20
grades   = very early, early, slightly early, excellent,
           slightly late, late, very late
// How covered the shot is, plus ten finer on-screen feedback tiers
contest  = wide open, open, lightly contested, heavily contested, smothered
// Who sets the window size
models   = Rookie, Semi-Pro, Pro, All-Star, Superstar, Hall of Fame,
           and one built from the real player's shooting percentage

In plain words: your release is compared with the perfect moment and lands in one of seven grades. Excellent is the middle one. The window is the stretch of time around the perfect moment that counts as Excellent, and its size starts from your difficulty, or from the real player's percentage in that mode.

Same jumper, two shooters: one spreads out, one stacks A SKILLED PLAYER A GREEN SCRIPT VERY EARLYEARLYSLIGHTLY EARLYEXCELLENTSLIGHTLY LATELATEVERY LATE Each dot is one release. Illustration: real window sizes change with the factors in the next section.
Figure 2 · Releases against the gradesIllustration

A script removes your release error, the one part of a shot that depends on your hands. Everything else in this section still applies to a cheater exactly as it does to you.

The timing window, factor by factor

2K27 builds the window in two passes. The first sets a starting size from your difficulty and the way you shoot. The second multiplies it by everything about this particular shot.

NBA 2K27 · SIZING THE WINDOW (PARAPHRASED)

// Pass 1: the starting size
window = start_size[difficulty][release_type]   // 7 difficulties × 3 ways to release
                                                // layups and dunks have their own lists
if shooter is not a person with the meter on:  window ×= meter_off_scale
if the shot is a three:                         window ×= three_scale
if team_control:                                window ×= team_control_scale

// Pass 2: this shot
window ×= look_curve(chance_before_timing)       // six points, jumpers, layups, dunks
        × shot_type_scale[shot]                  // 30 shot types, a second list for threes
        × luck_curve(team_luck_total)            // with a floor when the defense is light
        × takeover_scale                         // active Takeover abilities
        × effects_from_other_players             // each one names its target
        × spare_curve_a(shot_attribute)          // two unused slots 2K can fill
        × spare_curve_b(rating)                  // from the server at any time
        × minigame_scale                         // only in the Park shooting minigame
        × game_mode_scale                        // 1 everywhere except MyCAREER

In plain words: the window starts from your difficulty and gets bigger or smaller for each item on the list. Turning the meter off, shooting a three and the kind of shot (pull-up, step-back, fade, floater and the rest) each change it. A worse look shrinks it. Your team's luck streak changes it. Takeover can grow it. The last four only apply in special cases. Every factor multiplies the others, so a single setting of 0 closes the window completely.

What each factor does, with exact values

FactorWhen it appliesNBA 2K27NBA 2K20NBA 2K19
Starting sizeAlwaysFrom 2K's servers, per difficulty and release typeMeter on: Excellent runs 2 frames early to 1 late on Rookie, 1 early to 1 late from Pro up1 frame early to on time from Pro up; 1 early to 1 late on Rookie
Meter offThe shooter isn't a person with the meter on. That covers meter off and every CPU shooterServer multiplierIts own fixed cutoffs at every difficulty: Excellent 1 early to 1 lateNo such setting
ThreesThe shot is a threeServer multiplierNo such settingNo such setting
Team controlAt least two people on the shooter's team, and the shooter's controller isn't locked to one playerServer multiplierNo such settingNo such setting
Shot typeEvery shot, 30 types, with a separate list for threesServer multiplier per typeNo such settingNo such setting
The lookEvery shot, by its chance before timingSix-point server curve, one each for jump shots, layups and dunks10% → 0.3×, 20% → 0.5×, 30% → 0.7×, 40% and up → 1×10% → 0.4×, 20% → 0.6×, 30% → 0.8×, 40% and up → 1×
Luck streakEvery shot, by the team's luck total (below)Server curve, never below a server floor when the defense is lightNo such settingNo such setting
TakeoverAn active Takeover that boosts the windowServer multiplier per ability; above 1 it also skips the Excellent check1.5× jump shots, 2× layups, skips the check1.5× jump shots, 2× layups, skips the check
Other playersAnother player on the floor has an effect aimed at the shooterServer values, multiplied togetherNo such settingNo such setting
Two spare slotsEvery shotWired into the math but empty until 2K's tuning fills themNo such settingNo such setting
Park shooting minigameOnly in that minigameSet by the minigameNo such settingNo such setting
MyCAREER buddy skillYour own MyPLAYER in MyCAREER, while a My Buddy timing skill is active1.5×, 2.5× or 4×, fixed in the game file, for a set number of shotsNo such settingNo such setting
Practice drillsDrills that only count ExcellentFixed cutoffs of 0.25, 0.5 and 0.8 seconds each sideNo such settingNo such setting

One frame is 1/60 of a second, about 17 milliseconds. 2K20's and 2K19's values come from their live memory. 2K27's "server" values sit in the tuning file 2K sends to the game, which isn't on the PC we studied.

What "team control" means. It's the couch setup where two or more people play on one team and each controller can switch between players, as in Play Now. The code checks that the team has at least two users and that the shooter's controller isn't locked to one player. In Park, Rec, Pro-Am and MyCAREER every person is locked to their own player, so team control never applies there.

2K20's full cutoffs, meter on

NBA 2K20 · RELEASE CUTOFFS BY DIFFICULTY, IN FRAMES (LIVE VALUES)

                Rookie   Pro   All-Star   Superstar   Hall of Fame
very early  ←    −10     −9      −8         −7           −6
early       ←     −5     −4      −3         −3           −3
excellent   ←     −2     −1      −1         −1           −1   (start)
excellent   →     +1     +1      +1         +1           +1   (end)
late        →     +5     +4      +3         +3           +3
very late   →    +10     +9      +8         +7           +6

meter off, and every CPU shooter, at any difficulty:
                 −10, −3, −1  |  +1, +3, +10
layups, every difficulty:
                 −10, −5, −1  |  +1, +5, +10
then every cutoff × look scale

In plain words: with the meter on, 2K20's Excellent window is 3 frames wide on Rookie (about 50 ms) and 2 frames from Pro up (about 33 ms). Past Pro, higher difficulties only tighten the outer cutoffs, so a mistimed release is graded Late or Very late sooner while the Excellent window stays 2 frames. With the meter off you get those same 2 frames at any difficulty.

When Excellent is refused

NBA 2K27 · GRADING A RELEASE (PARAPHRASED)

if takeover_scale > 1:
    skip both checks                          // an active Takeover boost
else:
    if chance_before_timing < min_chance_for_excellent[jump shot, layup or dunk]:
        no excellent
    if defense > max_defense_for_excellent[jumpers or layups]:
        no excellent
// "no excellent" turns the release into slightly early or slightly late

In plain words: a perfect release still isn't Excellent if the look is too poor or the defense is too heavy. Both limits are server values in 2K27. 2K20 used 0.5 for jump shots and 0.7 for layups, with no minimum chance. 2K19 used 0.15 and 0.4. Any Takeover that grows the window turns both checks off.

The defense the check uses

The defense number in that check isn't the contest you see on screen. The game starts from the contest, then cuts it down for the shooter before it compares anything.

NBA 2K27 · THE DEFENSE A SHOT FEELS (PARAPHRASED)

contest  = sum of the defenders' contest parts
contest += sum of every active badge's defense change   // never below zero
defense  = combine(contest, shooter vs defender ratings)
         × height and distance adjustment
         × takeover_defense_scale            // per active Takeover ability
         × unfazed_scale[shooting_level]      // seven levels
         × immunity_curve(jump_shot_immunity)  // the jump shot's defense immunity grade
defense  = at least the lowest defense level

// The on-screen label uses its own ten cutoffs:
label    = how many of feedback_cutoffs[10] the defense reaches

In plain words: a jump shot with a high defense-immunity grade, an active Takeover and the right badges can turn a heavy contest into a light one before the Excellent check sees it. Badges add their changes together, and Deadeye's can take a late contest all the way to zero. The contest label you see comes from ten separate cutoffs, so the word on screen and the Excellent limit are two different settings.

A heavy contest, cut down before the Excellent check THE DEFENSE THE CHECK SEES Excellent limit (a server value) 1 · the contest2 · + badges (Deadeye)3 · × Takeover4 · × jump-shot immunity grade ABOVE THE LIMIT · NO EXCELLENTBELOW THE LIMIT · EXCELLENT ALLOWED Illustration of the order the code applies them. How big each cut is comes from 2K's tuning.
Figure 3 · How a contested shot still grades ExcellentThe bar shrinks in four steps

What a good release adds

NBA 2K27 · THE TIMING BONUS (PARAPHRASED)

bonus = grade_bonus[jump shot or layup][grade]  // five steps from very off to perfect
// if 2K's tuning turns it on, an Excellent scales from the second-best
// step to the best by how centered it was
if excellent and meter on:
    bonus = max(bonus × meter_on_scale, slightly_off_bonus)
// Close to the rim it uses the layup list, far out the jump-shot list,
// and blends the two in between
bonus += timing_grade_curve(jump_shot_timing_grade) × grade_scale[grade]
bonus += takeover_timing_buff[grade]                // shooting or finishing abilities
if chance_before_timing ≥ very_easy_threshold:  bonus = at least +100%

chance = min(chance_before_timing + bonus,
             chance_before_timing × bonus_cap(chance_before_timing))
chance = 2K's remap curve(chance)                  // on timed shots

In plain words: a good release adds to the chance, and a bad one takes away. An Excellent with the meter on gets its own scale, with a floor so it never falls below the bonus for Slightly early or late. Your jump shot's timing grade and Takeover add more. The total can't take the chance past a multiple of where it started, set by a server curve, so a 10% look can't jump to 100% unless 2K sets that curve to allow it. Very easy shots, at or above a server threshold, get the full capped bonus whatever the timing.

2K20 worked differently. It multiplied the chance instead of adding to it: about 1.22 to 1.30 times for an Excellent from Pro up. 2K19 doubled it. Both tables are in the 2K19 and 2K20 section.

Make or miss

NBA 2K27 · DECIDING THE SHOT (PARAPHRASED)

// Each team keeps a luck total per shot type: jump shots, layups, dunks
after every shot:  luck += made ? (1 − chance) : −chance

off = how far the release was from perfect, as a share of the window
if luck < −streak_limit and chance > min_for_forced_make and off < small:
    forced make                          // a cold team, near-perfect timing
elif luck > +streak_limit and chance < max_for_forced_miss and off > large:
    forced miss                          // a hot team, timing well off
else:
    card = next card from the team's deck   // ten cards, reshuffled at three left
    make = chance > card
// the game mode can still change the result afterwards

In plain words: the game tracks how lucky each team has been. A team that keeps missing shots it should make can have a near-perfect release forced in. A team that keeps making shots it should miss can have a sloppy release forced out. Every other shot is drawn against its chance from a shuffled deck of ten cards, so results even out over a game. Practice drills are the one place where Excellent is an automatic make and anything else an automatic miss.

Your questions, answered from the code

Why do cheaters green half-court step-backs in 3v3?

3v3 is played on a half court, so a "half-court" shot is taken from around the half-court line. That's about 42 feet from the rim. 2K27 decides whether a shot is a heave by distance alone.

NBA 2K27 · WHEN A SHOT BECOMES A HEAVE (VALUES FIXED IN THE GAME FILE)

distance = shooter to the rim
if distance ≥ 60 ft:  long heave
elif distance ≥ 47 ft:  heave
elif distance ≥ 10 ft and the game is in one state it checks for
     and under 0.6 s remain on the clock:
    buzzer heave
else:  a normal shot, timed like any other
// separately, 2K's tuning can switch timing off for heaves

In plain words: a shot from the half-court line is under 47 feet, so it's a normal jump shot with the full Excellent grade and the full timing bonus. Nothing in the code gives a shot from 42 feet any special timing rule.

The heave line is past half court rimthree, 23.75 fthalf court, ≈ 41.75 ftheave, 47 ftlong heave, 60 ft STILL A NORMAL JUMP SHOT AT HALF COURT Distances from the rim's center. The 47 and 60 ft lines are fixed in the game file. 1 ft ≈ 10 px.
Figure 4 · Where 2K27 starts treating a shot as a heaveThe dot moves out to half court

So what decides whether a scripted 42-foot Excellent goes in? Only the general rules above, all set by 2K's servers:

2K19 and 2K20 had one rule aimed at repeated deep greens. Past 60 feet, every Excellent shrank the next window, and the sixth closed it. 2K27 removed that rule, and it never covered 42 feet anyway.

How can a heavily contested shot be Excellent? What about smothered?

  1. The check uses the reduced defense. The jump shot's defense-immunity grade, the shooter's unfazed level, Takeover and badges all shrink the defense first (Figure 3).
  2. Deadeye removes late contests. When the defender wasn't already close at the start of the shot, Deadeye multiplies the release defense down by a curve, and its change can bring the total to zero.
  3. Takeover skips the check. Any active Takeover ability that grows the window turns the defense limit off.
  4. The label and the limit are separate settings. The on-screen contest comes from ten feedback cutoffs. The Excellent limit is one number per shot type. A shot can show "heavily contested" and still sit under the limit.
  5. A smothered make doesn't need Excellent. Any shot with a chance above zero can come up on the card draw, and a cold team's near-perfect release can be forced in.

How do Takeover and badges change shooting?

Takeover can grow the window, skip the Excellent check, add a timing bonus for each grade, shrink the defense and raise shot ratings. Badges change shot ratings, add chance on certain shots, cut the defense, and in Quick Trigger's case set a floor for the window on quick shots. The full breakdown, with 2K20's exact badge values, is its own document: Badges and Takeover, inside the shot.

Would hiding the green window help?

Not against the scripts that matter. A fixed-delay script never looks at the meter. It times the release from the moment you pressed shoot, so hiding the window changes nothing for it. Only a camera setup reads the meter, and it can read the shooting animation instead, the way a meter-off player does. The game already treats meter-off shooting differently: it has its own window scale, and the Excellent bonus has a separate scale when the meter is on. Hiding the window mainly takes a tool away from honest players who learned their jumper from it.

How the cheats work

Every common console cheat sits between your hands and the console and presents itself as an ordinary controller.

The console only ever sees a licensed controller CONTROLLERYour thumb pressesand releases shoot ZEN OR TITANScript moves the releaseto its tuned delay CONSOLESees an official pad.Auth check passes. inputsinputsauthauth The device forwards the console's licensing challenge to the real controller plugged into it, so the check passes. Button presses arrive as the same bytes a thumb would make.
Figure 5 · The signal chainPurple: inputs · Grey: authentication
ToolWhat it isHow it gets greens
Cronus ZenA USB adapter. The controller plugs into it, and it plugs into the console.Runs scripts that rewrite button presses on the way through.
Titan TwoA rival programmable adapter that sits in the same spot.Runs scripts the same way, with several stored on the device at once.
XIM and similarAdapters that translate a mouse and keyboard, or remap inputs.Mostly used for aiming in shooters, but they can carry macros.
Capture card + camera softwareA second device watches the video, finds the shot meter, and drives a Zen.Releases when the meter really is in the green.

How a green script times a shot

  1. You press shoot. The script sees the press before the console does.
  2. It waits a fixed delay tuned to your jump shot, often one per shot type.
  3. It sends the release at exactly that moment, whatever your thumb does.
  4. Better scripts add a few milliseconds of random wobble so the timing looks less mechanical.

The camera setup is the hardest case. It reacts to what's on screen instead of a fixed delay, so it adapts to lag and to every jumper the way a person would, only with near-perfect precision.

Why the console can't detect the device

What 2K27 does about it

2K27's shot code has a group of settings built against scripts, and all of them work on timing. Mike Wang put the design plainly: "There's no RNG factor that will make you randomly miss shots." The code randomizes when you have to release, not whether a perfect release goes in.

NBA 2K27 · THE ANTI-CHEAT IN THE SHOT CODE (PARAPHRASED)

// 1. Random speed on signature jump shots, people only
if anti_cheat_speed_on and the shooter is a person:
    speed = weighted pick of 5 values from table[t]
    // t switches among 3 tables every 420 s of game time, in shuffled order
    effect grows from a minimum on jump shots needing 60 or less to full at 95
    // during the shot the speed eases in, reaching full a set number
    // of frames before take-off

// 2. A random input hold for hot shooters
if attempts ≥ min_attempts and field_goal_pct ≥ min_pct:
    hold this controller's next input for 0 … max_frames frames

// 3. Rhythm-shot stick check
every frame of a person's rhythm gesture:
    moved_x |= stick.x is between the middle and the edge
    moved_y |= stick.y is between the middle and the edge
if either axis never moved in between:
    push the timing at least N frames off perfect
    count one flagged shot for this player and log it

In plain words: 2K27 changes the speed of your jump shot at random and swaps the set of speeds every seven minutes. It holds back a hot shooter's input for a random few frames, and it checks that a rhythm shot's stick passed through in-between positions the way a real thumb does. None of these bans anyone. All of them make a fixed delay stop lining up.

The speed table changes, so a fixed delay stops working MINUTES 0–7 · TABLE 2MINUTES 7–14 · TABLE 1 · SLOWERMINUTES 14–21 · TABLE 3 · QUICKER shot startstime → You, reading the animation Fixed-delay script GREENMISS Illustration. The 420-second rotation is fixed in the game file; the tables' values come from 2K's servers.
Figure 6 · Rotating speed tables vs a fixed delayIllustration

Speed that changes with the situation

Separately from the anti-cheat, every jump shot's speed is drawn at random from a range. A steadiness score from 30 to 100 sets how wide the range is. It's built from your jump shot's timing grade, adjusted for release speed: a quicker release gets a lower score and a wider range. Stamina and the closest defender shift both the range and the moment the shot starts, and a small random spread is always added on top.

NBA 2K27 · THE TARGET MOVES UNDER DEFENSE (PARAPHRASED)

tier   = great shooter if rating ≥ 85, good if ≥ 75, else bad
t      = min(defense / full_contest_defense, 1)
range  = blend(tier.open_range, tier.contested_range, t)
target = perfect_moment + random(range)          // in frames

In plain words: on a contested shot, the perfect moment itself moves by a random few frames from one attempt to the next. Worse shooters and heavier contests get bigger moves. This applies to people as well as the CPU. A fixed delay loses greens here, while an open great shooter keeps a steady target.

Under defense the perfect moment moves; a fixed delay doesn't WIDE OPEN · TARGET STAYS PUT CONTESTED · TARGET SHIFTS UP TO 3 FRAMES a script's fixed release Illustration. The "up to 3 frames" is 2K19's and 2K20's live value; 2K27's tables come from 2K's servers.
Figure 7 · The target moves under defensePurple: Excellent · Dashed: fixed delay

The hot-shooter hold

The game counts each player's attempts and makes. Once both pass 2K's thresholds, the game holds that player's controller input for a random 0 to N frames, drawn fresh each time. A script times its release from the moment it sent the press, so the hold knocks it off the animation. A person watching the animation just adjusts.

Shoot well enough and the timing starts to move FG% THIS GAME hold switches on(enough attempts and FG%) EACH SHOT ABOVE THE LINE shot 1shot 2shot 3 Fixed-delay script Illustration. The trigger and the 0-to-N-frame hold are from the code; the thresholds and N come from 2K's servers.
Figure 8 · The hot-shooter input holdIllustration

The rhythm stick check

Rhythm shooting times a jump shot or free throw with a stick motion instead of a button. A real thumbstick always passes through in-between positions. Input that only ever jumps between the center and the edge is what a macro, a remapped key or a script produces, so that release is pushed off perfect and counted.

Real sticks pass through the middle. Macros jump. REAL THUMBSTICKDIGITAL INPUT PASSESFLAGGED both directions take in-between valuesonly the center or the edge, never between checked on every frame ofa person's rhythm motion
Figure 9 · The rhythm stick checkIllustration of the rule in the code

What it means for cheating

What 2K27 reports after every game

When an online game ends, 2K27 sends three reports to 2K. Between them, 2K gets each player's timing consistency, their meter habits, a count of flagged rhythm shots, and a note on anyone the anti-cheat removed.

NBA 2K27 · THE END-OF-GAME REPORTS (OUR NAMES)

cheater report   for each flagged player: player id, session, status

game report      per player: result, shot button vs shot stick use,
                 flagged rhythm shots, box score
                 meter fill: shots, average, spread
                 shot chart in 16 court zones, green releases

timing report    per player, for each way of shooting
                 (jump shot meter on / off, rhythm timing meter on / off,
                  rhythm tempo meter on / off):
                 shots, average timing error, timing spread

In plain words: after every online game, 2K learns how far off each player's releases were on average and how much they varied, split by how they shoot. It also gets their greens, their meter habits, how many rhythm shots failed the stick check, and whether the PC anti-cheat removed anyone.

Three reports leave the game when it ends Every jump shot's timing errorBox score, greens, meter fillAnti-cheat and sync removals per way of shootingand flagged rhythm shotsPC anti-cheat kicks TIMING REPORTGAME REPORTCHEATER REPORT shots, average error, spreadflagged shots, green releasesplayer id, session, status Sent at the end of online games. Where 2K's servers send them next isn't in the game's code.
Figure 10 · What 2K27 sends after a gameDots travel to the reports

Why the average and the spread are the right numbers

The spread of a player's timing error is exactly what separates a person from a fixed-delay script: people spread out, scripts stack. The average shows a habit, like always releasing a little early. 2K27 splits both by meter setting, so a meter-off player is compared with the right group. The game itself adds spread to everyone through the random target shift, which is why one game's numbers are never enough.

A season of releases: a spread vs a spike at zero SKILLED PLAYER · 100 SHOTSGREEN SCRIPT · 100 SHOTS 0 frames off9+0 frames off9+ Timing spread: wideTiming spread: near zero Illustration. 2K20 uploaded these buckets; 2K27 sends the average and spread of the same thing. Numbers are invented.
Figure 11 · Timing spread, a person vs a scriptIllustration

What every result report carries

Those three reports aren't the whole story. Every online mode also builds a result report for 2K's servers. Park, Pro-Am, MyCAREER's NBA games (solo and co-op), its drills and workouts, MyPLAYER online games, MyTEAM and its park, The W Online, Play Now Online, Legacy mode and the 2K League each have their own. They share one core.

NBA 2K27 · A RESULT REPORT (OUR NAMES)

game:        game id, session, game type, time played
             up to 16 answers to server challenges      // see "Beyond the shot"
each user:   win, loss, dropped, quit, completed, how the game ended
             teammate grade, and the plays behind it
             (good shot defense, stops, smart double teams,
              stopped fast breaks, stopped alley-oops)
each player: the box score, plus greens made on jump shots,
             layups and dunks, and in total
by mode:     Park court, streak and event; grind points, rep and badge XP;
             Takeover XP; whether skill boosts were free

In plain words: after an online game, 2K learns who played, how the game ended for each person, every player's box score with their greens split by shot type, and their teammate grade. Each mode adds its own progress. That's the record 2K's servers use to pay out VC, XP and rep, so the same report that carries progress also carries the evidence.

How the game ended for a playerWhat it means
CompletedPlayed to the end. A separate value covers a game that finished after a split (see "Beyond the shot").
Quit, dropped, cable pulledLeft on purpose, lost the connection, or the network went away mid-game. The game keeps these apart.
Players left, stalled, stalled more than onceThe game couldn't go on because others left or it stopped advancing.
Out of syncThis player's game stopped matching the others' and was voted out.
Kicked for idling, for fouls, for teammate grade, or otherRemoved by a conduct rule (see "Beyond the shot").
Cheat victim, cheat at faultThe game ended because of a cheat. The report records which side was hurt and which was at fault.
Cancelled, accepted an invite, result errorThe game didn't count, the player left to join another game, or the result couldn't be settled.

The 2K League gets the full picture

NBA 2K27 · THE 2K LEAGUE PLAYER REPORT (OUR NAMES)

timing, for jump shots, layups and free throws:
    a ten-bucket histogram, total shots, total timing error
expected makes, for threes, twos, layups and free throws:
    the sum of every shot's chance
also: catch-and-shoot and pick-and-roll makes and attempts,
      contest and block impact sums, inside and on the perimeter,
      passes thrown and caught, touches, dribble moves, time on the ball

In plain words: 2K League games, tryouts included, send the same ten-bucket timing histograms 2K19 and 2K20 sent for everyone, and each player's expected makes. Add up the chance of every shot a player took and you get how many they "should" have made. A player who beats that number game after game, with a narrow timing histogram, stands out. Everyone else's games send only the average and spread.

Beyond the shot: the rest of 2K27's fair-play code

The shot code is one layer. 2K27 also makes sure every machine in a game agrees, lets 2K's servers ask the game questions, and enforces conduct rules. None of these care how you time a jumper, but together they decide who stays in a game and what 2K hears about it.

When machines disagree

In an online game, every console or PC runs the same game at once and the machines keep checking that they still match. If one drifts, the game decides which machines are right by vote.

NBA 2K27 · RESOLVING A DESYNC (PARAPHRASED)

each machine in the game (up to 14) reports a check value of its game state
machines with the same value form a group
majority = the biggest group              // on a tie, the first one found

if the majority and this machine's group both have at least 2 machines:
    split: the groups can carry on as separate games
otherwise, one of three outcomes, each logged:
    keep this machine / remove a machine / end the game
the result report records "out of sync" or "completed after a split"

In plain words: when the machines' games stop matching, the biggest group of matching machines wins and the others are removed. If both sides have at least two machines, the game can split instead, so a game with many people in it doesn't end for everyone. It also means a change made to the game on one machine tends to get that machine dropped rather than help it: once its game stops matching the others, it loses the vote.

Three machines agree, one doesn't MACHINE 1MACHINE 2MACHINE 3MACHINE 4 check value Acheck value Acheck value Acheck value B REMOVED THE GAMES STOP MATCHINGMAJORITY KEEPS PLAYING · MACHINE 4 OUT OF SYNC Illustration of the vote in the code. With two or more machines on each side, the game can split instead.
Figure 12 · The desync voteMachine 4 is voted out

Questions from 2K's servers

NBA 2K27 · A SERVER CHALLENGE (PARAPHRASED)

2K's server sends a challenge: a small script
if the report already holds 16 answers:  skip it
run the script                     // only the first, if there are several
store its answer in this game's result report
if anything goes wrong:  skip it and log why

In plain words: during an online game, 2K's servers can hand the game a small program to run and get its answer back with the game's result. The questions can change at any time without a game update, and the game can't know ahead of time what it'll be asked. What 2K actually asks isn't in the install. It arrives with each challenge.

A question from 2K's server, answered in the result report 2K'S SERVERTHE GAMERESULT REPORT sends a small scriptruns it during playkeeps up to 16 answers scriptanswer the report, answers included, goes to 2K's servers when the game ends Illustration. What 2K asks isn't in the install; it arrives with each challenge and can change at any time.
Figure 13 · A server challengePurple: script and answer · Grey: the report

Conduct rules

The same part of the code that handles online cheating also enforces how people behave in a game. Each mode's setup turns these rules on and sets their limits, and 2K's servers can override them, so no limits are in the install.

RuleWhat it does
Idle checkKicks a player whose controller sits untouched for a set time. MyTEAM runs its own copy of this check.
Teammate gradeKicks a player whose teammate grade falls below a minimum.
FoulsKicks a player past a set number of fouls. A switch lets reaching fouls count toward the penalty limits.
Penalty limitsSeparate limits for penalties in a row and in total, and for reach-ins in a row and in total. A mode can ignore them in the fourth quarter.
PausesPause timers per player, a maximum pause time, seconds taken off for each pause, and an optional short timer.
Team-ups and spectatingSwitches for team-up games, which have their own idle and grade checks, and for whether spectators are allowed.

Settings against gameplay exploits

2K27's gameplay tuning also has settings aimed at exploits rather than cheats, all with values from 2K's servers:

Does the code match what Mike Wang said?

Mike Wang made three claims about 2K27 shooting: no randomness makes you miss, a perfect release always goes in, and shot speed changes with stamina, defensive pressure, the catch, pull-ups and signature shot grades, which he called the skill gap.

ClaimWhat the code showsVerdict
No randomness makes you missEvery shot that isn't forced is drawn against its chance from a shuffled ten-card deck. A release that isn't perfect can miss on that draw. Forced misses also exist, for a team running hot whose release was off.Doesn't hold for imperfect releases
Release perfectly and you make every shotA perfect release adds a bonus capped at a multiple of the chance, then the shot is drawn. It's a sure make only if 2K's tuning lets the chance reach 100%, or the team is cold enough to have it forced. Excellent is also refused on poor looks and heavy defense.Holds only if 2K's tuning makes it so
Speed changes with stamina, pressure, the catch, the shotStamina and the closest defender move the shot's start and its speed range. The timing grade and release speed set how wide that range is. Pull-ups and catch-and-shoot are shot types with their own window scale.Matches
Not mentionedRandom speed for people's signature jump shots, from tables that rotate every seven minutes. Random spread on every jump shot's start and speed. A random shift of the perfect moment on contested shots.Left out
Not mentionedA random input hold once a player's attempts and field goal percentage are high enough.Left out
Not mentionedA team's luck streak changes its window size and can force makes and misses.Left out
"That's the skill gap"Part of the speed change follows the situation and can be learned. Part is a deliberate random draw that can only be reacted to, and shooting well switches on more of it.Partly

The code partly contradicts him. Timing is deliberately randomized for players as anti-cheat, a team's luck changes both its window and its results, and a shot that isn't forced is still drawn against its chance, as in 2K20. "Perfect means a make" is true only as far as 2K's server tuning pushes a perfect release's chance to 100%, and that tuning can change at any time.

How we got here: 2K19 and 2K20

2K19 and 2K20 keep their tuning in the game's own data, so their live memory shows real values. Their code shows where 2K27's design came from.

NBA 2K19NBA 2K20NBA 2K27
What Excellent doesDoubles a jump shot's chanceMultiplies it by about 1.22 to 1.30 from Pro upAdds a bonus, capped at a multiple of the chance
Excellent window, Pro, meter on1 frame: 1 early to on time2 frames: 1 early to 1 lateFrom 2K's servers, then up to 13 factors
Defense limit on Excellent0.15 jump shots, 0.4 layups0.5 jump shots, 0.7 layupsServer values; checked against the reduced defense
Minimum chance for Excellent00Server value per shot type
TakeoverWindow 1.5× jumpers, 2× layups, check skippedThe samePer ability: window, check skipped, timing bonus, defense
Random target shiftUp to 1 to 3 frames by shooter tier and defense; bad shooters 2 frames off even when openNone when open; up to 1 to 3 frames under defenseThe same kind of tables, from 2K's servers
Deep-shot rulePast 60 ft, each Excellent shrinks the next window; the sixth closes itThe sameRemoved. Heaves start at 47 ft and 2K can turn their timing off
LuckNoneForces makes and misses on streaksForces results only when timing agrees, and changes the window
Anti-cheat in the shot codeNoneNoneRandom speed tables, hot-shooter hold, rhythm stick check
Where tuning comes fromThe game's own dataThe game's own data2K's servers
Timing reportTen-bucket histogramsThe sameAverage and spread per way of shooting; ten-bucket histograms and expected makes in 2K League games only
Desync handlingNot checkedA vote among up to 14 machines; the minority is removed, or the game splits
Server challengesNot checkedUp to 16 server scripts answered in each result report

"None" means the setting doesn't exist in that game's executable. Neither 2K19 nor 2K20 has an anti-cheat setting or a flagged-shot counter, and neither install ships an anti-cheat program.

2K19's window

NBA 2K19 · RELEASE CUTOFFS IN FRAMES (LIVE VALUES)

                  jump shots, Pro and up    layups, any difficulty
very early        more than 8 early         more than 10 early
early             8 to 2 early              10 to 4 early
slightly early    2 to 1 early              4 to 3 early
excellent         1 early to on time        3 early to 3 late
slightly late     on time to 2 late         3 to 4 late
late              2 to 8 late               4 to 10 late
very late         more than 8 late          more than 10 late
// On Rookie, jump shots get 10, 2, 1 early and 1, 2, 10 late

every cutoff × look scale × Takeover (1.5× jump shots, 2× layups)
no Takeover and defense above 0.15 (0.4 for layups):
    excellent becomes slightly early or slightly late

In plain words: from Pro up, 2K19's Excellent window on a jump shot is a single frame, about 17 ms, and any real contest takes it away. 2K19 has no separate meter-off window.

2K19 and 2K20 already moved the target

Shooter tier2K19 open2K19 contested2K20 open2K20 contested
Great (85+)0±1 frame0±1 frame
Good (75–84)±1 frame±2 frames0±2 frames
Bad (below 75)2 frames early±3 frames0±3 frames
Full contest at a defense of0.50.2

NBA 2K19 AND 2K20 · THE DEEP-SHOT RULE (PARAPHRASED, LIVE VALUES)

after a timed shot from past 60 ft:
    excellent      → deep_streak += 1
    any other grade → deep_streak −= 0.2   // never below 0
on shots from past 60 ft:
    excellent window × (0 → 1×, 3 → 0.5×, 6 → 0×)

In plain words: the older games punished repeated perfect heaves. Each Excellent from past 60 feet shrank the next one's window, and after six in a row the window closed. That's the only rule in either game aimed at repeated perfect releases.

What Excellent was worth

NBA 2K20 · TIMING MULTIPLIERS (LIVE VALUES)

// One row per grade, blended from a close-range value to a long-range one
grade                  close range      long range
very early / late      0.35 – 0.75×     0.82 – 0.86×
early / late           0.70 – 0.90×     0.87 – 0.91×
slightly early / late  1.00 – 1.23×     1.02 – 1.06×
excellent              1.22 – 1.30×     1.15 – 1.23×
chance = clamp(chance × multiplier, 0%, 100%)

In plain words: in 2K20 a perfect release multiplied the chance by about a quarter, a bit less from long range. Each range covers the difficulty presets. One preset doubles the chance on Excellent and one turns timing off.

NBA 2K19 · TIMING MULTIPLIERS (LIVE VALUES)

grade                  jump shots       the other shot type
very early / late      0.40 – 1.00×     0.65 – 1.00×
early / late           0.84 – 1.10×     0.85 – 1.20×
slightly early / late  1.37 – 1.45×     1.20 – 1.50×
excellent              2.00×            1.45 – 2.00×
// a jump shot released past the outer cutoffs gets 0×: a sure miss

In plain words: in 2K19 a perfect jump shot doubled the chance in every preset that uses timing, so any look of 50% or better was a sure make.

PresetDifficulty2K20 Excellent, close / long2K19 Excellent jump shot
0Rookie2.00× / 2.00×2.00×
1Pro (the live sessions)1.30× / 1.23×2.00×
2All-Star1.27× / 1.21×2.00×
3Superstar1.24× / 1.19×2.00×
4Hall of Fame1.22× / 1.17×2.00×
5–7Other game styles1.22–1.27× / 1.15–1.17×2.00×
8Custom slidersSet by the slidersSet by the sliders

Both games pick a column by difficulty: difficulties 0 to 4 map straight onto presets 0 to 4, presets 5 to 7 are other game styles, and preset 8 is custom sliders. Both live sessions we read were on Pro.

NBA 2K20 · THE MAKE ROLL (PARAPHRASED, LIVE VALUES)

card = next card from a shuffled ten-card deck
if luck > +1 and chance < 50%:  card = 1.0   // forced miss
if luck < −1 and chance > 30%:  card = 0.0   // forced make
make = card < chance                // decided as the ball leaves the hand
// luck: +(1 − chance) after a make, −chance after a miss

In plain words: 2K20 forced makes and misses from the luck total whatever your release was. 2K27 kept the deck and the luck total, but forces a result only when the timing agrees.

Green isn't the same as Excellent

Excellent is the timing grade. Green is the meter's feedback afterwards. In 2K20 the make is decided the moment the ball leaves the hand, so the result already exists while the feedback plays. In 2K19 the 2× bonus put almost every Excellent jump shot at a 100% chance. 2K27 counts green releases separately for dunks, layups and jump shots and sends them in its game report.

Why bans are slow

SignalSkilled playerFixed-delay scriptCamera setup
Spread of release errorWide, shifts from session to sessionVery tightTight
Late in games, tiredDriftsUnchangedUnchanged
Contested vs openIts own pattern for eachSame delay everywhereSame precision everywhere
When the connection lagsMisses moreMisses in a fixed wayAdapts, may stay perfect
After 2K27's speed table rotatesAdjusts by eyeDrifts off until retunedAdjusts by eye

One game holds only a few dozen jump shots per player. Telling a wobbling script from a great shooter takes hundreds of shots over many sessions. Then, even once a cheater is spotted, banning at once costs more than waiting:

  1. Hiding the signal. An instant ban tells the script maker exactly what was caught. Banning thousands together hides it.
  2. The bar for proof. A wrong ban hits someone who may have spent real money, and a higher bar needs more shots per account.
  3. A person reviews it. Statistics are evidence, not proof.
  4. Priorities. Each 2K game has a one-year cycle, and anti-cheat competes with features for time.

That's what players see: someone greens for months, then disappears in a wave with many others. 2K27's in-game defenses don't change that. They make scripts weaker in the meantime.

A note on PC

Every console cheat also works on PC, and PC adds software cheats. 2K27 adds EasyAntiCheat there in a peer-to-peer setup, where the anti-cheat can ask the game to remove another player, and the result is logged as a kick by the anti-cheat. It also votes out any machine whose game falls out of sync with the others (see "Beyond the shot") and reports at startup whether the PC's mod folder is empty. The catch is that the timing report is built on the player's own machine. A console guarantees that code is untouched, while a PC cheater who gets past the anti-cheat can send numbers that look human.

What 2K could do better

  1. Keep a record of every shot, not just game totals. Each shot with its situation (the speed drawn, stamina, contest, whether the hold was on) would be far stronger evidence. A person's error moves with the situation; a script's stays flat even when the speed changes. 2K already sends more for the 2K League, which gets full histograms and expected makes. Every ranked mode could get the same.
  2. Check raw input on every shot. 2K27 only checks rhythm-stick motions. Button shots have tells too: press lengths that repeat to the millisecond, releases that land on the same input poll every time.
  3. Bring back a rule for repeated perfect deep shots. 2K19 and 2K20 had one past 60 feet. A rule that counts repeated Excellents from 35 feet and out would hit half-court scripts without touching normal shooters.
  4. Aim the hold at scripts, not at good shooting. The hot-shooter hold triggers on field goal percentage alone. Triggering it on a near-zero timing spread would hit scripts and spare great shooters having a hot night.
  5. Make the meter harder to read by camera. Small changes to the meter's position or shape on each shot cost a person almost nothing, and a camera setup trained on one look has to be retrained.
  6. Act quietly while the evidence builds. Flagged accounts could be matched with each other or kept out of ranked modes without revealing which signal fired.
  7. Make bans cost more. Console-level bans and loss of VC and items on confirmed cases mean a ban isn't solved by buying a new account.
  8. Let players report a specific shot. A report tied to a replay moment, with that shot's input timing attached, gives reviewers evidence instead of a name.
  9. Push the console makers for signed input. A controller's license check proves it's licensed, not that each press came from it. Only Sony and Microsoft can change that.

What 2K can't do

No single change ends scripting. 2K27's randomness beats fixed delays, its reports let statistics catch the rest over time, and its hot-shooter hold is already a quiet penalty inside the game. What it doesn't have is any rule that treats a half-court Excellent differently from a free throw.

Where each piece is in the code

Every claim above was read from the PC builds' code. The names in this document are ours, not the games' own. These are the addresses, so any of it can be checked. 2K27's addresses are for update 2.0.H1.

Checked against update 2.0.H1 (October 25, 2026). We compared the update with the build this document was first written from. Every settings layout behind this document is identical: shots, badges, Takeover, skill boosts, conduct rules and result reports. The values fixed in the game file haven't changed either: the 47 and 60 ft heave lines, the 420-second speed-table rotation, the frame-based input hold, and the 1.5×, 2.5× and 4× buddy windows. The code itself was rebuilt, so every address moved; the table above has the new ones. One internal list did move: the game-mode window factor now sits in a different slot of the mode's method table. The update's visible changes are elsewhere: crew tournament data, a low-energy mode flag, a flag for leaving a crew over crossplay limits, and new Player Eras teaser cameras. Anything 2K changes on its servers can still differ from day to day without an update.

PieceGameAddress
Shot resolve: rating, defense, grade, bonus, result2K270x14423EFC0
Shot rating and badge rating boosts2K270x14423CD00
Defense a shot feels; badge defense total2K270x1443CD4E0, 0x1444752A0
Contest feedback tiers2K270x14423B3A0
Grading and the Excellent check2K270x14423FC00
Window pass 1 and pass 22K270x1443CE7C0, 0x1443CE920, 0x1443CDE20
Luck window factor2K270x14423E3D0
Game-mode window factor; MyCAREER buddy version2K270x1423598E0, 0x1419615A0
Timing bonus; bonus cap; remap2K270x1442402D0, 0x144572000, 0x144240930, 0x144240B20
Make decision, forced results, deck2K270x1442423C0, 0x14431B410, 0x144242110, 0x144241EB0
Heave distances2K270x1447B5A90
Takeover window, timing buffs, defense2K270x1444A7700, 0x1444A70D0, 0x1444A8470
Deadeye defense change2K270x1444706F0
Random speed tables; ease-in; steadiness2K270x1447B7F20, 0x1447BE4E0, 0x1447BD410, 0x1447BF600
Target shift under defense2K270x1447BF0C0, 0x1447B08C0
Hot-shooter hold2K270x144694A70, 0x1446A5BF0
Rhythm stick check, flagged-shot count2K270x1447B0B70, 0x1447AD8D0, 0x14419D760
End-of-game reports2K270x143A26CF0, 0x14419B1B0
Server challenge2K270x143A21760
Desync vote, anti-cheat removals2K270x143AC0F60
Conduct rules: idle and grade kicks; settings log; MyTEAM idle check2K270x143A2B850, 0x143A2EAE0, 0x142963DE0
Pause timers2K270x143A2AA50, 0x143A2AB90
2K League report (registration)2K270x143A16780, 0x143A16730
Cutoffs, meter on and off2K200x1418AD040
Grade, target shift, deep-shot rule2K200x1418AD4C0, 0x141B11030, 0x141C09320
Timing multipliers, make roll2K200x1418A85A0, 0x1418E5DC0
Grade and cutoffs2K190x1414EAFE0, 0x1414EAD30
Look scale, target shift, deep-shot rule2K190x141505C60, 0x141736A70, 0x14178D610
Timing multipliers2K190x1414E7DB0

Code blocks paraphrase what each function does in our own words; no game code or assets are reproduced. 2K27's setting values aren't in its install: they arrive from 2K's servers, so this document gives the formulas and the values fixed in the game file. 2K19's and 2K20's values come from live sessions. Addresses are for the builds we studied (2K27: update 2.0.H1) and differ in other versions. How cheat devices and console license checks behave, and how publishers run ban waves, is described from public knowledge. NBA 2K is a trademark of Take-Two Interactive; MyBaller is not affiliated with or endorsed by 2K.

ALL DOCUMENTS