ruffle-rs / ruffle

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

Mallet Mania doesn't work well due to newer Flash incompatibilities. #16645

Open MavisCelus19201 opened 5 months ago

MavisCelus19201 commented 5 months ago

Describe the bug

This is less a Ruffle issue and more a note that Mallet Mania and Knight Trap don't work that well in newer Flash versions. If you load them in Flash Player 32 they inhibit unusual behavior. It doesn't load any levels upon selecting one, this isn't a mutliasset issue either.

Loading it in older versions like Flash Player 13 fixes these issues. However changing the Flash Player version to 13 or similar in Ruffle's settings keeps the problematic behavior. Setting the frame-rate to a custom one doesn't alleviate the issue either. That's an issue even in regular Flash

Expected behavior

Mallet Mania: Upon Selecting a Level, on FP13 it loads like normal, while on FP32 it just hangs.

Content Location

Mallet Mania: https://www.nitrome.com/games/malletmania/

Affected platform

Desktop app

Operating system

Manjaro 24.0.1 (Wynsdey) [64-bit]

Browser

No response

Additional information

No response

Dinnerbone commented 5 months ago
ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x215f51adb40 }) to handler FunctionObject(FunctionObject { ptr: 0x215f520d6c0, name: Ok("com.nitrome.game::MenuSystem/enterFrame()") }) : TypeError: Error #1009: Cannot access a property or method of a null object reference. (accessing field: addChildAt)
    at MethodInfo-1130()
    at com.nitrome.game::MenuSystem/enterFrame()
menuSystem.onOutroComplete = function():*
{
    var _loc1_:Sprite = null;
    (root as MovieClip).gotoAndStop("game");
    _loc1_ = new Sprite();
    (root as MovieClip).addChildAt(_loc1_,1);
    (root as MovieClip).controller = new Controller(stage,_loc1_);
    (root as MovieClip).controller.startGame(players,number);
    (root as MovieClip).stop();
};

Likely an issue with goto frame ordering/execution