I still use Flash

  • Hey HN, I haven't done a lot of technical postmortem blogpost-style writing so I'd welcome any feedback or tips on how to improve. Is it too long, too short, too technical, not technical enough? Boring? Interesting? Is it enlightening or does it just come off like content marketing? I literally have no idea how good I am at this.

  • > Uploading achievements to Steam is a pain. You can't just define a list and give it to their command-line tools; you have to laboriously click through the slow, confusing miasma of PHP sadness that is the Steam partner site and add them one by one.

    > I think if you're a big important game studio you don't have to stand for that and they give you a bulk upload tool, but I'm not one of those so I looked at the HTTP calls it was making, saved my login cookie to a file and wrote my own.

    No way. Fucking hell, Valve. Sort your shit out. How many thousands of hours have been wasted because of this?

    > Although I developed the game mostly on my Mac, during development Apple invented this thing called “Notarization” where if you run any app on a new version of MacOS, it'll make a network request to Apple to ask if the app's developer pays Apple a yearly fee. If the developer does not pay Apple a yearly fee, MacOS will pop up a dialog strongly implying the app is a virus and refuse to start it.

    No way. Fucking hell, Apple. Sort your shit out. How many thousands of dollars have been wasted because of this?

  • I remember creating a simple "catch the falling X" game in Flash 20 years ago. It was basic, but had everything you'd expect in a beginner project: points, multiple game states/screens, a victory condition, basic story (which was just a screen at the beginning, like NES). The thing is, I was a literal child and I also had no clue how to code -- I did everything by following tutorials and gluing together code I copy&pasted&modified. And it worked! And people played it!

    They all thought it was pretty shit, but to me it was more important that some random person across the globe genuinely picked up something I wrote, played it, and then wrote up a review of it.

    I showed it to my parents and they immediately started pushing me to learn programming.. and well here I am now. Thanks Flash.

    It blows my mind that no one has made a tool like that in so long. It had the same quality as Excel, where any non-technical person could just look up a tutorial, right click a bit, and make something usable. Why has the pinnacle of ease of use in game creation been achieved and never replicated since?

  • I was expecting "Attempt 3" to involve Bluemaxima's Flashpoint, and was surprised not to see it mentioned. Does anyone know why that wouldn't have been an option, or is this essentially what Attempt 1 would have involved?

    For anyone not familiar with Flashpoint, it's a project to preserve old flash games and animations and keep them playable on modern platforms. It's open source and includes a huge library (including it looks like Hapland 1-3).

    https://bluemaxima.org/flashpoint/

    Edit: Reading a bit further down the article, it looks like they were able to make some big improvements by building their own engine like supporting wide screen and higher FPS so that sort of answers my question!

  • I still haven't seen anything beat Flash with its sweet 1-2 combo of vector drawing, animation and programming tool

    Or maybe it's just me reminiscing

  • Wow! Talk about a love letter at the end of 2022! The dev has identified a gap and applies time and effort to solve it through building it.

    Halfway, the dev complains about the orignal devs using XML, because it is not efficient "Hey, I'm not complaining, it makes my job easier."

    Well sounds like the original developers of Flash made a good decision. If it makes it easier to parse the content at a later stage, I'm willing to call it a win!

  • > The vintage Flash UI is great. Buttons have edges. Icons look like things. Space is well-used. It's amazing! Using old UIs makes me feel like an archaeologist discovering some sort of forgotten Roman technology. The lost art of UI design. It's neat.

    This was one my favourites parts in the article. An the real piece of the pie comes right after it: there's a screenshot with like thirty icons and they're different enough that you can tell one from the other.

  • Working with Flash was like working with future technologies, back in the day. You could build amazing things with it, things that was not possible using standard browser API’s. In fact, Flash led the way and was the prototype for what browsers can to today.

    If you cared about what you built, with clever hacks and bitwise performance tricks then the Flash runtime could run your code efficiently. I remember developing an app which used Box2D, camera based gesture control with sound effects and background music all running simultaneously, reaching 60 FPS. In other projects we used software based 3D (à la Papervision 3D), Adobe dropped the ball and Molehill/GPU accelerated 2D/3D arrived too late. Perhaps it’s not common knowledge but we could develop true cross-platform apps, compiling for different targets (SWF, IPA for iOS and .app/.exe).

    AS3 was a good language, and definitely reminds me of TS. Here’s a piece of code from 15 years ago: https://github.com/PureMVC/puremvc-as3-standard-framework/bl...

    That letter from Steve Jobs destroyed it all, many talented developers left the Flash world at that time. It was a bit depressing to see all the (unjustified) mainstream hate for the Flash platform that started to appear at that time, which felt bad as there were many of us that put a lot of time, care and effort in creating amazing stuff with it. Thanks Flash!

  • No way! This is the creator of Hapland... As a kid playing flash games on websites all day like Addicting Games, Armor Games, etc. you don't really think much about the people behind these projects. Then time goes on and they cement themselves in your mind as a myth.

    The fact that I now get to read and understand articles by this legend, and work in the same industry vertical him... what a privilege!

    Thanks for your work. Hugely inspirational to my career.

  • I still believe that Flash conceptually was a brilliant idea done terribly. It was slow, buggy, under developed functionality and a security nightmare.

    But the idea of having a single file that could bundle, code, audio, graphics that was dead easy to build and could run independent of specific browsers and operating systems.

    That is something magical. It is harder to build that kind of content today and near impossible to implement it on that scale today than it was 20 years ago.

    Theoretically you could run a Flash file on a Linux system via Konqueror browser and it would be identical to that on Internet Explorer on Windows 98. This is something we have lost.

    It is a shame that Adobe/Macromedia treated it like absolute trash. A free/open solution that had the same good properties would have been brilliant but it never happened. Instead we have the whole HTML5+ stack. I mean it is cool and has done some amazing things for the web, but it is also a massive pain to manage. One browser update and boom, something has broken - time to get digging on what happened! Now it works on Chrome but not Firefox!? Oh dear.

    I don't miss Flash itself, I mean to be charitable, it was a mediocre product at best. But that vision implemented in a sensible fashion could have been wonderful. Could have allowed for the decentralized web to continue on a bit longer than it has.

  • Flash is great and tons of devs still use flash. I also use flash in my custom game engine (the one powering The End is Nigh and the upcoming Mewgenics), a different approach to what the dev in this article did (seeing as these are new games and not ports of existing flash games), my approach is to load SWF files as the resource files for art and animation in my game, and render them as vector. Flash puts a lot of information in those files, and I parse just enough actionscript bytecode that I hook and trigger C++ functions from my actionscript parser. This lets us use flash almost exactly the way we used it for making flash games back in the mid 2000s, with all of the interesting workflow tricks and hacks that made it so nice, while being able to write all the actual gameplay code in a real language and render it with openGL so its actually fast.

  • Surprising there is no mention of the wasm/rust-implemented flash player https://ruffle.rs/ in the article.

  • You mention that while using Flash you found it missing basic features, could you give some examples?

    One of my long-term projects is to build a Flash clone (Flash-the-authoring-tool). So I'd love to hear from people who are still using Flash, to see what features / pain points are most important.

  • I really enjoyed this, thanks for writing the article. Just the idea of bits of Actionscript on Frames and figuring that out would have made me quit never mind everything else. I miss Flash. I used to love the Flex Builder/SWC setup as I used to be really productive with it.

  • > Although I developed the game mostly on my Mac, during development Apple invented this thing called “Notarization” where if you run any app on a new version of MacOS, it'll make a network request to Apple to ask if the app's developer pays Apple a yearly fee. If the developer does not pay Apple a yearly fee, MacOS will pop up a dialog strongly implying the app is a virus and refuse to start it.

    > For this reason, Windows will be the first and maybe only release platform for this game.

    this seems like the wrong answer to the (arguably legitimate) concern posed. the first and maybe only release platform for this game, based on the reasoning, should have been Linux. It's not like Microsoft can't decide to arbitrarily force exe's to phone home for "security" reasons, but good luck getting the Linux kernel, or any distro, to do that.

    I'm 100% convinced that Linux will be the way all software will be preserved in the future; Proton will take care of windows exe's and VM's will take care of Macs, and a deterministic OS like NixOS will let you define exactly what any piece of software needs to build and run, forever. The incentives just line up.

  • > In the end, I settled for a bit of a hack. My exporter reads the ActionScript from each frame and applies a bunch of regexes to attempt to turn it into C++.

    Haha, I lost it at this part. Brilliant read!

    How much time did it take you to build the whole thing?

  • IIRC many 2D animators considered the old Adobe Flash Professional to be one of the best 2D animation tools ever made.

  • Anyone knows of a modern browser that still supports flash? I'm stuck having to use old browsers, which I'm not very happy about. Ruffle doesn't work the for game that I play (Crystal Saga).

  • Flash and Actionscript were to interactive and animated apps what Python is to generic coding today. It brought together ease of use and powerful functionality, accessible to mere mortals.

  • Flash is fantastic and I wish it got the respect it deserves from tech circles. It got an entire generation into animation and software engineering, and had really robust and approachable tooling which is yet to be replicated. I think back to the gaming experiences made in Flash and Shockwave as far back as the mid 90s, and nothing today even comes close. Back then, you could load up a webpage on a Pentium II and play a really robust game made by a teenager in their spare time, and that game will be stable and display extremely good performance. Compare that with the complexity and barriers that come with mobile game development today, or the jank and poor performance of JS based games.

    TL;DR: It's been decades and there's still no suitable replacement for Flash, and the web is poorer for it.

  • This was a fun read!

    rogual: I'm sure you would be able to manage this yourself, but if time is a factor I'd be happy to assist in converting the final result to a WASM build playable in a browser.

    Shouldn't be difficult to just plop in SDL (which is trivially portable to WASM) to handle the drawing. Found a basic example here[1] that uses STB + SDL. Should be rather straightforward.

    [1] https://github.com/svoisen/wasm-imageviewer/blob/master/rend...

  • Really great writeup. So people stop asking the obvious question, here is the GitHub issue that clearly shows Ruffle doesn’t support ActionScript 3:

    https://github.com/ruffle-rs/ruffle/issues/1368

    I recently picked up a copy of Flash MX to use on an old PowerBook, highly recommend others do the same. As many have commented, today’s authoring tools are poor substitutes (someone should do a list of the superior abandonware versions of SaaS products).

  • > The way forward was obvious; I'd have to make my own Flash player.

    Uhhhhhhh, hold on a second, wait a second... this is not readily apparent nor obvious as a course of action at all!!

    I would rather have gathered the raw assets and tried recoding the game using the same game logic on a better platform...

  • C'mon, Adobe. Open source it.

  • What's the state of the art on converting Flash to HTML5? You'd need an Actionscript to Javascript transpiler, export the assets, and handle tweening / timeline keyframes? And probably handle Flash specific events? I don't recall if Flash has any flash-specific effects you'd need to recreate.

  • So he created his own flash player. Couldnt someone use WASM to run a flash player in the browser? Without the original flash security risks.

  • I wish Flash would just be fully open-sourced for niche users to maintain and use it AS IS. I know it supposedly has a lot of vulnerabilities but there are use cases where the pros matter more and this con doesn't matter too much.

  • This guy sees the matrix

  • Interesting read. And it doesn't end up with Electron, which is "Flash for the Desktop".

    Notarization

    Why I don't wonder? I come from Linux and the weird rules for App Bundles and Notarization on Mac are pain. And badly documented. And the tools suck! Which entitlements my app needs? How to change libraries paths? Compiling applications on Mac is easy (with Hombrew), shipping to ordinary users as App Bundles is complex and difficult. If you're not a MacOS-Developer using XCode?

  • OMG, was a huge fan of the Hapland series during middle school. Definetly gonna buy such a lovely crafted remaster.

    Also happy to see all the libraries I love to work with pop up here and there.

  • From the article: "GPUs don't really like drawing vector graphics. They like big batches of textured triangles. So, I needed to rasterize these vectors."

    The author certainly wasn't the first person to have this problem. What is available for fast display of vector graphics animations with GPU acceleration? Anything better or higher level than just doing huge numbers of calls to OpenGL/Vulcan/Metal/etc.?

  • > GPUs don't really like drawing vector graphics. They like big batches of textured triangles. So, I needed to rasterize these vectors.

    I don't follow. In my mind, triangles are natively defined in vector space. I didn't think it was impossible to convert vectors to GPU-friendly triangles. Rasterization is the easy way out and will (probably) help performance, but it will fall apart as screen resolutions increase.

  • This is an excellent and very informative story! Special thanks for how the Beziers are encoded in XML - I needed this once, but gave up for alternative way.

    I recall how I rasterized sprites in my Flash games, I just did it on-the-go right after the game was loaded. I created a Vector.<BitmapData> which stored sprites’ frames, and then drew those BitmapData to the main BitmapData by copyPixels.

    It’s interesting how far did you proceed with AIR way and what bugs did you encounter? It’s been nor Adobe but Harman AIR since 2019 and recently AIR50 is out. If you look for a Steam game named Shapik it’s a good example of a Flash game on Steam which was ported via AIR. I use AIR for my mobile Action Script 3 games as well, and now thinking about going to Steam

  • Great article, thank you for sharing this experience. The part I found most interesting is the section about the aspect ratio and interpolating between the 16:9 and 16:10 views relative to the original, although I'm having some trouble fully understanding the implementation. Why is the game interpolating between them based on the games aspect ratio?

  • I do really enjoyed this kin-of-post-mortem! Please write more, I'd love to hear about your other projects!

    As a side note: In my opinion the closest replacement for Flash is currently Construct 3 engine - you should definitely take a look on it! (I'm not associated with Construct 3 team (Scirra) by any means - I'm just a happy user of their product)

  • Real talk, I've been shipping an Adobe AIR app (Flash on the desktop) to a major healthcare provider still (just did a build yesterday).

    Samsung subsidiary Harmann took over the support contract from Adobe a couple years ago, and I think they have one or two souls running support for the AIR SDK, they're doing... okay.

    After years of searching for an Electron alternative (2016-2019) I broke down and wrote an Electron + Vue application. I had really really wanted Wails to work, but it simply has too many sharp corners for an enterprise desktop application that needs to run 24/7.

    The corporation customer basically stonewalled and refuses to let the AIR app die. We're pulling up the ladder with the Apple Silicon cutover, and hoping they bleed out on bugs. What a mess.

    I'm commenting because I too "still use Flash" in a way. It's a secret shame :X

  • > GPUs don't really like drawing vector graphics. They like big batches of textured triangles. So, I needed to rasterize these vectors.

    I remember in the distant past of like 15 years ago when it was still common wisdom to avoid vector images on web pages, or drawing anything using fancy CSS features, because the resource cost to the client was too high and it'd hurt performance.

    I think proliferation of runtime-rendered vector-icons/CSS-drawing/CSS-animation is under-appreciated when it comes to finding things to blame for why the web performs like dogshit, even on super computers. Sure it's probably mostly Javascript's fault, but I think those very likely play a non-negligible role.

  • I saw the headline and I was ready to talk trash... then I opened the blog post and wow. What an incredible job for a single person. Hats off on the different approaches you took. Excellent work! I loved the post and congrats on launching it on Steam!

  • It was pretty interesting to read how they chose .asm text files for encoding of animations.

  • I was a huge fan of Hapland back in the day! My friends and I were obsessed. It actually inspired me to make my own Flash games, which is how I learned programming. So nostalgic to see screenshots of that game.

  • I know it is not the same thing but Godot is close for being able to get something working in 2D as fast as you could in Flash.

    I am optimistic we will see a Flash alternative popup as WASM and WebGPU continue to grow.

  • > Blending done in perceptual (sRGB) space

    Oh please don't say that. The sRGB transfer function may be somehow roughly correlated with how we perceive lightness, but it's in no way a perceptual space.

  • Man I miss Flash too!

    Tumult Hype is the closest thing to it, but the editor's Mac only.

    https://tumult.com/hype/

  • AIR is now on Harman's hand and is alive pretty well. Flash on web is dead , yes.

    But apart from Ruffle you also have commercial solutions from Cheerp Flash. https://leaningtech.com/cheerpx-for-flash/

  • Ahh Hapland. I managed to beat 1 and 2 without a solution. Never beat 3. Didn't know how to get started. Once you get started things start to get rolling.

  • Really awesome to see this. I've done some conversion work for Flash to PhaserJS for educational games. We had to just rewrite everything as we didn't even have the original source code. Luckily Phaser animations can get a lot of the "walk across and open a door" stuff done easily. I was also excited to see Hapland as I'd forgotten the name and so was never able to Google to find the games again!

  • You know the IT media is full of hacks when they all studiously ignore the fact that the reason Flash was ultimately abandoned is that it would allow app developers to bypass the appstores of Apple and Google.

    The two will never create anything to match Flash.

    Even Microsoft abandoned Silverlight for the same reason and it is why Mozilla abandoned Shumway because they don't want to bite Google's hand.

  • Great timing for this article! I just used Flash CS5 this week to make my first animation. I’ll admit that I’m rough with it (made a few games with it many years ago, but that is all, stuck with Actionscript and static images). Some of the logic hasn’t stuck with me yet, namely with the timeline and movieclips, and I get frustrated. That said, I’m having a great time with it.

  • Screw Apple! I'm moving away from it. The system is just not suited for any system's development. Too many undocumented and unexposed crap in the OS. If one want's to do something with the AV, it is near to impossible because of the restrictions and it is not something they've invented. They are bunch of lazy people who doesn't want anyone to mess around with their OS. They will never learn or change. Better stick with Windows or Linux (It has greatly improved for AV in the recent years and it's just the fragmentation which is causing a lot of issues which might eventually get consolidated or streamlined. That's another issue by itself!! :))

    And all these notorization and getting a certificate every year is just too much to continue the development for a small bunch of users who doesn't even know or care about what is existing.

    Some good folks amongst the users are there, but they can be counted with one hand. All other Mac or Apple users doesn't even have a clue about what is under the hood. It just has to look good with oohs and aaahs... And that's pretty much it... Offcourse as long as it works the way it is supposed to work (and that is how the 99% of it's dum dum users use it), they'll continue to remain a trillion doller company... iOS is another story by itself...

    Anyways, peace out!

  • > I like to use binary formats where possible for end-user software; I don't believe in making customers' computers chew through reams of XML.

    I feel an urge to object here! This is a false dichotomy; there are efficient middle-ground solutions between XML and custom binary formats e.g. Protobuf and Cap'n proto.

    Having said that, I loved the trick of using an assembler to write it.

  • What about Haxe and OpenFL?

  • I absolutely adore Flash and it was my first introduction to programming. I greatly miss the feeling of the web when Flash was king and there was a pot luck of animators and game makers sharing neat things they made. I myself made a game but never actually published it. Always regretted not putting it up publicly before Flash went EoL.

  • We killed a big chunk of the internet when browsers stopped supporting Flash. It's even worse than that, that part of the internet was not built upon instead many things had to be created from scratch without Flash. I'm not saying Flash is good, just pointing out the incredible loss.

  • The frustrating thing for me personally is that we--as an industry--just keep rewriting/porting the same pieces of software from one API to another.

    Here is was Flash -> Steam SDK. In another HN article, it was PlantUML (Java) to D3 (Javascript).

    Didn't they re-write Minecraft to something else (Bedrock Edition)?

  • I still use Flash too. I even have the old flash brower plugin that use /tmp for storying flash*... files. I just don't have it set to auto-play. It's always click to play.

    Additionally I use a flash created "alarm clock" from the early 2000s almost every day for various tasks.

  • I really miss all my Flash games. Some of em were and have been ported to other plateforms for sure but most are gone. And dont mention all those weird Shockwave emulators; most of em cant run half of the games I used to play.

  • I would invest more time into a tool that ports your game to Unity. You already have "code" attached to "sprites" with "actions" happening based on some triggers and entity states.

    From this far away it looks like it could work.

  • Glad to see someone trying to reverse engineer it somewhat. We had a lot of approaches to clone it: Shumway, Ruffle, cross-compile through Haxe and OpenFL, but we are still not complete. And open-source AIR can be just a dream.

  • Ah, Flash. Simulating a bouncing ball using keyframe-driven ActionScript that I only sort of understood was my “hello world” moment. Love to see it being used like this. If only I could find those old .fla files…

  • I miss that beautiful old keyframe timeline and writing some AS2. The good days.

  • I'd imagine lightspark would be useful here, rather than yet again reinvent a wheel.

    https://lightspark.github.io/

  • > Flash stores its vector graphics in XML format. You might argue that XML is a poor choice for graphics data, but you weren't a product manager at Macromedia.

    SVG would beg to differ.

  • It reminds me that the show BoJack Horseman was created on Adobe Flash [1]. The creator calls himself an "Old School Flash Hack" in a same vibe like the OP.

    Don't know if the latest seasons they still used Flash, maybe yes, because they just exported to video? Migrate to other tool maybe was a pain and/or changed some illustration aesthetics. Not sure if a project like that can migrate properly to Adobe Animate [2], the Flash successor.

    I believe that Flash was a tool with a friendly UI/UX for casual animators but also many advanced features for pros, that's why was so popular and loved.

    [1] https://youtu.be/0KofIRvAr0M?t=626

    [2] https://en.wikipedia.org/wiki/Adobe_Animate

  • There are a million flash games. Treasures! Surely there is a good flash (p5js?) to JavaScript converter out there.

    Also, is there a better way of doing it than converting flash to JavaScript?

  • I was expecting the graphics to be converted first to SVG.

  • Terrible graphics, laggy janky games, and non stop security vulnerabilities. Don't miss it. The worst was when business websites used it.

  • Emitting assembly code for binary output for easier debugging is a hell of a good idea, I'm gonna steal that one.

  • I like having as much of my code as possible run on my own dev machine, where I can keep an eye on it.

    Good principle.

  • Kinda click-baity because he doesn't use Flash - at least not Flash Player, which was my first association.

    I think there's a very strong case for writing a clean-room Flash Player implementation.

  • Fucking beautiful work, OP. This is awesome!

  • how about swishmax? it still works in win xp and can make exe. still use that old exe as one app i created is still useful

  • Best of HN - what an incredible read.

  • three.js supports WebGL Bezier splines..

  • How dare you

  • Couldn't stop thinking of ruffle.rs

  • undefined

  • undefined

  • undefined

  • [flagged]

  • undefined

  • It's nothing to be ashamed o..., wait, Flash you said? Well, then it is...