Game Development

Blog 777: Predictable Manoeuvres in the Game

All of life is about compromise. I started off making my mechs use the CharacterController, but shied away from it as that meant I had to reimplement lots of physics. I replaced it with a Rigidbody-based system, but that started randomly bouncing off the floor and jumping was dangerously unpredictable. In movement system rewrite number three, I seem to have ended up with… a mix of both.

It took me far too long to understand why this third approach works, but I think I’ve got it now. Since movement controllers seem to be a perennial topic in the commUnity, it’s time for me to add some words to the mix!

Continue reading “Blog 777: Predictable Manoeuvres in the Game”

Game Development

Blog 776: Sound and Stuff

I’ve been putting off adding audio to Exon for, at this point, years. I didn’t want to tackle it until all my other systems were pretty solid — I didn’t want to shove in a load of work to manage audio sources and play effects if there was a risk that I’d be re-engineering half of it after the fact.

Well, things have now been stable enough for long enough and… Well, I got put on furlough by my employer. What else was I going to do with the extra time locked in the flat but suck up a major project?

Continue reading “Blog 776: Sound and Stuff”

Game Development

Blog 773: Kill Your Darlings

Since long before I started work on Exon, I was gripped by one action-RPG ideal: that if your sword intersected an enemy, then it should damage them. I suspect this arose from the likes of Morrowind‘s secretly dice-roll-based combat, where visually hitting somebody was no guarantee of actually hitting them.

Exon is broadly a game of melee attacks, so obviously when I started building the game I immediately implemented a system that does exactly that: using physics colliders, sword blades deliver damage as soon as they intersect a viable target.

Objective achieved, job done. So why does this system cause me so much concern?

Continue reading “Blog 773: Kill Your Darlings”

Game Development

Blog 771: Around the Arena

It’s a new decade, and Exon is officially six years old. That’s three times as old as my previous record holder, the WC3 total conversion Project Y4, which clocked in at two years. And it’s not even done yet! Not even close to done!

The Arena, however, is done. You can jump in, smash up some bots, and either win or lose. Which means it’s time to FEATURE CREEP YEAAAAAAAAAH! (It’s not feature creep if they were planned all along.)

Continue reading “Blog 771: Around the Arena”

Game Development

Blog 769: Sparkling If Statements

My favourite joke format at the moment is this: “It’s only X if it comes from the X region of France, otherwise it’s just sparkling Y.” In this case, “it’s only artificial intelligence if it’s from the AI region of France, otherwise it’s just sparkling if statements”. I can dunk on AI hype, you see, because I’m programming AI for my game again.

I’ve done quite a bit of AI programming already. The bots have fairly well-developed situational awareness — if they see an item they want they’ll move to pick it up; if they see an enemy they will attack; and if they are fighting they’ll use their abilities.

What they lack, however, is strategic awareness. Seeing as the Arena will have bonus objectives, and the same logic will power boss fights and full characters in the campaign, bots are going to need to that extra layer of intelligence.

Continue reading “Blog 769: Sparkling If Statements”

Game Development

Blog 768: Vertical Slice

So, a few months ago, I paused work on Exon’s main campaign to focus on building the Arena. This approach came with some risks but I decided to swallow them because this felt like it would be the fastest route to something genuinely playable.

I was right, because that was about three months ago and for the last few weeks I’ve had it out at local game dev events and being played by real human beings. It is by no means a finished game, but it is a fully-functioning, self-contained scenario that stresses the breadth of the game’s core combat mechanics. A vertical slice. Objective complete!

It’s funny because my mechs’ primary attacks are vertical slices.

Continue reading “Blog 768: Vertical Slice”

Game Development

Blog 764: Minimum Viable Game

I was at a game dev meet-up about a month ago now, where my pals sassed me silly for not having shipped a game yet. They’re right to do so — although I vigorously resist accusations of feature creep (it’s not creep if it’s all part of the original plan), it’s true that I’m making something rather large that isn’t going to be releasable until it’s “done” (this is the true curse of building narrative-driven things).

About a year ago, I set down my plan for the first release: a self-contained prologue to a bigger campaign, which would be short enough to manufacture in a sensible time-frame, but broad enough to stress out most of my features. “Sensible time-frame” is, of course, relative and it’s still got a long way to go.

So I asked myself: what’s the minimum viable game? What is the purest, simplest expression of top-down mech action that I can build and put in front of people?

Continue reading “Blog 764: Minimum Viable Game”

Game Development

Blog 761: RDZ’s Grand Guide to Saving and Loading

When I was looking for pointers on how to do saving and loading, I was frustrated at the lack of depth in the tutorials that I found. I couldn’t find anything that went beyond explaining PlayerPrefs and serialisation. I mean, yes, duh, I have to read and write the data — but how should I structure it? How should I find it? What’s the best way to put it together again? What did you see?!

Thus, having recently finished a fully armed and operational saving and loading system in my own game, Exon, here is a complete run-down of how it works and why. Although I would expect saving and loading to be personal to the architecture of a particular game, I feel like I’ve ended up with a very flexible and generic system, so hopefully this dump will give future people a decent idea of how to approach this most important of features. Plus some reassurance — it’s actually not that scary!

Continue reading “Blog 761: RDZ’s Grand Guide to Saving and Loading”