Is OpenFl an appropriate platform for my project?

Hello.
I am an experienced Flash games designer known as GP Studios. The last official thing of mine I released was in 2011, a fairly ambitious 2D Adventure/RPG game called Wasted Youth Part 1, written in AS2.

I’m looking to remaster and finish this project soon.
I partially converted it to AS3 a few years ago but I’m so unfamiliar with my project files I’m thinking of migrating it to Haxe/Open FL or possibly Unity.
All my assets are in Flash: code, characters, animations, scenery, etc.
I love the ease of design in Flash, I’ve yet to find anything that quite matches it. However I also employ a lot of texturing so scaling is an issue. I wonder if I should just go the whole hog and go down the route of spritesheets/Starling, or possibly even 3D models (something I’m very inexperienced with by comparison).
I had a little tinker with OpenFl a couple years ago and found the newly added SWF asset rendering was not to my liking (inferior quality & performance), so I’m not sure if SWF graphic assets is a good idea.

I could probably go on and on and on with questions and concerns like sound and fluid character animation, neither of which are very easy in Flash
I’ve looked at platforms and APIs but it seems there is no best option, and I can’t bring myself to a decision when I feel so uneducated on the matter.

I feel somewhat out of the loop and unfamiliar with the current trends of indie game development in the year 2015, so on many levels I just don’t know where to start. I’m basically a 1 man team with lots of free time looking to create something fairly large and ambitious, with a background in online Flash games.
I suppose it’s not irrelevant to say that ultimately I’m looking to prove myself amongst a pretty intimidating lot of talented developers and if all goes to plan, make a profit and a name for myself, but in order to do so I need to know what the fuck I’m doing. Currently I must admit, I feel pretty lost and overwhelmed by the challenge I’ve set myself.

So, is this an appropriate platform for such a project? (It might help to look at the old game in question.)
I’m looking to make it available to as many platforms as possible and to sell it via Steam, but given all the Flash hate and it’s ongoing demise, I wonder if it’s wise to not break ties completely and move onto Unity.
I haven’t even mentioned Air. I haven’t got a clue.

I apologise for the broad and rhetorical nature of my question, and that this post has probably been written umpteen times by other anxious Flash developers.

Perhaps a better way of phrasing the question would be: if you were set the task of creating my game, what would you use and why?

Any feedback will be appreciated.

Code

You’re going to have to translate your code no matter what. However, since you’re starting from ActionScript, it will be easier to translate.

Also, if you’re familiar with Flash’s display hierarchy (parents and children), it’ll be easier to get used to OpenFL than Unity.

Code performance

Both Haxe and Unity produce fast code, but I think Haxe has the edge.

Unity’s code is “around 20 times faster than traditional javascript and around 50% slower than native C++ code.” Haxe, for the record, produces C++ code when you compile for Windows, Mac, Linux, Android, or iOS.

AS2 was really slow, and you still made the game work. AS3 was, depending on who you listen to, anywhere from 2x to 10x as fast. OpenFL and Unity are both faster than that.

Art/animation

SWF assets in OpenFL have improved over time, or so I’m told. I’ve never actually used them myself.

If they still don’t work for you, you’re going to have to use sprite sheets. Unity supports this natively, while OpenFL requires slightly more setup (downloading a library).

Unity has a visual editor to help you import a sprite sheet, but OpenFL is even better. Flash CS6 can export sprite sheets in the Sparrow format, which OpenFL can import directly. (If you don’t have Flash CS6, you can use TexturePacker instead. Both OpenFL and Unity can import TexturePacker’s files.)

Sound

If you didn’t like how sound worked in Flash, you probably won’t like it in OpenFL either. Unity’s sounds are a bit more convenient.

Actually, hold on. Did you play sound by putting it in a movie clip and then playing that clip? Because in that case, OpenFL is different than what you’re used to.

Rendering performance

OpenFL uses GPU acceleration already, so you shouldn’t need to use Starling. I’d guess that Unity has better rendering than OpenFL (with or without Starling).

That said, your game worked without GPU acceleration, so all of these options should work even better.

Tutorials

Unity has more tutorials.

1 Like

Thanks for that. Quite re-assuring to see it’s a good contender performance wise with Unity.

While I only mentioned OpenFl, Unity and fleetingly Air, would you recommend anything else? Imagine for the sake of argument I was starting from scratch (which in a way I will be), is there any other platform or set of tools that you’d recommend?
What if I want to display some 3D (for a minigame for instance). Will that be a headache? I’d imagine I’d require a separate API/Library.

Also, as I understand it, OpenFl is a fairly obscure platform. This is probably the wrong place to ask, but what is the likely fate of OpenFl in say 5 years time? Once Flash is outright dead will we see the same for OpenFl?
As I understand it, OpenFl is just an API to allow easier development for Flash developers. Are there similar cross-platform APIs for Haxe that you’d recommend, or is this the best one going?

