Even though I got sidetracked a little bit last weekend, I still was able to finsh the new character models within my timeframe. These guys are super fun and fast to make since I was able to re-use so much geometry and textures in a few areas by maintaining UVs.
While looking through Youtube the other day, I stumbled upon this AI video for a fantasy turn based tactics game, very similar to Advance Wars, and thus very similar to FantasyConquestTactics.
There’s a whole series of these, going up to part 9, which shows the evolution of the AI, and the progress of the game’s art and many other things. It turns out that this game just recently released on Steam Early Access, so I had to go grab a copy.
Shattered Throne is immediately recognizable as being inspired by Advance Wars, and plays very similarly. Units move, attack, counter attack, take damage, move onto buildings to capture, etc. The big differences between it and Advance Wars are that units don’t need to perform capture actions to capture buildings, and instead only need to stand on the building to capture. Some buildings like towns or villages revert to a Liberated state before then being captured, so they will take 2 turns to capture. Also, the strength of the unit doesn’t matter, and a 1 strength unit can capture a building the same as a strength 10, which only requires 1 turn if its something like a keep. This means that play is a little more fast and fluid, as you don’t have to spend turns just capturing, and buildings turn over back and forth a lot more. Buildings also heal 5HP instead of 2 like Advance Wars, so its possible to move in with just a single unit and establish a new area.
Another big difference is that units don’t all start with a base of 10 health. Some have 6 health, and some have up to 12 or maybe even 14 from what I’ve seen so far. I’m not really sure why this was done instead of just equalizing all units to have 10 health and offsetting their defensive stats to make them take more or less damage. Every unit that I’ve seen in the game can also move and fire, although some get a bonus for firing without moving. This is another change that I don’t really like; The different ranged units don’t feel as unique from each other, and I feel like positioning is not as important overall. Units do have some skills and abilities that give them a little more variation between them, but overall it feels a lot less like chess or rock paper scissors.
Shattered Throne also has more buildings types than Advance Wars, and you also have the ability to upgrade the basic Town building type into more advanced ones. A few of the advanced buildings I’ve found somewhat useless, like the Cathedral which respawns units that die within 8 spaces of it, or the Graveyard, which spawns you 1 zombie unit per turn. There are also defensive structures which make movement through them very difficult if not held by your team. I think overall the terrain bonuses matter a lot more than in Advance Wars. +2 defense seems really huge in this game, with many attacks against such doing no damage.
The last change that I can think of now, and the one that has the biggest impact on how this game is played, is that each time a unit is attacked, it gets incrementally increasing combo damage applied to it on subsequent attacks, but only if the next activated unit attacks that same target. If you attack a unit, then want to use another unit to heal, then a 3rd unit to attack the first unit again, you’re going to lose that combo bonus. This means its VERY important to plan out the order of your turn from the start, and why I feel like the sequence of attacks is a lot more important than the positioning of troops in this game. FantasyConquestTactics already has a combo damage bonus system, but its not currently dependent upon the order of attacks. Although requiring subsequent attacks raises the overall skill ceiling in the game as it requires much more planning, I feel like this slows the game down too much to keep the combat streamlined, and lowers the overall accessibility. Its a very easy change the make though, so I might play around with it at some point.
Shattered Throne’s units are divided into 3 different factions currently, which means each faction has very few units to choose from overall, relative to Advance Wars, and there’s also a lot of unit overlap as each faction has essentially the same few unit types with subtle differences. When you’re stuck with choosing a certain faction, you’re kinda stuck playing that faction’s playstyle as well.
Shattered Throne uses the same CO system as Advance Wars, meaning you get 1 or 2 special powers depending on how many gems you use, which you get by killing enemy units. Again, this limits your playstyle, and it would have been much cooler if they’d gone with the multiple powers system that Warbits uses, and which FantasyConquestTactics will also use.
The mechanics in the game work very well together, and the game is very fun to play, if currently a little challenging. The writing is far from great, but the biggest detractor IMO is the complete lack of any coherent aesthetic. Every piece of art is done in a different style, and while many of the individual pieces are decent on their own, they look terrible when put together. The in game units are sprites, the CO portraits a painterly style, UI graphics done in bright illustration style, HUD elements in high contrast game art, menu graphics bright primary colors, fonts of every style and color, terrible shading effects, etc. Just look at the loading screen:
The background image is great, full color atmospheric painting, then the black and white logo is thrown over it ruining the whole thing. The black logo text blends into the dark background making readability difficult. A lot of the other presentation suffers as well, and the game really needs a single competent artist to come in and do a complete redo so that at least everything is the same style and look, and also so there’s a better UX experience.
If you’re a fan of Advance Wars, this is a must play. Even though it suffers from some minor issues, its still great to see that Shattered Throne made it through Steam Greenlight, and it will be very interesting watching this game develop. I think there’s a lot to learn from seeing what works well, and also seeing what to avoid that doesn’t work well. Knowing that its also being developed by 1 guy gives me a lot of confidence that I can pull this off, and I think FantasyConquestTactics will become even better just by this game being out there.
After showing off the build to a few people the other week, I decided it wasn’t quite ready as a demo. The first thing that changed is the map got a bit of an adjustment, and I also added some filters to make the world a little more bright and cheery.
Units now spout chat bubbles when selected or ordered, and also when being hit. These are read from .txt files, so it will be super easy for the user to modify them to add their own custom phrases.
Combat now features damage numbers that appear on hits. You can also see some more chat bubbles. Right now they show up 100% of the time, but later this will be an option if it becomes annoying to someone.
And the biggest change will be the addition of proper character models for all the characters, starting with the Builder.
The fact that he looks more than a little like a previous character from a previous game I worked on is no coincidence. Reduce/Reuse/Recycle!
In engine. I’ve decided to go with a less manic animation style for characters.
New this week, shadows have finally been added to the game, and also outlines!
I’d tried to add shadows before to help anchor the characters to the world a bit better, but because I’m using separate cameras for the different layers to get Units standing on terrain features, the shadows from the characters layer wouldn’t show up on the terrain layer.
I could have always used static blob shadows directly under the characters, but before I resorted to doing that I decided to check the Asset Store for anything that could help. Much to my delight, I found a free shadow projection asset that can cast shadows across the whole level with just a single projector and texture! The max resolution of the shadow is 512×512, but since the camera isn’t that close to the ground, it looks just fine.
About the outlines, the temporary characters models that I’ve been using have them as a shell mesh. When I created the Catapult and Ballista without them, the details and different pieces didn’t read as well, and those Units didn’t stand out against the background as well as all the characters. The models are such low poly that adding a few more isn’t really going to hurt that much, especially on PC or console. Some of the outline colors are all currently consistent, but I think when I do final models, I’ll color them differently per piece. For example in this image, the flag will get a dark red outline as opposed to the same gray outline as the rest of the structure.
As I’ve been doing a bit more playtesting, I found that in the mire of combat when you’ve got a whole gob of units smacked together, you tend to lose track of what or where you are selecting. To remedy this, I’ve created a bunch of cursor models that hover above the cursor when selecting certain things or performing certain actions.
Here’s the model for selecting Units. This finger might look familiar.
For movement, a boot. The animation is kinda wonky, so I’ll probably turn it into 2 boots walking in step.
For setting Unit rotation, a little spinning arrow. I also changed the set rotation facing to be a click select, click confirm selection. I’ve also filtered out buildings as a possible rotation direction, since there’s no reason you’d ever want to face a building and expose your back.
And the model for attacking. Anyone who’s played Final Fantasy Tactics may recognize the inspiration. This gif also shows that Arrow projectiles are now finished, and also implementation for team projectiles is in.
Lastly, I added the option to show all tiles in range of all enemy Units. Fire Emblem had this, and it really stream-lines the user experience when you don’t have to go and check ranges on each unit individually and try and remember which tiles were in range. Its currently quite slow because it checks every tile in movement range of every unit, and then every tile within attack range of that movement tile, so I might run the calculations in the background during the team change animation and income gathering, or make an attempt to optimize the calculations a bit somehow.
Another productive week here for the game, and despite a lot of code refactoring, there was still a lot accomplished. I realized that I had 2 separate ranges for characters for attacking and for abilities, but one of the tenants of the design is that each Unit needs to have only 1 singular purpose or action in the game, so that means one of them, and all the associated methods and lists were all extraneous. I removed that, and also condensed all the combat calculations into 1 script and merged some of the Unit Attacking and Unit ability actions, along with the Building capturing, and condensed all the separate overlay code into 1 file. I also broke off Unit movement into its own script as the file was getting quite long.
Now, onto new visuals and animated gifs! The Ballista Unit is now completed! The Ballista is a direct fire Unit. That doesn’t mean anything right now, but eventually there will be proper Line-Of-Sight and things like other Units, along with terrain features like forests, mountains, and buildings, will block projectiles, so the Ballista will be unable to fire over them. It also has a shorter range than the Catapult, and doesn’t do quite as much damage. Its advantage over the Catapult is that it can attack flying Units.
The firing and projectile code needs some extra support for Team colored versions.
Camera focusing is now implemented, which was pretty simple to add. I’ll make this an option on selecting units later on.
When buildings generate money, there’s now an effect that plays.
You can see this effect applied, along with a new Team Change bar was added that shows up between turns, and also showing the Camera focusing. It should now be plenty clear who’s turn it is with the completely color coded UI and bar. The health hearts also pulse when being healed, and I’ll probably also add some floating heart particles too. Also note the pause menu is in.
Lastly, I got Villagers able to heal Catapults and Ballistas now. The new overlay supports coloring and can be resized as well, for later status effect messages.
Hit effects and the resulting blood splatter are now in. The size of the impact effect, and the amount of blood drops that spurt are directly related to the amount of damage done, same as the camera shake. This is something that’s so easy to implement, and I wish that more games would do this kind of thing.
Unit Recruitment is now possible from Keeps and Villages, with only Villagers being able to be recruited from Villages, currently. The list and Unit information is mostly dynamically populated, meaning it will be very easy to add other units in the future. The menu scales to fit the screen space, so on a decent sized screen you shouldn’t have to scroll much to choose Units. As you can see you’re able to place units in one of the 4 adjacent spaces to the building. By default Units you recruit will be unable to activate this turn, but that’s something that still needs to be set.
The past few days have seen quite a few UI updates. The SelectUnit / End Turn button in the bottom left now properly updates on non-activated Units, selects through the list of un-activated units, and ends the turn if all Units have been activated.
I finally got the color changing HUD backgrounds working depending on which team’s turn it is. You can also see the healing hearts pulse when units are healed by Villages or take damage. I will later stagger the healing via villages so they happen in succession, along with camera focusing on each Unit.
The Tile and Unit info panel is now working, and is color coded depending on which team’s units you select, or buildings. The icons representing Movement, Attack, Defense, Vision, and Range are still temporary, and look pretty shitty.
Another feature that’s implemented is projectiles, currently only for the Catapult. I was searching and searching for good trajectory code reference, but none of them took into account inertia, or properly handled rotation for an arrow’s rotation as it arched through the air. At first I started to implement my own, but then realized that would take hours and hours. Fuck that, KISS! (Keep it simple stupid)
The projectile class now just translates the projectile straight at the target Unit.
And an animation handles all the upward movement, rotation, and potential scaling as it ascends and then descends. Way easier, faster, and with much more control.
So far, all the Units shown have been temporary stand-ins to test gameplay, and help get a feel for the final model scale and such. Well, the first actual Unit is now complete, the Catapult! The Catapult will act as you would expect, very slow moving, long range, extremely high damage, but no CounterAttack and a minimum attack range. They are unable to attack Flying Units. They will get a bonus movement if moving on Roadways, which is still to be implemented. Since they are a machine, they won’t be healed by adjacent Villages or Clerics, but can be repaired by Villagers.
The goal is to keep all the Unit models under 500 tris, and under 10 bones whenever possible. The reasons for this are because the game is probably going to be played at a scale where any more detail is pointless anyways, there’s also potentially going to be a good number of units on screen at once, and also to save from having to do an optimization re-do of all the units for an eventual mobile release. The texture style is going to be flat shaded like the environment, which saves time in creation, saves from extra rendering passes with fancy materials, and can downsize extremely well without banding artifacts or becoming muddy. It also allows means the game will take up less space, which some people care about.
A little bit of bone scaling to emphasize the attack.
Another somewhat related development is that Hills and Mountains now give a +1 and +2 square range bonus for ranged attackers. Because Catapults will be unable to move on Mountains, the most they can ever get is the +1 from Hills, so that should keep them getting too powerful. This is also the reason that Buildings go neutral first before being required to be in melee to be captured, otherwise it would be too easy to roll up with Catapults and capture everything from afar. I’ve also changed Capturing to be based off the capturing Unit’s hitpoints, so that a super buffed Unit isn’t able to capture a building all in 1 turn either.
Big update this time! After getting the basic combat working, I added in the ability to click target an enemy, and have auto move to a tile within attack range.
You can also select move, select attack from a specific tile.
The next thing that’s new is that I changed how buildings operate in the game. Previously I had units rendering on another camera that rendered on top of the buildings and everything else. This worked great for units standing on buildings, but when a unit was standing behind a building, it would get rendered in front of it and that looked really weird, especially when the camera lined up right.
After researching online, I found there’s no way to really custom sort 3d geometry in Unity, so what I decided to do is also put the buildings on the same camera layer as the units, and changed the game design such that units no longer move on top of them to capture, but instead “attack” them from the sides like Lost Frontier. What I didn’t like about the way that Lost Frontier handed capturing buildings though was that if an enemy started to capture your own building, there was nothing you could do to undo the capture damage they’d done. You would have to wait until they captured it, and then recapture it yourself so it was back at full health, or hope you could kill all the enemies. Also, once a building on a team is damaged to 0, it first becomes neutral again before being able to then be captured for the other team, so this will limit the amount of flip-flop occurring with buildings. Also, Villager units will be able to repair buildings of their team, undoing the damage done by the other team. Any unit that can attack will be able to damage enemy buildings, but only melee type units will be able to capture a neutral building.
What else I like about this system over the previous standard Advance Wars system of capturing is that effort towards capturing a building is not completely lost when the unit on top dies. Also, since the buildings all have a health value, that can be used to affect other things in game, like making the amount of hitpoints healed to adjacent units be based on the building health value. Also, I want to try making buildings with a lower health value only produce units of strength equal to the building health, which will make Villagers and keeping buildings repaired very important!
The last big thing in this update is that I got terrain movement modifiers working with pathfinding!! Woo!!! I wasn’t sure I’d be able to handle this myself, and it did take quite a few hours to figure it out, but its in and working. I also updated all the attack range displays to use the terrain modifiers as well so they indicate properly.