ruffle-rs / ruffle

A Flash Player emulator written in Rust
https://ruffle.rs
Other
15.76k stars 821 forks source link

Detective Grimoire - Officer stuck in a loop #2583

Open theSardonyx opened 3 years ago

theSardonyx commented 3 years ago

Video of the issue here Site of the flash game is here

Browser details: Vivaldi | 3.1.1929.48 (Stable channel) (64-bit) [Chrome base] JavaScript | V8 8.3.110.13

As seen in the video, after the intro (the video shows only when skipped so it's not too long, but it's the same if you wait it out), the game stops responding to any input and the sprite of the policeman stutters (rapidly flashing back and forth between poses).

ousia commented 3 years ago

@theSardonyx, GitHub allows video attaching (including the video myself).

https://user-images.githubusercontent.com/203767/105555344-7b521d80-5d09-11eb-93ea-56c7c6f30ca9.mp4

Animation URL: https://www.gamesloon.com/free-adventure-2/mystery-games-44/games/flash/302.swf.

relrelb commented 3 years ago

After some investigations, it's likely related to #1513.

In code.CharacterManager, these variables are initialized:

this.character_mc = p_character_mc;
this.body_mc = this.character_mc.body_mc;

p_character_mc refers to sprite 1164, which holds a different body_mc object on each frame.

Then, this.character_mc is gotoed frame 4:

this.character_mc.gotoAndStop(this.currentCharacter.__get__frame());

In Ruffle, at this point this.body_mc still refers to the old MovieClip 533, while in Flash it seems to already refer to MovieClip 666. So, when this.body_mc is gotoed frame 2, that doesn't operate on the displayed MovieClip, causing it to run in loops due to a missing stop:

this.body_mc.gotoAndStop(p_pose_int);

The attached display_object_ref.zip demonstrates the bug in a minimal way.

It would be resolved if DisplayObject references were just a canonical path, instead of an actual reference to the object. That means the path should be resolved on each use, but it could be optimized by maintaining some sort of caching mechanism that needs to be invalidated when the path got removed/changed.

n0samu commented 1 year ago

The officer's poses no longer loop, but the Next button still has no effect when clicked.

desertking commented 1 year ago

Hmm I unlocked it so I thought it had been working already. Maybe it was a mistake but maybe it worked already sometime. Can't say anymore. Anyways, damn 2 1/2 years and its still not working.

rtentser commented 1 month ago

The officer's poses no longer loop, but the Next button still has no effect when clicked.

Still the same.