Port the fishing rods and wild Magikarp

The Old, Good and Super Rods run FishFunction facing water: the map's fish
group and Fish pick no fish, no bite, or a Pokémon from FishGroups and the
time of day's TimeFishGroups. The player casts and jiggles with the
fishing frames drawn from LoadFishingGFX's tiles, shows "!" on a bite, and
the hooked Pokémon attacks as BATTLETYPE_FISH. Facing pieces now use
signed offsets, which the rod above and left of the player needs.

Wild Magikarp no longer stop a battle: LoadEnemyMon redraws their DVs
through CalcMagikarpLength and its filters, as the original does. The
length routine matches the original in the reference emulator.

Part of #27

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 00:49:35 +02:00
1 parent 4cb4676c7d
commit 397dcef44c
20 files changed
+681 -47

No files matched your search

+1 -8
View File
@@ -20,7 +20,6 @@ const BICYCLE = 7,
ANTIDOTE = 9,
FULL_RESTORE = 0x0e,
POTION = 0x12,
OLD_ROD = 0x3a,
THUNDERSTONE = 0x17,
HP_UP = 0x1a,
RARE_CANDY = 0x20,
@@ -625,10 +624,8 @@ describe.skipIf(!existsSync(romPath))("the start menu", () => {
expect(world.state.registeredItem).toEqual({ which: 0, item: 0 });
});
it("offers no USE without a field menu, and a notice for unported effects", () => {
it("offers no USE without a field menu", () => {
const world = fixture();
world.state.bag.items.push({ item: BERRY, quantity: 1 });
world.state.bag.keyItems.push(OLD_ROD);
world.state.bag.balls = [{ item: 5, quantity: 3 }];
open(world);
pick(world, "PACK");
@@ -636,11 +633,7 @@ describe.skipIf(!existsSync(romPath))("the start menu", () => {
pickItem(world, 5);
expect(menuItems(world)).toEqual(["GIVE", "TOSS", "QUIT"]);
pick(world, "QUIT");
pickItem(world, OLD_ROD);
pick(world, "USE");
expect(world.notice).toBe("Using OLD ROD is not ported yet.");
close(world);
expect(world.state.bag.keyItems).toContain(OLD_ROD);
});
it("raises a level with a Rare Candy, forgetting a move to learn a new one", () => {