ruffle-rs / ruffle

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

Steaml won't load #9122

Closed ActionWavele closed 1 year ago

ActionWavele commented 1 year ago

Describe the bug

ok slnl

this game will only get stuck half way, then ruffle will crash. I used 2023/01/11 Ruffle.

the log said:

thread 'main' panicked at 'wgpu error: Validation Error

Caused by:
    In Device::create_bind_group
    not enough memory left

', C:\Users\runneradmin\.cargo\git\checkouts\wgpu-53e70f8674b08dd4\630c12f\wgpu\src\backend\direct.rs:2962:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
AVM2 stack trace:

Expected behavior

the game should load and play

Affected platform

Desktop app

Operating system

Windows 10

Browser

Mozilla Firefox

Additional information

this game works on adobe flash player projector sa 32 Steaml_P_P_P.zip

ActionWavele commented 1 year ago

I also do not recognise this user... C:\Users\runneradmin\

Lord-McSweeney commented 1 year ago

That's a stack trace from the built Rust code. It's probably from a runner that built the file somewhere else, such as on Github's CI.

I get a different error, reporting that the game needs BitmapData.compare and RustError("Attempted to call \"\" with 1 arguments (more than 0 is prohibited)") at the beginning. The game visibly breaks at the loading screen for me, with random text (some in order A-Z) displaying from the game's internal font.

ActionWavele commented 1 year ago

how did you get that error? are you running the desktop version like I was?

Lord-McSweeney commented 1 year ago

Yes, I was running on the desktop version. It seems like it crashed because you didn't have enough video memory left, did you have a lot of applications open or a slow GPU?

ActionWavele commented 1 year ago

it seems to be that my hardware isn't powerful enough I hope ruffle can become less agressive on my resources, and to fix the error you got it looks related to XML issues

Lord-McSweeney commented 1 year ago

This looks like it needs the AVM2 version of BitmapData.compare; the AVM1 version was added by #5684 already.

ActionWavele commented 1 year ago

this is caused by the same issue as https://github.com/ruffle-rs/ruffle/issues/8844

it goes further on web, but not much steamlw

this story screen can be skipped by clicking to make all text appear, and again to go to the main menu clicking does not work.

Lord-McSweeney commented 1 year ago

With the latest version of #9647, the issue left is BitmapData.compare.

ActionWavele commented 1 year ago

still cannot click to continue

n0samu commented 1 year ago

The game's proper title is Steamlands. (Mentioning it so it comes up in searches.)

10847 does not really help this game, unfortunately. There are some more errors:

