Well… so much for using Haxe. RIP NME.

4. June 2013

I think I must have bad karma or something.  I spent several weeks looking at what technology to use for my upcoming game project.  After much research and community feedback, I decided to use Haxe with NME using the Awe6 framework.  Well, that plan didn't last long, dying with this statement:

OpenFL is an advancement of everything there is to love about NME, and NME is taking a backseat so it can focus on being a stable, powerful C++ backend for native platform support


You see Joshua Granick, the creator of NME just recently announced OpenFL a replacement of sorts for NME, or more accurately I suppose, a replacement built on top of NME.  Here is a blurb from the OpenFL announcement:

OpenFL combines years of work to provide for the industry-standard Flash API without the Flash plugin.

In order to succeed on mobile, it is important to take of advantage of device hardware, and to be as native as possible. That is why OpenFL allows direct access to device features using extensions, why OpenFL makes it possible to target iOS, Android and BlackBerry as fully native applications, and to accelerate the Flash API using OpenGL for a fast, productive development environment.

OpenFL can also target JavaScript directly, thanks to the Haxe Toolkit that powers the platform. Today, users of OpenFL can target HTML5 or the beta support for Emscripten and WebGL, while supporting the Flash Player runtime, for flexibility when providing content for the web.

OpenFL is free, hosted on Github under the permissive MIT open-source license. We invite to join as we build the best 2D development platform for the next 5-10 years.

Though Flash is a popular API, we believe in allowing the community to innovate in new ways to build games and applications. That is why OpenFL seeks to also provide an open platform, including OpenGLView, an accelerated way to build content for Windows, Mac, Linux, iOS, Android, BlackBerry and HTML5 using the WebGL API.


Elsewhere in the comments he says:


NME is going to become a "native media engine" that can enable Haxe frameworks to run on native platforms. It is used as an internal dependency for openfl-native


On one handed, this could be simply looked at as a rebranding of sorts of the NME project as well as a port to the (just released) Haxe 3 language.  That said, I personally think its a really stupid move.


Moving closer to the Flash branding seems… dumb.  Perhaps I am in the minority in that my interest in NME had nothing to do with it's Flash roots ( I have zero prior Flash experience ).  To say nothing of the fact the Flash brand isn't exactly thriving at the moment.  With some people it's an outright swear word!  Another thing I really didn't like about the above comment was:

and HTML5 using the WebGL API.


Suddenly it sounds like the HTML5 target just became HTML supporting WebGL.  Basically meaning Internet Explorer and 95% of mobile browsers just got dropped from the supported list.


Back to OpenFL and NME, even if it is a simple rebrand, that has dire side effects, especially as many of the library names are being changed.  Suddenly there isn't just one place to go for information, or one source of documentation.  Now you have the NME version and the OpenFL version.  If it is not just a simple rebrand, that is even worse.  I love shiny and new, but no way in hell I am going to start a new project on such a bleeding edge technology, especially coupled with the fact it is also tied to a new Haxe version.  As we have seen with Lua and Python, new versions don't always take!


So why not simply use Haxe/NME as it exists today?  Well frankly, one of the biggest downsides to NME was the bugs that crop up.  I encountered a couple during my evaluation and often this would have been a deal breaker.  That said, the NME folks moved fast, released fixes often the same day, so I had faith that any problems I might have encountered would be quickly fixed.  Now that NME support is "taking a back seat", I no longer have that confidence.


Don't get me wrong, I am not saying OpenFL is a bad thing, it's really too early to tell that.  In a few months/years time, OpenFL might be vastly superior to NME.  That said, I can't hitch my boat to a technology that is that young, nor can I hitch my boat to a technology that has been basically retired.  Maybe for my next project I will be able to use Haxe and NME…. er OpenFL.  Just not today.


Guess it's time to take a closer look at libGDX?

News, Programming

Application design tools… what do you use?

3. June 2013


As I am just starting out on a new game these days, I am in the most wishy-washy stage of development, design.  Over the years, the way I went about designing an application has changed greatly as technology, my team size and frankly, me, have changed.  Now that I work mostly alone I find I am a lot less formal than I used to be.


