Category Archives: Proton SDK

Relating to my C++ mobile focused open source cross platform development framework

Dink Smallwood HD on iPhone/iPad finally gets full DMOD support!

Yep, it’s finally happened, the HD versions of Dink across all platforms (as of today, even iOS) now have full DMOD (user level add-on) support.  This means you can enter any .dmod url (here’s a list from the Dink Network, you can use cut and paste from the phone’s browser) and it will install and play it with its built in front-end!

So that’s like 300 more zany quests/stories/weird to play, you will NEVER get bored again.

Dink HD Audio patch (well, DMOD) released for Android

I made a few sacrifices to keep the download size smaller for the Android version of Dink – but with some prodding finally got around to providing the entire CD soundtrack.

It also includes the classic Dink start/continue screen with those funky animated arrows.

How to install

From the main menu of Dink (you DID buy it from the Android Market, right?!) click Add-ons, then browse, then locate the Dink HD Audio patch and tap install.  If your Android device has trouble playing midi correctly, you should grab the Dink HD Audio Patch Plus which converts ALL .midi files to .ogg counterparts.

Non-android Dink versions won’t show these DMODs as download options.

Special thanks to James Leaver for the prodding and handling the midi->ogg conversions.

What about saved games?

The catch – to experience aural additions you have to play the newly installed DMOD, not the main game from the main menu.  If you’d like to move existing save games over there, you’ll need to copy your save game data from the main Dink user data directory of your SD card into the dmod/hdaudio part.  Hey, you’re an Android user, you’ll know how to do that.

Dev Journal: Tank combat meets Mario Kart?

New game project!

So I’m sort of working on a new cross-platform game. The basic idea is “local splitscreen/networked multiplayer tank combat with easy touch control that’s fun for me and my kid”.

Basic movement. Ugly as hell but hey, four players!

I spent a lot of time getting really flexible split-screen support in. I can add as many local players as I want. In addition to specifying the window size, I can specify their rotation. Touch controls smartly adjust.

A real physics engine?

The irrBullet hello example running on an iPad. Man, what is with that floor texture!

Hey, how about real physics for the tank movement? Let’s integrate Bullet (with some wrapper help from irrBullet)

I had a feeling I wasn’t going to end up using it because of speed and networking issues, so this was mostly a for fun side diversion and practice.

Ran IrrBullet’s Hello World example on the iPad and the Nexus One (Android). Decent speeds, especially on iPad.

Plugged it in for the tank physics. The only way I could get reasonable tank-like movement was to use eight “raycast wheels” per tank.

It turned out quite computationally expensive and I could see it was going to take approximately four hundred years of tweaking to get player controls to feel “right”. Screw this.

So I dumped Bullet and decided to just do my usual homegrown cheapo physics. Not as good, but easier to tweak and runs fast. Looking forward to using Bullet in the future for something though.

Making a test level with lightmaps

A crappy test level is created in Max. I use “Point helpers” to mark the position and rotation of spawn points. Easier to see in max than dummies.

I use max’s “render lightmaps to a texture in an intelligent way and apply the texturing to the second map channel automatically” feature.

Real tank models and basic combat

Tanks can now smoke and blow eachother up.

More progress:

  • Tank models licensed from from Mighty Vertex
  • Functional health bar
  • Tank shadows
  • Reaction physics when shooting/being shot
  • Crash sound effect when hitting another tank.

Next up: Turret movement…

Fixing bad file permissions for Mac App Store submission when using Xcode folder references

The problem

You compile your app and test it.  It works great!  Time to submit to the Mac App Store, right?

Not yet.  Before submission, use Build and archive, Share from Xcode organizer, then install the resulting .pkg file.  (Side note:  Delete your app from everywhere first if you actually want it to install it right, otherwise it will get confused and install over existing versions, probably the one you made with build and archive!)

Uh oh.  The 60 mb file installed only 6 mb of stuff.   Huh?!

The solution

I suspect this only happens to people who are using folder references with data coming from a smb windows share.

The issue happens because the folder references in the .app get funky file permissions and while the app works fine, the pkg installer fails to copy ’em.

To fix it, right click the build target and choose Add->New Build Phase->New Run Script Build Phase and put something like the following in it:

set -ex
if [ "${CONFIGURATION}" = ‘Release’ ]; then

[ "$ACTION" = build ] || exit 0
[ "$BUILD_VARIANTS" = "normal" ] || exit 0

chmod -R o+rX,g+rX "$BUILT_PRODUCTS_DIR/Dink Smallwood"

A google search on this esoteric issue failed me so I’m posting this in the hopes of helping you, dear random googler, in your time of need.

Dink Smallwood HD coming to Mac one way or another

Oh, and yeah, I’m trying to get Dink HD on the Mac App Store.  It will be a free app.  It will probably be rejected because of the DMOD support (downloading user levels) but I have to try.

If rejected, I guess I’ll just release normally as a download from here, but that’s too bad as I really like the auto-updating/ratings features of an App Store.

Irrlicht (driven with Proton SDK) demo now running on Android Nexus One (movie and download)

Finally got around to making a .mak and doing the required tweaks to get the RT3DApp demo to run on Android.

For some reason Irrlicht’s zip file system mounter refused to open the .apk right (it’s just a zip), so I wrote CProtonReader, a “FileArchive” that lets Irrlicht transparently use Proton’s entire file system under the hood. Works beautifully!

Rough fps info:

  • Nexus One: 20-38 fps
  • G1: 4-10 fps (it does render perfectly on this old 1.6 device though, was worried it might not)


If you’d like to try this demo on your own Android device: (13 MB)


Note: This demo doesn’t currently handle reloading textures when Android task switches. My modified Irrlicht is based on the 1.7.1 beta GLES branch.