Skip to content

Keep a pinned fishing float from turning NaN - #219

Closed
Tororoi wants to merge 1 commit into
TheMoonPeople:masterfrom
Tororoi:fix/fishing-float-nan
Closed

Tororoi wants to merge 1 commit into
TheMoonPeople:masterfrom
Tororoi:fix/fishing-float-nan

Conversation

@Tororoi

@Tororoi Tororoi commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Casting a fishing line crashes the macOS ARM build.

While the float is pinned (FishLineSetUki with a weight of 0 or more, as on every cast), FishLineStep copies uki into both point[18] and ukip[0] at the end of each relaxation pass. On the next pass, length between them is 0, so length * (1 - weight) / length is 0/0:

  • On the EE that division gives a finite result, and the float doesn't move.
  • On a PC it gives NaN. The NaN spreads through the float ring and the line into Toan's position, and the game crashes in CCollisionMDT::PickUpNearPoly (SIGBUS, from EdMoveChara).

port/src/fishing.cpp now overrides FishLineStep next to its FishLineDraw override. It is retail's function, except that a zero length becomes 1, which gives the same zero move the EE does. ps2/src is unchanged. Retail's two link tables are static in ps2/src/fishing.cpp, so the override keeps its own copies.

Testing

  • New test: FishingLine.APinnedFloatStaysFinite fails without the change and passes with it.
  • In game, on macOS ARM, PAL disc: Toan was walked to the Muska Lacka fishing sign with stick input, then the fishing menu, bait (Potato Cake) and cast used ordinary button presses.
    • Before this change, the cast crashes with the stack above.
    • After it, the line settles in the water and fish come to the hook.
  • Linux x86_64: the bug was reported there too (Flatpak, casting with a Prickly in Matataki: the screen turns one colour, the bait runs out, and leaving the fishing menu crashes). I haven't run the fix there.

@SirFancyBacon

Copy link
Copy Markdown
Contributor

Confirmed on Linux x86_64 as well. On the Flatpak build, casting with a Prickly in Matataki turned the screen a single color and the game said the bait had run out. Leaving the fishing menu then crashed.

That said your PR touches ps2 source files; can you make the adjustment in the port files instead?

@Tororoi
Tororoi force-pushed the fix/fishing-float-nan branch from 81f8e18 to 9d53e63 Compare October 25, 2026 22:19
@Tororoi

Tororoi commented Oct 25, 2026

Copy link
Copy Markdown
Contributor Author

Confirmed on Linux x86_64 as well. On the Flatpak build, casting with a Prickly in Matataki turned the screen a single color and the game said the bait had run out. Leaving the fishing menu then crashed.

That said your PR touches ps2 source files; can you make the adjustment in the port files instead?

Done.

@Tororoi Tororoi closed this Oct 26, 2026
Adubbz added a commit that referenced this pull request Oct 27, 2026
…e open PRs

The port no longer compiles ps2/: the game's code is forked into port/src/game and
port/include/game, and PORT_OVERRIDE is gone. ps2/ stays the byte-matching decomp.

- PS2-only code removed from the fork: MWCC pragmas, code the PC link discarded, SDK calls
  that do nothing on PC, dead conditionals.
- All port code brought to AGENTS.md and C++26: anonymous namespaces, nullptr, C++ casts,
  std containers and strings in place of fixed buffers and C strings, enum class, no goto,
  meaningful names, minimal comments, documented headers.
- Every function in a logical file: the platform layer is in port/src/<subsystem>
  (app, data, platform, render, input, ui, options, title, battlemenu, dialog, quest,
  item, text, localize, save); the old replacement units are merged into their game units;
  no *_port files, stub headers, linknames.cpp or linker aliases remain.
- Namespaces: dc::game for the game, dc::<subsystem> for the platform layer, dc::test for
  the tests. Only main, extern "C" entry points and the symbols Kazarov calls stay global.
- CI per platform: pc.yml (Linux, Windows, Flatpak), macos.yml and switch.yml, with the
  Switch toolchain image cached on ghcr.io. Kazarov compiles pipelines on first use on a
  CPU rasterizer, so lavapipe no longer runs test processes out of memory.
- Merged PRs, simplified and restyled: #186 (autosave on each dungeon floor and resume
  there), #220, #223 (item framework and gameplay documents), #226 (sound publishing),
  #227, #228, #229, #230 (the fishing line's springs divide as the EE does; supersedes
  #219 and #225).

Each step was gated on Windows: build, unit tests, and headless screenshots of ten game
modes, pixel-identical to master's build.

Co-authored-by: Alessandro Suha <plarpoon@zandark.eu>
Co-authored-by: Thomas Cantwell <cantwell.tom@gmail.com>
Co-authored-by: SirFancyBacon <m.johnsondelta@gmail.com>
Co-authored-by: IvanPerrella <ivan.perrella@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants