Coin Push Frenzy HD (iPad Game)

App Icon

  • Product description: Free-to-play carnival game.
  • Release Date: Nov 24, 2010
  • Product history/genesis: Original title (Coin Push Frenzy) was handed to me to clean up enough to release. After doing so, I recoded it in my game engine (theComplex) to create the iPad version. Re-used most artwork from the original game.
  • Team: Self, Producer, Artist, QA team.
  • Core Technologies: C++ game in theComplex engine supporting iPhone OpenGL, and partial Android OpenGL
  • Most proud of: This was a very fast conversion. By this point my game engine had matured enough to allow this conversion of a very messy, zero commented, plain C codebase into a sleek and efficient game within a couple weeks.
  • Responsibilities: All code and art integration

Game Screenshot

All of the 2d user interfaces were implemented using Interface Builder. theComplex was able to load xib files directly and create OpenGL-based objects with them. This also included support for any aspect ratio screen (as would be needed on Android).

There are actually two physics engines in use on this product. theComplex has bullet physics integrated into it, and this was used for almost every object. However, in the original game, all the coins that were directly on the face of the playfield were handled manually in a 2d-only, much simpler physics system. This was done as a performance optimization. The side effect was that a coin that dropped onto the playfield at a slight angle (say, by getting hung up on the pusher) would actually stick at that angle permanently as it moved down the playfield instead of laying flat as one would expect. The HD version of the game preserves this error, despite the fact that the improved engine did not need the optimization any longer.

Machine Selector

When beginning this conversion, I built a few alternate models for the playfield to take advantage of the iPad’s larger display size. None of these alternate models made it into the final game, but the engine was able to play just fine with them.

Some of the most difficult things to reproduce in the new engine was the particle effects of the original. The original was based on redrawing everything every single frame, and the new engine is designed with a core concept of “assume it will exist in the next frame.” This was eventually handled by adding some particle system support to the engine, with dynamic vertex buffers. Up to this point, supporting both Apple’s vertex buffer standards and the ARB versions (for different hardware) was not that simple. But Apple had finally made the ARB versions available across all hardware which considerably simplified the task.

This was the first game based on theComplex game engine to run partially on Android devices. It could get into and display the main game board. I was unable to complete the port, as ngmoco had just purchased Freeverse and completely changed the technology direction behind our games, canning it.

An older (but more exciting!) portfolio page for this project.

NBA Hotshot (iPhone Game)

Game Icon

  • Product description 3D pop-a-shot basketball game. Reached #29 on Top Applications across entire App store.
  • Release Date Jan 5 2010
  • Product Genesis Had previously built a basketball shooting multigame (Flick Basketball) with my theComplex engine. We redid the models and graphics, breaking this component out into it’s own title to focus and polish it.
  • Team Self, Producer, Artist, QA team.
  • Core Technologies C++ game in theComplex engine supporting iPhone OpenGL
  • Most Proud Of Integrated a theora video decoder for the backboard to animate short videos triggered by the player’s actions, like that seen at arcades. This was on devices that could not yet do any sort of video through standard apple APIs.
  • Responsibilities All code except the ball throw itself.

Gameplay Screenshot

All of the 2d user interfaces were implemented using Interface Builder. theComplex was able to load xib files directly and create OpenGL-based objects with them. This also included support for any aspect ratio screen (as would be needed on Android). Later on I found out the producer was able to create a free advertisement-based version of the game without any need of a coder until it was practically complete.

Backboard and net movement were animations imported from Maya using the Collada importer of theComplex engine.

Added synchronized network play with four other players via GameKit (bluetooth or wifi). It synchronizes the game start, then displays the scores of the other players in real time.

High Score Display Screenshot
Integrated Plus+ leaderboard system.

Built an in game “store” that you can purchase additional basketballs and prizes. How you did in the game awarded you special points that you redeem in the store.

There was a bit of discussion around the ball throw itself. I had built a method of throwing the ball that worked out the ideal angle/speed to throw the ball, and then averaged all the player input to modify it. The feel was pretty easy, good for casual gamers. However the game Skeeball had recently been released and was a fairly big hit. In that game, only the player’s beginning and end of the swipe mattered, and it was used to make a direct correlation to the velocity and angle of the throw. It was much more difficult in my opinion.

An older (but more exciting!) portfolio page for this project.

Periscope (Mac Application)

Periscope Icon

Periscope is the next generation of Web cam software that lets you use your iSight to capture activity in front of your Mac’s camera and then save or share that image simply and automatically.

Within seconds, you can configure Periscope to monitor a room for motion, sound or on a timer. Periscope will send real-time images to your e-mail, .Mac Web page, or FTP site, and can upload to Flickr!

Put it this way, the next time your mini-fridge is raided by a roommate pleading innocence… You got the dirt.
‘scope your home when you’re out of town.
‘scope for intruders with motion detection.
‘scope the kids when you’re at the office.
‘scope a time-lapse movie of your workday.
‘scope for security.
‘scope for fun!

Motion Sense Screenshot

  • Product description: Webcam software, with motion detection and many ways to share resulting pictures.
  • Release Date: November 2009
  • Product history/genesis: The project had originally been built with contract labor, which created a product that the owners were severely unhappy with. I was brought in as part of the team to clean it up and fill in the gaps starting with the 1.5 release.
  • Team: Self, two other Coders, Producer, Artist, QA team.
  • Core Technologies: Objective C in Cocoa for Mac OS X
  • Most proud of: Remade the motion detection system to take advantage of GPU acceleration. Unfortunately most hardware was not yet supporting general GPU acceleration, so it still remained slow to most users.
  • Responsibilities: Bugfixing, new features, optimization

