Current State of Realm Racer

I figure I've gone long enough building this game in the dark, so this is the first post of (hopefully) many detailing the progression of Realm Racer. Realm Racer is a mobile 3D infinite runner, but not sidescrolling (or vertical scrolling). With this post I aim to show the current state of the game, and describe how I got here.

Current State of the Realm Racer



Basically, you are traveling down this never-ending tube, going as far as you can while dodging the rockets. You lose "charge" along the way, and so you have to collect the charge pickups to refuel. The arrows are indicators of where future rockets are coming. The concept is fairly simple. I think this is the game in it's purest state here, with a bit of polish regarding the UI. You have obstacles to avoid, an incentive to take risks, and a goal to keep in mind.







How We Got Here

The state the game is in has been about ~2 years in the making. Not 2 years of constant work, however. I've been developing this game with my brother, but we both have full time jobs, and we took a major hiatus while working on the game because of technical complications.

When the game was first worked on, it was being built in JMonkeyEngine, and open source 3D engine. We wanted to develop in an open source engine. I might be able to dig up more images, but at some point it looked like this:











Things were different then. Maybe you can tell by the image dimensions, but originally the game was intended to be played with the phone in landscape. At the point of time this image was taken, the game was in a functional prototype state. It could be played, with a high score, and could be restarted. However, we decided we wanted to change engines, due to a few reasons:



JMonkeyEngine didn't have a very visual editor. A lot of setup had to be done procedurally, and while that isn't terrible, it made the workflow more error prone and difficult to debug.

Support for Android was lacking, at least when we were developing with it.

Community support existed, but we felt we could move faster with more popular engine.

Some people are making cool games with the engine, but we felt we'd be better off with something that seemed to have more traction. We still wanted to stick with open source, however. I had been tracking Godot Engine for a while, so when they announced that they would be tracking for a 3.0 release due early 2018 with a primary focus on a complete overhaul of the 3D system, we were onboard. Godot uses a node hierarchy system exactly the same way JMonkeyEngine does, so we weren't too concerned with the effort of rewriting the game. We decided to stop developing around early September 2017. Instead, we participated in the Github Game Jam with the intent of getting quickly up to speed with the current state of Godot (v2.1). We made a 2D game that involved upgrading your weapon every level by just attaching more ... guns to it. It was bizarre, but fun, and we learned a lot about the engine and the community. After that, we watched the development of Godot 3.0 closely.



The Transition

As soon as Godot 3.0 came out I got cracking. I've got some gifs showcasing the evolving state of the game, so I'll run through those with a bit of commentary.

Here we see the earliest proof that I could rotate the "player" around a tube track that was generating a random direction for each tube attached.

The banding of the tubes made it pretty difficult to look at, but here we had the player model and rockets (obstacles) to avoid. There also was evidence of a score tracker.

Have basic notifications working. Moved the camera up so you can see the entire circle of notifications. More helpful than a over the shoulder view.

Now we've got profile view, a basic title screen, and retry capacity (and triangular notifications). Why did it switch to profile? I realized I want this game to be playable while standing on BART (I live near San Francisco, and that's the public train system), with one hand holding the phone and the other holding a bar or handle or something (it's common). Thus the game needs to be in profile view, and left/right controls easily accessible by the thumb tapping the left or right bottom half of the screen.

Some nicer UI, for a change. Honestly, the hardest part so far was learning how the UI system works in Godot. This is also where I thought of the fuel gauge, which can be replenished by collecting "fuel can" pickups.

Working with the UI more. Being able to code features is one thing. Being able to push a feature to a state of polish that you truly feel comfortable with is another thing completely. Especially for someone with a rudimentary sense of art and design. Polishing every last detail might be the hardest thing about indie game development, because somewhere inside you, you know it could be better. For me, I redesigned the UI at least 5 times before coming up with something I thought looked decent. Each design requires thought and time to design, and then some time to actually implement. I examine games that I think feel and look great (Subway Surfers, Jetpack Joyride), but emulating that consistency and charm is difficult without doing precise copies of the buttons and art style (I'm speaking to the UI specifically here). Without a doubt making it look and feel good will continue to be the hardest part, but the most basic prerequisite for making a successful game is that it just has to look and feel good. There are no two ways around it, so I'll persevere.





Finally, we arrive at the game as it looks today:





Final Thoughts

So far developing with Godot has been very fulfilling. I've asked questions on the subreddit and the Q&A, and responses come swiftly and with lots of information. Sometimes they come from the repository contributors themselves. In fact, even I made a small contribution to the repository several months ago. Recently Godot was the third fastest growing project on Github, so I really think we are in the right place to be. Android support in Godot 3.0 isn't spectacular due to the well known driver issues, but those are being fixed in 3.1, so I have no qualms.

With any luck I'll do this on a weekly cadence, and I might throw in a process or technique post once in a while.

