[HN Gopher] I still use Flash
___________________________________________________________________
 
I still use Flash
 
Author : rogual
Score  : 793 points
Date   : 2022-12-21 12:01 UTC (10 hours ago)
 
web link (foon.uk)
w3m dump (foon.uk)
 
| Nuthen wrote:
| 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?
 
  | rogual wrote:
  | I 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 wrote:
    | I really appreciated the visualization you provided for that.
 
| superkuh wrote:
| 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.
 
| moolcool wrote:
| 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.
 
  | BulgarianIdiot wrote:
  | Flash 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.
 
    | mFixman wrote:
    | > today we can do everything Flash did, and more, with HTML,
    | and WebGL.
    | 
    | There's one big piece missing: we don't have an
    | animation/gaming interface that's as easy and intuitive as
    | Flash.
    | 
    | Flash didn't become ubiquitous because it was powerful, but
    | because it was easy for any 13 year old to pick up and do
    | something nice in a couple of days without reading any
    | documentation or doing any course. Good luck getting anything
    | to work in WebGL without any web programming experience.
 
      | robertoandred wrote:
      | The Flash editor is still around, it's just called Adobe
      | Animate now. It can export to web for you.
 
      | rchaud wrote:
      | Developers love saying "But you can do everything that was
      | in Flash directly in Javascript today!!"
      | 
      | I wish they could understand that what they're saying would
      | be equivalent to switching out Excel for a Python IDE and
      | saying "but you can do calculations here too!"
 
    | dusted wrote:
    | _slowly 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.
 
      | moolcool wrote:
      | This is admittedly a few years ago, and the scene has
      | evolved _a bit_ since then, but I remember seeing really
      | simple JS games (think tetris, or a very simple
      | sidescroller) being heartily applauded on sites like reddit
      | and HN. We're unironically cheering approaching parity with
      | a toolset from almost 20 years ago! Things could be so much
      | better.
 
        | BeFlatXIII wrote:
        | > Tetris or a very simple side scroller
        | 
        | Back when it was still Dynamic HTML and I was in middle
        | school, I copied the page source to put those into my
        | homepage. I even figured out how to edit levels in the
        | Mario clone.
 
    | dncornholio wrote:
    | > and today we can do everything Flash did, and more, with
    | HTML, and WebGL
    | 
    | This is a myth, theoretical true, but practically impossible.
    | Flash was so much more than a browser plugin. With HTML5 it
    | is so much harder to maintain a framerate, while in Flash you
    | almost didn't need to care about that.
 
    | whywhywhywhy wrote:
    | Adobe never cared about Flash beyond it being the webs video
    | player.
    | 
    | Honestly the whole thing just began to rot from a tool
    | perspective since their purchase.
    | 
    | Their management is too PDF-brained to think of investing in
    | quality work in their tools as insane as it sounds they seem
    | to consider their creative tools an afterthought and B2B PDF
    | solutions their main business. I can't find any other way to
    | explain their actions.
 
    | moolcool wrote:
    | I 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.
 
| warent wrote:
| 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.
 
| coldtea wrote:
| It's nothing to be ashamed o..., wait, Flash you said? Well, then
| it is...
 
| shzhdbi09gv8ioi wrote:
| I'd imagine lightspark would be useful here, rather than yet
| again reinvent a wheel.
| 
| https://lightspark.github.io/
 
| ho_schi wrote:
| 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?
 
  | mike_hearn wrote:
  | If you want to create Mac apps from other platforms then check
  | out Conveyor:
  | 
  | 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.
 
| Caitlynmeeks wrote:
| Man I miss Flash too!
| 
| Tumult Hype is the closest thing to it, but the editor's Mac
| only.
| 
| https://tumult.com/hype/
 
| bashmelek wrote:
| 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.
 
| TylerGlaiel wrote:
| 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.
 
| LoveMortuus wrote:
| 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).
 
  | 4RealFreedom wrote:
  | I 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/.
  | 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!
 
  | iKnowKungFoo wrote:
  | Flash 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 wrote:
    | Web 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.
 
| makach wrote:
| 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!
 
  | chubot wrote:
  | Yup, 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
  | 
  |  _A Sketch of the Biggest Idea in Software Architecture_
  | https://www.oilshell.org/blog/2022/03/backlog-arch.html
 
| anonymous344 wrote:
| 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
 
