Opened 7 weeks ago

Closed 6 days ago

Last modified 6 days ago

#16967 closed defect (fixed)

ASYLUM: Sanitarium can become unresponsive when talking to Timber

Reported by: eriktorbjorn Owned by: alexbevi
Priority: normal Component: Engine: Asylum
Version: Keywords:
Cc: Game: Sanitarium

Description (last modified by eriktorbjorn)

In chapter 4 (Circus of Fools), you come across a cage with a werewolf-looking guy named Timber. If you stand in the wrong spot when trying to talk to him, the view of his cage will close while you're automatically walking to the wrong spot and the conversation will never trigger. The game becomes unresponsive.


I'm attaching a savegame that should make it easy to reproduce. I have no idea if this also happens in the original.

Attachments (3)

asylum.009 (57.8 KB ) - added by eriktorbjorn 7 weeks ago.
scummvm-asylum-00000.png (479.9 KB ) - added by eriktorbjorn 7 weeks ago.
SAVES.tar.bz2 (174.4 KB ) - added by eriktorbjorn 7 weeks ago.

Download all attachments as: .zip

Change History (9)

by eriktorbjorn, 7 weeks ago

Attachment: asylum.009 added

by eriktorbjorn, 7 weeks ago

Attachment: scummvm-asylum-00000.png added

comment:1 by eriktorbjorn, 7 weeks ago

Description: modified (diff)

comment:2 by eriktorbjorn, 7 weeks ago

I tried playing the game in Wine, but once I got to where the Circus chapter was supposed to start the game crashed and I couldn't proceed. I'm attaching the savegames I made along the way, in case someone wants to pick it up from there.

comment:3 by eriktorbjorn, 7 weeks ago

After some messing around, I managed to get the game limping along into the Circus chapter, and I was able to reproduce the bug with the original EXE. Which means that we'd need a workaround, rather than a fix, for it I guess.

Last edited 7 weeks ago by eriktorbjorn (previous) (diff)

by eriktorbjorn, 7 weeks ago

Attachment: SAVES.tar.bz2 added

comment:4 by alexbevi, 6 days ago

Owner: set to alexbevi

comment:5 by alexbevi, 6 days ago

Resolution: fixed
Status: newclosed

In 645c5a07:

ASYLUM: Fix Chapter 4 wagon fade race condition with Timber animation

Fixes #16967.

Assisted-by: Codex:gpt-5.6-sol

comment:6 by alexbevi, 6 days ago

The failure sequence was:

  1. Exit scripts clear flag 480 and begin fading object 1462 out.
  2. Script 13 runs before the fade completes.
  3. It tests flag 479, which is still set, and returns.
  4. The exit finishes and clears 479.
  5. Object 1462 becomes invisible, stops advancing, and script 149 waits forever for frame 24.

Patched script now changes that command to test flag 480. This preserves the intended sequence:

  • 479=1, 480=1: already visible, skip the fade.
  • 479=0, 480=0: restore the wagon.
  • 479=1, 480=0: cancel the in-progress exit fade.
