Trial and Epic Fail

Ventures of an indie game developer

Last game of the year

I made the Fire Power prototype to ship with Trabant. It came out pretty good with driving, shooting and auto aiming. As a testament to the fantastic API, I can mention that I had to add a single line of code to add a "soft joystick" for touch controls. Yep. One single line.

It looks awful. I'm thinking perhaps adding a noise texture could make things less bad both here and in the Minecraft prototype and perhaps some of the others. This is the last prototype I'm making before shipping.

I bought the new Cities: Skylines by Finnish developer Colossal Order. It behaves like the good ol' Sim City, and with same shortage of cash. There are a bunch of bugs, for instance I had to fight crash bugs in the default settings, but if you get over those it's very impressive. When it comes to gamedevs I prefer companies who ship fantastic things not quite finished yet, rather than companies that try to polish their turds and hardly get them out the door.

Oh long tooling

I'd forgotten about the cat of all cats, but thankfully a colleague reminded me:

Ah... can't stop watching...

Today I'll hopefully finish off the last boogs in iOS 8 rotation and UIViewController pushing/popping. One thing that bugs me is that Apple has broken layout compatibility every iOS version. Sure I'm probably doing it wrong according to Apple, but that doesn't mean I'm doing it wrong. I've finally started to appreciate the humongous work Microsoft put into compatibility over the years. Thank you Microsoft, I never understood how good you were at compatibility and I'm sorry I never gave you the recognition. Apple, however, made it their business philosophy to break compatibility. It ensures customers will have to upgrade hardware on a regular basis.

Alienating your developer community is however a very dumb move. Very. The reason is not that developers will change platform immediately. The reason is that you'll open your developer's eyes to new possibilities. And when the next shiny thing comes along, they'll move along. In fact, I now that I think about it, that's probably the main reason Microsoft Windows still has so many developers despite the criticism over the years due to of lack of features, low performance, high prices and high power consumption. Fifteen-year-old proprietary, closed-source, well-written applications for Win32 still often just work. That, of course, is absolutely not the case on Mac and Linux.

Incompatibilities aside, today's the day I'll fix all the bugs. Remains a couple of smallish features and I'm done with the iOS program. Then it's the icon, the splash screen and the App Store review. This is the first time I dread the App Store review, since I both love this software (the previous games I hated) and I feel that the code synchronization feature is a bit of a stretch for Apple's fucking guidelines. For Windows mostly packaging remains: I'll bundle Python 3.4 (32-bit), the IDE, the simulator, some examples, the Python API, etc. For Mac I'm leaning towards not bundling at all, perhaps not even releasing the IDE. At least for the first release, and since world-wide Mac market share is only 8% of Windows' that might not be an issue anyway. Not sure how well operating system market shares translates to game developer operating system usage though.

For the first time in my life it feels really, really good to finish v1.0 a piece of software. I'm proud of it, and I feel very happy and lucky. Ahhh... Should've gone into tooling a long time ago?

Rotating the excavator

Added an outline rendering mode which kinda works. Haven't tested it on iOS yet, but it's using GL_LINES instead of rendering backfacing-only polys in glPolygonMode with GL_LINE should do the trick. I hope.

I also built a poor imitation the city scene from Limbo. In Maya. Exported that as ASCII, copied the vertices and triangles and saved as Trabant Python source. The mesh alone was 368 LoC. Added some smoke from the chimney and some space ships.

This is absolutely not what people should buy Trabant for, but it might lure some people in.

Only big thing remaining now is to fix iOS UIViewController rotation for the secondary UIWindow. But tomorrow I'm renting a real excavator again. That be fine toy for man, ugh!

IDE synchronization done

So the sync is now done and integrated with the IDE:

My main concern now is getting Apple to approve it. Apart from that I need to add a rendering mode in iOS (making it look less crappy) and also get the orientation in my simulation UIWindow working (for some reason only the root window's rotation is handled). Not far off now.

Sync protocol done

File synchronization with the device is working! Awesome! All I need to to now to complete it is to add a dialog to the editor on the computer and some plumbing there.

Perhaps I should make some more type of Python tools for iOS later on - this is fun!

Mad men

The intentional, horrific crash of 4U 9525 might be a combined suicide and mass murder, but might also not.

The crash has a few things in common with the disappearance of MH370 one year ago:
  • no distress signal,
  • unresponsive crew,
  • no indication of foul play,
  • seemingly sensible pilots.
However much more likely you think the scenario of Andreas Lubitz purposefully killing everyone aboard is, one should at least consider alternative theories. Especially when theories are as bad as that of MH370.

The Australian Transport Safety Bureau's "best fit" theory for MH370's disappearance is gradual hypoxia, which is a pretty lousy fit as the plane was still airborne 6 hours and 58 minutes after last transponder contact. So they're saying both pilots remained unconscious during the remaining 7 hours of the flight without waking up. Some even think the plane was flying very low for some time, which would rule out unconsciousness from oxygen deprivation.

Curiously the believed MH370 flight path is nearly exactly opposite the planned route.

At least plane-wide hypoxia is ruled out for 4U 9525. What else? The possibility of cyber crime is unlikely in the case of MH370 and near impossible in the case of 4U 9525.

But did they ever consider hysteria (whatever that might be)? Or possibly mass hysteria in the case of MH370. Just read for yourselves, in some of these events thousands of people go ballistic!

Is it plausible that hysteria caused this? I think so. To me it actually sounds more plausible than a man rehabilitated from a previous depression some years back awaiting impending doom for 10 minutes without uttering a single word as his colleague and flight control tries to get him to respond.

My theory is easily refuted in the next few days if German police finds Herr Lubitz' poetry with a death wish or fanatical religious writings. But if not I unfortunately expect crashes to become more commonplace, and disappearances too.

Mass hysteria in different forms is slowly growing in this world of ours, no question about that. The question is what to do about it. I think I have a clue. Do you?

Homebrew FTP server

I had yet another shortage of internetz in the last few weeks, the ISP fucked up, which resulted in me having to reinvent the 3-way merge wheel instead of just using something complete and tested. The algorithm was a lot more complicated than I had anticipated and I had to rewrite it once to get it working. The final version is 126 lines of Python and works for most corner cases.

I also thought I would be making some type of 2-way merge. Anybody who has ever thought about these things quickly realize that there is no such thing. During merge/synchronization I need to keep three versions of the file: base, mine and theirs. Pretty much the same was as any versioning system I guess.

On the device side I need some type of FTP server. I don't want actual FTP, I just need to list files and transfer contents. Those things are just too easy in Python, so I built a prototype in 36 lines of server code and as many minutes. The client will probably run in Python (started from the computer IDE), but when done I'll just re-implement the server code in C++ for the iOS device.

I've tried to come up with good ways to:
  • synchronize sources without losing time, and
  • handle merge conflicts
but failed in both respects. I don't want to wait for complete "repository" synchronization to complete before running the application, but on the other hand I don't want to risk not having the source on the device when you run off with your cell. My solution is to use two key bindings: F6 = run + synchronize in background; F7 = synchronize + run.

Regarding the conflicts I'll simply synchronize them to the device, and if they're resolved on either end the next synchronization will remove the conflict. I suppose the corresponding thing in git would be to actually check in the conflicts, but since it really simplifies usability I'm content with that.

The components and overall architecture is pretty broad and interesting to build. Soon the basics are done and Trabant goes to beta.

Editor + versioning + merging + "FTP" + remote exec + Python + API
Great multi-platform prototyping IDE!

About the author

Min bilder
Gothenburg, Sweden