feat(menu): let Gameplay skip the new-game opening #2827

Closed
github-sync wants to merge 1 commit from github/pr/2827 into main
Owner

@yeetbot90 opened this pull request on GitHub · 2026-11-12 15:34 UTC · original
Merged on GitHub in 435d83d335

A new game plays the story movie and then Navi waking Link before Link can be moved. Gameplay's Skip opening leaves those two demos unstarted. The title screen, later cutscenes, and the meeting with the Great Deku Tree stay.

Problem

  • The new-game sequence asks for Opening_Introduction and Opening_LoadingKokiriForest.
  • Those flows play the timelines Dm_Kokiri_0000 and Dm_Kokiri_0030. The movies do not write save data. The flowchart around Dm_Kokiri_0030 already has a skip edge that warps Navi, sets Navi's talked flag, and autosaves. The clock, Meet_DekuTree's first challenge step, and the forest pin happen before the movie on both edges.
  • One function starts those timelines. Returning without setting the timeline player's started bit takes the game's own "did not start, finish the action" exit.
  • Skip title is a different switch (option 44) and still only skips the title screen.

What changed

  • Gameplay, directly under Discord status: Skip opening, off by default, saved like the other on/off rows. Option id 52. The renderer interface version stays 19.
  • host/hos_main.c hos_oot_opening watches those two event requests, does not start Dm_Kokiri_0000 or Dm_Kokiri_0030, and answers the opening's skip query yes only while one of those requests is the current one. Meet_DekuTree is not cancelled. The request is still sent. The cutscene frame counter is not moved.
  • nx2/oot_patches.py inserts those three calls on the supported build only.
  • tests/test_opening_skip.py cuts the host function out of the source and checks the event names, the default, and that option 44 is untouched.

How to switch it on

Insert menu, Gameplay, Skip opening. It applies to a new game started after it is turned on. HOS_SKIP_OPENING=1 turns it on for one run without writing the options file.

How it was tested

Windows, 12 Nov 2026. Branch feat/skip-opening on main 51da0464. Game-free checks only.

  • python -I -B tests/test_opening_skip.py --cc the builder's llvm-mingw clang: PASS: skip opening leaves Meet_DekuTree and id 44, and the sliced function behaves
  • python -I -B tests/run_all.py: 425 passed, 4 failed, 67 skipped in 91 s. The four failures are this PC, not this change: tests/test_fpx_sticky.py and tests/test_spawn_emit.py (clang could not find the C++ header algorithm while building a64emit), nx2/test_nup_paths.py (creating a symlink needs a privilege this process does not have), tests/test_input_background.py (gcc on PATH is clang and rejects an unused stub under -Werror).

Not tested

A new game with the option off, a new game with it on, walking to the Great Deku Tree afterwards, Continue on that save, and loading a save that is already past the opening were not played. There is no menu screenshot. An earlier local game folder was rebuilt from a dirty tree that also had other uncommitted work, so that binary is not this commit.

Risks

If the timeline action does not take the "not started" exit, a new game with the option on can sit on a black screen instead of reaching Link. The first new game with the option on is that check. An existing save is not rewritten. The option defaults off, so a player who never turns it on still sees the opening.

Overlaps

No open issue or pull request asks to skip this opening. #1560 is Skip title (option 44), which this does not use. Option ids 49, 50, and 60 stay reserved.

