Opened 6 years ago

Closed 6 years ago

#10874 closed defect (fixed)

QFG4: Rogues get stuck opening castle doors

Reported by: Vhati Owned by: bluegr
Priority: normal Component: Engine: SCI
Version: Keywords: SCI32 original has-pull-request
Cc: Game: Quest for Glory 4

Description

ScummVM 2.1.0git4278-gd31e37683c (Dec 13 2018 04:20:25)
Windows 7 64bit
QFG4 CD (English)

Create a new rogue character.

In the room (644) attached to the lower door of the bat-infested stairway...

Click HAND on either door. Choose "Open".

The narrator will say it won't budge.

Then the UI will become largely unresponsive except to allow bringing up the control panel. The speed slider will be locked as if a script got stuck.

I didn't have a savegame to test the original interpreter. I expect it happens there, too.

File - 5kb MD5 - Full MD5
RESOURCE.000 - 263dce4aa34c49d3ad29bec889007b1c - 1364ba69e3c0abb68cc0170650a56692
RESOURCE.AUD - c39521bffb1d8b19a57394866184a0ca - 71098b9e97e20c8941c0e4812d5f906f
RESOURCE.MAP - aba367f2102e81782d961b14fbe3d630 - 801a04cc6aa5d437681a2dd0b6545248
RESOURCE.SFX - 3cf95e09dab8b11d675e0537e18b499a - 7c858d7253f86dab4cc6066013c5ecec

Change History (6)

comment:1 by Vhati, 6 years ago

Occurs in the floppy edition under ScummVM, and its original interpreter, too.


QFG4 Floppy 1.1a + note patch (English)

File - 5kb MD5 - Full MD5
RESOURCE.000 - f64fd6aa3977939a86ff30783dd677e1 - ff42260a665995a85aeb277ad80aac8a
RESOURCE.MAP - d10a4cc177d2091d744e2ad8c049b0ae - 3695b1b0a1d15f3d324ea9f0cc325245
RESOURCE.SFX - 3cf95e09dab8b11d675e0537e18b499a - 7c858d7253f86dab4cc6066013c5ecec

comment:2 by Vhati, 6 years ago

script 644 - leftDoorTeller::sayMessage()

(if (== g125_myClass 2)  # Rogue.
	# "The door won't budge -- it's locked."
	(g91_gloryMessager say: 3 6 9 1 0 640)
else
	(self clean:)
	(g2_myCurrentRoom setScript: sOpenTheDoor)
)

rightDoorTeller says the same thing.

That 0 arg to say() is a null caller. That means the Teller will not be cued after the message disposes.


This is different from other rooms, where - besides not getting stuck - the menu reappears after the message.


script 662 - leftDoorTeller::sayMessage()

(if (== g125_myClass 2)  # Rogue.
	(super sayMessage: 3 6 9 &rest)
else
	(self clean:)
	(g2_myCurrentRoom setScript: sOpenTheDoor)
)



The bugged room is the only place where "say: 3 6 9" occurs.

comment:3 by Vhati, 6 years ago

Here's why the cue is important.


script 23 - Teller::doVerb()

# ...
(= loc6_couldInput (User canInput:))
(= loc7_couldControl (User canControl:))
(User canControl: 0 canInput: 0)
(while (not (self respond:))
)
# ...

script 23 - Teller::respond()

# ...
(self sayMessage:)
# ...



The following doesn't happen...


script 23 - Teller::cue()

# ...
# local0 is set by TellerIcon::select().
(if local0
	(= local0 0)
	(= g194_myCurrentTeller 0)
	(self clean:)
	(return)
)
# ...

script 23 - Teller::clean()

# ...
(if loc6_couldInput (User canInput: 1))
(if loc7_couldControl (User canControl: 1))
# ...



Teller needs to reach clean() to return control to the player.

comment:4 by Vhati, 6 years ago

Keywords: has-pull-request added

Pull Request: SCI32: Fix QFG4 castle door lockup

comment:5 by Filippos Karapetis <bluegr@…>, 6 years ago

In c4c5c1d4:

SCI32: Fix QFG4 castle door lockup

Fixes doors when rogues attempt to open them, bug #10874

comment:6 by bluegr, 6 years ago

Owner: set to bluegr
Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.