Skip to content
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

SCUMM: Add a grail command to the debugger #3986

Merged

Conversation

dwatteau
Copy link
Contributor

@dwatteau dwatteau commented Jun 13, 2022

Context

At the end of Indy3, you must find the real Grail among 10 grails in front of the old knight.

Choosing wisely

For this you need to:

  • think of taking notes when visiting the catacombs and the painting in Castle Brunwald, and not lose them until the end of the game.
  • and own and read all the related hints in the original manual, but it's quite long, in English only (at least on GOG 😞), there's a lot of cursive content, and so on.
  • or have some luck (10% probability).

If you get it wrong:

  • you die,
  • and you need to restart the 3 trials again.
  • (the original game would event prevent you from using your saves).

I don't think the debugger is meant to contain the solution for every puzzle, but finding the real Grail is not just a cheap 1/2 chance and I'm not sure all modern players are as meticulous as you could be for an adventure game in 1990. Especially since your probability of winning is quite low if you don't have the manual. So, since there's already a drafts command for Loom, this adds a grail command for Indy3.

Using scummVars[253] comes from my interpretation of script 0086-0122:

[00DA] (AC)       Exprmode Var[53] = ((Var[253] + 888) - 1);
[00E9] (C8)       if (Local[1] == Var[53]) {
[00F0] (1A)         Bit[1504] = 1;
[00F5] (18)       } else {
[00F8] (1A)         Bit[1504] = 0;
[00FD] (**)       }
[00FD] (5C)       oldRoomEffect-set(128);
[0101] (72)       loadRoom(87);
[0103] (80)       breakHere();
[0104] (A8)       unless (Var[57]) goto 0103;
[0109] (52)       actorFollowCamera(1);
[010B] (5C)       oldRoomEffect-set(257);
[010F] (28)       if (!Bit[1504]) {
                        // "He chose poorly." ......

It seems to always work here (VGA PC), but tests on EGA/Macintosh/FM-TOWNS are welcome :)

How to test

  1. Type room 86 in the debugger (that's the room where you need to make the choice)
  2. Once the knight is done talking, type grail in the debugger
  3. Note the number you're given, pick up the related grail (e.g. if it says 7, pick up the 7th grail from the left).
  4. Use it with the water on the right, and confirm that Indy chose wisely.

Note: there are some non-clickable grails being displayed (which is odd but well…). You need to count the clickable grails (and the count starts from 1, not 0).

This prints the number of the real Grail object when counting from the
left in the final room with the knight in Indy3.

May be useful since there are many Grails, choosing the wrong one kills
you and makes you restart the 3 trials again, and the hints to find it
require the original manual and taking notes during the game.
@bluegr
Copy link
Member

@bluegr bluegr commented Jun 13, 2022

Nice addition! Thanks

@bluegr bluegr merged commit c3b30b7 into scummvm:master Jun 13, 2022
7 of 8 checks passed
@dwatteau dwatteau deleted the feat/scumm-debugger-print-grail-nuber branch Jun 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants