ruffle-rs / ruffle

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

Clicker Monsters: After collecting 100 coins, no more coins appear #15265

Open Jmousy opened 6 months ago

Jmousy commented 6 months ago

Describe the bug

In the game Clicker Monsters(AVM1), you earn coins every time you defeat a monster. (Coins are generated indefinitely, regardless of whether you clear the stage or not.)

However, after you collect a total of 100 coins, no more coins appear for defeating monsters. If you move to a different stage or purchase an upgrade, the problem persists.

However, after restarting the game to load your saved history, the coins will appear again.

(If the video doesn't play, you can download it to watch)

https://github.com/ruffle-rs/ruffle/assets/75052171/3616b3a2-47df-456f-8785-2c0c09b21900

Expected behavior

You should be able to earn coins every time you defeat a monster.

Content Location

Attached file:

clicker-monsters.zip

Affected platform

Desktop app

Operating system

Windows 10 22H2

Browser

Google Chrome 121

Additional information

No response

turicfr commented 5 months ago

The issue occurs when a removed MovieClip is passed to a function named removeSpider in DefineSprite 927. Ruffle mistakenly passes a boxed undefined instead of the reference to the removed clip. An example that demonstrates this:

var mc = this.createEmptyMovieClip("mc", 1);
removeMovieClip(mc);
f(mc);

function f(a) {
    trace(a == undefined); // false in Flash, true in Ruffle
}

There is also an ignored test with the same issue -- string_paths_reference_launder.