Every day my game inches closer to functionality, but every day I realise anew the vast gulf between my dreams and my abilities.
The plan is to have built a fully armed and operational player-versus-bots deathmatch arena by the end of my festive holiday. Is it possible? This is, after all, the season where dreams come true.
Welcome… to the Arena
It’s more possible than you might think. I’ve been slaving away over some of the core mechanics required, and even if it might not have multi-kills and sprees (or even audio) it should at least have victory and defeat conditions.
I’ve started with an eight-player arena. Player 1, the human player, is on the red team with a single bot companion; every other team comprises two bots. Every player will be equal in their abilities, but make no mistake — this is a purely singleplayer enterprise. It’s an extreme form of stress test, really; I want to push my systems to the limit so that when I start to make the proper narrative-driven open-world-ish missions then my bots will already be well-equipped to handle them.
And, well, maybe I also love Unreal Tournament-style announcer commentary and I won’t be able to do that when I crack open the story train. An in-universe tournament, however…
Thematically, I’m going to take step away from the brutalist concrete modules and go back to my roots — ancient ruins. With the advent of textures.com and episcura I have access to all sorts of textures that mean I can indulge myself, rather than being limited to the palette I can assemble for myself. The mix of procedural and real textures has so far worked quite well as far as I’m concerned, and even the smallest resolutions they offer at the free tiers are far higher than my needs, so I can really go to town.
The arena also has the classic layout of a central pyramid in a square compound, with a team base at each corner and a locked gate in the middle of each side. Annexes and bonus objectives will grow in time from these hooks, just as they always have.
The first stepping stone was actually to tie together respawning and kill count tracking. Unlike Warcraft III, where a single hero is persistent beyond death, continuously rising and falling, my units — regardless of whether they are player or bot-controlled — disintegrate into meaty chunks upon death, replacing each of their constituent parts with an equivalent piece of wreckage and then disposing of themselves.
So every unit is given a Character to link its many lives together. This character is where all the high-level stuff goes on, tracking who has killed whom over the whole span of the match, and it is this object that will ultimately signal victory — or defeat. In the long run, it will contain customisation options so you can dress up your mech, and it will track multi-kills and sprees and hits and misses and all these things that make tournaments such fun. Indeed, if I play my cards right, it’ll track all this data between matches, allowing you as a player to build up a persistant profile. So many dreams!
For now, though, the arena is just based on life and death. I need to keep it simple because I have eyes far bigger than my stomach, so anything that doesn’t directly contribute to this version of the arena is being mercilessly dropped right now. Otherwise, well, I’ll never release anything.
I already have four weapons in the game from previous development — the rams, the laser rifles, the shard rifles, and the cannons. This is not quite a roster to match Unreal Tournament so I need to build some more weapons to fill the gaps. I’ve added weak and inaccurate pistols to go along with the ammoless rams as basic starting weapons, then I’d like to bring back the quadshot from Project Y4 to be my version of the flak cannon, plus a minigun and if I’m a reallllly good boy I’ll see if I can’t make some kind of sniper rifle too.
Up until recently, of course, my bots couldn’t actually use any other weapons than the ones they were born with. Their eyes are quite adept at spotting enemies in their vision cones but items are a slightly different story, namely because they can be held by other characters. Much as having your cannon pickpocketing off you in the middle of a fight could be a beautiful mechanic in future, it’s definitely not something I want right now, and believe me, after a whole heap of wrangling they’re still nabbing items off each other — though at least I’ve got them to stop stealing items from their own inventories.
Yes, an inventory is necessary too. I’ve had a rudimentary ammunition stockpile so far, but weapons — real, solid items — are a slightly different kettle o’ fish. Eventually I will use a grid-based inventory tetris system, but for now a scroll-up-and-down UT-style toolbelt is all we need.
My inventory strategy is, as is my way, probably more complex than it needs to be. I’m hiding the items inside the unit that is carrying them, to facilitate a Nox-style lootsplosion on death, where your entire inventory splatters out all over the floor. It’s complicated by the fact that all my items occur in pairs — yes, those cute Delta mechs dual-wield items and it’s a right royal pain in the arse to do things with pairs.
Well, maybe it’s my own fault. I want my engine to deal with these item pairs transparently, so that everything “just works” when I get to the fun stuff. Effectively this means every inventory method has multiple if item has mirror blocks, but I’m willing to take that hit to contain all such logic within the inventory class(es) — the rest of the world can just not care whether an item is alone or has a lifelong soulmate.
Oh, the life of an amateur game developer. Have a proper crimbo everyone!