ruffle-rs / ruffle

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

Neopets: Deckball - Unclickable Menus #7591

Open Chromagram opened 2 years ago

Chromagram commented 2 years ago

Describe the bug

I noticed several people commenting on using Ruffle for Neopets. First off, thanks for developing Ruffle. With the additional UserScript, I can still submit scores to the leaderboards, which is awesome.

My current issue is really specific to one game on Neopets so far, Deckball. Basically a simple game where you control a slippery character and try to kick a ball into your opponent's net. The game only allows scores on the hardest difficulty to be submitted and provides some drop down menus to click if you want to change from the default Easy mode.

The error is that while Ruffle can click the single use buttons to go to the Instructions page or to start the game itself, it cannot interact with any of the drop down menus, locking you into playing the default mode only, which is Easy difficulty on the Survival mode.

Expected behavior

When you click any of the drop down menus, a menu should expand out with alternative options you can select. There are several:

Every other menu is preset to the correct setting to play for a high score, but with the difficulty box stuck on Swabby, it's impossible to send a score that will go to the high score boards.

I tried inspecting the .js and all of the other elements of the page to see if I could find something to forcefully change the difficulty myself, but there were just so many submenus and elements that I couldn't pin it down. Even if Ruffle itself cannot click these buttons, if anyone knows what bit of code to change in the Inspector to allow playing the game on the Captain difficulty, that would work as well.

Either way, the expected behaviour is that when you click the dropdown menus on the game, the menus should expand with alternate options.

Affected platform

Browser's extension

Operating system

macOS Ventura 13.0, Windows 11 (22622.450)

Browser

Google Chrome (103.0.5060.134)

Additional information

No response

Dinnerbone commented 2 years ago

Investigation so far:

It's failing a hittest for each dropdown menu. The hittest coordinates seems to be off by some amount, which are also magical numbers used inside the game so I have no idea where they come from or why they're there (or why they're doing something else for us?). It's like the authors tried to compensate for something in the original flash player but that doesn't exist for us so it's overcorrecting.

Dinnerbone commented 2 years ago

Think this may be caused by #5645

Toad06 commented 1 year ago

The HTML embed uses a preloader file before actually loading the game: https://images.neopets.com/games/gaming_system/np6_loader_v2_24.swf?p=ml_space_station&internetexplorer=0&g=g82_v25&id=82&f=24&v=25&n=6.98&c=1000&username=totolescargo&lang=fr&typeID=4&itemID=82&destination=games%2Fplay.phtml%3Fgame_id%3D82&q=high&nsid=-1&nsm=0&member=1&sh=5165ec2cbcf13bef2fb6&sk=3f86bb7d9001d0dda2bf&baseurl=www.neopets.com&image_host=https%3A%2F%2Fimages.neopets.com&useCustomMsg=0&sp=0&va=1&hiscore=1&chall=&dc=0&dict_ver=62&world=6&ddNcChallenge=0&age=1&ms=3&ccard=0&gamew=500&gameh=420&include_movie=games%2Fgaming_system%2Fnp6_include_v16.swf

This matters as the issue doesn't occur when opening the game file directly: https://images.neopets.com/games/g82_v25.swf (click "Play" from the context menu)

11428 (also from Neopets) and #8213 show the same behavior. I don't know why this happens but I noticed a pattern: the preloader is a SWFv6 at a minimum, while the main file is always a SWFv5. I hope this is just a coincidence and is not related to the activation.swf_version() we use in many places.

Chromagram commented 1 year ago

Thanks for continuing to look into this. Ruffle’s been pretty awesome in retaining legacy functionality on Neopets while TNT takes decades to convert stuff to HTML. Even then, most of the old game experiences aren’t getting converted. This has been really helpful, even with some spots not fully functioning yet.