Opened 3 months ago

Closed 6 weeks ago

Last modified 6 weeks 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 3 months ago.
scummvm-asylum-00000.png​ (479.9 KB ) - added by eriktorbjorn 3 months ago.
SAVES.tar.bz2​ (174.4 KB ) - added by eriktorbjorn 3 months ago.

Download all attachments as: .zip

Change History (9)

by eriktorbjorn, 3 months ago

Attachment: asylum.009​ added

by eriktorbjorn, 3 months ago

Attachment: scummvm-asylum-00000.png​ added

comment:1 by eriktorbjorn, 3 months ago

Description: modified (diff)

comment:2 by eriktorbjorn, 3 months 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, 3 months 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 3 months ago by eriktorbjorn (previous) (diff)

by eriktorbjorn, 3 months ago

Attachment: SAVES.tar.bz2​ added

comment:4 by alexbevi, 6 weeks ago

Owner: set to alexbevi

comment:5 by alexbevi, 6 weeks ago

Resolution: → fixed
Status: new → closed

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 weeks 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.

The loader 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)
...
Version 0, edited 6 weeks ago by alexbevi (next)
Note: See TracTickets for help on using tickets.