I've been working on a tower defense game on and off since last November. Between being busy and distracted, I've gotten a few core features implemented. I'm pretty happy about what I've been able to do, even though it's not much, considering that I have minimal programming experience prior to this. No clue if anyone will read this, but I'm mostly keeping this log for myself.
I don't have any art drawn other than a single sprite. Everything else I either got from the forge or doodled. The only artwork shown in the following gifs/screenshots that I will likely use is the creep sprite. I'm waiting to do any art until after I get the main code in.
I've always loved tower defense games since first playing Elemental TD in Warcraft. The Income Defense maps on Starcraft, a two player tower defense/attack game, is one of my favorites and is a big inspiration for the game I am developing. My game will be a two player tower defense rpg/rogue-like with a necromancy theme. You choose your path - invade or defend villages, summon the dead... and you die. You will die a lot, but it will be OK, because there will be progression even after death in this game.
Initially I intend it to be single player - you will play versus the computer. I do not know if I can or will implement multiplayer. In a match you will defend, attack, or both.
When I first started the project, I used a modified version of the Follow Path behavior in Stencyl to order the creeps around. I made it so I had a waypoint actor that when placed in the scene editor, a path would be created in the order I had placed them. A bug occurred sometimes when I had to edit the path, and I eventually desired a more dynamic system, so I began researching A* pathfinding. I tried adapting pseudocode examples, but I just couldn't figure it out. Thankfully, merrak wrote
this extension, which does that I tried doing. You're a lifesaver, merrak. After I got that, I wrote my own version of the Follow Path behavior to give myself greater control.
My game has a top-down view, so all space is occupied by tiles. Using merrak's extension and a bunch of custom code, I made my game only find nodes on a specific layer named TilePath. Also made it only form diagonal connections whenever there's a lateral tile in between (so if two corners are touching, creeps won't skip over my laid paths). Because of this, all I need to do is draw the path on that TilePath layer, and the game will detect it. Additionally, I can add a tag to a tile, such as "water", and if the creep detects that it is over such a tile, it can slow down or speed up accordingly. The game will find the best path as a result.
This will allow me to speed up the process of designing paths, either by hand or randomly generated ones. I will also be able to generate multiple paths in the same level, where my original system I could only have one per type of waypoint actor.
I'd like to remind you that this is placeholder art, except for the creep.
Here's the minimap in action. You can move the camera by clicking on the minimap, or dragging the scene around.
https://i.imgur.com/W02dWr0.gifvThis shows the rest. Green colored blips are your guys, and red blips are enemies. Currently all creeps only move to the player actor, but that will change, of course.
https://i.imgur.com/oLJiQnn.gifvI also have a speed feature that slows or speeds up the game, but I forgot to record it. In the final game, your "towers" will actually be characters, as some other TDs do. They will form your party across the game. I simply couldn't use towers, because it didn't make sense to me when you replay a level, the towers from the previous time through the level disappeared.
Your heroes (towers) will progress as they gain experience points and level up. They do this outside of a level. They will have abilities of their own, like towers do in other TDs, but I may possibly include short perk trees. Maybe not. Not decided on that yet. You will also be able to designate their equipment, which will have properties of their own. This may make it seem like a match consists of setting and forgetting your heroes, but to keep you busy you'll have spells to cast and undead to summon.
I have more ideas for my game which I may write about later.
Now that I have more free time, I hope to get a lot more done... if I don't get wholly consumed by Overwatch and the other games I've been waiting years for.