Ruffle – A Flash Player emulator written in Rust
ruffle.rs
ruffle.rs
Maybe using wasm Rust with WebGPU acceleration will make it faster than Shumway. Remarkable to me how much effort must have been put into Shumway, though..
Shumway used to be a Mozilla project with corporate backing; that would explain why their implementation was so complete. (Ruffle is all people working spare-time currently) The performance ceiling with Rust is way higher than JavaScript, but we're nowhere near that yet, much yet at the point where we'd have to start writing JIT compilers for AS2 or AS3. We are using GPUs to render polygonalized shapes where available, though that has some accuracy issues with stroke scaling. Ideally, we'd like to have some kind of low-level Flash-like vector drawing implementation, but that would be a significant performance loss unless we could either parallelize it or somehow convince a GPU to do it.
Furthermore, a lot of that is going to have to come after all the compatibility and implementation work we still need to do. Off the top of my head...
1. Core AS3 display object support - I'm working on this with somewhat-slow progress
2. Core AS3 data types (String, Number, int, uint, Vector.<$>, Point, Transform, JSON, etc) - I'll do this as-needed for other AS3 work or specific games that depend on these methods
3. Video decoding - I have an h263 decoder written but still need to tie it into the stage, and it'll probably be super-inefficient on web unless I port decoding over to GPU shaders
4. Remaining AS2 classes - Someone PR'd BitmapData support but it's incomplete. There's also some security-related and custom socket classes which expose the movie's origin, which is validated by some domain locks.
5. XML - I have a custom DOM and AS2 integration for it, but we need to write our own custom parser and also tie it into both legacy XML and E4X XML on AS3
I'm about 90% sure this is possible using techniques broadly similar to piet-gpu. The problem is a lot less constrained if you have access to compute shaders (ie WebGPU), otherwise it looks a lot like RAVG (Nehab and Hoppe) and you have kinda nasty branching and memory access patterns in the fragment shader, plus still having to do coarse rasterization on CPU.
One of the operational challenges here is that the renderer would likely be a one-off, as the requirements are just so different than most other clients of a 2D rendering engine.
There's been a bit of discussion on #gpu on xi.zulipchat.com. I consider this an interesting problem but can't really justify spending time on Flash-specific features myself.
Adobe already released the universal activation keys cause they shutdown the servers but it's still not legal to use if you haven't bought an original copy https://helpx.adobe.com/x-productkb/policy-pricing/macromedi...
But they no longer sell it anyway? And they don't say any of that on that page. If they really wanted to make sure only those who bought it previously got those keys, they'd require logging in with an account you bought it with to see that page.
http://download.macromedia.com/pub/flash/esd/flashmx2004_tri...
Adobe is the developer of one of the most pirated pieces of software on the planet. I wouldn't put it past them to be a little trigger happy. For personal use, I imagine you're pretty safe, but if it's a business, even a single person consultancy, who knows?
A particularly good paper explaining the problem (and how the NV_path_rendering extension solves it) is "GPU-accelerated Path Rendering", Kilgard and Bolz, 2012.
Does Ruffle solve these? If so, how?
Here's a flash style solution to the problem: https://github.com/jrmuizel/full-scene-rasterizer
Further reading:
https://medium.com/leaningtech/preserving-flash-content-with...
https://medium.com/leaningtech/running-flash-in-webassembly-...
https://medium.com/leaningtech/announcing-cheerpx-for-flash-...
https://medium.com/leaningtech/cheerpx-for-flash-now-general...
For questions: https://twitter.com/alexpignotti
Please. I understand you're trying to make a living here, but being able to use F/LOSS software is absolutely critical for the preservation movement.
“Not-for-profit, charitable and educational organisations can benefit from discounted rates.”. Yeah, no, thank you.
Scaleform impplementation of Flash player always looked really decent to me.
I don't know how good it is
But it mostly seems like a simple, reverse-engineered, purpose-built player for their own use, so probably nothing that the open source community will have much use from.
https://medium.com/leaningtech/cheerpx-for-flash-now-general...
Can't see how this can even begin to approach content preservation we're talking about here.
I can see why they did this - the SVG and canvas vector rendering models are different enough to make blindly rendering SWF content to it cause rendering artifacts. (It's one of our biggest longstanding bugs in Ruffle - canvas masks just look weird.) However, Adobe could have ameliorated this either in the exporter, the authoring environment, or by pushing for Flash-style mask options in web standards that deal with vector rendering. Instead, they went with the far worse but quicker option of prerendering so they could say "hey we totally do HTML5 now".
Not saying we should stick with Flash but I don’t think SVGs are a complete answer today either.
To test it out: https://www.newgrounds.com/portal/view/113883
No flash player required. Works in HTML 5.
Loaded slow though.
There's a cool song in it: Splashdown - So Ha
Is Albino Blacksheep in on the ruffle.rs stuff? Remember them? They were always pioneering CSS stuff back in the 2000's.
I would love to play these games, not just for the nostalgia but being quick, small, and not too addictive. Hopefully, I am not alone.
I think, HTML5 would have done the same job, but the number of HTML5 games is surprisingly low in comparison and wesbites are generally ad-infested.
Which may be possible to do as a browser extension..
ruffle does have a web version but it requires the website owner to explicitly include it.
I like how things like this come out so frequently these days like it’s no big deal.
I just found an open-source alternative too: https://www.synfig.org/
https://mybroadband.co.za/news/internet/221408-sars-efiling-...
https://github.com/claus/as3swf/blob/master/examples/dumps/A...
https://github.com/claus/as3swf/raw/master/examples/dumps/AY...
edit: there is an official spec and it's 243 pages https://www.adobe.com/devnet/swf.html