Kuroko Rivals
GuideWhat we don't know yet

Guide

What we don't know yet

Missing numbers and parts of the code not read yet.

The rules in this guide come from the app's code (version 211), and its numbers from the game's decoded data tables. A few pieces are still open.

Missing numbers

The shot and contest tables are decoded (values in the reference). Still open:

  • Per-player contest extras. Each card has extra_disturb_parm and extra_stand_disturb_parm (timing and stance bonuses for defenders), not yet tabulated.
  • Your own card's numbers. Level and rank growth is decoded (progression reference), so a card's stats at level 50 are known; gear, abilities and badges still add on top.
  • When you count as "open". The open-shot bonus is large (up to +50 points), but the rule behind ModelPlayer.IsOpen hasn't been read.

Script patches

Every function in the shot formula first checks whether a downloaded Lua patch replaces it. Checked for versions 201 and 211: none does. The game's only patch file changes a few of Ray Allen's states and nothing else, and no download replaces it (reference). An update can add a patch at any time, so the check has to be repeated after each one.

Code not yet read

  • GetExGoalRate and BeforeCalcShootRate: the character-specific bonuses and pre-shot hooks.
  • CalcOtherAddValue's sources individually (potency, contact and so on): only that they add flat points is known.
  • GetBalanceValueByType: a bonus added to the roll when the bad-luck counter is full. It doesn't change the outcome, since that shot is guaranteed anyway.
  • What the mid-range angle trigger (type 85) does.
  • How the game decides a jump shot is a "close shot" (isCloseShoot).
  • Trait triggers (Traits): what counts as "the corner" for Corner Three and as "open space" for Shooter's Heart. The trigger ids are only matched to the trait descriptions, not read from code.

Blocking

  • Where a blocked ball goes. Strength picks a row of fight_block_weight, which weights the blocked ball's path, but which path each weight index is hasn't been matched to the block_* ball animations.
  • "Cannot block from behind!" The geometry behind it is read from code (you beside the attacker's path, within 45° of where they face), but how that looks in a match hasn't been checked.
  • Posterize angle. A defender is only rolled if they're within an angle of the dunker's facing that comes from the dunk's own data; the values haven't been tabulated.
  • Timing margin. The block window ends 333 time units before the ball would score; whether that is milliseconds hasn't been confirmed.

Checking against real play

20 recorded matches (10 on version 201, 10 on version 211) confirm the make rule, the bad-luck counter and the no-repeat rule (Misses and guaranteed makes).

The game keeps a plain-text log of its last 10 matches (files/SDRes/Bin/FightLog/<match>/LogicFrameData.dat): every frame's player positions, states, energy and animations, the ball's state and owner, and each shot's result. scripts/fightlog.py lists the shots. Still open:

  • Checking the chance itself. Since version 211 the game logs each shot's computed chance (goalRate), and the make rule (roll at or under the chance, plus the bad-luck counter) checks out on all 327 logged shots. Comparing a logged chance with the formula needs the shooter's in-match stats, which the log doesn't include.
  • Which part of Midorima's ultimate removes the range falloff (14 of 22 made from 10 m and beyond).
  • PVPFrameData.dat and RecordVideo/*.record share a binary format (per-frame inputs, probably) that hasn't been decoded. Log/outLog_*.txt is a general client log.