Iridescence mobile development update

When I was at the Boston Festival of Indie Games with Iridescence, I’d tell anyone who asked about the mobile versions that they were about two or three weeks out. At the time I had every reason to believe that to be the case, but it turned out to be a little more complicated than I had anticipated.

This will be a moderately technical post, so the short version: Iridescence is still coming out on mobile devices (iOS, Android, and even Windows 8 phones), but it won’t be as soon as I had hoped.

Now onto the technical side of things.

Iridescence is written in Haxe, which is a language that aims to act as an intermediary between platforms. Instead of writing C++ for desktop platforms, Java for Android, Objective C for iOS, and C# for Windows phone, Haxe allows you to write in one language for all platforms, translating itself into the one that’s best supported by each target. On top of Haxe comes OpenFL, a framework that mimics the Flash API but has support for OpenGL and runs as a native application. A single codebase, a familiar API, and great performance? Almost sounds too good to be true.

It is.

A week before launch, I plugged in my Android tablet to get a build running. It had been my intention to have a tablet on the exhibition table so people could see the game running on a variety of platforms. I’d had it working in the past without any issues and without having to change a single line of code, so I expected it to be uneventful.

It wasn't.

It wasn’t.

I’m at a total loss to explain what’s going on. At first I thought it was just a matter of the renderer acting up, but the music doesn’t start either. Worse, I get this same behavior if the app is entirely empty. Other games work just fine, so it’s not a problem with the device. On my friend’s brand new Moto X nothing displays at all, so it’s not a matter of the tablet being below required specifications.

I’ve spoken to the OpenFL community and development team to no avail. A new beta version of the framework came out and had the same problem. Worst of all, I tried to roll back to an earlier version that had worked before and I couldn’t even compile. The OpenFL ecosystem is in a constant state of flux, with new build toolchains and dependencies popping up seemingly every time it updates, and the older (working) versions weren’t compatible with the new tools.

At this point it was time to start considering my options.

  • I could hunker down, wait for another OpenFL release, and hope that it would solve my problems.
  • Or I could bite the bullet and port the whole game back to C# (the language I wrote the original gamejam version in) and use Unity.

I’m choosing Unity. I’ll be using the Futile framework, partially because the API is Flash-inspired and will be easier to translate code between, but mainly because it’s a fully code-oriented workflow and only has support for 2D. When I first started working on the improved version of Iridescence Unity still didn’t have support for Linux and doing 2D work was a hassle. Not so any more. When I’m finished, this version will replace the current Windows/Mac/Linux Haxe-based one.

It’ll be a tough road but I’m ready to do what it takes. I leave you with the first step.

long road

  • hopewise

    What version of openfl that hurted you? Is it next?

    • Yes; the 2.1 beta both with and without the “next” flag.

    • Yes; the 2.1 beta. The “next” flag makes no difference for me.

      • hopewise

        Here is my stack, it works perfectly to me, try to set the selected version of each library: (of course ignore my dev libraries :-) )

        C:UsersSam>haxelib list

        actuate: 1.7.0 1.7.1 1.7.2 1.7.3 [1.7.5]

        assetsmanager: [1.0.0]

        cereal: [0.0.4]

        extensionkit: [dev:C:UsersSamDocumentsGitHubextensionkit]

        format: 3.0.4 [3.0.5]

        HardwareInfo: [dev:D:GitHubdcaclabclientextensiontest]

        haxelib_client: 3.1.0-rc.3 [3.1.0-rc.4]

        haxeui: [1.4.14]

        help:

        hscript: [2.0.1]

        hxcpp: 3.0.2 3.1.22 3.1.37 [3.1.39]

        hxlibc: 1.0.0 1.1.3 [1.1.4]

        hxssl: 3.0.0-alpha [dev:C:Motion-Twinhaxelibhxssl3,0,0-alpha]

        hxtools: [1.1.6]

        lime-tools: 1.2.5 1.2.7 1.3.2 1.5.4 [1.5.6]

        lime: 0.9.1 0.9.2 0.9.6 [1.0.0]

        mlib: [2.0.2]

        msignal: [1.2.2]

        openfl-html5-dom: 1.1.1 1.2.0 1.2.1 [1.2.2]

        openfl-html5: 1.1.0-beta [1.4.2-beta]

        openfl-native: 1.1.4 1.2.1 1.2.2 1.3.0 [1.4.0]

        openfl-samples: 1.1.0 1.2.0 1.2.1 [1.3.0]

        openfl: 1.1.1 1.2.1 1.2.2 1.3.0 [2.0.0] 2.0.1

        OpenFLDialog: [dev:C:UsersSamDocumentsGitHubOpenFLDialog]

        polygonal-core: [1.0.4]

        polygonal-ds: [1.4.1]

        polygonal-gl: [1.0.4]

        polygonal-motor: [0.2.0]

        polygonal-printf: [1.0.2-beta]

        pubnubExtenion: [dev:C:UsersSamDocumentsGitHubpubnubExtenion]

        random: [1.4.0]

        rox-i18n: [1.0.0]

        stablexui: 1.0.15 1.0.16 [1.0.17]

        svg: 1.0.7 [1.0.8]

        swf: 1.0.2 1.1.1 1.2.1 1.4.1 [1.5.2]

        systools: [1.1.0]

        test:

        unifill: [0.1.1]

        • I appreciate the attempt to help, but I’ve done all this already. I’m already in the process of porting to Futile.

          • hopewise

            Good luck, any way, my advice is to avoid early adoption of new releases, specially when working on production project ..

          • I’m between a rock and a hard place here, though. The older releases were broken in some ways, and the new ones in others. Ideally I wouldn’t have had to update at all from the very beginning of the project, but that simply wasn’t possible.

  • Guntur Sarwohadi

    Sorry to hear this. This got me worried now since I’m working with OpenFL as well. So basically OpenFL builds to android, but after testing at several devices, some (or most?) didn’t even run at all?

    • I did actually end up fixing it, so I’ll be posting about the problem in more detail shortly. The quick version is that performing certain filesystem operations (need to narrow down which ones) can put the app into a weird state like I showed above. I will probably end up using OpenFL for the mobile version after all, barring any other serious issues.

      • Guntur Sarwohadi

        Wow, good news :). Awesome, looking forward on the post about the fix! Thanks :)