Opened 11 years ago

Closed 9 years ago

#4699 closed defect (fixed)

DW1: psychiatrist scene isn't playing (German version)

Reported by: SF/invwar Owned by: dreammaster
Priority: high Component: Engine: Tinsel
Keywords: script Cc:
Game: Discworld

Description

Scumm Version: SVN 1.0.0pre045728 Game Version: German Talkie (Neon Edition) Compressed Audio

I have a savegame where Rincewind is waiting in the waiting room of the psychiatrist for a consultation in act 2. After you talked to the troll, you can go up to the psychiatrist. Normally you should see a scene where Rincewind is analysed by the psychiatrist, but this scene isn't playing when I load this savegame. Rincewind just go up and directly returns from above, but without the Rorschach pages and when you reenter the waiting room, you can't go up to the psychiatrist anymore. (because you can now just talk to the milkmaid) This is not directly a dead end! Because if you leave the waiting room before you talk to the troll and reenter, you can advance as expected.

Ticket imported from: #2893946. Ticket imported from: bugs/4699.

Attachments (1)

dw-de.026 (3.5 KB ) - added by SF/invwar 11 years ago.
German savegame at psychiatrist

Download all attachments as: .zip

Change History (17)

by SF/invwar, 11 years ago

Attachment: dw-de.026 added

German savegame at psychiatrist

comment:1 by jvprat, 11 years ago

Owner: set to dreammaster

comment:2 by dreammaster, 11 years ago

Owner: dreammaster removed

comment:3 by dreammaster, 11 years ago

Unfortunately, I don't have a copy of the German Neon edition to test out the savegame with, and the savegame is incompatible with both the English GRA and SCN versions. If someone is able to replicate the bug in an English version and provide a savegame, I'll look into it further.

For now I'm releasing the Asignee and leaving it open.

comment:4 by sev-, 10 years ago

Owner: set to dreammaster
Summary: DW1: psychiatrist scene isn't playingDW1: psychiatrist scene isn't playing (German version)

comment:5 by dreammaster, 10 years ago

Owner: dreammaster removed

comment:6 by sev-, 9 years ago

This bug is nice to get fixed before the release. Raising priority for keeping the track.

comment:7 by sev-, 9 years ago

Priority: normalhigh

comment:8 by dreammaster, 9 years ago

Owner: set to dreammaster

comment:9 by dreammaster, 9 years ago

I verified that the problem exists with the English version as well. The problem seems to be that interpreter contexts are being explicitly initialised to 'RES_1' when a game is restored. When the script for going up the stairs is done, the following sequence occurs:

1. SAVESCENE is called, which normally stores the state of scene, but because resumeState is explicitly RES_1, changes the state to RES_2 instead. 2. NEWSCENE is called. But because resumestate is now RES_2, it gets reset to RES_NOT, rather than calling SetNewScene.

Because of this, it thinks the player is returning to the waiting room without having ever left it.

The underlying cause seems to be in RestoreInterpretContext. It explicitly sets resumeState to RES_1. The original source doesn't have this, but I'm presuming that because it presumes all data of the structure to be zeroed, a more correct value to set it explicitly to is RES_NOT. Making this change has fixed the problem in this scene.

comment:10 by dreammaster, 9 years ago

Resolution: fixed
Status: newclosed

comment:11 by dreammaster, 9 years ago

Status: closednew

comment:12 by dreammaster, 9 years ago

Re-opened again because fix causes a problem with looking at the book contents - once you leave the book, it briefly returns to the previous scene, but then immediately returns you to the book.

comment:13 by dreammaster, 9 years ago

Resolution: fixed

comment:14 by dreammaster, 9 years ago

Reviewing further, I replicated a problem I presume is the same bug, by making a savegame when looking at the contents of Featherwinkle's Concise Compendium of Dragon's Lairs. Restoring the game results in a state where you can't actually leave the close up.

comment:15 by dreammaster, 9 years ago

Okay, a new commit has been done that I think is somewhat cleaner. The issue is that the method 'ActorRestoredProcess' is called both for actors when loading a savegame, as well as when a scene is 'stored' for later returning to, as in the case of the Psychiatrist's, where the lobby area is 'saved' when Rincewind goes upstairs, and then 'restored' to return back downstairs again.

I've added in a new resumeState constant that is set explicitly only in DW1 when restoring a savegame, and not when a scene restore is done. This seems to fix the problem cleanly. I've done some further experiements in other areas, such as making a savegame before, during, and after looking a the dragon summoning book, and it all seems to work fine.

comment:16 by dreammaster, 9 years ago

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.