Andy's Fun House


Weekend Projects Gone Awry, Part 2


The Idea: Outmoded

A friend visited me recently in Boston, and while we were being typical lazy gentlemen, the prospect of developing a game together at this year’s Global Game Jam (GGJ) surfaced. Though lately I’ve found it hard to be interested in anything to do with games or game development, but we agreed we’d like to make something without “graphics” that simply ran in the console. And so it was, that I created a project called “Outmoded.”



The first revision of Outmoded was done over two days while at the Barker Engineering Library in MIT. I chose C# so that I could finish the work in a few hours, and I’d estimate a total effort of about 5 hours was put into the project. The system worked within acceptable constraints and only had problems if you found yourself clearing the entire screen repeatedly for animation effects.

However, as the GGJ drew gloser, Alex asked if it wouldn’t be more performant to build the system in C++. Anyone who knows me well knows that I have an addictive relationship with C++, so ultimately it took very little for him to convince me this was the obviously correct path for the project. I created an experimental branch, scrapped the code, and got to work.

Over a couple work sessions I rewrote everything and had a simplistic proof of concept working on both Windows and certain flavors of Linux/BSD/OSX.


Tech Notes

As it turns out, moving to C++ was potentially a final nail in the coffin for the GGJ collaboration. Though I got to relearn things I hadn’t used in well over a decade (potentially closer to 15 years), makefiles were never a strong suit and OS X appears to have some fascinating ideas on development, which is no surprise to anyone who has used XCode. Also, there was a lot of struggling with Clang as the compiler on Linux, eventually forcing me to revert to g++ in order to get the makefile working.

This was excellent practice for some upcoming cross-platform C++ work I’ll be doing before the summer, and I’ll be very thankful for the rust removal this work provided. There’s a very obvious advantage for using Windows as a development environment, I was much more productive/effective there than on Linux.


Conclusion & Reveal

The GGJ theme, “Ritual”, seemed like a great opportunity to build an interesting yet simple game, but the fatigue of debugging the engine’s production proved too much of a negative for some of the team. Thus we have opted to bury the project and explore other avenues. What does that mean for Outmoded? Not much, frankly. I’ll probably fix the remaining bugs if they aren’t too troublesome and maybe add a frame feature, but I’ve gone well past the amount of time I intended to pour into this trivial thing.


- Andy


Small Automations

I've been doing a lot of work recently with Marmalade on some mobile applications. In the process, I've slowly fallen out of love with the build process that Marmalade provides, mostly as a result of the signing process required to publish iOS builds. I won't weigh in on where the blame should rest for this ire of productivity, but I might as well share one of the tiny things I did to make things go ever-so-slightly faster.

We use TestFlight internally for build test distribution, so the process for distributing each build to the testers looks thus:

  1. Write code, watch code fail, fix code
  2. Test locally with emulator and USB connected devices
  3. Build on GCC ARM Release to launch the Marmalade Deployment Tool and package for both iOS and Android
  4. Launch Marmalade iPhone Re-Signer to Re-Sign the IPA for your selected provisioning profile
  5. Remember you have to move the base certificates into the deployment folder when the Re-Signer tells you it failed
  6. Let loose mumble of vulgarity OR Pull out small patch of hair to imprint that this is bad behavior
  7. Find the certificates and copy them to the deployment folder with the IPA
  8. Run Re-Signer again
  9. Upload builds to TestFlight

The process isn't hard, by any reckoning, but there were...undesired consequences for some of the team members.

You'd think he'd have learned eventually...

You'd think he'd have learned eventually...


Obviously, something had to change. I weighed my options quickly and simply created a BATCH file to take care of launching the iPhone Re-Signer. Instead of simply launching it, the BATCH attempts to copy the required certificates into the deployment folder before launch. I haven't had a chance to make it configurable for multiple projects, but I'll just update the code here whenever I do have that time. Hope it helps someone!


cd \Tattoo\Clients\PlateShare\Apps\PlateShare\build_plateshare_vc11\deployments\iPhone\iphone\release

mkdir certificates
cd certificates

xcopy "D:\Marmalade\6.3\s3e\deploy\plugins\iphone\certificates\Apple Root CA.cer" /y
xcopy "D:\Marmalade\6.3\s3e\deploy\plugins\iphone\certificates\AppleWWDRCA.cer" /y
xcopy "D:\Marmalade\6.3\s3e\deploy\plugins\iphone\certificates\developer_identity.cer" /y
xcopy "D:\Marmalade\6.3\s3e\deploy\plugins\iphone\certificates\developer_identity.key" /y
xcopy "D:\Marmalade\6.3\s3e\deploy\plugins\iphone\certificates\distribution_identity.cer" /y
xcopy "D:\Marmalade\6.3\s3e\deploy\plugins\iphone\certificates\distribution_identity.key" /y

start D:\Marmalade\6.3\tools\IPhoneSigner\IPhoneSigner.exe


- Andy