24 ms·
I still use Flash
- rogual 4y agoHey 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.
- wila 4y agoKeep on writing! I enjoyed reading what you tried and why you ended up with what you did. It is fine to mention your game, I do not consider that content marketing at all.
- civilized 4y agoI don't think anyone here is going to complain about a post where you make a game work by reverse engineering Bezier splines encoded in XML by Adobe Flash. If that's not "Hacker" News, what is?
- bambax 4y agoIndeed! ;-) However I wonder why the OP didn't try to keep vector graphics and use to SVG for instance? That would allow for infinite scalability. It is mentioned that "GPUs don't like vectors" but if the game doesn't change too often it should not make a lot of difference?
- deleted 4y ago[deleted]
- rogual 4y agoI did consider it. Infinite scalability isn't required during runtime; the scene doesn't ever zoom or scale in the games, because that was always so slow in Flash, so the only real benefits would be 1) supporting higher resolutions and 2) reducing file size. For 1) I decided I'd rather just release an update with larger textures if these ones ever start to look dated. That way I get to keep the runtime code simple. Less code means fewer bugs. I don't want to spend a lot of time fielding support requests from users who hit edge cases in the rasterizer. As for not changing too often, that's true, but taking advantage of that means doing change tracking with dirty-rectangles or similar, which not only adds complexity but also feels like it would make performance less predictable. And for 2) the game as it stands now is under 50MB so I didn't feel a pressing need to make it smaller, although a tiny executable would be cool in a satisfying, demoscene kind of way.
- bambax 4y agoAh, thanks. That could maybe go into the article as well? Although it's already pretty thorough as it is.
- kmeisthax 4y agoSo, I think I need to elaborate on "GPUs don't like vectors". What the OP meant was "GPUs have literally no support for rendering anything other than pixels on triangles and getting them to efficiently draw Bezier curves and fills is an active area of research". You'd need specific hardware support for rasterizing them, and as far as I'm aware no such hardware exists. When Adobe hacked on "HTML5 support" to Animate, they did exactly the same thing the OP did. It renders every shape in the FLA to a sprite sheet and then draws it to a canvas tag. If you have knowledge over what will be drawn ahead of time, this is the most reasonable thing you can do. Even before HTML5 support, the AS3 Starling framework that let you "use the GPU" would pre-render all your vector assets to bitmap textures at runtime. And that was a framework built for Flex developers; if you were accustomed to building things on the timeline, you rendered on CPU, because that's where all of Flash's very particular rendering logic has to live. Ruffle gets around this by tesselating every shape into a GPU-friendly triangle mesh. This lets us render stuff that's technically vectors on GPU. But as you can imagine, this creates its own problems: - Flash has very specific stroke-scaling rules. If a stroke is smaller than 1px[0], it will be rounded up to 1px. This is how Flash's "hairline stroke" feature works: it actually asks for a 1/20px[1] stroke, and that gets rounded up to whatever the current scaling factor for that shape is. When your stroke is a polygon mesh, you can't vary the stroke to match Flash without retesselating, so hairline strokes on shapes that stretch don't animate correctly. - Likewise, any stretch of a stroke that changes the aspect ratio also distorts the stroke, since its baked into the tesselated mesh. There's a minigolf game that does this to hairlines and it will basically never look right in Ruffle. - Tesselated vectors lose their smoothness, so we have to sort of guess what scale the art is drawn at and add enough detail polygons for things to render correctly. Most of the time we get it right. However, there are some movies that do crazy things like store all the art at microscopic scale and blow it up. This provides a compression benefit, because it quantizes the points on the art with little visual difference on Flash Player. On Ruffle, however, the art becomes very low-poly. - All the tesselation work takes a significant amount of time. There are certain movies (notably, a lot of Homestuck) that would hang the browser because of how much ridiculously complicated vector art was being processed before the movie even loads. We had to actually limit how much art could tesselate per frame, and expose that to movies as bytesLoaded, which is why Ruffle movies have preloaders even though we don't support streaming download. There's another approach to drawing Beziers on GPU: drawing the hull of control points with a procedural texture that calculates the underlying polynomial. This is especially simple for quadratic curves (the ones with one control point), which is what all Flash timeline art[2] is. However, strokes are more complicated. You'd think we could just take the hull of the stroke and draw that as a fill, but you can't. This is because the offset of a Bezier curve is not a Bezier curve. Drawing the stroke in a pixel shader would make sense, except you still need to define a polygon mesh around your stroke with a reasonable texture coordinate system to make the math work. And the polygonal outlines of Bezier curves can get really funky; there's no obvious way to quickly say "here's a curve, now give me the polygon that encloses a 5px stroke around it". Remember how tesselation takes so long that it would hang Ruffle? [0] I'm not sure if this is virtual or device pixels. [1] Flash specifies vectors in fixed-point units called twips. That's why the zoom factor on Flash movies was locked to 2000%. [2] Flash can draw cubics - the two-control-point curves you think of when you think Bezier - but only in response to an AS3 graphics command. We haven't implemented this in Ruffle yet.
- HanClinto 4y agoI really enjoyed it! It didn't come off as content marketing at all. Well done!!
- unsafecast 4y agoI liked it a lot! It doesn't feel like marketing at all, and I think it's a good balance between technical and non-technical (though I wouldn't mind more details). Keep writing!
- pie_flavor 4y agoThis is pretty great writing, I'd love to read more of it.
- kulor 4y agoThere's a gem of a hidden narrative here for more junior developers that you don't always need to start over (which 9/10 fails) but instead be resourceful within your constraints and to be mindful of what your constraints actually are, which don't have to be new and shiny.
- darkwater 4y agoI think you nailed it at every layer, it was a very entertaining, nostalgic and instructive read. Thank you!
- bjackman 4y agoIt was great, loved the concise writing style, and it was a cool story.
- rogual 4y agoThanks! It's actually great to hear you describe it as concise, I was worried it was a bit waffly to be honest.
- mastersummoner 4y agoIt was long because there were a lot of steps to describe. But for each, the writing was concise, interesting and entertaining.
- log101 4y agoIt was a pretty insightful article, I didn't know how a flash game worked internally and how it could be reimplemented! I think it is also relevant for those migrating their projects to newer technologies, I always found this process fun(except there is a deadline) :) (Edit: I love your games and used to play a lot when I was a kid)
- Tepix 4y agoIt's interesting for sure, I'm left wondering if it was less work to make flash continue to work somehow instead of re-authoring the original games. I mean you've probably learned a lot, but you could have learned to author games using a more modern tool than flash instead and that would have been useful in the future, right?
- replwoacause 4y agoI thought it was great, and I have no interest in games or game development, but I read the whole thing top to bottom and came away thoroughly impressed. Excellent post and work!
- dontwearitout 4y agoFlash was my 2nd programming language (after VB6) back when it was still Macromedia. I had a lot of fun making really crappy minigames and learning the basics of coding. This article brought some good nostalgia and plenty of astonishment at the lengths you went to. Your writing itself is great. A lot of writing linked by HN seems too verbose because people try to sound smart. Yours is succinct while engaging. Right length, just technical enough, and interesting. I really enjoyed this, thanks for writing it! Also: > Object-orientation is not fashionable right now in gamedev circles Can you elaborate on this?
- BlueTemplar 4y agoProbably how OO teachers and mentors failed horribly (AFAIK we still don't warn new students about the pitfalls of inheritance ?), so ECS got popular as a better alternative to shitty OOP code ? https://www.gamedev.net/blogs/entry/2265481-oop-is-dead-long-live-oop/ https://www.gamedev.net/blogs/entry/2265481-oop-is-dead-long...
- stelonix 4y agoNot only that, but due to CPU caches and memory alignment issues, ECS have better performance than inheritance; also because most ECS systems ditch virtual function calls.
- cogman10 4y ago> ECS have better performance than inheritance Can have. Whether or not an ECS will actually be faster depends entirely on the type of game and access patterns of the inheritance structure. Further, it matters how you are doing inheritance (LTO can eliminate a lot of the pitfalls even if you use virtual function calls). This is nothing against ECS. I just find the current claims of performance dubious and potentially flat out wrong given modern compiler optimizations and changes in CPU caches (mainly that they got a LOT bigger).
- stelonix 4y ago
- thor_molecules 4y agoVery interesting, and frankly inspiring to see you get this creative.
- jonathanyc 4y agoGreat post! No complaints at all from me. The mix of your thought process + screenshots + examples is perfect.
- robertlagrant 4y agoJust to say: thank you for these games. I loved them when I was in my 20s.
- lsferreira42 4y agoYou are very good at this, i'll follow your site from now on hoping for more publications like that!
- sh4rks 4y agoThis was a great read. I distinctly remember playing Hapland as a kid. Armour games or Crazymonkeygames, can't remember which one it was. So this was a great nostalgia trip.
- namuol 4y agoIt was perfect! Full of low-key wisdom and fun observations. Doesn’t feel like “content marketing” in the slightest. I wish the Hapland series was coming to Mac, but I respect your decision to snub Apple.
- JoeyJoJoJr 4y agoGreat article! I also still use Flash by using a custom runtime that interprets the output of the “Export as texture atlas” feature. I was wondering if you had attempted to use this feature in order the rasterize the graphics? https://github.com/jackwlee01/animate_cc_runtime https://github.com/jackwlee01/animate_cc_runtime
- rogual 4y agoThanks! Looks like that feature was added in Animate CC, which I don't use, so I haven't tried it. Looking at the docs, it looks like something I would have at least tried. Might have saved me writing the rasterizer, though I'd still have wanted to atlas everything together into bigger atlases, and make binary animation files. One downside vs the .fla parsing approach I went with is that even if you can script away the GUI clicking, you'd still have to have Flash open while the build script runs. I quite like having an exporter that is just a CLI program you can run without Flash, though it's not a massive deal. I'd be interested to see what exactly Animate puts into the animation.json file it generates. The docs don't seem to mention it, and I couldn't find any example ones online. Your tool looks great, by the way — have you made any games with it?
- Jasper_ 4y agoWorth noting that there is a spec for the custom XML file, it's known as FXG. S starts a cubic Bezier curve in absolute coordinates: https://web.archive.org/web/20110611002637/http://opensource.adobe.com/wiki/display/flexsdk/FXG+2.0+Specification https://web.archive.org/web/20110611002637/http://opensource...
- enumjorge 4y agoI’ll add to the chorus and say that this was a wonderful post and the type of content I hope to find when I come to HN. I enjoyed how you explained certain technical concepts succinctly and using simple language. For example, as someone who never used Flash, you explained the 1000 ft view of how Flash works. When I’m looking at a new tool or framework, I try to star by understanding the mental model behind it. Yet, a simple explanation of it is often difficult to find. I was also struck by how much technical work was involved here—you made it sound easy. How long did this project take you?
- ficklepickle 4y ago> you explained the 1000 ft view of how Flash works I second that. I find the better someone knows a subject, the harder it is for them to provide this perspective, making it all the more impressive.
- Const-me 4y agoThis was awesome. Also, the idea of using text/assembly as an intermediate format of binary files is pure genius. I will probably use that occasionally for similar use cases.
- plasticeagle 4y agoYour writing is clear and concise. You don't indulge in run-on sentences, or hyperbole. It's an impressive piece of writing. You're definitely good at this.
- cpeterso 4y agoAs someone who worked on Macromedia’s and then Adobe’s Flash Player team, I thank you for sharing your experience preserving your Flash content! Did you investigate Haxe or OpenFL?
- andai 4y agoCan you comment on why Adobe let Flash die? Did it just become unprofitable compared to their other projects?
- andai 4y agoOr did Apple give them a nice deal in exchange? ;)
- Multicomp 4y agoI guess we will never know hehe
- cpeterso 4y agoAdobe couldn’t figure out how to monetize Flash, other than selling the Flash authoring tool to Flash designers, a dying breed, for a few hundred bucks or bundled in Adobe’s Creative Suite. Adobe tried selling Flash video DRM, which got undercut by Google Widevine, and selling licenses to unlock Flash opcodes for advanced 3D and C++ cross compilation, which was undercut by web technologies like WebAssembly. Also, I think Flash was more expensive to maintain than Adobe’s other design applications because the Flash Player needed constant security patches. Adobe was usually happy to milk cash cow products, such as Director and Shockwave, transferring maintenance to remote teams in India.
- andirk 4y agoIt depends on how one looks at it. For example, I didn't read it.
- djmips 4y agoI might have missed this in the article but are you sharing any of your work? I know that a lot of the work was manual but some of your tooling might be useful for anyone else who want to go this craftsman route of converting a flash game.
- throwaway2037 4y agoYour blog post was excellent. Thank you to share. 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 Long, but well-organized and not ranty. You can quit after a few sections and still learn interesting things. Technical enough with enough screenshots to keep it from being "wall of text". It is a good way to share some eye candy from your games. [E]nlightening? Yes. [C]ome off like content marketing? Yes, but this is the kind that we want to read -- basically, interesting content marketing. Don't be ashamed that you need to hustle a little bit as a small software shop. Oh, and you forgot funny. This part made me laugh: 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. Behold: ...
- pmontra 4y agoIt is perfectly balanced. It can be read top to bottom in a few minutes. If you feel like to expand a part you can write a new post and link it from the original one. Some other posts are born with all the tiny details, are too long to be read on one session and I end up missing even the key points because that second session never happens.
- worldsavior 4y ago[flagged]
- nkozyra 4y agoI didn't read the whole thing but my sense was what was actually preserved was the game's code in AS3. I think you could still call this a soft port.
- ZiiS 4y agothe AS3 was converted to CPP; sounds like some automation but fairly manually.
- loloquwowndueo 4y agoBut if you had read TFA you would have realized it talks about creating a new player that can understand swf files so those don’t have to be rewritten, it’s not about using the old, ugly, insecure Flash player from Adobe.
- teddyh 4y agoLike Ruffle? https://ruffle.rs/ https://ruffle.rs/
- worldsavior 4y agoThe title is just as important as the article itself. It's something that could be called "clickbait".
- syntaxfree 4y agoCreatives: look at this beautiful chalice made of Roman dichroic glass. Security people: %drops it on the ground and it shatters% yes but glass is terribly insecure, why not redo it with PVC and LEF strip Christmas lights.
- shadowgovt 4y agoThe problem wasn't creatives. Bank UI authors: Management wanted a pretty UI, so we made a semi-attractive chalice out of Roman dichroic glass. If it breaks, bad guys take your money.
- d0100 4y agoI 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
- adamredwoods 4y agoScratch has some nice features: it has a sound editor, vector drawing, and primitive animation... but I agree, the Flash UX was the best. https://scratch.mit.edu/ https://scratch.mit.edu/
- dncornholio 4y agoI still use it to introduce students to coding.. ActionScript is amazing for this
- goatlover 4y agoThe Flash Builder was really good for complex vector manipulation. I don't know if there is anything as good for SVG/HTML.
- dmitriid 4y ago> I don't know if there is anything as good for SVG/HTML. There's not because the DOM isn't suited for complex animations. People manage to animate SVGs (see Greensock etc.), but it's a pain in the nether regions
- AshleysBrain 4y agoIt might not yet do everything, but we're having a go at a modern web-based animation tool with Construct Animate, currently in open beta: https://www.construct.net/en/blogs/construct-official-blog-1/announcing-new-product-beta-1589 https://www.construct.net/en/blogs/construct-official-blog-1... It can export videos, GIFs, image sequences, can use modern JavaScript coding, and has a surprisingly strong block-based visual alternative to coding.
- strix_varius 4y ago
- valeg 4y agoC'mon, Adobe. Open source it.
- danuker 4y agoHah! They have let Flash die rather than open source it. Also, it might compete with Adobe Animate. "Service as a Software Substitute" https://www.gnu.org/philosophy/who-does-that-server-really-serve.en.html https://www.gnu.org/philosophy/who-does-that-server-really-s...
- DrThunder 4y ago
- nonethewiser 4y agoSo he created his own flash player. Couldnt someone use WASM to run a flash player in the browser? Without the original flash security risks.
- jraph 4y agoThat's what Shumway did (it's now unmaintained), and what Ruffle does. https://github.com/mozilla/shumway https://github.com/mozilla/shumway https://ruffle.rs/ https://ruffle.rs/
- _joel 4y agoRuffle's neat! Never seen that before
- Narretz 4y agoLike the sibling comment says, while there are alternative flash players, they are either unmaintained (Shumway since 2016) or not feature complete yet (Ruffle). Since performance was stated as the main goal, a bespoke solution that only supports what the games actually use is probably the best performing.
- beardyw 4y agoI was expecting the graphics to be converted first to SVG.
- tomsato 4y agoThat would be the easy part. From the post they are already stored as such, but the complexity would be to render the vector graphics in C++ at 60FPS. There is no simple solution to this, and rolling it yourself is quite the task too. If you look at some of the modern approaches to animation in C++ (like Lottie or Rive) their C++ clients are pretty poorly supported in my opinion, mostly for anti-aliasing quality in native clients over their web equivalents.
- throwaway3245 4y agoI 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.
- qwerty456127 4y agoI 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.
- Marazan 4y agoThe Flash Player had a bunch of licensed 3rd Party software in it so very hard to open source it. The AS3 VM at its heart however was open sourced.
- est31 4y agoIt was pretty interesting to read how they chose .asm text files for encoding of animations.
- moolcool 4y agoFlash 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.
- BulgarianIdiot 4y agoFlash was conceptually fantastic, and today we can do everything Flash did, and more, with HTML, and WebGL. Unfortunately we don't have the authoring tool to do so. Flash IDE became Adobe Animate, but it has relatively restricted output and capabilities, compared to Flash before. Unfortunately also Flash was full of bugs, FULL. I mean the player, the IDE, everything. And Macromedia and consequently Adobe were increasingly desperate in monetizing the player by attaching downloads to it, like Adobe Reader or anti-virus software. Or adding nonsense features like half-baked 3D gaming to it.
- moolcool 4y agoI don't deny that it had lots of issues. In addition to what you mentioned, it was an accessibility nightmare, and had tons of security problems. All that said, it's difficult to argue with results.
- dusted 4y agoslowly lowers flamethrower indeed, you're right, HTML and WebGL with JavaScript or webasm can do anything flash can.. They can't do it in the cycle-count that flash could (I remember seeing 3D vector demos running in 640x480 pixels on my 133 mhz pentium), but they will do it, and probably look almost identical across two different versions of the same brand of browser.. But the real point is the authoring tools, and there simply aren't any.. We're stuck in the early 80s with a f*cking text-editor for GUI work.. Geez, there were authoring tools for making nice GUI applications in the Windows 3.11 era.. But modern web development has yet to reach that level of maturity.
- makach 4y agoWow! 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!
- chubot 4y agoYup, this is classic Unix style! Having data-centric interoperability among tools also helps you port to new platforms more smoothly, as opposed to throwing away your code or rewriting from scratch. Examples: 1. Using text formats embedded in XML -- he took advantage of this when reverse engineering 2. Generating text ASM -- he said this aids debuggability, and allows using existing ASM tools that he didn't have to write 3. Generating C++ -- taking advantage of the type system, as mentioned, and a huge array of other tools (profilers and debuggers) It's data-centric rather than code-centric. It's a interoperable and transparent architecture, not a monolithic one. (Which is not surprising because Flash itself was made for the web.) Related: The Internet Was Designed with a Narrow Waist https://www.oilshell.org/blog/2022/02/diagrams.html https://www.oilshell.org/blog/2022/02/diagrams.html A Sketch of the Biggest Idea in Software Architecture https://www.oilshell.org/blog/2022/03/backlog-arch.html https://www.oilshell.org/blog/2022/03/backlog-arch.html
- gibspaulding 4y agoI 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/ 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!
- oneepic 4y agoI still play games on Flashpoint. Hell, I speedrun and showcase games in Flashpoint during some regular events with my other friends playing ""real"" games. It's not the best UI, but you do have an easy search function to find content you might like. Gotta be careful to avoid the porn games though. Flashpoint archived some.
- EamonnMR 4y agoIt's like Steam for Flash, Shockwave, and Java Applet games. I highly recommend it. Though I do wonder if it's going to survive the transition away from x86...
- TylerGlaiel 4y agoflashpoint is not a flash emulator, its a preservation effort that has archived tons of flash content from the web Ruffle is the flash emulator https://ruffle.rs/ https://ruffle.rs/
- andai 4y agoYou 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.
- rogual 4y agoSure! * You can't set keyboard shortcuts for some common actions like changing the brush mode between "paint behind", "paint inside", etc. You have to click the button every time. * No way to import or export any standard vector graphics formats. * No easy way to just add custom properties to objects on the stage. * No outliner. Unless you put exactly one object on each layer, it's very hard to find and select objects on the stage that aren't large and obvious. Invisible objects? Nightmare! * You can name frames, but there's no menu to quickly select one to jump to. In a 500+ frame timeline, you've just gotta manually scroll around to find the frame you're looking for, even if you've named it. * You can't set an alpha component for the grid to make it semitransparent. These are all missing in Flash CS6, the last thing that was called "Flash". I don't know if any were added in Adobe Animate because I don't like to rent software. There's definitely room for a Flash authoring replacement. Every now again I look at all the programs I can find in the space and try them out, but nothing reaches Flash yet, in my opinion, despite its limitations. Best of luck with yours!
- eldenlad 4y agoHave you tried writing any custom plugins/editor panels to use in the editor? The process is pretty arcane at first, but eventually you are just writing html+javascript and have access to a very powerful editor API. When I was working with Animate a few years ago I wrote a plugin to navigate around the timeline to find tagged frames and export things.
- rogual 4y agoYes! In fact, out of those problems I listed, I always thought the timeline navigation (and maybe the outliner) would be good candidates for a .jsfl plugin, I just never got round to doing it. Good to hear it's doable!
- bugmen0t 4y agoSurprising there is no mention of the wasm/rust-implemented flash player https://ruffle.rs/ https://ruffle.rs/ in the article.
- ZiiS 4y ago"oldest ones, including the original Haplands, are AS2 Flash, which runs pretty well thanks to Ruffle."
- deleted 4y ago[deleted]
- graderjs 4y agoI recently used Ruffle [2] to get some Flash applications [0] working in the Pro version of my web browser [1], which is specifically designed to be remotely accessible and embeddable in an iframe. To run Ruffle on pages that require it, I utilize the Chrome Remote Debugging Protocol [3], similar to how a Chrome extension content script operates. Ruffle itself relies on WebAssembly and runs smoothly. It's been exciting to see the audio and video functionality of these old games restored and being able to play them again. - [0]: https://github.com/ruffle-rs/ruffle/wiki/Test-SWFs https://github.com/ruffle-rs/ruffle/wiki/Test-SWFs [1]: https://github.com/crisdosyago/BrowserBox#bb-pro-vs-regular- https://github.com/crisdosyago/BrowserBox#bb-pro-vs-regular-... [2]: https://github.com/ruffle-rs/ruffle https://github.com/ruffle-rs/ruffle [3]: https://chromedevtools.github.io/devtools-protocol/tot/ https://chromedevtools.github.io/devtools-protocol/tot/
- zulu-inuoe 4y agoThey did mention it. They use it for some of their older games but it seems like Ruffle isn't yet feature-complete with Action Script 3 and thus cannot be used to run their newer games
- jokethrowaway 4y agoIt sounds like adding those features to ruffle would have been three order of magnitudes easier than writing a flash player from scratch I understand contributing to OSS is a pain (I often end up with half implemented features in my own branch and never manage to merge them upstream) but he could have saved himself some trouble.
- amne 4y agoI 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.
- numair 4y agoReally 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 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).
- tetris11 4y agoIt looks like its 99% there though in terms of support
- adrian17 4y agoThis linked issue is - quote - "a non-exhuastive, basic checklist of where we are aiming". As in, a checklist for MVP level support. And indeed, we have pretty much reached the MVP level, with several simple games (and some nontrivial libraries like box2d or mochicrypt) working. From this point on, it's hard to make a simple TODO checklist. We could analyze the entire Flash API surface and make a tracking issue for each available class, but that's a lot of bookkeeping and it doesn't really say that much about real support (as, assuming pareto principle, 80% of fancier features are used by only 20% of games).
- numair 4y agoThank you for this very thorough and honest explanation. Really appreciate what you’re doing with Ruffle!
- lukaszkups 4y agoI 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)
- pmarreck 4y ago> 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.
- ezfe 4y agoAlso the fact that macOS doesn't actually block unnotarized software...Many programs are un-notarized and just need to give the user the 1 step instruction to bypass it
- pmarreck 4y agoYes, and I also never felt the macOS warning about it "strongly suggested it was a virus." That was pretty much hyperbole. And I could also argue that Apple expecting devs to pay a nominal fee to get their app officially code-signed creates a barrier to entry for bad actors who are likely to not want (or be unable to afford) to pay such a fee, especially when that simultaneously gives control to Apple to block the malicious code en-masse once it is discovered.
- richrichardsson 4y agoAlso the fact that you only need to pay the £99 fee once; after the executable is signed, notarised and stapled, that's it. I think there might be a network request if the executable hasn't been stapled, but it's only to check that it has been notarised in the past, it doesn't check for an active Developer Subscription. At least this is my understanding of the situation, I would be happy to be corrected if any of that is wrong.
- keewee7 4y agoIIRC many 2D animators considered the old Adobe Flash Professional to be one of the best 2D animation tools ever made.
- codetrotter 4y agoFun fact: An animated TV series that ran from 2010 to 2019 developed by Lauren Faust, was animated in Adobe Flash. https://en.wikipedia.org/wiki/My_Little_Pony:_Friendship_Is_Magic https://en.wikipedia.org/wiki/My_Little_Pony:_Friendship_Is_...
- thesuitonym 4y agoActually, there were quite a few animated TV series that were animated in Flash (And later Adobe Animate). https://en.wikipedia.org/wiki/List_of_Flash_animated_television_series https://en.wikipedia.org/wiki/List_of_Flash_animated_televis...
- tetris11 4y agoMany Adult Swim shows too: Harvey Birdman and Metalocalypse come to mind
- themodelplumber 4y agoMany 2D illustrators, industrial designers, and graphic designers considered it one of the best 2D drawing tools ever made. One of my roommates in the heyday of Flash was an industrial designer who was paid by an Italian business to design aftermarket wheels for cars, which he did in Flash. Eventually he figured out a Flash > Studio Max workflow he liked and finished projects in 3D that way. That guy could draw anything in Flash and preferred it over Illustrator, Photoshop, and Fireworks.
- jcmontx 4y agoThis guy sees the matrix
- coldtea 4y agoIt's nothing to be ashamed o..., wait, Flash you said? Well, then it is...
- FrostKiwi 4y agoOMG, 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.
- usui 4y ago> 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...
- bjackman 4y ago> 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.
- alxlaz 4y ago> 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.
- ilyt 4y agoIt's like entire industry at one point decide to optimize UIs for the first 30 minutes of usage and not the years of users using apps once they get familiar with them. "oooh let's not put too many buttons to scare users away", "they got 22 inch screens, let's just waste space for no good reason, it looks modern and airy"
- fallat 4y agoYes. What we see in UI design today is a consequence of game theory at work. It's to optimize business. In fairness you don't want to scare users away. I think though many people equated it all to "clean looking", without realizing removing micro-interactions is a net negative....
- zozbot234 4y agoI think touch screens are a bigger factor. You can't have small buttons in a touch-screen UI, because they must be targets for your finger. (OTOH, swipes in a touch UI are a lot easier than mouse drag-and-drop. So the optimal touch UX probably has lots of drag-activated pie menus. And confirmation flows for potentially destructive actions, to cope with the lower accuracy of touch interactions.)
- BlueTemplar 4y agoYes, and that is one of the reasons why your touchscreen UI must be radically different from your mouse and keyboard UI.
- LoveMortuus 4y agoAnyone 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).
- iKnowKungFoo 4y agoFlash was shuttered due to being a constant, huge security risk. So no modern browsers support it and there aren't any plugins for it other than Ruffle.
- AndriyKunitsyn 4y agoWeb itself is a constant huge security risk - Playstations 3, 4 and 5 were all hacked through Webkit, for example. The reason to kill off Flash was just because Apple wanted it gone, and Adobe didn't want to make them angry.
- 4RealFreedom 4y agoI use flash occasionally to run some older code. I've been running this setup for a few years now on my Intel Mac because it won't work with Apple's new M chips. There are a couple of things you will need. First, download Firefox 84.0 here: https://ftp.mozilla.org/pub/firefox/releases/84.0/mac/en-US/ https://ftp.mozilla.org/pub/firefox/releases/84.0/mac/en-US/. Next, you need the Flash Player itself. Adobe, as far as I know, removed the links to download it and I don't have anywhere I would trust to download. After you have the Flash Player, install Firefox 84 and disable the auto-updates. Now install Flash and everything should work. Good luck!
- hayleox 4y agoNo such thing as a modern browser that supports Flash. But BlueMaxima's Flashpoint is a great tool that lets you run old web games in Flash and other dead formats: https://bluemaxima.org/flashpoint/ https://bluemaxima.org/flashpoint/
- LoveMortuus 4y ago
- Faruk66 4y ago
- Tuhin46 4y ago[flagged]
- T3RMINATED 4y ago
- georgefrick 4y agoReally 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!
- theandrewbailey 4y ago> 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.
- zozbot234 4y agoIt can be done, see pathfinder and piet-gpu. But these solutions are still highly experimental, not really in common use.
- dj_mc_merlin 4y agoI 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?
- iKlsR 4y agoSome of the better years of my life a little over a decade ago were spent on mofunzone playing the stick figure fights with friends. I remember bullet time fighting (matrix clone with swords, guns, slow motion) and there was also an amazing action narrative series called Ray with Southpark themed characters and one of the craziest platformers I ever played called N. I managed to snag some of these a while back and preserve them offline and can still enjoy them using https://ruffle.rs/ https://ruffle.rs/. We lost so many good things from the flash era.
- ddulaney 4y agoN is one of my favorite platformers of all time. Happily, it's still around and doesn't require any Flash hacks! https://www.thewayoftheninja.org/n.html https://www.thewayoftheninja.org/n.html Do you know if there's been any progress on preserving the older Macromedia games? I remember those starting to get flaky even in the Flash heyday.
- iKlsR 4y ago
- underdeserver 4y agoKinda 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.
- swayvil 4y agoThere 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?
- dandigangi 4y agoI miss that beautiful old keyframe timeline and writing some AS2. The good days.
- pier25 4y agoWhat about Haxe and OpenFL?
- Nuthen 4y agoGreat 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?
- rogual 4y agoI can't know ahead of time the exact aspect ratio the player will run the game at. 16:9 and 16:10 are the most common on today's monitors, but the game might be running in a window, or fullscreen on an unusual monitor. If I just made the game at a fixed 16:9 ratio, it'd leave empty space at the edges of any window that isn't exactly 16:9. Same if I chose 16:10 or any fixed aspect ratio. By supporting a range of ratios between 16:9 and 16:10, I maximize the number of window sizes that the game will display nicely in without any empty space (black bars) at the sides. The best way, I thought, to support a range of aspect ratios was to define two rectangles in the scene, having the minimum and maximum ratios supported, and interpolate the camera rectangle between them. Hope that makes sense!
- RulerOf 4y agoI really appreciated the visualization you provided for that.
- bashmelek 4y agoGreat 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.
- ho_schi 4y agoInteresting 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?
- mike_hearn 4y agoIf you want to create Mac apps from other platforms then check out Conveyor: https://hydraulic.software/ https://hydraulic.software/ It can build, sign and notarize Mac apps (and Windows apps, and Linux apps) with auto update and can do so from any platform. So you can ship to everyone from Linux if you want. It also does auto update, generates a download page that detects your OS and it includes control over low level OS-specific things like setting entitlements, custom deb dependencies, Windows manifest extensions etc. Notarization as a process is actually OK in my view. Yes it sucks to have to pay, especially for hobbyist stuff. Still, process-wise it's pretty lightweight and it seriously beats having a virus scanner intercept and rummage through all your file IO all the time. Windows has a lot of problems with aggressive AV engines mucking up programs and macOS doesn't, because notarization is in effect an ahead of time virus scanner that moves the work off the end user laptop. Also these days the notarization protocol is open and documented.
- the-alchemist 4y agoThe 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)?
- Alifatisk 4y agoYes, they did re-write to Minecraft Bedrock Edition but did not deprecate java edition, it's still alive an thriving.
- Alifatisk 4y agoCouldn't stop thinking of ruffle.rs
- pfoof 4y agoGlad 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.
- samhickmann 4y ago
- astroalex 4y agoI 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.
- warent 4y agoNo 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.
- erdaniels 4y agoHah I'm surprised not more people have played the hapland games. I was more wowed by foon putting out an article
- TylerGlaiel 4y agoFlash 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.
- rchaud 4y agowould love to see a blog post about this! With Flash now discontinued, it's interesting to see how it's being kept alive.
- bulbosaur123 4y agoHow dare you
- samiam_iam 4y ago
- justinator 4y agoBest of HN - what an incredible read.
- leetrout 4y agoI 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.
- hoten 4y agoThis 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/renderer.cpp https://github.com/svoisen/wasm-imageviewer/blob/master/rend...
- superkuh 4y agoI 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.
- anonymous344 4y agohow 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
- vfclists 4y agoYou 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.
- logotype 4y agoWorking 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/blob/master/src/org/puremvc/as3/core/Controller.as 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!
- th0ma5 4y agoAt the time it was unfortunately both true that Apple needed idle CPUs for battery life and Adobe had no intention or probably no ability either to make that happen with Flash.
- acdha 4y ago> 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, You might not have seen it but the hate for Flash was well-established by then, solely due to Adobe’s gross mismanagement of their platform. Flash was what crashed and took out your entire browser session. Flash was what made drive-by compromises so easy and common. Flash was what popped up annoying “you should manually update” prompts because they sat out the automatic update trend for nearly two decades. Flash was also what made your entire computer visibly slow down because it was so inefficient - they weren’t an option on phones due to the UI differences but performance and memory alone would have ruled them out in any case. Flash was also painful to develop for. Yes, you could do things which browsers couldn’t do back then but it came at the cost of having to pay Adobe thousands of dollars for shoddy, unsupported tools[1] and while there were a handful of ways where AS3 was ahead of JavaScript there many areas where it was behind and unlike browsers it stayed there, and it was really common to find bugs in Adobe’s libraries which meant you had to build a complete replacement or wait years to never for them to fix it. People made cool things despite that but I attribute almost all of the blame for Flash’s demise to Adobe. They could have cut their executive bonus pool by 10% to hire a QA team and they’d have had a much better chance at long term success. Instead, they let the platform stagnate to the point where one of the early Chrome selling points was that when Flash crashed you’d only lose that page! 1. I bought a Flash license once. I naively filed bug reports for reproducible crashes in the player and IDE (the debugger was especially unstable), as well as compatibility and correctness issues with their various libraries. Each time, I got no reply before the next major release and then I got a generic “please pay $1,500 for the upgrade and let us know if we fixed it” message.
- onepointsixC 4y agoI 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.
- pentagrama 4y agoIt 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 https://youtu.be/0KofIRvAr0M?t=626 [2] https://en.wikipedia.org/wiki/Adobe_Animate https://en.wikipedia.org/wiki/Adobe_Animate
- namuol 4y agoAh, 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…
- shzhdbi09gv8ioi 4y agoI'd imagine lightspark would be useful here, rather than yet again reinvent a wheel. https://lightspark.github.io/ https://lightspark.github.io/
- not2b 4y agoFrom 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.?
- Strom 4y agoIt's an area of active research. One very promising project is vello [1] which is essentially a software renderer on the GPU (requires GPU compute support). Preliminary results are looking good. Better than anything else out there good. -- [1] https://github.com/linebender/vello https://github.com/linebender/vello
- rburhum 4y agoI 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!
- heystefan 4y ago> 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?
- rogual 4y agoThank you! Git log tells me I started in November 2019, so 3 years, but the pace of work definitely varied a lot over that time. Sometimes I was putting full days of work into it, sometimes stolen moments here and there between paying work, and some long stretches of just not working on it at all. Maybe I'll do another post with a graph, haha.
- heystefan 4y agoYeah I'd be curious to know the total time spent. :) In any case, amazing work and write-up!
- skocznymroczny 4y agoAhh 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.
- Caitlynmeeks 4y agoMan I miss Flash too! Tumult Hype is the closest thing to it, but the editor's Mac only. https://tumult.com/hype/ https://tumult.com/hype/
- yamtaddle 4y ago> 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.
- wolverineoflove 4y agoReal 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
- dljsjr 4y agoWould ruffle + WASM + Electron work? https://ruffle.rs https://ruffle.rs
- ux 4y ago> 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.
- hgsgm 4y ago
- NovaVeles 4y agoI 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.
- holoduke 4y agoI think was flash did well was its neat component based framework. It was easy to understand, easy to modify and build your own set of controls on top of it. The runtime engine sucked. It was too slow and therefor power demanding. But the framework itself was much better than todays android , react and others.
- NovaVeles 4y agoThat performance was so heavily tied to screen resolution was funny to see. It could crunch a reasonable amount of vector information, but the rasterisation would burn through processor cycles. There were some projects when I was running on a G3 iMac where I would drop the render screen down really small to see how it would perform on a more powerful machine. It felt like if they even managed to get decent GPU acceleration possible then they could have solved a lot of these issues.
- 4y ago
- soheil 4y agoWe 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.
- bernardv 4y agoFlash 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.
- andsoitis 4y agoI 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.
- stevebmark 4y agoWhat'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.
- jaimex2 4y agoThe tools existed for a while and faded away. Swiffy was the main one.
- wackget 4y ago> 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?
- taneq 4y ago“Wasted? How could you say that?!” - Apple exec, wiping their eyes with a roll of $100 notes from their extortion program.
- barumrho 4y agoThe bit about Apple Notarization is incorrect. You can do it with a free Apple Developer account. You only need to pay $99 if you want to distribute it through the App Store.
- platinumrad 4y agoStill much more of a pain than it should be.
- saagarjha 4y agoNo, you can't.
- VadimPR 4y agoI don't believe you are correct I'm this. A paid account is necessary to obtain the signing cert.
- Marc_Bryan 4y agoScrew 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!
- dbttdft 4y agoTerrible graphics, laggy janky games, and non stop security vulnerabilities. Don't miss it. The worst was when business websites used it.
- derelicta 4y agoI 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.
- citeguised 4y agoYou can drag&drop lots of older (ActionScript 1 & 2) Flash-Binaries into https://ruffle.rs/demo/ https://ruffle.rs/demo/ Lots of them "just work". Also lots of SWF-Archives on archive.org to download and try.
- derelicta 4y agoOhhh! Will try this one alternative for sure :) Thanks again :)
- leg100 4y ago> 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.
- crayonviking 4y agoFucking beautiful work, OP. This is awesome!
- zdimension 4y agoEmitting assembly code for binary output for easier debugging is a hell of a good idea, I'm gonna steal that one.
- Airapport 4y agoThis 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
- rogual 4y agoThanks! I had all of Hapland 1 (and possibly 2?) working in AIR before I ditched it. I can't remember an exact list of bugs, I think I was just getting graphical glitches and the normal timeline bugs you sometimes get in Flash. Sometimes the AIR tools would fail with Java tracebacks too. Performance was also not where I wanted it, and I wanted full control of the scene code for save states, so the reasons to switch were just mounting up.
- Khelavaster 4y agothree.js supports WebGL Bezier splines..
- mbahdarmo 4y agoAIR 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/ https://leaningtech.com/cheerpx-for-flash/