Employment is now over for the year. I’ve booked myself three weeks of holiday, from here to the first week of January, so I’ll have the longest contiguous period of free time I’ve ever taken for… well, years. (It’s also time to stop shaving — will this be the year I finally achieve a coherent moustache?)
What am I going to do with that time? The same thing I do every year… I’m going to make a video game.
The Most Productive Time of the Year
To be fair, I have said this every year since I started work on this game, which remains known only by its codename No Excuses. And before that, I said it several times about Project Y4. And before that, I’m fairly sure I first paraphrased “the most productive time of the year” while doing the original RDZArena or at the very least This Wreckage. Those things are all A Bit Old now. Erk.
On the other hand, if you’ll take a look at this fairly recent video, you can see that I pretty much already have a game built.
There are a few key elements missing, however, that stop it from quite being a game. These are the things that I must spend my three week break working on, so that at the dawn of 2017 I will be able to present to you something that can be played — something that can be started, touched, sworn at, and completed.
These major sections are not ordered by priority, but the features within each mostly are. This fairly well-defined list should keep me from getting so full of the joys that I hare off in the wrong direction.
A. Level Generation
I’m currently using a Binary Space Partition algorithm to generate levels, which is so far providing solid foundations but still needs a lot of work.
- Entrance tile: do I make you walk down a staircase on the edge of the start room and close the doors behind you, or plop an elevator down anywhere and lower you out of the sky?
- Exit room: I need to pick the room “furthest” from the start room to be the end goal for the level. I suspect this will require graph traversal, as the geographically furthest room may not be the actual furthest room, once you factor in winding corridors.
- Exit tile: same as the entrance tile, except for winning the level.
- Colour schemes: I’ve got the shaders to make coloured variations on all my textures, but I need to actually apply them. I want to do UT-team-level style coloured stripes along walls and whatnot on a per-room basis to add flavour. Also chequered floor tiles like Sonic 3D.
- Room shapes: rooms are only rectangular right now, but I’ve got some other old shape-drawing code in my arsenal waiting to be re-unleashed. I will need to add diagonal corners to my tilesets so I can do octagonal rooms, among other things.
- Natural rooms: I want to build a cave tileset to go along with the bunker tileset I have right now, so I can mix “mines” generated by cellular automata back into the BSP-driven facility layout.
- Varied floor tiles: some rooms should have roads through them, some should have metal panels, some should have raised and lowered bits… Otherwise, they’ll be endlessly samey concrete blocks and That’s No Good.
- Decorations: random prefabs that break up the layouts even more. The giant oil drums you’ve probably seen before, but I’ll need to add more than just those.
B. Level Navigation
Right now it can be hard to remember where you’ve been and where you’re going, so I need to find a way of indicating explored versus unexplored areas.
- Occlusion: show and hide walls that would obscure the player and the area around them, so you can always see where you’re going. I have this mostly working but it has a few major deficiencies I need to clear up. So, er, not really mostly working.
- Mini-map: I don’t know how I will do this so it’s quite low down the priority list. The generated level is based on a very large grid so it should be easy enough to also paint a bitmap image from this for use as a mini-map?
C. Item Systems
My item systems are still missing a few key features. These shouldn’t (“shouldn’t“) be too difficult, but should make things feel a bit more alive…
- Shield damage reduction: those blast shields you can pick up aren’t meant to be just for show, they’re meant to give you baseline damage reduction akin to the armour of a traditional RPG. This will require some kind of generic buffing system so it’s not as simple as it looks.
- Equipment degradation: nothing lasts forever, especially when that something is a heavy metal blade used to hack at other heavy metal objects. Equipment items will have their own internal health bars and need to be repaired or discarded when they sustain too much damage.
- Equipment randomisation: I’ve got an item quality, material and shape system all written down; I just need to put it into action. This is straight-up Nox cloning — a Sturdy Bronze Sword will be worse than a Reinforced Titanium Sword and so on. Plus I’ve got four or five different sword meshes to use…
- Critical hit/miss: damage is absolutely static right now and while I’m mostly cool with that, the top-down equivalent of scoring a headshot is going to have to be random chance to score a critical hit — but then I want to balance that with an equal chance to score a glancing blow that would do less damage. Hai! — or whoops?
D. Ability Systems
The player mech is not yet fully armed and operational.
- Fifth ability: ability number five is the mech’s undercarriage unit, to be slung between its legs, which I haven’t rigged up in any way yet but should be fairly straight-forward. The real problem is what ability to give it without having to go crazy — another gun?
- Debuffs: EMP stunning is inevitable, but the lightning generator code I want to use for zapping leaks memory like a seive right now so it’s currently a no-go. I think I’ll need to recycle some super-cheap special effects from Project Y4 so I can get the debuff system moving. I have a few ideas for effects other than EMP, but we won’t go overboard just yet.
I’ve done health and ammo packs in previous iterations but they’re not spawned as part of the current level generator just yet. Without replenishing your supplies, the game will be very short and since it’s taking the perma-death how-long-can-you-last format right now…
- Item spawning: some rooms should contain loot instead of enemies.
- Destructibles: chests and crates should contain items, or they should lie loose on shelves (that can still be destroyed).
- Gold: money talks, and hey, I’m listening — I’m intending to place mech-sized chunks of salvage and precious metals for you to hoover up as you go. Money will be used to buy repairs or items or will add into your end-game score.
F. Neutral Passive
It might be a dungeon crawler at the moment, but I’d like to leave a few non-hostile units around to ease your passage.
- Repair bot: spend money, achieve full health for you and all your damaged equipment.
- Recharge station: obtain energy for free, but stations have limited charge and will need time to refill.
- Vending machine: spend money, obtain health packs, ammo, batteries, and so on.
The bots are little more than serviceable right now.
- Pathfinding: I’ve got a very basic, shallow integration with the A* Pathfinding Project library right now which does the job but could do with some fine-tuning to match the way I print my levels and make enemy movements more natural. There’s also a range-check bug with melee attacks where bots get close enough to the player to stop, but not close enough to trigger them to attack.
- Bot investigation: if a bot loses sight of the player around a corner right now, it will psychically continue the pursuit. What it should do is go to the last point it saw the player, look around a bit, and either see you again or give up the chase. I had this working a long time ago but carved it out due to navigation complexities — which the above A* pathfinding integration has since solved.
- Enemy variation: right now there is only one enemy configured one way. I’m hoping to apply similar systems as item randomisation to vary enemies of the same type. This is why the unit chunk system exists — the “Skeleton Warrior” is just the player mech draped in different clothes. I need more clothes. Pretty pretty dress-up game!
- Enemy types: I have a whole universe of old models that are begging to be recycled. I’m all about saving the environment, right? (He says, churning through dead trees as he sketches even more vehicles to not build.)
- Enemy abilities: they should try to bull-rush you sometimes, or use their own shoulder cannons (which they don’t have yet but shut up).
Enemies won’t be the only things you face in the winding bunker complexes.
- Laser beams: some will occupy rooms and rotate around, others will switch on and off as you go down corridors. Timing is everything!
- Spike pits: need I say more?
- Secret walls: Nox has this wonderful habit of letting you walk into an empty room, only to have some walls disappear to unleash hordes of enemies. I want this, but it’s a relatively low priority because I suspect it’ll be quite difficult. Turning walls on and off is one thing, but keeping the things inside them concealed until the moment of activation is quite another.
- Towers of Hanoi Puzzle: hahahahahahahahahahaha
I. User Interface
The main game heads-up display is mostly in place but it needs a few tune-ups here and there… And some extra menus.
- Tooltips: if you hover your cursor over an item on the ground for a bit, it should tell you its proper name. Enemies should also be able to taunt you with a similar mechanism of text hovering near their heads.
- Death screen: if you die, it should display your final score and statistics, and prompt you to restart and try again or exit the game.
- Menu: you should be able to exit the game by pressing Escape to obtain a friendly menu, not Alt+F4.
That is, by my count, thirty-four features I am going to build. Which, well, now that I look at it, does seem a little bit on the stretchy side. Ten features a week? That’s just over one a day.
On the other hand, these are of wildly varying sizes and complexities so hopefully I can power through most of them and then defer the less essential ones to the end. Plus, each day I’ll have the equivalent of a full day at the office — and Unity’s blazing fast to work with once you get into the swing of things. The only limiting factor is my own endurance.
So to everyone I wish you a proper crimbo, and hope you have a lovely festive season and new year — see you on the other side!