Run the forced-shiny, trap, forced-item, Celebi, Suicune, roaming and Bug-Catching Contest battle types. Roaming battles keep their struct's DVs and HP byte, and every other battle makes CleanUpBattleRAM's roaming roll. The contest shows PARKBALL×, counts down Park Balls, ends when they run out, keeps its catch outside the party and asks before switching. Scripts load the special types with loadvar, and while a contest runs, encounters use BugCatchingContestBattleScript and ContestMons. Validated with 596 unit tests, 155 browser tests (including the contest menu and switch screen), native/reference builds and reference/vendor/release checks. National Park's contest event, the roaming release and the Ilex Forest Celebi event come with their maps. Closes #28 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b547ca29ff
commit
8fae1f0c0f
15 files changed
+787
-42
No files matched your search
+11
-1
@@ -2,7 +2,7 @@ import { CrystalAssets } from "../src/game/rom/assets";
|
||||
import { generatePartyMon } from "../src/game/party/pokemon";
|
||||
import { GameWorld } from "../src/game/world/world";
|
||||
|
||||
export type BattleScenario = "win" | "loss" | "unsupported" | "catch" | "switch" | "potion";
|
||||
export type BattleScenario = "win" | "loss" | "unsupported" | "catch" | "switch" | "potion" | "contest";
|
||||
|
||||
/** Test-only encounters on an existing floor: production maps stay gated.
|
||||
* Everything after selection runs through the ROM's real wild-battle script. */
|
||||
@@ -40,6 +40,16 @@ export function battleFixtureWorld(assets: CrystalAssets, scenario: BattleScenar
|
||||
mon.hp = 3;
|
||||
world.state.bag.items = [{ item: 18, quantity: 1 }]; // POTION
|
||||
}
|
||||
// A Bug-Catching Contest in progress, already holding a Scyther: the
|
||||
// state National Park's event would leave (GiveParkBalls and a catch).
|
||||
if (scenario === "contest")
|
||||
world.state.bugContest = {
|
||||
parkBalls: 20,
|
||||
mon: generatePartyMon(assets.pokemon, {
|
||||
species: 123, level: 14, item: 0, otId: world.playerId,
|
||||
ot: "CHRIS", dvs: 0x8888, caughtData: 0,
|
||||
}),
|
||||
};
|
||||
world.state.pokedex.seen.add(155);
|
||||
world.state.pokedex.caught.add(155);
|
||||
world.state.money = 3001;
|
||||
|
||||
Reference in new issue
Block a user