Turf: Moving Around

Getting closer to the play loop
#gamedevelopment
Another quick test of the game. This time in the city — and I managed to find the bot spawn!
Just a personal website.

Another quick test of the game. This time in the city — and I managed to find the bot spawn!
So once again I need to migrate this site, as Forestry.io is closing down.
I'm trying SiteLeaf right now.

So I couldn't find an image that I could confirm was Homer Clyde Snook, which is a shame. But regardless, he was a physicist working in the field of roentgen rays, soon to be relabeled x-rays. Working for the Victor company, he made the delightfully-titled “Snook Apparatus”, an early device to create x-rays.
I mean, look at this thing:

And check this out: at the start of World War II, he registered for the draft. He was 64 at the time. What a champ.

One of the first points of interest that came up when designing Turf! was how, as a mobile game that requires movement in physical space, it would be designed so that most people would be able to use it.
Again, the premise is that real people run around real space, and using the game, place virtual markers at real locations which create virtual territory, overlaid on real space.
The highest aggregated rate of territory wins.
It was immediately obvious that people who are fast on their feet would have an advantage. And also that people who are not mobile would not be able to participate in the game at all.
There is clearly nothing I could do about the relative speeds of players. Runners gonna run. But here is where I could lean on the RTS genre conventions to help out — player “classes”. When joining a game, each player selects a class, that provides certain abilities and restrictions. For the first pass, I included:
Scout. This class has the most markers to place, and can place them without a long delay. But each marker doesn't last very long.
Tank. With the fewest markers to place, and the longest placement time, this class shines as those markers last the longest.
Commander. Fewer markers, and quite a long placement time. But the Commander also has the extra ability to see the opposing team players' locations at all times — other classes can only see opposing team players' locations when they are in friendly territory.

Hopefully you can see how these classes and extra abilities help soften the imbalance from physical advantages. Further classes will include:
Ghost. The mirror to the Commander — remains invisible at all times.
Leech. Few markers of their own to place, but can “drain” enemy markers and take them over.
Drone. Not sure what to call this one, but this class would effectively allow a player to participate without physically moving. Instead, they would send a virtual “drone” to specific locations to place markers. But if that drone gets caught in enemy territory, it's lost. I think the intention behind this class is to allow participation from players who may not be as mobile as others, and can virtually participate.
It was also important to me to use system UI as much as possible. That way I could get the most built-in support for voice commands and other accessibility features. Visually, I'm trying to keep the UI clean, with high contrast, and large, easily readable text. Because for this game, I can. So that's good.

So I’ve been working on a mobile location-based game for about ¾ of a year now, and thought I should share more details.
When starting out on the project, I wanted to try creating multiplayer functionality. Mainly because it's really fun playing with friends, but also because it's a tough nut to crack. But I also didn't want to jump into the deep end of 60fps/physics/vfx network transport — after checking out the Unity and Unreal solutions (both built-in and third party), it just seemed like too much to tackle with the limited time I had.
But I love turn-based multiplayer games (see: Pocket Tanks, I love that stuff), and it seemed like an easier place to start.
Next, I wanted to do something with mobile devices — specifically, something physical. I wanted to see if I could make a game that requires movement.
So the gameplay I ended on is this:
Players run around the real world, and use their devices to place virtual markers that create virtual territory. The team with the most owned territory at the end of the time limit wins.
This comes with some interesting challenges:
With all of those expectations, I researched a lot on potential frameworks to use. Cross-platform is the ultimate goal, but not the primary restriction. Although I’m very familiar with Unity, I wanted something that didn’t explicitly tie to that ecosystem — it felt unwieldy, unnecessary, and just heavy. I didn’t need all of that.
So I tried a bunch of mobile frameworks.
Slowly RubyMotion proved its mettle, allowing me to bring in CocoaPods for the external stuff, and visual UI with XCode (XCode isn’t even needed, which is a huge bonus — but it’s nice to use just for the UI).
After setting up the initial UI scaffold, my main goal was to get locations, markers, and voronoi working.