| rogual wrote:
| 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.
 
  | Jasper_ wrote:
  | Worth 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...
 
  | darkwater wrote:
  | I think you nailed it at every layer, it was a very
  | entertaining, nostalgic and instructive read. Thank you!
 
  | namuol wrote:
  | It 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.
 
  | lsferreira42 wrote:
  | You are very good at this, i'll follow your site from now on
  | hoping for more publications like that!
 
  | kulor wrote:
  | There'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.
 
  | thor_molecules wrote:
  | Very interesting, and frankly inspiring to see you get this
  | creative.
 
  | HanClinto wrote:
  | I really enjoyed it! It didn't come off as content marketing at
  | all. Well done!!
 
  | replwoacause wrote:
  | I 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!
 
  | bjackman wrote:
  | It was great, loved the concise writing style, and it was a
  | cool story.
 
    | rogual wrote:
    | Thanks! It's actually great to hear you describe it as
    | concise, I was worried it was a bit waffly to be honest.
 
      | mastersummoner wrote:
      | It was long because there were a lot of steps to describe.
      | But for each, the writing was concise, interesting and
      | entertaining.
 
  | jonathanyc wrote:
  | Great post! No complaints at all from me. The mix of your
  | thought process + screenshots + examples is perfect.
 
  | wila wrote:
  | Keep 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.
 
  | sh4rks wrote:
  | This 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.
 
  | civilized wrote:
  | I 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 wrote:
    | Indeed! ;-)
    | 
    | 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?
 
      | kmeisthax wrote:
      | So, 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.
 
        | Asooka wrote:
        | Have you tried splitting the area covered by each shape
        | into several 8x8 pixel rectangles, then running a compute
        | shader over each one that executes the exact same
        | rasterisation algorithm as Flash did? That's more or less
        | how triangles are rasterised on the GPU anyway.
        | 
        | It's definitely not a simple solution, but might enable
        | you to do runtime rasterisation with a good framerate on
        | the GPU rather than pre-rasterising all the vector art.
 
        | detritus wrote:
        | > "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"
        | 
        | Well fuck me, I had no idea. I figured that 'simple 2D
        | vectors' would be beyond piss-easy for modern GPUs. I'd
        | never considered that it wasn't the actual math space
        | that was accelerated, rather the fast memory mapping of
        | everything on presumably comparatively simple geometries.
        | You've just turned my view of the world upside down :(
 
        | ChuckMcM wrote:
        | Yeah, this is something that many many people assume
        | (vectors are "easy" on GPUs) and then are amazed (like I
        | was!) that they aren't even in the function set. My
        | thought was that if you were "accelerating" desktops
        | you'd really want vectors right? But no.
 
        | jcelerier wrote:
        | > they aren't even in the function set.
        | 
        | they are, but on nvidia only...
        | https://developer.nvidia.com/gpu-accelerated-path-
        | rendering
 
        | karteum wrote:
        | I though that there were some "GPU accelerated path
        | rendering" already 10 years ago ?
        | https://developer.nvidia.com/nv-path-rendering
        | https://developer.nvidia.com/gpu-accelerated-path-
        | rendering
        | 
        | (OK those links are for NVidia, but if they can do it I
        | guess others can too ?) (also see
        | https://www.researchgate.net/publication/262357352_GPU-
        | accel... )
 
        | karteum wrote:
        | Also, as far as I understood, both GNU Gnash and
        | Lightspark were using OpenGL for rendering. So I always
        | expected that GPU would still bring some sort of
        | acceleration for 2D path rendering ?
 
        | Nihilartikel wrote:
        | Riffing off of other recent HN posts, I'm wondering if
        | signed distance fields might be a contender for 2d
        | strokes.
        | 
        | I've seen some font rendering work that has already
        | embraced them for high perf rasterization.
        | 
        | Still, may be hard to get flash equivalency.
 
        | bambax wrote:
        | Thanks for this! Very informative!
 
      | [deleted]
 
      | rogual wrote:
      | I 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 wrote:
        | Ah, thanks. That could maybe go into the article as well?
        | Although it's already pretty thorough as it is.
 
  | dontwearitout wrote:
  | Flash 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?
 
    | japhib wrote:
    | Object-orientation is kind of the old-school way of doing
    | things, these days it's all about ECS - entity component
    | system. This is a more data-oriented approach that has the
    | potential for much higher performance when you have thousands
    | of objects that need updating in your game. It's similar to
    | how OO languages like Java/C# are going out of style and more
    | (nominally, at least) data-oriented languages such as Go or
    | Rust are in style.
 
    | BlueTemplar wrote:
    | Probably 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...
 
      | stelonix wrote:
      | Not 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 wrote:
        | > 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).
 
  | robertlagrant wrote:
  | Just to say: thank you for these games. I loved them when I was
  | in my 20s.
 
  | log101 wrote:
  | It 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)
 
  | unsafecast wrote:
  | I 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!
 
  | JoeyJoJoJr wrote:
  | Great 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
 
  | pie_flavor wrote:
  | This is pretty great writing, I'd love to read more of it.
 
  | Tepix wrote:
  | It'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?
 
