Opened 6 months ago

Last modified 5 months ago

#10832 new defect

QFG4: Castle rooms silence all doors when one is oiled

Reported by: Vhati Owned by:
Priority: low Component: Engine: SCI
Keywords: SCI32 original Cc:
Game: Quest for Glory 4

Description

ScummVM 2.1.0git3990-ge0307e9 (Dec 6, 2018 14:26:10)
Windows 7 64bit
QFG4 CD (English)

When a rogue hero picks the lock on a door in the castle, many room scripts use a cond block to decide whether the door squeaks, or should be silent having been oiled.

Problem: The rooms don't check whether that *specific* door was oiled (any oiled door in the room will count).

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

Change History (5)

comment:1 Changed 6 months ago by Vhati

script 640 - sPickLock::changeState(1)

(cond 
	((proc0_4 221) (self cue:))
	((proc0_4 220) (self cue:))
	((proc0_4 219) (self cue:))
	(else
		(squeakSound play:)
		# The door hinges squeak in protest as you open the door.
		(g91_gloryMessager say: 1 4 3 1 0 640)
		(self cue:)
	)
)



script 642 - sPickLock::changeState(1)

(cond 
	((proc0_4 216) (self cue:))
	((proc0_4 217) (self cue:))
	((proc0_4 218) (self cue:))
	(else
		(squeakSound play:)
		(g91_gloryMessager say: 1 4 3 1 0 640)
		(self cue:)
	)
)



script 644 - sPickLock::changeState(1)

(cond 
	((proc0_4 210) (self cue:))
	((proc0_4 211) (self cue:))
	(else
		(squeakSound play:)
		(g91_gloryMessager say: 1 4 3 1 0 640)
		(self cue:)
	)
)



script 661 - sPickLock::changeState(1)

(cond 
	((proc0_4 224) (self cue:))
	((proc0_4 118) (self cue:))
	(else
		(squeakSound play:)
		(g91_gloryMessager say: 1 4 3 1 0 640)
		(self cue:)
	)
)



script 634 (for room 631) - sPickLock::changeState(1)

(cond 
	((and (== g11_myCurrentRoomNum 631) (proc0_4 209)) (self cue:))
	((and (== g11_myCurrentRoomNum 631) (proc0_4 210)) (self cue:))
	(else
		(squeakSound play:)
		(g91_gloryMessager say: 1 4 3 1 0 640)
		(self cue:)
	)
)
Last edited 6 months ago by Vhati (previous) (diff)

comment:2 Changed 6 months ago by Vhati

These rooms got it right.
Test the flag AND the nearest door.
Otherwise it must be the other door; test its flag.


script 662 - sPickLock::changeState(1)

(cond 
	((and (proc0_4 208) (< (g0_hero x?) 160)) (self cue:))
	((proc0_4 209) (self cue:))
	(else
		(squeakSound play:)
		(g91_gloryMessager say: 1 4 3 1 0 640)
		(self cue:)
	)
)



script 645 (for room 622, 623) - sPickLock::changeState(1)

(if (< (global0 x?) 160) (= local0 1))
(switch g11_myCurrentRoomNum
	(622
		(cond 
			((and (proc0_4 217) local0) (self cue:))
			((proc0_4 219) (self cue:))
			(else
				(g91_gloryMessager say: 1 4 3 1 0 640)
				(squeakSound play:)
				(self cue:)
			)
		)
	)
	(623
		(cond 
			((and (proc0_4 213) local0) (self cue:))
			((proc0_4 225) (self cue:))
			(else
				(g91_gloryMessager say: 1 4 3 1 0 640)
				(squeakSound play:)
				(self cue:)
			)
		)
	)
	(else 
		(g91_gloryMessager say: 1 4 3 1 0 640)
		(squeakSound play:)
		(self cue:)
	)
)

comment:3 Changed 6 months ago by Vhati

The floppy edition has the same cond blocks in all those scripts.


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:4 Changed 5 months ago by Vhati

I looked at squeaks during entry...


script 660 (pink bed) - sComeOnIn::changeState(1)

(if (not (proc0_4 223)) (squeakSound play:))
(pDoor setCycle: End self)



script 661 (EXIT bookshelf) - sComeOnIn::changeState(1)

((< (g0_hero x?) 60)
	(if (not (proc0_4 224))
		(g91_gloryMessager say: 1 4 3 1 0 640)
		(squeakSound play:)
	)
	(pLeftDoor setCycle: End self)
)
(else
	(if (not (proc0_4 118))
		(g91_gloryMessager say: 1 4 3 1 0 640)
		(squeakSound play:)
	)
	(pRightDoor setCycle: End self)
)



script 662 (candle bookshelf) - sComeOnIn::changeState(1)

((< (g0_hero x?) 130)
	(if (not (proc0_4 208))
		(squeakSound play:)
		(g91_gloryMessager say: 1 4 3 1 0 640)
	)
	(pBackDoor setCycle: End self)
)
(else
	(if (not (proc0_4 209))
		(squeakSound play:)
		(g91_gloryMessager say: 1 4 3 1 0 640)
	)
	(pRightDoor setCycle: End self)
)



script 663 (crest bookshelf) - sComeOnIn::changeState(1)

(if (not (proc0_2 212)) (squeakSound play:))
(pDoor setCycle: End self)



Entry squeaks are redundant after leaving a room that squeaks on exit.
And a nuisance where the message pops up again.


script 630 (great hall) only squeaks when there's a cutscene.

No other castle rooms squeak during entry.


These entry squeaks are inconsistent and should be removed.

Last edited 5 months ago by Vhati (previous) (diff)

comment:5 Changed 5 months ago by Vhati

Hm. Stairways all share code that squeaks neither on entry nor exit.

  • EXIT bookshelf is adjacent to a doorless hallway. So that entry squeak's okay. The left door only has one side. On the right is the goon stairway.
  • The pink bed is by a stairway.
  • The crest bookshelf is by a stairway.
  • The candle bookshelf is by a stairway. And a regular room (631), which does squeak on exit.



That absolves most of the quoted code in my previous comment.
The only double squeak is from room 631, to the candle bookshelf room (662).

Note: See TracTickets for help on using tickets.