> [@yeetbot90](https://github.com/yeetbot90) opened this pull request on GitHub · 2026-11-12 15:34 UTC · [original](https://github.com/NotRexed/Hookshot/pull/2827) > **Merged on GitHub** in https://git.magicbean.dev/MagicBeanDev/Hookshot/commit/435d83d3356a5852f0d304b010d378e2097d6886 A new game plays the story movie and then Navi waking Link before Link can be moved. Gameplay's Skip opening leaves those two demos unstarted. The title screen, later cutscenes, and the meeting with the Great Deku Tree stay. ## Problem - The new-game sequence asks for Opening_Introduction and Opening_LoadingKokiriForest. - Those flows play the timelines Dm_Kokiri_0000 and Dm_Kokiri_0030. The movies do not write save data. The flowchart around Dm_Kokiri_0030 already has a skip edge that warps Navi, sets Navi's talked flag, and autosaves. The clock, Meet_DekuTree's first challenge step, and the forest pin happen before the movie on both edges. - One function starts those timelines. Returning without setting the timeline player's started bit takes the game's own "did not start, finish the action" exit. - Skip title is a different switch (option 44) and still only skips the title screen. ## What changed - Gameplay, directly under Discord status: Skip opening, off by default, saved like the other on/off rows. Option id 52. The renderer interface version stays 19. - `host/hos_main.c` `hos_oot_opening` watches those two event requests, does not start Dm_Kokiri_0000 or Dm_Kokiri_0030, and answers the opening's skip query yes only while one of those requests is the current one. Meet_DekuTree is not cancelled. The request is still sent. The cutscene frame counter is not moved. - `nx2/oot_patches.py` inserts those three calls on the supported build only. - `tests/test_opening_skip.py` cuts the host function out of the source and checks the event names, the default, and that option 44 is untouched. ## How to switch it on Insert menu, Gameplay, Skip opening. It applies to a new game started after it is turned on. `HOS_SKIP_OPENING=1` turns it on for one run without writing the options file. ## How it was tested Windows, 12 Nov 2026. Branch `feat/skip-opening` on main `51da0464`. Game-free checks only. - `python -I -B tests/test_opening_skip.py --cc` the builder's llvm-mingw clang: `PASS: skip opening leaves Meet_DekuTree and id 44, and the sliced function behaves` - `python -I -B tests/run_all.py`: `425 passed, 4 failed, 67 skipped in 91 s`. The four failures are this PC, not this change: `tests/test_fpx_sticky.py` and `tests/test_spawn_emit.py` (clang could not find the C++ header `algorithm` while building a64emit), `nx2/test_nup_paths.py` (creating a symlink needs a privilege this process does not have), `tests/test_input_background.py` (`gcc` on PATH is clang and rejects an unused stub under `-Werror`). ## Not tested A new game with the option off, a new game with it on, walking to the Great Deku Tree afterwards, Continue on that save, and loading a save that is already past the opening were not played. There is no menu screenshot. An earlier local game folder was rebuilt from a dirty tree that also had other uncommitted work, so that binary is not this commit. ## Risks If the timeline action does not take the "not started" exit, a new game with the option on can sit on a black screen instead of reaching Link. The first new game with the option on is that check. An existing save is not rewritten. The option defaults off, so a player who never turns it on still sees the opening. ## Overlaps No open issue or pull request asks to skip this opening. #1560 is Skip title (option 44), which this does not use. Option ids 49, 50, and 60 stay reserved. <!-- github-sync:item:2827 -->
A new game plays the story movie and Navi waking Link before Link can be moved. The Gameplay switch leaves those two demos unstarted and keeps the title screen and the Deku Tree meeting.

Co-authored-by: Cursor <[email protected]>
github-sync closed this pull request 2026-11-12 16:56:32 +00:00
Author
Owner

@hckrman101 commented on GitHub · 2026-11-12 16:24 UTC · original

Please test locally

> [@hckrman101](https://github.com/hckrman101) commented on GitHub · 2026-11-12 16:24 UTC · [original](https://github.com/NotRexed/Hookshot/pull/2827#issuecomment-6829338439) Please test locally <!-- github-sync:c:6829338439 -->
Author
Owner

@yeetbot90 commented on GitHub · 2026-11-12 16:28 UTC · original

I tested it locally and it fully works

> [@yeetbot90](https://github.com/yeetbot90) commented on GitHub · 2026-11-12 16:28 UTC · [original](https://github.com/NotRexed/Hookshot/pull/2827#issuecomment-6829439646) I tested it locally and it fully works <!-- github-sync:c:6829439646 -->
Author
Owner

@yeetbot90 commented on GitHub · 2026-11-12 16:29 UTC · original

It spawns you in the house and the camera is bugged for a sec but if you move it will just be perfect

> [@yeetbot90](https://github.com/yeetbot90) commented on GitHub · 2026-11-12 16:29 UTC · [original](https://github.com/NotRexed/Hookshot/pull/2827#issuecomment-6829457496) It spawns you in the house and the camera is bugged for a sec but if you move it will just be perfect <!-- github-sync:c:6829457496 -->
Author
Owner

@yeetbot90 commented on GitHub · 2026-11-12 16:30 UTC · original

@hckrman101

> [@yeetbot90](https://github.com/yeetbot90) commented on GitHub · 2026-11-12 16:30 UTC · [original](https://github.com/NotRexed/Hookshot/pull/2827#issuecomment-6829483034) @hckrman101 <!-- github-sync:c:6829483034 -->
Commenting is not possible because the repository is archived.
No description provided.