Promo Screenshot
Kitty Screenshot

This is one of the few “non-game” applications I’ve been part of in my career, the other being the FaxSTF 5.0 browser. While not a game, I found the experience just as rewarding as the games I had built.

The user interface made some use of Key Value Coding originally, I expanded its use to include most of the UI.

The original code was uncommented and many of variable and method names did not make sense for the tasks they were doing. During the project this was incrementally improved until the final version was fairly well documented.

This was my first experience with Core Animation and later I would recreate its block animation setup paradigm in theComplex for handling 2d UI animations.

And older (but more exciting!) portfolio page for this app.

theComplex (Game Engine)


  • Product description: Game engine with a core concept of “most geometry will stay onscreen next frame too.”
  • Product history/genesis: Freeverse approached me about making a game engine that could run on both Mac and Windows platforms for a game series they were pitching. The games were ideal for the style of engine I already had in mind. The Hoyle games were completed after successfully creating an engine capable of driving DirectX or OpenGL. Soon after, iPhone became big and in less than a week theComplex was running on iPhone too.
  • Team: Self
  • Core Technologies:
    • C++ for Games, inside a cross platform wrapper
    • Objective C in Cocoa for Mac OS X wrapper
    • Objective C in UIKit for iPhone wrapper
    • C++ for Windows wrapper
    • Java for Android wrapper
  • Most proud of: This engine shipped in many games, and was updated and added to many times over the years. But throughout it has remained stable, well documented, and efficient.
  • Responsibilities: Everything from design to implementation

Custom Basketballs Screenshot

The design of this engine was based on years of experience with debugging other people’s engines in ports of Windows games to Mac. In each engine, when a new frame was started, everything from the previous frame was destroyed. All the sorted lists, all preprocessing, always redone every frame. In theComplex, the entire list of things to render is kept every frame. This way the game can choose to re-sort as often or as little as it wishes.

Falling Coins Screenshot

When Freeverse was purchased by ngmoco:), they chose to go a different direction with our technology choices to an internally designed javascript engine. Ngmoco:) invited me to help design and implement the 3d component of their new engine. It was never used in a shipping game because the core javascript engine simply could not keep up with the requirements of 3d engines. Two years later they have finally allowed alternate engines, and are now using Unity3D. As it turns out, Unity is so similar in design to my own engine that it was more like “coming home.” Even though Unity does not have the 2D support, some of their additions are brilliant.

Massive Assault (Macintosh Port)

Ice Planet Screenshot

  • Full Name: Massive Assault
  • Original Developer:
  • Original Publisher: Multiple publishers, depending on region
  • Original Release Date: 2003
  • Port Comissioned by: Virtual Programming Ltd.
  • Mac Release Date: 2004
  • Mac Publisher: Virtual Programming Ltd.

Excerpt from the USA press release…

Red Planet Battle Screenshot

Massive Assault is a fully 3D turn-based strategy game set in a futuristic world of, missiles, mechs, and mayhem. With 26 different land, sea and air units, huge 3D landscapes and 6 different planets on which to battle, Massive Assault is a strategy gamer's dream.

With Massive Assault you can play against the top-notch AI, or with your friends via hot-seat or over the internet. The game combines the best elements of turn-based war gaming with a unique "secret ally" political feature that can disrupt even the best laid battle plan.

Desert Battle Screenshot
After years of doing totally different, non-game related work, this was the first foray back
into game development. There was a lot of catching up to do.

At first we were going to use an existing DirectX compatibility layer. As it turned out,
it did not have all the necessary parts to run a game with these abilities. This game uses all
the latest stuff, including vertex and pixel shaders, which were not available with the
software we were going to use.

So we set about the task of writing our own compatibility layer from scratch. We chose this
direction for two reasons: we could maintain the code ourselves, adding what is needed;
and it would be based on Cocoa, being in line with the "New-Mac" way of doing things.
It is the direction Apple wants to go, and as it turned out, we have found it very easy to
work with.

Shadows and Highlights Screenshot
In all honesty, it really didn't take that long. Well, not in project terms of time, anyway.
As it turned out it was not the DirectX
layer that cost us time – it was the vertex shaders. We converted them to use the standard
OpenGL ARB vertex programs, in a naive fashion. They worked on the ATI video boards immediately.
Unfortunately the NVIDIA video boards were driven crazy by them. Kudos to all at NVIDIA
and Apple who helped us figure out what the real problem was. At the time ID Software's
Doom III was on the horizon, and was pro-ported to use the same type of vertex and pixel shaders
this game did. I commented "Unless you fix this, ID software is going to look at the
Macs and laugh." As it turned out, Apple and NVIDIA did their jobs, and six months later
there was an OS update to the OpenGL drivers that included a fix for the problems we saw.
Somewhere in a readme I think, it mentioned that it fixed problems for Doom III. Did I call it
or what!

Reflective Water Screenshot
This was a great experience. The DirectX compatibility layer is working wonderfully –
we can now port simple projects in one hour! While this is only good for tutorials
and such, it is actually quite useful to us. We make sure
additions to the engine work the same as the original PC. We take demonstration programs
written for the PC and port them, and fix the engine to make them match.
And each successive project has used this layer and improved upon it.
This was the best idea we ever had!