I had to create the Vonoroi code in Ruby, as none of the available libraries ticked every box. But that’s okay, I understand more about the sweep line algorithm now. Getting it all together was very satisfying.
Next came the real-time database. Connecting was easy — the long process was figuring out the best way to treat the data, and how to replicate it to clients. Again, I wasn’t used to NoSQL, so the idea of just duplicating data all over the place made my skin scrawl (I like normalization, okay?), but eventually I got a good schema. Client replication was hard too, mainly because Firebase docs doesn’t do a good job explaining when and why replication happens — so I’m probably totally over-forcing updates. But the data is tiny, so I’m not worried about it.
The hidden bugbear — the thing I really wasn’t expecting — was how hard matchmaking would be. It’s probably worth an entirely different post, but ultimately I wanted matchmaking to happen behind the scenes, based upon location. There were a lot of edge cases and other interesting factors. And I had to make bots, because I can’t just get humans at all hours.
In short, matchmaking was a total beast.
But I got some successful playtests, with timers, scores, and ultimately other real humans.
Right now the project is a bit stalled, as in the move to the US my priorities are elsewhere. But I also no longer have a Mac to work on. Anyone have a spare MacBook Pro they want to donate?

I’ve never tried digital sculpting. I’ve seen my students and peers noodling away in Zbrush, creating some awesome work. But every time I would try it, the user interface (and MacOS port) would completely turn me off.
Recently, however, I decided to give Nomad Sculpt on iOS a go. And wow, it’s fantastic. Starting with a sphere, I just poked around a bit. A guy’s head? Let’s go with that.

After some time I clearly had to figure out retopologizing, but from then I was able to refine some more. I was really starting to notice not having any reference by this point. I was just making this guy up.

Then I made the mistake of posting it on socials. A mistake? Because I did the same thing I’ve seen so many students do — ignore the ears. Ugh! So, ears.

I didn’t quite know how to approach eyebrows and hair, so I just gave it a go. It’s not great, but it’ll do. For some reason, his hair made him look French to me. Lastly, I wanted a little bit more dynamism and asymmetry, so a little twist in the neck, and a raise of one eyebrow. I tried adding the little loose flesh of the eyelid being pulled up.

In all, I’m super excited about doing more digital sculpting with Nomad. It’s a solid piece of software — I have to figure out more texturing and retopologizing, though! It has to be a mess in there.
I was also noticing that every time I would reopen the file, the details would get softer and softer — note the interior of the ear, the nostrils, the eyelid corners, and the lips. Curious.

I got my first guitar when I was about 14 or 15. At the time I was living in London, UK, and didn't have that close of a social circle. I didn't really go out, and I got quite focused on learning to play guitar.
At the time there wasn't an internet, and the bulk of how I learned was from various US-based guitar magazines that would come out every month. They would feature little tutorials and complete transcriptions to songs — songs that often I would never had heard before (again, no internet). It was an interesting way to learn.
In my hyperfocused learning, I would pull out the good bits of each magazine, and add them to a binder. I would transcribe my own versions from shitty cassette tapes. This binder grew quite large.

Recently we've been packing things up, and relentlessly downsizing stuff. But what can I possibly do with this? This was my bible when I was 16. Nobody else could possibly find it useful these days.
I think it might need a viking funeral.

This one was pretty special for me. I did a lot of wandering around looking for a good spot up in Mt. Victoria park, and collecting clue photos. But when I got back to the car, my keys were missing! I had to retrace all my steps through the bush, and totally luckily found them again. A one-in-a-million chance.
I got a little more tricky with the clues — instead of just showing the location, I had four locations create a X that marked the spot. Unfortunately I didn't realise there are two beachfront empanada places in Wellington. Who would have thought.
Then the hunt itself was great — it seemed like nobody was going to find it, but then in the middle of the night some fellows tracked it down. Their videos were awesome.


I haven’t been posting much about this project, but sometimes something works and you just have to show out-of-context victories. Real-time dynamic location-based matchmaking is hard.


So the first one went alright — perhaps over too quickly. The next one I did from work, just chucking it behind a sculpture. But I did take a little more time to create more interesting clues.
This one was also the first one where the community kinda got into it, and the winner posted their success. That made me glad.
