Game Development

Blog 813: Closing the Loop

I am currently finding myself in a weird position with Exon. The first level — the Exon Academy and surrounding environs — is almost done, and so I’m starting to really want to move on to different levels… but I also don’t want to start making more levels until I’ve really, truly finished something. Especially when that something is very conveniently packagable as, oh I don’t know, a first release maybe?

The eternal temptation.

Closing the Loop

The Exon Academy has had a slightly tortuous development cycle. It started as just the Arena, which was originally going to stand alone as the demo. Then worries about how it might give people the wrong impression of the game — as some kind of “should be multiplayer” brawler rather than an extensive singleplayer RPG that just happens to have a botmatch minigame — led to me building out its surroundings.

I’m actually pretty happy with how it’s turned out. It has everything; there’s a neat little cinematic as you arrive at the train station, a gentle area of temperate forest wilderness with several quests about it, and a main quest with two possible resolutions. Even ignoring the Arena and the Gauntlet, there’s a perfectly serviceable amount of introductory exploration and encounters with wild animals, and it is admirably serving its ultimate goal of stressing all my level design systems and tools into a shape that will last for the long term.

The Arena and the Gauntlet, though, ohhh.

The Exon Academy level is starting to get properly “busy”, though there are still holes.

The Arena’s actually fine. I haven’t touched it in ages. Although the Arena is structured to enable it to expand out to 4 annexes for additional in-game objectives (to bring it closer to the insanity of the original Warcraft III map), it doesn’t need those to be completed for the level to be shippable. I can simply not open the annexe gates, and the fog of war will take care of hiding the blank bits beyond them. You can still have a good bit of fun playing the straight 4- or 8-player deathmatches currently on offer.

The Gauntlet is a trickier prospect, because it is a linear assault course that takes you on a whistle-stop tour of basic gameplay mechanics — and it therefore needs to have an end, you have to be able to get back out of it again. It’s one thing to reach the end of a parcel of content (the Insert Disc 2 pop-up that occurs when you actually try to leave the level), but the game shouldn’t just stop half-way through a perfectly self-contained side quest. That would be, as they say, a game-breaking bug.

I finally implemented a debug visualiser for bot sight cones because they were noticing things it felt like they shouldn’t have been able to — inevitably, it turned out that my line-of-sight logic was totally borked. Sigh.

The final part of the Gauntlet is the most complex part, though. The Gauntlet goes through Movement, Combat and Infiltration courses before its finale. Movement is straightforward, a few jump puzzles; Combat introduces you to melee and ranged weapons against some weak bots; while Infiltration gives you keypads, traps and a stealth taster. All of that is done (give or take me hammering the sight cone settings until the stealth section behaves sensibly).

The finale is a full mock facility where you are given the opportunity to try out any, all or none of your skills (as you see fit) to achieve an objective. This is turning out a little bigger than I perhaps intended, but it’s also extremely important — this is literally a microcosm of how the rest of the game will go. You will use your skills and equipment to explore places and achieve objectives.

The real reason I added the stealth part of the Gauntlet was precisely to create a controlled debugging environment, because why would I have one of those outside a real level?

While building it, I’ve actually been spending a lot of time ruminating on how best to organise such complex environments. I worked out how to manage terrain and doodads ages ago, by hiding them from the Scene Heirarchy so they don’t distract me; but while this approach is fine for static objects placed by eye and then ignored, it doesn’t work for complex elements that need to be linked to each other.

It doesn’t help that there is some overlap between these complex elements and decorations because, well, they’re still physical objects that are best placed by eye. Fences and walls are of great interest to Robbie the Terrainer, but Robbie the Quest Designer only wants to know about the gates that break them up.

Up to this point, I’ve been using the object heirarchy and nesting stuff in whatever haphazard way seemed appropriate at the time. No particular rhyme or reason, units mixed in with computers and advert boards and trains and amBushes and all sorts of other junk, nested under various sporadic grouping objects. That needed to be fixed — I’ve settled on two levels of organisation, with Areas at the top (which can define stuff like lighting and weather settings) and a single layer of grouping objects below that contain all the actual stuff. This should let me extend the World Editor to work with complex objects but leave them sanely accessible for when the tools inevitably fail.

Game development is, indeed, not all glitz and glamour.

That’s not to say that settling on a level structure and building out the final challenge of the Gauntlet is going to actually lead to an imminent shipment of any demo, no sirree. I’ve still got to do another few rounds of sound design and decoration work at least, but it’ll be nice to get to a point where I know I could release it.

And you tell me...

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.