Skip to content

NANCY: ScummVM save/load menus and Nancy 8 fixes #6599

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

bluegr
Copy link
Member

@bluegr bluegr commented May 8, 2025

This PR aims to add support for ScummVM save/load menus for Nancy games and fix issues with Nancy 8. With these changes, Nancy 8 is completable, with the following puzzles missing (added as stubs):

  • Laptop - flag puzzle (MatchPuzzle - optional)
  • Squid Toss arcade (AngleTossPuzzle)
  • Barnacle Blast arcade (ArcadePuzzle / Arkanoid)
  • Art studio lathe puzzle (CuttingPuzzle)
  • Stenography tutorials (QuizPuzzle - optional)

With ScummVM save/load menus, we have the following benefits:

  • All games can now benefit from 999 save slots, instead of only the
    newer ones, which feature more enhanced save/load menus
  • It's possible to delete saved games
  • The ScummVM menus can be used in newer games (Nancy 8 and later),
    where the original save/load dialogs aren't implemented yet

Note: Since the original save/load menus aren't implemented for Nancy 8
and newer games, we always use the ScummVM ones there


Status update: I've played through Nancy 6,7,8 (6 and 8 with the ScummVM save/load menus, 7 with the original save/load menus), and they're all completable.

Detailed status:

  • Nancy 6: completable, fully working (one fix is needed for the Zip disk hypertext entries fixed in 2facc4d)
  • Nancy 7: completable, fully working
  • Nancy 8: completable (with the changes in this PR), 5 puzzles missing, in some cases the game freezes when you talk to someone that has nothing to say hopefully fixed in 4c375b3

@bluegr bluegr requested a review from fracturehill May 8, 2025 15:57
@tunnelsociety
Copy link
Contributor

Shall "Use original save/load screens" be enabled by default?

@tunnelsociety
Copy link
Contributor

Minigame stub: there are many, many other unimplemented things in the game which behave the same way; I wonder if it's worth it to add stubs. (For example, enable power on the circuit board puzzle, or try to play Squid Toss at the midway.) CAR is still WIP, and within a broken scene there are at least console commands and tools which can give useful info about the scene; for a game like CAR which is in development, I wonder if it's better to remain on the broken scene instead of jumping away from it.

Copy link
Contributor

@tunnelsociety tunnelsociety left a comment

Choose a reason for hiding this comment

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

Pardon my intrusion, not familiar with github, hope this is the right action

@bluegr
Copy link
Member Author

bluegr commented May 9, 2025

Shall "Use original save/load screens" be enabled by default?

ScummVM load/save screens offer an enhanced experience over the original ones, so the idea is to use them by default, as we do in other engines

@bluegr
Copy link
Member Author

bluegr commented May 9, 2025

Minigame stub: there are many, many other unimplemented things in the game which behave the same way; I wonder if it's worth it to add stubs. (For example, enable power on the circuit board puzzle, or try to play Squid Toss at the midway.) CAR is still WIP, and within a broken scene there are at least console commands and tools which can give useful info about the scene; for a game like CAR which is in development, I wonder if it's better to remain on the broken scene instead of jumping away from it.

The idea is to prevent the game from crashing/locking in unimplemented screens, plus have a list of which mini-games are actually missing

Copy link
Contributor

@fracturehill fracturehill left a comment

Choose a reason for hiding this comment

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

A couple of things for the save/load changes, no objections to the rest.


