I've spent the last few weeks getting my iPhone game up and running on the PC. Several people have seen this as an unnecessary distraction from getting the game finished but it's something I have seen as vital for a very long time now.
Twenty years ago I was playing with a little isometric experiment on the Atari ST. It was a sort of landscape that could be edited by raising and lowering points of the landscape, just sea and grassy looking blocks of land.
I had no idea where it might go next but everyone else got very excited about it. The rest of Bullfrog worked Amigas so we ported my little demo to commodore's machine. As Peter Molyneux turned it into Populous it never lost its ST compatibilty.
We developed the two versions in parallel sending source files through the serial cable that happened to be running between the machines from where we'd been playing Stunt Car Racer.
As it was sitting there we also added a multiplayer game. This forced us to learn several more important lessons as Populous had a lot of state and data structures had to be compatible between the platforms. This should have been very easy as both were 68000 based machines but there were niggling issues.
Debugging the issues that threw the multiplayer game out of sync was one of most useful programming lessons we ever learned.
Most of the games Bullfrog produced from that point on were built for at least two platforms at a time. The benefits were huge, not just the obvious one of getting two versions for the price of one and a bit -- but also the less obvious ones of running the code through very different compiler and forcing intelligent design descisions on code structure.
Later at Lost Toys we took this even further. Both of the games we produced had PC versions with editors and conversion tools built in.
Our first game featured an editor where we could switch from editing to testing the level in under a second, it also optimised all of the data on a per level basis, spitting out a pre-prepared page of video memory ready to load into the ridiculously limited PS1 video RAM.
Anyway, my iPhone game is now running on the PC. The "game" part of the code (as opposed to the cross platform library) has just a few #ifdefs in one file to handle the issues of accelerometer+touch vs mouse+keyboard/joypad (I really must dig out that Wiimote code...) while the underlying library is rather more specialised, the PC version using D3D rather than openGL, which should be very useful if I ever find myself porting it to certain other platforms.Now all I need to do is write that level editor in the PC version and get it spitting out iPhone ready level data. That way I'll be able to start refering to my graphic demo as a game.