Thursday, March 22, 2012

My very brief overview of developing for Android

Hello! Recently I was looking at developing for Android and I thought it might to helpful to share my experiences. It's a show down of Corona vs Unity vs Coco2s-x vs Adobe Air.

I had my mobile game idea and I prototyped it in Love2d in an afternoon. Love2d is a pretty good little 2d engine with a lua scripting layer. Then I wanted to port it to android add some webservices and stuff, maybe some in app transactions. My aims were / are rapid development and publishing.

I'm on a Galaxy S phone.


This is the first middleware I tried, I picked it because it was also using Lua.

The bads
  • 400ish dollars a year
  • You send your code to their servers to compile!
  • Documentation is out of date
  • The company goes down - your code is useless
  • The servers go down - you can't compile or publish
  • Debugging is poor
  • The emulator doesn't act the same actual hardware :(
  • Poor choice of memory model for Lua means really easy memory leaks. This probably due to being overly influenced by flash. 
  • (No 3d - but I don't really care about this!)
The Goods
  • Lua!
  • I ported my game in an afternoon
  • Lots of features
  • Cross platform
  • Regularly updated
  • Reasonably active community
  • Simple and easy to iterate with the emulator.
  • Easy to publish.
Why I gave up

My (very very simple) program worked fine in the emulator but after 3 play throughs of my game on the device it started to get visual artifacts.

No idea how to debug this issue and I suspect it was below my lua-code in the big scene graph that is Corona's rendering engine. I checked I had no memory leaks - which I didn't so not really sure how to solve it. I couldn't find a work around and I didn't want to waste time creating a nice error case app for the developers - I don't have the time to do it, it's a very simple program and if I'm having trouble here I know I'll have trouble with bigger projects.


At the time of testing Unity were giving out free mobile licenses so I thought - sure why not! I don't think I gave it a good shake though.

The bads
  • No easy 2d
  • Setting up a 2d scene in Unity's visual editor is tedious
  • To much exploring menus and not enough getting things done
The goods
  • It's Unity - visual editor, nice languages, massive community
  • Very visual, you can see in real time how your scene exists
I gave up after my 2d button was scaling it's width and height on the x and z axis. My canvas axis were also incorrect and I couldn't be bother to fix it by manually rotating things around. Too much setup faff. I also felt pretty confident the later stuff I'd want (in app purchases) would require an expensive license.


Next up - a library that runs on the Android using the Native Development Kit (NDK). This a little more to the bones.

The bads
  • Eclipse, I heard it had become better in the last 10 years but it's still terrible. An IDE abomination; everyone involved with  Eclipse should feel a deep personal shame, you're actively making the world a worst place. (see this blog post from 2007 "Is it me or is Eclipse a piece of shit?" and the many comments still coming in to this day, each with their own separate horror story)
  • Cygwin, gbd, logcat, you all suck
    • I'm a games developer 80% of us, use Visual C++ don't throw us back into this 80s unix terminal world!
    • The Unix world of "Oh you want to do A? Well first you need to do B?", "Oh you want to do B? Well first you need to do C!", "Oh you want to do C? Well first you need to recompile D which won't work for your system so you'll need to do E but E requires tool G, sorry that's tool G version 1.323 you have G 1.34. Yes G can only be built from source, yes you'll need dependencies F.1 to F.6d to build it." And so on until you want to smash something. 
    • I had to root my phone because Samsung put a file in a different place than is standard
      • It was incredibly hard to find that this was the source of my problems
    • Did I mention Eclipse?
    • The common suggestion is use Linux or a virtual machine running Ubuntu. I tried Ubuntu, I tried cygwin they both but it's stepping into a entire development ecosystem I don't know (it's something I should learn though).
  • None of this is actually about Coco2ds-x yet let's start
    • Poor documentation - 5 or 6 vastly different quickstart pages linked from the wiki, none of which work
    • Many, many makefiles, script and templates and general cruft
    • The Hello World app works but the source files never seem to be in my eclipse project
    • There's a Lua project ... but printing out _G hard crashes my phone
    • It's C++ so build times suck (Actually it's worse it's a C++ with a Java bridge)
    • It's a Chinese project - which is cool but the forum support sometimes seems more like a riddle than actually help.
The goods
  • Close to the metal so easy to add extra libraries
  • Fast (probably)
  • Games have been made in it

I made a button appear on screen with the Lua project but printing out the _G would hard crash my phone and I couldn't get it to go in portrait mode. The best  I could do was get a portrait screen in the middle of landscape layout - very squashed. 

Adobe Air

This is where I am now.

The bads
  • It's Flash, so actionscript, why did you look at C++ and think "Me too"!
    • Hex values for colours? What were you thinking here? Wasn't flash aimed at non-programmers?
  • The whole touch interface doesn't really work as advertised for my phone
  • The convert mouse to touch doesn't seem to work at all for the emulator.
The goods
  • Flashdevelop is a one click install that lets you immediately develop on the phone
  • It has an emulator
  • It's easy to launch to the device (though I've yet to get remote debugging working)
  • Code complete, break points all those good modern IDE features
  • Cross platform
So it's looking like Flash is winning at the moment. Though I haven't ported in a day because I'm finding Flash a bit unfamiliar I thought it was untyped and garbage collected and maybe it was once but it seems to be one of the languages that's had a million and one things bolted on. I haven't taken the time to understand it's scene graph so I'm just kind of winging it and hoping I'm not memory leaking to hell or doing very inefficent things. 


Flash wins - if you want to make a game today download FlashDevelop. I'm not Flash's biggest fan but it seems the best way to do Android development. 

Secretly I think the very best way to do Android development is this 3 step process.
  1. Buy a Mac
  2. Write a game using Coco2d
  3. If the game does well, pay someone else to port it to Android.
Job done.

Friday, March 02, 2012

Video Chat about Making Adventure Games Ron Gilbert - Monkey Island, Indiana Jones and the Last Crusade

Did I say "fraud" I meant "opportunity"
Here's some random notes:

  What are the most common problems adventure games have?

  •  Given the key before you see the locked door.
  •  Completely ridiculous solutions that would have only come through trial and error. 
  • A solution the inventor hasn't thought of, or a perfectly legitimate reordering of steps that isn't accepted.
  •  Testing is important. 
  • What I learnt on Monkey Island was more than three lines of dialog is a bad idea. 

Why did adventure game die?

I don't think they died. I think they're just as popular as they ever were but other games have over taken them in popularity.

Is it that modern gamers don't have the patient for adventure games? When I play adventure games it's about quiet contemplation. I think a lot of the puzzle solving for adventure games happens when you're not at the computer.

 In most development environments it's not considered okay to be stuck in a game.

The internet is an always available hint book - does that take some of the enjoyment out of the game. (Dan: I think so) Adventure games have purposeful backtracking. It's a fine line between frustrating confusion and entertaining confusion.

  What makes adventure games good?

 There's more than one puzzle that you can work on at any one time. That way you're not totally stuck and have other puzzles to work on.

As you progress and go to new puzzles previous people you've met should have updated dialog with more hints for the current situation.

Screen writers from Hollywood don't transition into games well. There's a real trick to writing interactive dialog - it's not writing cutscenes. The dialog in Monkey are the good - you're really interacting with these people. You feel like you're have a conversation. When we put up four lines for Guybrush that was an opportunity to put up four jokes that the user could read at once. People who write dialog should be programmers - or at least have programmed. So they know how to wire it up.

Think about the character and the puzzle and story at the same time. Part of really good design is being able to quickly iterate. The ability to go in and change things and see the changes.

 Full Throttle has 20 main puzzles. For Grim Fandango aimed for 40. Monkey Island budget was $130,000.

What's you favourite puzzle?

 It's the grog puzzles where you have to transfer the grog from cup to cup before it's melts the container.

  On thing I would never do in an adventure game. Pixel hunting. Just waving the cursor from top to bottom of the screen for a 4x4 pixel area.

Dan : A lot of the talk centers on Limbo which means I should check it out!