Found while reviving Junk Food Jack (Flashpoint id 80cd4672-5b7c-46cb-bcb9-ea4adef35bdb) on the web polyfill, v0.8.1. References at tag v0.8.1.
Symptom. The game freezes — no script error — when the player enters a room where a patrolling enemy overlaps the player sprite. Direction-dependent and intermittent in practice (entering along a patrol row makes the overlap likely; falling in from above lands mid-air and works).
Cause. The game's enemy actors call abort from stepFrame when they overlap the player (after killGotan / go). In both actorList loops in vm-rust/src/player/handlers/movie.rs (~line 561 and ~1173), ScriptErrorCode::Abort from one actor sets is_in_frame_update = false, in_step_frame = false and returns — so the remaining actors never receive stepFrame and the whole frame update ends mid-frame. While the overlap persists this repeats every tick and the movie appears frozen. Director's abort "exits the current handler and any handler that called it" — dispatch to the other actors is unaffected.
Fix (verified in a local build). In the Abort arm, continue to the next actor instead of returning (and leave the flags alone). With this the room transition completes normally.
Repro. Junk Food Jack: walk sideways into a room whose enemy patrols the entry row.
Happy to send a PR.
Found while reviving Junk Food Jack (Flashpoint id
80cd4672-5b7c-46cb-bcb9-ea4adef35bdb) on the web polyfill, v0.8.1. References at tagv0.8.1.Symptom. The game freezes — no script error — when the player enters a room where a patrolling enemy overlaps the player sprite. Direction-dependent and intermittent in practice (entering along a patrol row makes the overlap likely; falling in from above lands mid-air and works).
Cause. The game's enemy actors call
abortfromstepFramewhen they overlap the player (afterkillGotan/go). In both actorList loops invm-rust/src/player/handlers/movie.rs(~line 561 and ~1173),ScriptErrorCode::Abortfrom one actor setsis_in_frame_update = false,in_step_frame = falseand returns — so the remaining actors never receivestepFrameand the whole frame update ends mid-frame. While the overlap persists this repeats every tick and the movie appears frozen. Director'sabort"exits the current handler and any handler that called it" — dispatch to the other actors is unaffected.Fix (verified in a local build). In the Abort arm,
continueto the next actor instead of returning (and leave the flags alone). With this the room transition completes normally.Repro. Junk Food Jack: walk sideways into a room whose enemy patrols the entry row.
Happy to send a PR.