In the ancient days, I ignored design completely, or used a spiral bound binder and a pencil.  On my last large scale project I worked mostly in Visio for object design and program flow modelling.  For idea capture and design documents, OneNote was my loyal ally.  If you find yourself working using a paper and pencil most often, you should check out OneNote, it is probably the greatest application Microsoft make and I say that without hyperbole.  It is an under-exposed and under-appreciated application.  Whenever I see websites comparing Evernote or Google Keep I laugh and laugh and laugh.  Those two programs aren't in the same league as OneNote.  That said, the OneNote mobile offerings, at least on iOS and Android are pretty terrible and the web version is only ok.  The application version though, its just great. 


That said, this combination of applications has definite limits.  These days I am working more commonly across platforms, splitting my time about 50/50 between MacOS and Windows.  Unfortunately Mac Office doesn't include OneNote and Visio isn't available either.  Also, I am no longer part of MSDN and Visio is stupidly expensive.  The other major change is the rise of tablets.  I find myself on mobile much more often now, either the iPad or my Galaxy Note ( which you can pry from my cold dead hands! ).  So, if I am out and about and an idea comes to me, its nice to just whip out my phone or tablet, which are on instantly, jot the idea down and move on.  Additionally, I find touch a much nicer interface when working on a fluid design.


One of the flaws of working with code modelling software is it is often too advanced for me.  I don't need it to validate my class design, I am not working in a team or with contractors, so I don't need it to create formal design documents or strictly defined interfaces.  At the end of the day I generally just like to enter a class name and description, then model relationships between other classes.  That or create flow charts that illustrate user or application flow.  Visio can do this, but it is massive overkill.  Enter the mind map.


In my life, I always had a bit of a mental block towards this kind of software…  I don't really know why, but I never really looked into it closer and I regret that, as mind mapping is basically what I've needed all along.  Essentially mind mapping is just a diagramming software that models relationships.  That's about it and exactly what I am looking for.  There are reams of mind mapping applications out there, from downloadable applications to web services, from free to very expensive.  If you want to try one out free, you can try FreeMind or XMind to get started.  If you haven't tried one yet, you really should.


Myself, I am using a combination of applications for program design.  My design documents and "raw text dump" application of choice is still OneNote.  I vastly prefer authoring in the full application in Windows, but the web application and mobile apps work in a pinch, at least for reading.  On iPad I use iThoughtsHD, which you can see in action below:


I haven't found a mind map application that works well on my Note, but I've also barely looked.  I like iThoughtsHD because it's quick, intuitive and supports the functionality I need. On top, it is compatible with most other Mindmap applications including FreeMind and Xmind that I mentioned earlier.  So I can design on the go, then open on my desktop on any platform.  Truth is though, I vastly prefer working on the tablet, it is just such an intuitive format for this kind of work.


If there is any interest, I will go into a bit more detail on Mind mapping and iThoughtsHD for game design.  I know this is a topic that isn't generally discussed very often, although that could be because people find it boring! ;)


So, that's what I use these days to design my applications ( and other projects ).  What do you use?


LibGDX supporting RoboVM backend

31. May 2013


LibGDX has just added preliminary support for RoboVM, which is essentially a Java runtime for iOS among other things.  Previously LibGDX required a Xamrin (300$) license if you wanted to target iOS, so this is a nice step.  In their words:


I started working on the libgdx RoboVM backend yesterday. RoboVM is an ahead-of-time compiler for JVM bytecode, that targets iOS. It’s completely free for commercial usage, supports the entire JRE (through Android’s runtime class library), has super easy integration with Eclipse and soon Maven, and is all-around fantastics. Development is really fast, compile times are in the seconds range for the simulator (once the JRE has been compiled).

I’m doing this mostly because i want to offer a free alternative for the Xamarin/Monotouch based backend. Xamarin has been super supportive of our efforts in the past, but there are some technical hurdles that we can’t seem to overcome, e.g full JRE support, JNI performance, high compile times etc.