ERROR run_frame:run_all_phases_avm2: ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x2161f2cf798 }) to handler FunctionObject(FunctionObject { ptr: 0x2161f458ff8 }) : RustError("Adding a new attribute to XML object is not yet implemented: Multiname { ns: Multiple([Namespace(Private(\"*\")), Namespace(Namespace(\"\")), Namespace(Private(\"*\")), Namespace(Namespace(\"com.nitrome.engine\")), Namespace(PackageInternal(\"com.nitrome.engine\")), Namespace(Namespace(\"http://adobe.com/AS3/2006/builtin\")), Namespace(Protected(\"finally\")), Namespace(StaticProtected(\"finally\")), Namespace(StaticProtected(\"_-0s\")), Namespace(StaticProtected(\"implements\")), Namespace(StaticProtected(\"flash.geom:Point\")), Namespace(StaticProtected(\"Object\"))]), name: Some(\"shape\"), params: [], flags: MultinameFlags(ATTRIBUTE) } = Integer(0)")`
ERROR run_frame:run_all_phases_avm2: ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x21628433628 }) to handler FunctionObject(FunctionObject { ptr: 0x2161f458ff8 }) : ReferenceError: Error #1069: Property flash.display::ShaderJob not found on global and there is no default value.
        at com.nitrome.gfx::BlitClipRotater()
        at com.nitrome.engine::TankBlock$/initBlits()
        at MethodInfo-95()
        at com.nitrome.util::InitQueue/update()

I don't think either of these errors explain why "Click to continue" does not work. The intro screen is on frame 130, with skipIntroButton placed at depth 6 (higher than all other objects). Yet Ruffle seems to ignore the button completely. Not sure if this is a mouse pick issue or a more general AVM2 problem.

Lord-McSweeney commented 1 year ago

The "Click to Continue" button seems to be pressable now, and you can get all the way up to the level select, where these errors are thrown:

ERROR ruffle_core::display_object::movie_clip: Error occured when running AVM2 frame script: TypeError: Error #1009: Cannot access a property or method of a null object reference. (accessing field: align)
    at game_fla::MainTimeline/__setProp_infoText_Scene1_interface_89()
    at game_fla::MainTimeline/frame90()
    at flash.display::MovieClip/flash::display::MovieClip::gotoAndStop()
    at com.nitrome.ui::LevelNode/setState()
    at com.nitrome.ui::CampaignMap/loadState()
    at com.nitrome.ui::CampaignMap/decodeXML()
    at com.nitrome.ui::CampaignMap/addedToStage()
    at flash.display::MovieClip/flash::display::MovieClip::gotoAndStop()
    at com.nitrome.ui::Transition/changeOver()
    at com.nitrome.ui::Transition/frame17()
    at flash.display::MovieClip/flash::display::MovieClip::gotoAndStop()
    at com.nitrome.ui::CustomMouse/onEnterFrame()
ERROR ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x560a6d289868 }) to handler FunctionObject(FunctionObject { ptr: 0x560a6d65f758 }) : TypeError: Error #1009: Cannot access a property or method of a null object reference. (accessing field: length)
    at com.nitrome.engine::Block()
    at com.nitrome.engine::TankBlock()
    at com.nitrome.engine::TracksBlock()
    at com.nitrome.engine::TankBlock$/getTankBlock()
    at com.nitrome.engine::TankBuilding$/convertXMLToBuilding()
    at com.nitrome.engine::TankBuilding$/createPreviewBitmap()
    at com.nitrome.ui::CampaignMap/initBriefingPanel()
    at com.nitrome.ui::CampaignMap/main()
ERROR ruffle_core::avm2::events: Error dispatching event EventObject(EventObject { type: "enterFrame", class: flash.events::Event, ptr: 0x560a710df1a8 }) to handler FunctionObject(FunctionObject { ptr: 0x560a6d65f758 }) : TypeError: Error #1009: Cannot access a property or method of a null object reference. (accessing field: length)
    at com.nitrome.engine::Block()
    at com.nitrome.engine::TankBlock()
    at com.nitrome.engine::TracksBlock()
    at com.nitrome.engine::TankBlock$/getTankBlock()
    at com.nitrome.engine::TankBuilding$/convertXMLToBuilding()
    at com.nitrome.engine::TankBuilding$/createPreviewBitmap()
    at com.nitrome.ui::CampaignMap/initBriefingPanel()
    at com.nitrome.ui::CampaignMap/main()
Lord-McSweeney commented 1 year ago

With #11261 this needs BitmapData.setVector.

n0samu commented 1 year ago

setVector is upcoming in #10275

ActionWavele commented 1 year ago

https://github.com/ruffle-rs/ruffle/assets/120395932/39ea1c85-178b-4c76-a6ef-54063b79c2db

The game now works, mostly

here are the leftover issues

the intro story does not properly scroll to reveal text, instead it shows it scrolling over already revealed text

the borders of menus are completely messed up

The tutorials that pop up during the first few levels are not in black and white

turrets do not correctly rotate to your tank

the victory screen (and the game over screen) are not in black and white

n0samu commented 1 year ago

The game is playable now though, right? If so, I think it would be best to close this issue and make a new one for the remaining minor problems.

Aaron1011 commented 1 year ago

If so, I think it would be best to close this issue and make a new one for the remaining minor problems.

I agree.

the intro story does not properly scroll to reveal text, instead it shows it scrolling over already revealed text

I think this is a general issue with Ruffle not implementing text formatting properly.

the borders of menus are completely messed up

I'm not sure what this is caused by - we should make a separate issue for it.

The tutorials that pop up during the first few levels are not in black and white

I suspect that this is caused by unimplemented filters.

turrets do not correctly rotate to your tank

This will be fixed by https://github.com/ruffle-rs/ruffle/pull/11441

the victory screen (and the game over screen) are not in black and white

This is probably the same filter issue.

n0samu commented 1 year ago

Alright I've opened #11524. Closing this issue.