It’s been an interesting couple of weeks! Basically Gunslugs 2 is feature completed since early last week, and I started porting the code over to iOS.
I talked about this before, but yes I don’t use a 3rd party engine or cross-platform library of any kind so I have to port code manually.
My games all run on my own framework and I have created “copies” of that framework for the various platforms I support. So there is a Java version for Android, an Object-C version for iOS and a HTML5 version for ChromeOS and browser games.
For desktop I use LibGDX (which IS a 3rd party engine) but actually I use it in a silly way where I put my own framework on top of the LibGDX engine – which in it’s own right uses LwJGL, so I might even be able to cut out the LibGDX middle-man? However I like the LibGDX tools, the setup, and for pc/mac it doesn’t really matter having extra code cause the game runs fast enough anyway.
My Framework is basically all the initialization code used to create a runnable file which also handles input, sound setup, graphics setup and has methods for rendering images to the screen.
Since most game logic is 95% copy+paste no matter which language you use, it makes porting a task of only a few days. So Gunslugs 2’s android code was ported and running on iPhone in 3/4 days work. At that point I have to play through the game and make sure I made no porting errors causing monsters to fly in wrong directions, status bar images to show the wrong graphics, and more of that silly stuff where you mistype a digit or two.
Sadly I ran into a huge show-stopper. My last game release was back in April, and since then Apple has released the new iOS 8 development kit.. and in short, it changes some stuff as to how your game has to setup the rendering view and how stuff like screen rotation for landscape/portrait is handled breaking my framework!
So Gunslugs 2 flipped out on iOS8 devices! Rendering only half the screen, or starting in portrait mode while the device was in landscape.. this literally wasted two days with me trying to hunt the problem in my framework code.
Eventually I decided to do a complete re-write of my iOS framework, starting a new project from scratch and adding all the rendering, touch and audio code. I also got some help from pkMinhas who fixed my old framework code and combining that solution with my new framework code gives a very clean and updated codebase for my games. It now builds nicely against the iOS8 development kit, still runs perfect on older (iOS 6) devices, and has a lot less garbage code in it.
My original framework was an evolution of the iOS 3.0 version I created back in 2010 while learning iOS .. so it probably wasn’t the best codebase to start with in the first place ;)
Anyway, the App store closes on December 22nd.. so my target is to have Gunslugs2 approved before it closes, so that I can send out review codes and make sure the game is ready for a January 15th release.. it’s a plan!
Why not use a 3rd party game engine?
Finally a few words on this topic, I know there are tools and libraries out there that handle all the cross-platform stuff so that you don’t have to worry about it or put time into porting. Tools like Unity, LibGDX, Cocos-2d and many more.
The reason I don’t use them is pretty simple in my view: my games are a business, I live from the money they make, so I need to make sure they work. If Apple or Google suddenly decide to change their platform all over again, or add new functionality like they did in the past with controller support, or changing how touch-events are processed, etc. Then I need to make sure my games are updated and keep working.. cause if they fail, I don’t sell them, and I don’t make any money.
Now in many cases the 3rd party tools will update within days to weeks. However sometimes it’s not interesting for them and it takes longer.. at that point I have a problem.
Besides the big platforms like Google Play and Appstore I also provide my games to lesser known platforms or companies. Various companies make tablets for specific things like hotels, or restaurants, or kids in a specific market, etc. In some cases these require changes cause they don’t run the official Android software. Not having to wait for a 3rd party to add support for it means I can get my games on there a lot faster by changing my own framework.
And finally there are always new platforms around the corner. One such platform is ChromeOS of which I’m a big fan, and altho 3rd parties often provide HTML5 support, it’s not exactly the same as ChromeOS requires some changes to support trial-modes and other stuff I can’t mention at this time cause it’s under NDA ;)