I got all our demo games to work in an hour. Niklas Therning, the guy behind RoboVM, supplied us with an initial RoboVM backend. I had to fix up a minor issues with ApplicationListener initialization order, and things just started to work.

It’s still early days. There’s a lot that needs to be done, but i have high hopes that this will become our new defacto iOS backend.

What’s currently missing in the backend:

  • touch coords are incorrect
  • no audio yet
  • Preferences are broken
  • some missing implementations

What’s currently missing in RoboVM:

  • Debugging
  • More optimizations. Performance seems to be good enough already, JNI calls seem to be a lot cheaper than with IKVM/Monotouch. I’m not sure if RoboVM uses LLVM’s full optimization pipeline yet.
  • A few bugs here and there, which we want to help to discover. RoboVM is tested against Android’s class library test suite, and pretty much all the tests pass.


You can read the entire post here.  It’s still pretty early, and as you can see there are still some issues, but its certainly a step in the right direction.


Corona, please stop annoying the hell out of me!

29. May 2013

So, some time back I took a look at all the various different Lua game engines and at the time one of the biggest strikes against Corona compared to it's competition was it's price.  However, about a month ago, Corona announced Starter Edition, a completely free ( non-trial ) version!  So I decided to give Corona a closer look today and my god is it annoying the hell out of me!


I am using Zero Brain studio and Sublime Text for development and both result in a simulator reload when you run your code, which in turn results in:



Worse, the window doesn't even draw focus, so you have to tab over to it and click Continue before it will run the simulator.  It may seem like a minor annoyance, but trust me, within about 10 minutes I was ready to smash my computer.  The first time I thought, oh… that's why my app didn't load.  The second I got a little annoyed… after the 10th time seeing that message… well, I wrote this post.


Of course, I could just keep the simulator running, and instead of running from the editor, do a CMD+R to reload the app but this has a couple downsides.  First, this means I need to keep the simulator running and it's a battery sucking application and I'm on an unplugged laptop ( and normally this is the case ).  Second, well, it's an annoying process.


Fortunately I found this thread:


Hi @kodewulf,

Yes, we're aware of it, and we realize that it's somewhat obtrusive, especially if you build frequently. We intend to change this (to appear less often or something like that) but that must wait until the next public build. That being said, we intend to ramp up the frequency of public builds somewhat, so the wait won't be as long as you might imagine. In the meantime, this must remain "as is", and I apologize for the inconvenience.



Brent Sorrentino


So they appear to be aware of the problem. That said, that post was dated April 19th, so I'm guessing this fix fell off the radar.  Just a heads up if anyone at Corona Labs is listening, this may seem like a minor point, but its annoying enough for me to stop using your product!  Little things that directly impact workflow… especially for no particularly good reason, they just have a way of getting under your skin!

The Sprite Project for the jMonkeyEngine

27. May 2013


In this day and age almost all graphics engines are behind the curtain based on 3D.  It's just the way graphics hardware works, so we now deal with textures instead of pixels  SpriteProjectand sprites.  At the end of the day, almost every single 3D game engine get a 2D sprite engine created on top off it, and now jMonkeyEngine is no exception with the release of The Sprite Project.


In case you have never heard of it, jMonkeyEngine is a complete Java based 3D engine, that is quite mature ( version 3+, over a decade old! ) and completely open source.  The Sprite Project is a 2D sprite engine built over top of it.  Here is a sample application taken from the documentation(pdf link).


package mygame;

import com.jme3.app.SimpleApplication;

public class Main extends SimpleApplication {

static Main app;

public static void main(String[] args) {
  app = new Main();

static SpriteEngine engine = new SpriteEngine();

public void simpleInitApp() {
  Sprite sprite = new Sprite(“Textures / Sprite.png”, “Sprite 1”, assetManager,
    true, true, 9, 1, 0.15f, “Loop”, “Start”);
  SpriteLibrary.l_guiNode = guiNode;
  SpriteLibrary library = new SpriteLibrary(“Library 1”, false);

public void simpleUpdate(float tpf) {

Pretty simple looking eh?

So if you are looking for a 2D sprite library built on top of a great Java 3D engine, you need look no further.

, ,