Opened 6 years ago

Closed 5 years ago

Last modified 17 months ago

#9870 closed defect (fixed)

SCI: LB1: Game hangs when opening passage if walking in wrong spot

Reported by: sluicebox Owned by: sluicebox
Priority: normal Component: Engine: SCI
Version: Keywords: has-pull-request
Cc: Game: Laura Bow 1: The Colonel's Bequest


Opening secret passages in the upstairs hall will freeze the game depending on your location and if you're walking. This is a bug in the original game that also occurs in ScummVM. It's similar to #7119 in that Laura starts to walk to where she's supposed to stand but then stops and the game freezes. I once saw an ancient walkthrough that recommended saving before every attempt because of this. I used to get bit by this one a lot.

This occurs on both the left and right passages in the upstairs hall, room 43.

It's easy to reproduce if you turn the game speed all the way down. The bug happens at all speeds, it's just easier to get the timing right when slow.

To reproduce with the right passage, stand at (250, 164) facing right. This puts you up against the closet and is as far right as you can go. Press the right key to start walking and then immediately press a letter key to bring up the input box. The goal is to bring up the input box while Laura has switched to a walking frame. If this is done then she is in motion and the bug can be triggered with "move closet". If she already made it back to a standing frame then try again.

To reproduce with the left passage, stand at (73, 164) and do the same thing in the opposite direction.

It's not just these positions, if you stand most anywhere up against the closets and try this it will trigger the bug.

In real life what tends to happen is that you exit one of the passages and walk straight across the screen to the other one, go to open it, and get unlucky. When exiting a passage your y position starts out in the danger zone, and "move closet" only works when you're close to the closet, so it's a roll of the dice each time.

I'm weirdly confident that this only occurs when the player is in motion. A while back I tried to flush out this bug with a program that brute forced "move closet" from every position but none of them caused a freeze so I ruled out standing.

This occurs in DOS, Amiga, and Atari versions.

I've attached a ScummVM save game of the DOS version using the nightly build.

Attachments (2)

passage_freeze.png (18.0 KB ) - added by sluicebox 6 years ago.
laurabow.022 (23.6 KB ) - added by sluicebox 6 years ago.

Download all attachments as: .zip

Change History (7)

by sluicebox, 6 years ago

Attachment: passage_freeze.png added

by sluicebox, 6 years ago

Attachment: laurabow.022 added

comment:1 by dafioram, 6 years ago

If the game is stopped in debug at CB1::doit script 0 room 43 address 0001:06e5 then a send 04 call is performed which will force a jump to address 06f2 if laura is not moving or 001:06ea if she is and then it gets stuck in this endless loop. Even if I force the code to jump to 06f2 in the bug state laura will still try to walk the way she is facing while staying in place and still stays in the loop.

comment:2 by sluicebox, 5 years ago

This is a symptom of a larger bug I've since written up and fixed: #10733

comment:3 by digitall, 5 years ago

Keywords: has-pull-request added

comment:4 by digitall, 5 years ago

Owner: set to bluegr
Resolution: fixed
Status: newclosed

Since has been merged, this can now be closed.

Closing as fixed.

comment:5 by sluicebox, 17 months ago

Owner: changed from bluegr to sluicebox
Note: See TracTickets for help on using tickets.