OpenFL’s two main competitors, as far as I know, are Flambe and luxe.

Flambe exports only to Flash, AIR, and HTML5, so you won’t get C++'s performance. On the plus side, Flambe’s focus on a few targets means it has ultra-optimized HTML5.

luxe is what you get if you like the idea behind OpenFL, but you hate Flash’s API. It’s still in alpha, which means they haven’t had much time to optimize, but at least it uses C++ on native targets.

Flambe requires you to use an entity-component system, (Or to spend extra effort working around it.) If you’re used to OOP, this might trip you up. Otherwise, you might find you like it.

luxe tries to give you as many options as possible. You can use the entity-component model, or OOP, or possibly others (I’ve never actually used it, so I wouldn’t know). Actually, some people recommend starting with something more restrictive, because too many options can be overwhelming.

3D support

If you want to use 3D, your best bet (by far) is Unity, followed by OpenFL and luxe.

Unity has built-in 3D support, including a scene editor. OpenFL has Away3D and BabylonHx, while luxe only has BabylonHx.

The future

Flash isn’t dead yet. It’s headed in that direction, but not very quickly. But what does that mean for OpenFL?

OpenFL has the option to compile to Flash, but it doesn’t need to. When it compiles to HTML5, it doesn’t use any of Adobe’s technology at all.

OpenFL won’t die until HTML5 dies, and Android dies, and iOS dies, and you can’t make games for Windows, Mac, or Linux. (The same reasoning applies to luxe.)

But there’s more than that. As Flash becomes less profitable, AS3 developers will be looking for an alternative. OpenFL is an obvious choice, using the same API and a similar programming language. It’s likely that OpenFL will get more and more attention as AS3 developers jump ship.

1 Like

Another brother-in-arms to OpenFL, Flambe and luxe is Kha, which is a bit more low-level than everything else on the list, but still very interesting.

While there are many low-level libraries (requiring knowledge of OpenGL, renderers, etc), I think you would benefit by thinking about your art asset workflow. Where would you like to create your art? How will you create animation?

I’m guessing that Flash CC may be an environment you’d enjoy. Creating 3D assets or using a more rudimentary toolset doesn’t seem like a good match.

I have been working with OpenFL and NME (the library before OpenFL) for 5 years. TiVo, Electronic Arts and many other developers currently use OpenFL.

If you are able to bring your code to Haxe, OpenFL should provide a familiar environment.

You could still use Flash assets, you could still target Flash Player, and if you want, AIR, without a code rewrite. However, if the SWF library is capable of running your art (it keeps getting better), HTML5 or native platforms will also work from the same code.

If you want 3D in a mini-game, OpenFL allows WebGL-style code, or Away3D and other libraries have OpenFL compatibility.

There are also other methods (like spritesheets) of running animation. Mino Monsters 2 uses Bink video for the character animation and SWF assets for all UI :slight_smile:

3 Likes

Is there any way to use TexturePacker sprite sheets like in Starling?

There is a “spritesheet” library that might have support for it. If not, it would not be hard to add, I imagine?

Also, if anyone has performance or other optimization improvements to that library, I’d be happy to see it evolve :slight_smile:

Hmm … the point of using a sprite sheet is to reduce draw calls in WebGL by packing different bitmaps into a single texture.

The existing spritesheet library does not do that - it simply breaks down a large sheet into smaller bitmaps (as opposed to sub-textures) which may be fine for canvas and blitting, but is not applicable to any GPU based rendering.

Not sure how difficult it would be to implement a real texture atlas in OpenFL but these days it’s kind of a basic feature for any game/app and definitely a must in any modern platform.

Sorry for the rant :confused:

The library was written originally for the Flash target – Flash likes separate bitmaps better than copyPixels (in my previous tests), but you’re right – we should have something that automatically does the batching. There is a new Tilemap API that is in the works that I think should be more suitable for this. There is drawTiles in the meantime, but I think Tilemap will be easier to use and perform better :slight_smile:

Is there much sense in using OpenFl when I have no intension to target FlashPlayer?

I only mentioned Flash Player, because you have a game on Kongregate, you could release an update or a new version, also, Flash is handy as a testing target even if you never release to Flash Player.

Flash support also means AIR support, if that makes sense at some point.

…but setting that all aside, OpenFL continues to improve as a target to desktop, mobile, web and even upcoming console platform support, so you can run native on the desktop, run HTML5 on the web, run on Nintendo or PlayStation or XBox.

I think it is a bonus to work on Flash Player, but it certainly is not the focus

There is openfl-texturepacker which imports your tilesheet as an OpenFL Tilesheet that you can then use drawTiles to batch render the images from that single texture.