if (!ConfMan.getBool("originalsaveload")) {
if (Nancy::State::Scene::hasInstance()) {
GUI::MessageDialog saveOrLoad(_("Would you like to load or save a game?"), _("Load"), _("Save"));
Copy link
Contributor

Choose a reason for hiding this comment

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

Just noticed this - when exiting the game through the main menu, the engine shows a "Would you like to save your game before exiting?". Clicking yes still leads to this code path, and asks the player whether they want to load or save. But since they said yes to that question, they'll want to save.

To solve this, I'd add a transient ConfMan bool in savegame.cpp, stop() case 6, and then check for it (and clear it) on this line.

Copy link
Member Author

Choose a reason for hiding this comment

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

Fixed

Copy link
Contributor

Choose a reason for hiding this comment

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

Not exactly. What happens now is that after the user has saved in this scenario, they get thrown back into the Scene state, which resets the _hasJustSaved flag, and they get prompted again. You should either:

  • Return to the main menu after a save (in this scenario only); or
  • Just always return to the main menu after the save or load dialog is closed.

Copy link
Member Author

Choose a reason for hiding this comment

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

@fracturehill Fixed in 7d2655c.
I've modified the ScummVM save dialog to return to the main menu, like the original dialog does.

The original load dialog takes the user back to the scene upon load, so I've kept that behavior the same in the ScummVM load dialog.

@tunnelsociety
Copy link
Contributor

tunnelsociety commented May 13, 2025

Is Carousel really completable? Even with the commits in this PR (currently 68f13e8), I can't flip the power switch on the circuit board, which I think is necessary to proceed (to enter the roller coaster area). Maybe I'm missing how to skip that or how to complete it successfully.

(I humbly and respectfully suggest removing "final", "last" etc. from commit names, since I guess we don't know what we don't know and there may be more stubbable things lurking that we have not encountered yet.)

@bluegr
Copy link
Member Author

bluegr commented May 13, 2025

Is Carousel really completable? Even with the commits in this PR (currently 68f13e8), I can't flip the power switch on the circuit board, which I think is necessary to proceed (to enter the roller coaster area). Maybe I'm missing how to skip that or how to complete it successfully.

(I humbly and respectfully suggest removing "final", "last" etc. from commit names, since I guess we don't know what we don't know and there may be more stubbable things lurking that we have not encountered yet.)

Yes, Carousel is completable. Nothing else should be missing, other than the already identified missing puzzles.
Check here for a solution to that puzzle:
https://community.herinteractive.com/forum/nancy-drew-adventure-series/the-haunted-carousel/car-hints-and-tips/658549-fixing-the-employee-axcess-card-reader-thingy

@tunnelsociety
Copy link
Contributor

tunnelsociety commented May 13, 2025

The solutions in the forum you linked all say to flip the power switch. As I wrote, flipping the power switch does not work in ScummVM. Maybe there is some bug specific to my builds?

There are no warnings, errors, or debug lines in the console when this happens. The latest console lines with -d11 are

Loading new scene 5210: description "Scene description", frame 0, vertical scroll 0, kContinueSceneSound
FSDirectory::createReadStreamForMember('EXT_ROLCircuitBrdXCU_PUZ.avf') -> '/home/user/nancy/car/CDVideo/EXT_ROLCircuitBrdXCU_PUZ.avf'
Opening hashed: EXT_ROLCircuitBrdXCU_PUZ.avf
capture.mp4.mp4

@bluegr
Copy link
Member Author

bluegr commented May 13, 2025

The solutions in the forum you linked all say to flip the power switch. As I wrote, flipping the power switch does not work in ScummVM. Maybe there is some bug specific to my builds?

There are no warnings, errors, or debug lines in the console when this happens. The latest console lines with -d11 are

Loading new scene 5210: description "Scene description", frame 0, vertical scroll 0, kContinueSceneSound
FSDirectory::createReadStreamForMember('EXT_ROLCircuitBrdXCU_PUZ.avf') -> '/home/user/nancy/car/CDVideo/EXT_ROLCircuitBrdXCU_PUZ.avf'
Opening hashed: EXT_ROLCircuitBrdXCU_PUZ.avf

capture.mp4.mp4

Solder the top cables of the board, not the bottom ones

@tunnelsociety
Copy link
Contributor

tunnelsociety commented May 13, 2025

Ah! I knew I had a wrong solution in the video (I really just clicked whichever solders I felt like clicking); in earlier testing a couple months ago, I thought I had the correct solution but still experienced the same bug so assumed it happened no matter what. I guess I actually had the wrong solution then.


if (!ConfMan.getBool("originalsaveload")) {
if (Nancy::State::Scene::hasInstance()) {
GUI::MessageDialog saveOrLoad(_("Would you like to load or save a game?"), _("Load"), _("Save"));
Copy link
Contributor

Choose a reason for hiding this comment

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

Not exactly. What happens now is that after the user has saved in this scenario, they get thrown back into the Scene state, which resets the _hasJustSaved flag, and they get prompted again. You should either:

  • Return to the main menu after a save (in this scenario only); or
  • Just always return to the main menu after the save or load dialog is closed.

@bluegr
Copy link
Member Author

bluegr commented May 15, 2025

Committed the revised Nancy 6 fix, after talking with @fracturehill as 2facc4d.

Will clean up the commits in this PR

bluegr added 4 commits May 15, 2025 11:51
We have the following benefits:
- All games can now benefit from 999 save slots, instead of only the
  newer ones, which feature more enhanced save/load menus
- It's possible to delete saved games
- The ScummVM menus can be used in newer games (Nancy 8 and later),
  where the original save/load dialogs aren't implemented yet

Note: Since the original save/load menus aren't implemented for Nancy 8
and newer games, we always use the ScummVM ones there
These stubs skip the unimplemented puzzles, and will help us progress
further on in the game.

Unimplemented puzzle stubs:
- Laptop - flag puzzle (MatchPuzzle - optional)
- Squid Toss arcade (AngleTossPuzzle)
- Barnacle Blast arcade (ArcadePuzzle / Arkanoid)
- Art studio lathe puzzle (CuttingPuzzle)
- Stenography tutorials (QuizPuzzle - optional)
Needed for Nancy 8 and newer games. Fixes the Swimmer's Itch puzzle
in Nancy 8.

Changes for this puzzle introduced in Nancy 8 have been implemented
with commit 3a6e256. However, since
_puzzleStartTime wasn't initialized, the puzzle timer ended
prematurely, resulting in immediate loss when starting the game
The helper text animation would overwrite the actual phone numbers
displayed, rendering the new phone interface useless
@bluegr bluegr force-pushed the nancy_enhancements branch from c1435e7 to 544fe79 Compare May 15, 2025 08:56
@bluegr
Copy link
Member Author

bluegr commented May 15, 2025

I've pushed some minor commits with no functional changes to master, to remove noise from this PR.
I've cleaned the commit history, and the only thing pending is @fracturehill's reported issue about getting an unwanted save prompt when exiting the game

bluegr added 2 commits May 15, 2025 22:06
This follows the behavior of the original save screen, and fixes the
issue where the user would get a superfluous save confirmation dialog
when exiting the game, after saving
Check if no active records were found for the current frame.
This will lead to an infinite loop without anything happening, so we
reset the _recordsWereExecuted flag, to fall back to the kDefaultAR
dependency. This is needed for some scenes in Nancy 8, where
SetVolume() is called, but no other action records are active.
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.

3 participants