| vfclists wrote:
| 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.
 
| Faruk66 wrote:
 
  | Tuhin46 wrote:
 
| yamtaddle wrote:
| > 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.
 
| gibspaulding wrote:
| 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!
 
  | TylerGlaiel wrote:
  | flashpoint 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/
 
  | EamonnMR wrote:
  | It'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...
 
  | oneepic wrote:
  | I 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.
 
| usui wrote:
| > 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...
 
  | jmull wrote:
  | I think that's essentially what the author did?
 
  | tinco wrote:
  | Would it have been less work? I wouldn't be so sure, given that
  | the author was actually successful.
 
| the-alchemist wrote:
| 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)?
 
  | Alifatisk wrote:
  | Yes, they did re-write to Minecraft Bedrock Edition but did not
  | deprecate java edition, it's still alive an thriving.
 
| not2b wrote:
| 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.?
 
| andai wrote:
| 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.
 
  | rogual wrote:
  | Sure!
  | 
  | * 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 wrote:
    | Have 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.
 
| FrostKiwi wrote:
| 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.
 
| samiam_iam wrote:
 
| keewee7 wrote:
| IIRC many 2D animators considered the old Adobe Flash
| Professional to be one of the best 2D animation tools ever made.
 
  | codetrotter wrote:
  | Fun 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_...
 
    | thesuitonym wrote:
    | Actually, 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_televis.
    | ..
 
      | yreg wrote:
      | That is indeed quite a few.
 
      | isametry wrote:
      | The abundance of obscure and overly specific lists is one
      | of my favorite features of Wikipedia. Thanks for linking!
 
    | tetris11 wrote:
    | Many Adult Swim shows too: Harvey Birdman and Metalocalypse
    | come to mind
 
  | themodelplumber wrote:
  | Many 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.
 
    | kmeisthax wrote:
    | Funnily enough that was actually the original goal of Flash -
    | back when it was called SmartSketch. The idea was to have a
    | vector drawing tool for pen tablets. But it sold absolutely
    | horribly.
    | 
    | Jonathan Gay pivoted it to animation shortly thereafter and
    | rebranded it as FutureSplash, and then got bought out by
    | Macromedia.
 
  | robertoandred wrote:
  | It's still around, it's just called Adobe Animate now. Can
  | export to video, to web, etc.
 
| rburhum wrote:
| 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!
 
| alxlaz wrote:
| > 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_.
 
  | legohead wrote:
  | I am _still_ clicking on Gmail on accident because I think it
  | 's Maps. The icons are horrible.
 
    | quickthrower2 wrote:
    | Classic HTML gmail
    | https://support.google.com/mail/answer/15049?hl=en (final
    | link on that page)
 
  | indymike wrote:
  | > The lost art of UI design.
  | 
  | This sounds like a great title for a really good book.
 
    | isametry wrote:
    | I find it somehow intriguing how you already pre-destined
    | this imaginary book to be great... That stood out to me for
    | some reason. How about a great title for a shitty book?
    | 
    | Funnily enough, _The Lost Art Of UI Design_ sounds like a
    | potentially very mediocre book to me. One of those stretched-
    | out  "self-teaching" design guides that listicles will
    | recommend you. It chooses a couple of very specific rules of
    | thumb, it gives way too much importance to them, and somehow
    | manages to water them down to 250 pages. Probably written
    | either by someone who's a skilled writer but barely knows
    | enough about the industry, or an experienced specialist in
    | the field who unfortunately can't write for life.
 
      | indymike wrote:
      | Ah... soon the publishers will just have chatgpt write it.
 
  | ilyt wrote:
  | It'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"
 
    | dkarl wrote:
    | That's the discipline of data-driven business. If 20 people
    | use your app and despise it and are depressed by it, that's
    | better than 19 people using it and loving it. No
    | sentimentality allowed.
 
      | sosborn wrote:
      | How could anyone possibly measure that an app is despised
      | and depresses people (or vice versa)?
      | 
      | Usage can't be it, because I use a ton of software that I
      | despise and get depressed by, but only because I get paid
      | to do so, or the app is so niche there isn't a viable
      | replacement.
 
        | layer8 wrote:
        | They don't. They just measure that the more "modern"
        | design gets 5% more users, so clearly it must be better.
 
        | TeMPOraL wrote:
        | > _How could anyone possibly measure that an app is
        | despised and depresses people (or vice versa)?_
        | 
        | You'd have to actually _talk to your users_. But that
        | requires genuine human investment, so it doesn 't scale.
        | It doesn't come in the form of a third-party SaaS with a
        | pretty dashboard, generous free plan, and integration via
        | single