Github Repos
PHILLY BIKE DOCK
swift, viper, rxswift

[github repo link]

ASYMETRIC METRONOME
objective-C

[github repo link]

AUTOMATED BASH AWS VHOST
[github repo link]

My apps
iOS App Store

Philly Bike Dock
Swift




Rhythasym
Objective-C




Tuckerton Pool
Unity3D C#
NodeJS
SocketIO




Jack's Gauntlet
Unity3D




Amoratis 7
Unity3D



Mac App Store

Tuckerton Pool
Unity3D C#
NodeJS
SocketIO




Android
Play Store


Jack's Gauntlet
Unity3D




I created the custom Bootstrap WordPress theme this site is using.
Download or fork on GitHub

CHMOD Converter


I made this CHMOD WordPress widget.
Get it at wordpress.org

Does the world need another pool video game?

I have a made a portfolio of apps that demonstrate my experience with different technologies. In this post, I tell the story of building a billiards game.

Something wonderful happened on Sunday, May 14, 2017. Mother’s Day. A day that will go down in history, at least for me. I visited my parents for Mother’s Day. It had been a few months since I had last visited. I discovered that my father had become an addict. A pool addict. On his iPad.

My dad evangelized me with religious fervor to play the pool app he had discovered. He played that pool app every free moment he could, and he turned me into a convert as well. Dad insisted! Seeing how much my father enjoyed playing pool on his iPad inspired me to build a pool app of my own. I had recently released a spaceship video game, but I was trying to think of something that would be even more accessible to people, something everybody would instantly love. My father enlightened me that a pool game could be exactly what I was looking for.

A quick web search showed me that there had been pool games on every computer platform going back to the beginning of computer time.
 

Pictured: 40 years ago, “Pool 400” on Atari in 1977
 
There are open source versions, desktop versions, web browser versions, mobile app versions. There have been versions in 3D, 2D, single player, computer player, two player, and tournament. It has all been done, a thousand times before.
 

Pictured: “American 3D Pool” on Commodore 64 in 1991
 

Player combinations
 

Tournament mode

There seems to be nothing new that a person could think of adding to the genre so I didn’t even try. The number of pool games proved that there is always room in the universe for one more Tetris clone, one more Solitaire game, and yes, one more pool game. The world didn’t need me to break new ground here. My contribution would be “implementation.” I would build a solid pool game and incorporate feedback from family and friends along the way. I would seek to avoid crashes and to have the game controls work well. That’s all. Plus, it would be a fun adventure to solve the technical challenges of building an online multiplayer game.

I wanted it to be lovable. For me this is close to my heart because pool has been in my life since I was a kid. I spent countless summer hours playing pool at the Jersey Shore. My family had a shore house where we went fishing and played pool. We went swimming in the salt water and enjoyed all the fun of summer. Those shore house memories serve as the inspiration for the room and pool table in my pool game. Notice the ocean out the window. As a youth minister in 2010, I assumed leadership of a pool tournament tradition at a church and broke records with attendance. My own youth spent playing pool and the pool tournaments I ran gave me insights into what I personally love about pool. People of every age and every place like to play pool.

My web searches taught me about some existing pool games. Foobilliards, an open source project, looked pretty cool, so I set out to build a similar game.
 

Pictured: “Foobilliards” open source pool game, 2002
 
That is the main inspiration for the look and feel of my game. A few weeks into working on my game (June 5, 2017 to be precise), Apple’s WWDC took place. They announced AR Kit which allows augmented reality. Sure enough, Unity was ready to support AR on iOS right out of the gate.

Serendipity. Something new after all.

When I started working on Tuckerton Pool in May, I thought it would be just another pool game without anything new. But then in June, Apple announced AR Kit at their 2017 World Wide Developer Conference. Apple’s newly released AR Kit opened a new possibility: adding AR to my pool game. I am sure there are already some AR pool apps, though I haven’t personally found any.

I will scrub away the virtual 3D room of the current version so that I can mix the pool balls into whatever real life scene the phone’s camera is pointing at. But I will probably keep including elements of the shore house somehow. I still always go back to those long teenage days, playing pool and listening to music.

Interesting challenge

Tuckerton Pool is a two player game. Both players use their own devices, so gameplay information must be sent back and forth. In pool, when you make a shot, the balls move around the table. I thought it would be a simple thing to get the balls to move the same way on both devices. It was not.

At first I simply gathered and sent the positions of the pool balls a few times per second. But this approach kept missing the first moments of shots. The following timeline diagram shows the problem. Even if the positions of the pool balls are sent several times a second, which is resource intensive, it’s rare that they would sufficiently catch a subtle moment like a fast moving ball bouncing off a wall.

The player on the local machine would see the ball bounce off the wall. But their opponent on a different device would see the ball move to a new point without the wall bounce.

Shooting the cue ball is really a matter of adding force to it in a certain direction. I wondered if adding the same force and direction to the cue ball on two devices would result in identical movement. Turns out, I was wondering if the physics were “determinate.” I discovered that the physics in Unity are not determinate. When the same force is applied to balls on two devices, the result is similar movement. But as time goes on and those balls bounce into other balls, more and more small differences pile up. Eventually the position of balls on both devices are entirely different.

I found that combining the two approaches resulted in the best game action. At first, I allow the balls on both devices to be hit with the same force in the same direction. This gives them a very similar movement for the first couple of seconds. But then, before things get too much out of sync, I begin the direct transmission of pool ball positions. Sometimes there is a little bit of a jump as things get into sync, but for now I find it to be acceptable for now.
However, for a few different reasons, I think I will eventually write my own deterministic pool physics engine for a future version. It will handle basic collisions and trajectories.

[under construction, I am still revising this section to make it more concise and clear. Check back! 🙂
– Jack, Sept 26]

 
Someone else building a multiplayer billiards game
Question about sync
Someone building a multi-player pool game
Proton TrueSync seems to be a product built to handle this
Numerous Google Results about behaving differently every time
Forum post about behaving differently every time”
Physics behaves differently in debug
Replaying physics each time
Add force on Rigidbodies not syncing across network
How do we make games deterministic?