It's been a very busy 2023 for Ruffle, so much so that we didn't find the time to write a new progress report with everything going on! Let's fix that!
Let's summarize with some numbers first.
Since the last blog post...
We've now implemented 7 out of 10 of Flash's filter effects, making content look much more accurate (and lots of text actually legible!)
Along with filter support, we've also implemented
cacheAsBitmap support - a huge optimisation for games that use it, saving us the need to render the same thing every single frame!
On the topic of rendering, we've been picking and poking at fonts for a while now - and through our combined efforts we're finally starting to see the light at the end of this pixelated and wrongly shaped tunnel.
@Lord-McSweeney has implemented basic Text Layout Framework (TLF) support, which has started to get some more advanced text rendering working.
@kjarosh has also recently been working on making text inputs more functional, implementing text restrictions and better caret/selection rendering.
@Dinnerbone has created the framework for loading device fonts, instead of using the default Noto Sans we use everywhere. It's available on web (with some configuration) but works out of the box on desktop thanks to @evilpie!
With device font support landing, content that didn't embed their own font will now start looking much better. Notably, lots of Japanese content often relied on this, and didn't render text at all previously.
This has definitely been one of the biggest hurdles to emulating Flash, but the incredible @sleepycatcoding came in and made it happen.
Any kind of multiplayer game such as Gaia, Habbo or Club Penguin relied on sockets (TCP sockets, or XML sockets) to function - and nobody was sure if we'd manage to get these working on the web. Modern browsers just don't like that sort of thing!
On desktop it's now supported out of the box (but will prompt you for permission by default, just to be sure), but web needs a little configuration to make it work.
In addition to sockets, another common way for online games to work was a protocol called "Flash Remoting", using
This was most notably seen in any game that uses the Armor Games API, and we're happy to say that that now works more or less as expected!
This has been a tricky one, but @kmeisthax has been tackling this all year and making amazing progress. Ruffle now supports FLV playback, depending on which codec is required, and @danielhjacobs has added a workaround for patented codecs on the web by playing them using the browser over the top of the content (or on desktop, just opening the browser).
There's still a lot of progress to be made here, and @torokati44 has a working prototype of decoding H.264 using Cisco's OpenH264 which is very exciting!
This was a long time stretch goal that's starting to see reality thanks to @Aaron1011! We now properly version the ActionScript 3 API, and this has been extended to allow AIR-only classes and methods.
We don't have much to show for AIR stuff yet, but the framework to get us here has already helped close off many longstanding compatibility bugs when movies don't expect certain methods or properties to exist for the version of Flash they target.
On the topic of longstanding bugs, @Lord-McSweeney has been working on allowing mixed-avm movies to run correctly - these are usually ActionScript 3 games running inside ActionScript 2 containers, or vice versa.
There's still more to do here, but it's already helped unblock lots of content from just mysteriously failing to start!
The extension now uses Manifest V3 (somewhat reluctantly), which enables us to... keep existing. Unfortunately this came with needing to remove the "go to a swf url and play it in the browser" feature, as that's no longer possible with MV3.
Whilst we had a super basic UI introduced in our last blog post, now it's even better! It's still as simple to use as before, but the new Advanced Open menu has many new options you can toggle to change how content plays - plus we've added a host of brand new debug tools that even Flash Player didn't have!
Whilst not Ruffle itself, the website got some much-needed love from @Dinnerbone with a total redesign. There's a lot more we'd like to do in the future with it, but web development isn't the specialty of any of our regular contributors... help is very much welcome!
We've also pulled in all the improvements to the Extension's demo player, and brought those over to the website too.
There's been just so many PRs landing that not everything can take the spotlight here. We'd like to thank every single person who helped shape Ruffle in 2023, and hope that 2024 brings more great progress.
In addition, a big thank you to our sponsors who help keep the project alive. We appreciate you all!