Skip to content

Ducci9129/open-flash

 
 

Repository files navigation

Open Flash logo

Open Flash

Open Flash is a project to create an open-source media player for SWF files. Its goal is to keep Flash animations accessible for archival purposes. It aims to achieve it by learning from related projects and building an ecosystem of reusable components.

This is the main Open Flash repository. It is used to track the overall progress of the project.

Why

Flash had a great role in bringing interactive content to the Web. Despite its bad reputation (accessibility, security, ads, performance, ...), Flash enabled many users to easily create and share content. Keeping this content accessible for the future is valuable and having an open-source implementation of the technology is the best way to keep it accessible.

I (demurgos) personally grew up with Flash games and one of my first computer projects was a mod for the Caverns of Hammerfest, a Flash platformer from 2006. I do not want to lose it. I recommend you The Flash Games Postmortem GDC talk by John Cooney (jmtb02), a talk about the impact of Flash on today's games.

What

The project is inspired by Shumway, ideally it should be possible to install a browser extension or just drop a <script> in the web page to keep the Flash animations working. The project targets the DOM as its primary target but the components should be versatile enough to be used in other environments (embedded in other software for example).

To achieve the stated goal, we prefer small self-contained packages. This allows to lower the barrier to entry by providing cleaner separation of concern and allows finer version control, distribution and bug tracking. The current goal is to study the ideas and architecture of Shumway and split its features in smaller packages.

The current packages are:

They strive to be written both in Typescript and Rust. Typescript is the easiest way to target the Web but Rust has better chances to provide an embeddable library or *wasm build with good performances. Both are modern are valued languages so it should ensure the stability of the project.

To be complete, there should be additional packages for the AVM1, AVM2, the renderer should be split in target-specific renderers, a package for a whole Player (with a loader and providing the environment for the other components), an eventual browser extension or code generator, some plugins for jQuery, React, Angular or other JS framework of the day, etc.

At the moment we need to reach a stable SWF Tree and Parser. Once it is done, a renderer should be doable. The other main remaining parts would be media support (audio/video) and Actionscript. More research is needed for media support. Support for Actionscript is important and complex, there are currently two possible solutions. The first one is to start from Shumway and reimplement the VM in Typescript. It would provide high control and strong integration with web technologies. The other solution is to reuse Adobe's AVMPlus and port it to the web using something like Emscripten.

Who

I'm demurgos. I am currently working on this project alone. I want to reach the Milestone 1 (see below) before reaching out to other developers. If you have questions or want to contribute, you can open an issue on this repo.

Contributing

Roadmap

Milestone 2

  • Tasks:

    • Advertise project

Milestone 1

  • Goal: Render the Homestuck beta animation. This files contains morph shapes, bitmaps and simple AVM1 code.

  • Status: Pending

  • Tasks:

    • Write a proper scheduler
    • Dissociate characters table, objects tree and display list
    • Prototype an Actionscript VM
    • Support bitmaps
    • Better support for frame navigation
    • Split renderer, core player and DOM integration to different components

Milestone 0

  • Goal: Render the squares.swf file. This file contains a single static shape with straight edges and solid colors.

  • Status: Complete

  • Tasks:

    • Learn the SWF format, collect relevant documentation
    • Define the Abstract Syntax Tree for SWF files
    • Write a parser
    • Setup browser builds
    • Prototype a canvas renderer

Related projects

Shumway

Web-based media player for SWF files.

Avmplus

Adobe's Actionscript Virtual Machine.

Swfdev

Gnash

TODO (the list of software for Flash is staggering, but they all died out around 2011-2012)

Website

This repository contains the source of the project's website (https://open-flash.github.io/).

You can build the website using Zola. You can use the build.sh or serve.sh or run the commands yourself:

# Build
zola build --output-dir build
# Serve (and watch changes)
zola serve --output-dir build

The code of the website is licensed as either Apache 2 or MIT (at your choice). Text and images are licensed as CC BY 4.0.

Releases

No releases published

Packages

No packages published

Languages

  • HTML 100.0%