Port Kurt's balls and the Park Ball's multiplier (#28)

Add the Heavy, Level, Lure, Fast, Friend, Moon and Love Balls with their documented bugs, the Park Ball's multiplier outside the contest, and Friend Ball happiness in the party and the PC. The Heavy Ball is refused for Kadabra and Sunflora, whose original weight read runs into VRAM.

The reference emulator compares 6,153 more catch states per browser against the unmodified PokeBallEffect. Validated with 582 unit tests, 153 browser tests, native/reference builds and reference/vendor/release checks. The Bug-Catching Contest and other special battle types remain on #28.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Sébastien QUEROLandClaude Opus 5.5 committed 2026-10-03 15:38:56 +02:00
1 parent 77704fe848
commit b547ca29ff
8 files changed
+264 -22

No files matched your search

+26
View File
@@ -1250,3 +1250,29 @@ physical-device validation.
Next on #28: Kurt's balls, Park and Safari balls, and special battle types.
Other boundaries listed in the previous section are unchanged.
## Kurt's balls: 2026-10-03
Same session, after the Smart AI commit.
- `Battle.kurtBallRate` translates the Heavy, Level, Lure, Fast, Moon and
Love multipliers; `catchRate` adds the Park Ball's 1.5× and the Level
Ball's skip of the HP, status and held-item terms. Friend Ball catches
get 200 happiness in the party or the PC box.
- The Heavy Ball's buggy bank makes Kadabra's (64) and Sunflora's (192)
scans run past $7fff into VRAM, which the port does not model; those
throws raise `UnsupportedBattle`. Tauros (128) reads a wrong in-ROM
weight, which is reproduced.
- `tests/reference-capture.spec.ts` gained a 6,153-state comparison
against the unmodified `PokeBallEffect`. Mutating the Love Ball gender
test or the Fast Ball's byte count fails it. A Heavy Ball light-mon
off-by-one mutation is undetectable: rates 0 and 1 both end at 1.
Validation: 582 unit tests passed (3 skipped); without the ROM 139 passed,
446 skipped. Browser suite: 153 passed, 19 skipped. Both builds,
reference/release/vendor checks and `git diff --check` passed.
Next on #28: the Bug-Catching Contest battle type (Park Ball count,
`BugContest_SetCaughtContestMon`) and the other special battle types.
Neither is reachable yet: National Park and the legendary encounters
are not enabled.