[Script] Queuing Script idx: 149 from kHitObject (id: 1462, name: 'Timber (049) SQ')
[Script idx: 149]  0: JumpIfActionFind (1462, 6, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 149]  7: HideCursor (0, 0, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 149]  8: JumpAndSetDirection (0, 1569, 722, 8, 1, 1, 0, 0, 0)
[changeStatus] 2 point1(1568:597) point2(34:66)
[Script] Entered ActionArea (idx: 46, name: Dog Boy Wagon Exit2)
[Script] Queuing Script #1 (idx: 0) for Actor (idx: 0)
[Script] Queuing Script #2 (idx: 12) for Actor (idx: 0)
[Script idx: 0]  0: Return (0, 0, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 12]  0: JumpIfGameFlag (479, 1, 5, 0, 0, 0, 0, 0, 0)
[Script idx: 12]  1: ClearGameFlag (480, 0, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 12]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script] Entered ActionArea (idx: 45, name: Dog Boy Wagon Exit)
[Script] Queuing Script #1 (idx: 0) for Actor (idx: 0)
[Script] Queuing Script #2 (idx: 11) for Actor (idx: 0)
[Script idx: 149]  8: JumpAndSetDirection (0, 1569, 722, 8, 2, 1, 0, 0, 0)
[Script idx: 12]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 0]  0: Return (0, 0, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 11]  0: JumpIfGameFlag (479, 1, 5, 0, 0, 0, 0, 0, 0)
[Script idx: 11]  1: ClearGameFlag (480, 0, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 11]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script] Entered ActionArea (idx: 47, name: Dog Boy Wagon Enter)
[Script] Queuing Script #1 (idx: 0) for Actor (idx: 0)
[Script] Queuing Script #2 (idx: 13) for Actor (idx: 0)
[Script idx: 149]  8: JumpAndSetDirection (0, 1569, 722, 8, 2, 1, 0, 0, 0)
[Script idx: 12]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 11]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 0]  0: Return (0, 0, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 13]  0: JumpIfGameFlag (479, 0, 4, 0, 0, 0, 0, 0, 0)
[Script idx: 13]  5: Return (0, 0, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 149]  8: JumpAndSetDirection (0, 1569, 722, 8, 2, 1, 0, 0, 0)
[Script idx: 12]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 11]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 149]  8: JumpAndSetDirection (0, 1569, 722, 8, 2, 1, 0, 0, 0)
[Script idx: 12]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 11]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 149]  8: JumpAndSetDirection (0, 1569, 722, 8, 2, 1, 0, 0, 0)
[Script idx: 12]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 11]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 149]  8: JumpAndSetDirection (0, 1569, 722, 8, 2, 1, 0, 0, 0)
[Script idx: 12]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 11]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 149]  8: JumpAndSetDirection (0, 1569, 722, 8, 2, 1, 0, 0, 0)
[Script idx: 12]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 11]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 149]  8: JumpAndSetDirection (0, 1569, 722, 8, 2, 1, 0, 0, 0)
[Script idx: 12]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 12]  3: JumpIfGameFlag (480, 0, 5, 0, 0, 0, 0, 0, 0)
[Script idx: 12]  4: ClearGameFlag (479, 0, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 12]  5: Return (0, 0, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 11]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 149]  8: JumpAndSetDirection (0, 1569, 722, 8, 2, 1, 0, 0, 0)
[Script idx: 11]  2: EnableObjects (1667, 3, 1, 1462, 0, 0, 0, 0, 0)
[Script idx: 11]  3: JumpIfGameFlag (480, 0, 5, 0, 0, 0, 0, 0, 0)
[Script idx: 11]  4: ClearGameFlag (479, 0, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 11]  5: Return (0, 0, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 149]  8: JumpAndSetDirection (0, 1569, 722, 8, 2, 1, 0, 0, 0)
[changeStatus] 4 point1(1535:656) point2(34:66)
[Script idx: 149]  9: JumpIfActorCoordinates (0, 1569, 722, 20, 0, 0, 0, 0, 0)
[Script idx: 149] 10: ActorFaceTarget (0, 1462, 0, 0, 0, 0, 0, 0, 0)
[Actor] Facing target 1462 using direction from 0
[Script idx: 149] 11: WaitUntilFramePlayed (1462, 24, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 149] 11: WaitUntilFramePlayed (1462, 24, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 149] 11: WaitUntilFramePlayed (1462, 24, 0, 0, 0, 0, 0, 0, 0)
[Script idx: 149] 11: WaitUntilFramePlayed (1462, 24, 0, 0, 0, 0, 0, 0, 0)
...
Last edited 6 days ago by alexbevi (previous) (diff)
Note: See TracTickets for help on using tickets.