Remaining battle commands, move effects and Smart AI handlers #28

Closed
opened 2026-10-01 11:36:30 +02:00 by kawa · 0 comments
Owner

Port the remaining effect commands and AI_Smart_EffectHandlers; unsupported effects are still refused. Includes Kurt's balls, Park and Safari balls and special battle types.

Commits: 9e0a2cd, c53edb7, 8f5b464, 32d736e, 77704fe, b547ca2, 8fae1f0

Complete through 8fae1f0 (pushed to main on 2026-10-03):

  • Multi-hit and special-damage effects.
  • Moves spanning several turns; status and field effects.
  • Weather, Substitute, Transform, Mimic, called moves, Conversion/Conversion2, Sketch, Baton Pass, Roar/Whirlwind and Teleport. Every move's effect script has a handler; explicit unsafe edge cases remain refused.
  • Smoke Ball, Metal Powder, MysteryBerry, Berserk Gene and the unused held stat-raising effects; trainer berry consumption persists in the stored party.
  • Exp. Share participant/holder awards and stat experience.
  • Traded Pokemon obedience using Johto badges.
  • Remaining AI_Smart_EffectHandlers (77704fe; 6,024 emulator states per browser match the original AI_Smart).
  • Kurt's balls and the Park Ball's multiplier (b547ca2; 6,153 emulator catch states per browser). Heavy Ball refused for Kadabra/Sunflora, whose original read runs into VRAM. There is no Safari Ball item in Crystal.
  • Special battle types (8fae1f0): forced shiny, trap, forced item, Celebi, Suicune, roaming (struct DVs/HP, CleanUpBattleRAM's roaming roll) and the Bug-Catching Contest (PARKBALL× menu, Park Ball count, contest catch and switch screen, out-of-balls end, contest encounters through BugCatchingContestBattleScript). Scripts load the special types with loadvar VAR_BATTLETYPE.

Validation: 576 unit tests passed (3 skipped); without the private ROM, 136 passed and 443 skipped. Chromium/WebKit: 149 passed, 19 intentional skips. Native/reference builds and reference/vendor/release checks passed. Metal Powder matched the unmodified original routine across 320 cases per browser. Other new held-item, experience and obedience paths have local unit coverage and source review. No CI or physical-device validation.

Remaining boundaries also include Unown generation, Beat Up with Eggs, Johto badge stat boosts, and original routines that overrun move lists or loop indefinitely. The badge implementation above covers obedience. Card remains En cours.

Final validation (8fae1f0): 596 unit tests passed (3 skipped); without the private ROM 141 passed and 458 skipped. Chromium/WebKit: 155 passed, 19 intentional skips, including the Smart AI (6,024 states), Kurt's balls (6,153 states) emulator comparisons and the contest menu/switch screen. Builds and reference/vendor/release checks passed. No CI or physical-device validation.

Left for the map cards: National Park's contest event (registration, timer, judging; the contest state is runtime-only), the Burned Tower roaming release and roaming encounters (UpdateRoamMons/JumpRoamMons), and the Ilex Forest Celebi event (CelebiShrineEvent, CheckCaughtCelebi). Still refused: Unown encounters, Beat Up with Eggs, Heavy Ball against Kadabra/Sunflora, and original routines that loop forever or run off a move list.

Port the remaining effect commands and `AI_Smart_EffectHandlers`; unsupported effects are still refused. Includes Kurt's balls, Park and Safari balls and special battle types. Commits: 9e0a2cd, c53edb7, 8f5b464, 32d736e, 77704fe, b547ca2, 8fae1f0 Complete through 8fae1f0 (pushed to main on 2026-10-03): - [x] Multi-hit and special-damage effects. - [x] Moves spanning several turns; status and field effects. - [x] Weather, Substitute, Transform, Mimic, called moves, Conversion/Conversion2, Sketch, Baton Pass, Roar/Whirlwind and Teleport. Every move's effect script has a handler; explicit unsafe edge cases remain refused. - [x] Smoke Ball, Metal Powder, MysteryBerry, Berserk Gene and the unused held stat-raising effects; trainer berry consumption persists in the stored party. - [x] Exp. Share participant/holder awards and stat experience. - [x] Traded Pokemon obedience using Johto badges. - [x] Remaining AI_Smart_EffectHandlers (77704fe; 6,024 emulator states per browser match the original AI_Smart). - [x] Kurt's balls and the Park Ball's multiplier (b547ca2; 6,153 emulator catch states per browser). Heavy Ball refused for Kadabra/Sunflora, whose original read runs into VRAM. There is no Safari Ball item in Crystal. - [x] Special battle types (8fae1f0): forced shiny, trap, forced item, Celebi, Suicune, roaming (struct DVs/HP, CleanUpBattleRAM's roaming roll) and the Bug-Catching Contest (PARKBALL× menu, Park Ball count, contest catch and switch screen, out-of-balls end, contest encounters through BugCatchingContestBattleScript). Scripts load the special types with loadvar VAR_BATTLETYPE. Validation: 576 unit tests passed (3 skipped); without the private ROM, 136 passed and 443 skipped. Chromium/WebKit: 149 passed, 19 intentional skips. Native/reference builds and reference/vendor/release checks passed. Metal Powder matched the unmodified original routine across 320 cases per browser. Other new held-item, experience and obedience paths have local unit coverage and source review. No CI or physical-device validation. Remaining boundaries also include Unown generation, Beat Up with Eggs, Johto badge stat boosts, and original routines that overrun move lists or loop indefinitely. The badge implementation above covers obedience. Card remains En cours. Final validation (8fae1f0): 596 unit tests passed (3 skipped); without the private ROM 141 passed and 458 skipped. Chromium/WebKit: 155 passed, 19 intentional skips, including the Smart AI (6,024 states), Kurt's balls (6,153 states) emulator comparisons and the contest menu/switch screen. Builds and reference/vendor/release checks passed. No CI or physical-device validation. Left for the map cards: National Park's contest event (registration, timer, judging; the contest state is runtime-only), the Burned Tower roaming release and roaming encounters (UpdateRoamMons/JumpRoamMons), and the Ilex Forest Celebi event (CelebiShrineEvent, CheckCaughtCelebi). Still refused: Unown encounters, Beat Up with Eggs, Heavy Ball against Kadabra/Sunflora, and original routines that loop forever or run off a move list.
kawa added this to the Pokemon Crystal - Web project 2026-10-01 11:36:30 +02:00
kawa moved this to A faire in Pokemon Crystal - Web on 2026-10-01 11:36:30 +02:00
kawa moved this to En cours in Pokemon Crystal - Web on 2026-10-03 10:45:08 +02:00
kawa was assigned by PestoRosso 2026-10-03 15:12:40 +02:00
PestoRosso added the P0 - nowparity labels 2026-10-03 15:19:49 +02:00
kawa moved this to Fait in Pokemon Crystal - Web on 2026-10-03 15:56:31 +02:00
kawa closed this issue 2026-10-03 15:56:31 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kawa/Crystal#28