Skip to content

Port: frame the Item page while walking with a fishing rod out - #160

Open
VinLucero wants to merge 2 commits into
TheMoonPeople:masterfrom
VinLucero:framed-menu-fishing
Open

VinLucero wants to merge 2 commits into
TheMoonPeople:masterfrom
VinLucero:framed-menu-fishing

Conversation

@VinLucero

Copy link
Copy Markdown
Contributor

Before: with a fishing rod out, the main menu's Item page opens on the retail backdrop instead of over the paused world (the third report in #118).

After: it opens framed, as it does without a rod. The rod, float, lure, hook and bait are left out of the paused picture along with Max.

Why: walking with a rod out runs the fishing sub game, and menuworld::MenuOpening skipped every sub game. The fishing game lets the main menu open like any walk (sgMenuOpenEnable), so it is framed too; the other sub games keep retail's menu.

Once framed, the fishing gear stayed in the playerless picture where Max had stood, because it is the fishing game's own models, not the player's. port/src/fishing_config_bridge.inc (appended to the fishing unit's copy, as the other config bridges are) hands them out as PortFishingGear, and CollectPlayerKeys adds their keys while fishing runs.

ps2/ is unchanged.

Tests:

  • MenuWorld.FishingWalkFramesTheMenuButOtherSubGamesDoNot: fishing frames the Item page; the buggy sub game does not.
  • ctest Native|Unit|Bridge|MenuWorld|Fishing: 162/162 pass (3 data-dependent cases skipped).
  • Replayed on Windows (--jump town:10 --give 302, headless 1280x720): equip the Fishing Rod, close the menu, reopen Items. Before: retail backdrop. After: framed, with no rod or float left in the backdrop. The field shows Max holding the rod normally after the menu closes.

🤖 Generated with Claude Code

…onPeople#118)

With a rod out, Max walks inside the fishing sub game, and MenuOpening
skipped every sub game, so the main menu opened on the retail backdrop
instead of over the paused world. The fishing game lets the main menu
open like any walk, so it is framed too; other sub games keep retail's.

The rod, float, lure, hook and bait are the fishing game's own models,
not the player's, and stayed in the playerless picture where Max had
stood. fishing_config_bridge.inc hands them out as PortFishingGear, and
their keys join the player's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-28T18:05:54.469347Z c68f201 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c68f201af4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread port/src/menu_world.cpp
Comment on lines +244 to +245
for (const CCharacter2 *gear : PortFishingGear()) {
CollectCharaKeys(gear, keys);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove the fishing line from the clean pause frame

When the town or dungeon Item menu is opened in fishing control mode, this loop removes only mesh records keyed to the six character models. The captured field frame also always calls DrawFishingLine() (ps2/src/fishing.cpp:1875), which submits untagged mgCDrawPrim 2-D entries, while BuildPlayerlessReplay retains every 2-D draw except kPlayerEffectKey. Consequently the rod, float, and player dissolve away but the fishing line remains suspended at their old positions; tag or filter that primitive with the rest of the fishing gear.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirmed and fixed in de20ae7, thanks. In a replay with the rod out, the line was still faintly visible in the playerless backdrop where the rod had stood.

DrawFishingLine now wraps the retail routine (preserved through RETAIL_BRIDGES as PortRetailDrawFishingLine, override in port/src/fishingobj.cpp) in menuworld::HeldGearScope. That scope tags its 2D draws with kPlayerEffectKey only on the frame the main menu pauses on, so BuildPlayerlessReplay drops them with the rest of the gear:

  • dungeon: the existing PausingDungeonFrame check;
  • town: new PausingTownFrame, the tick where EditLoop sets EditDrawFlag bit 0 to ask for a menu (exposed as EditLoop_DrawFlag). That tick's frame is the one MenuMainInit captures.

Checks: the same replay now shows no line. Against the previous commit, the only changed pixels are the line's column, and the field after closing the menu is pixel-identical. MenuWorld.HeldGearScopeTagsTheTownAndDungeonPauseFrames covers both pause frames and the frames around them. The dungeon side is covered by that test only; I did not replay dungeon fishing.

Review follow-up. DrawFishingLine draws the line as untagged 2D lines,
and the playerless replay keeps every 2D draw but the player's effects,
so the line stayed hanging where the rod had been.

DrawFishingLine now wraps the retail routine (PortRetailDrawFishingLine)
in HeldGearScope, which tags its draws as the player's on the frame the
main menu pauses on: the dungeon's, as PlayerEffectScope already finds
it, or the town's, the tick EditLoop raises EditDrawFlag bit 0 to ask
for a menu (exposed as EditLoop_DrawFlag).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
drkm9743 pushed a commit to Lunatic-Wisdom-Laboratories/OpenCloud that referenced this pull request Oct 30, 2026
Ported from TheMoonPeople/ChronicleTwo#160:

* Port: frame the Item page while walking with a fishing rod out (#118)

With a rod out, Max walks inside the fishing sub game, and MenuOpening
skipped every sub game, so the main menu opened on the retail backdrop
instead of over the paused world. The fishing game lets the main menu
open like any walk, so it is framed too; other sub games keep retail's.

The rod, float, lure, hook and bait are the fishing game's own models,
not the player's, and stayed in the playerless picture where Max had
stood. fishing_config_bridge.inc hands them out as PortFishingGear, and
their keys join the player's.

* Port: leave the fishing line out of the paused menu picture

Review follow-up. DrawFishingLine draws the line as untagged 2D lines,
and the playerless replay keeps every 2D draw but the player's effects,
so the line stayed hanging where the rod had been.

DrawFishingLine now wraps the retail routine (PortRetailDrawFishingLine)
in HeldGearScope, which tags its draws as the player's on the frame the
main menu pauses on: the dungeon's, as PlayerEffectScope already finds
it, or the town's, the tick EditLoop raises EditDrawFlag bit 0 to ask
for a menu (exposed as EditLoop_DrawFlag).
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.

1 participant