Hi friends, fans and family!
Haven’t posted in a while and I thought I would correct that 😊. The game is still being worked on and I’ve made quite a bit of progress since my last post in February(!)
Instead of trying to remember everything that’s been added since I’ll try to pick out some of the “best” stuff and also talk what the next goal is.
I’ve added some code that allows me to setup different missions like for example: reach this point on the map, kill x number of enemies or a specific enemy, survive x turns etc and many more types will be added. I strongly believe that I need a lot of different mission objectives to keep the game “fresh”. There will also be secondary objectives that are not mandatory but will reward you with bonuses of different kinds upon completion.
The way I’ve implemented this is I have “Mission” protocol/interface that has various different methods that act like triggers
Here are some examples: UnitReachedTile(unit, tile) and UnitWasKilled(unit) and NextTurn(turn).
The mission also holds a specific map with enemies etc
The Mission class is passed to a BoardManager class that knows when these events happen. The BoardManager then invokes the methods on the mission. So when BoardManager tells the mission that a unit has been killed, the mission code can check if this was the last enemy or if the enemy is a boss or if it was a player unit etc and set the state of the mission accordingly.
Fire & Ice
I’m going for skills that create a lot of emergent gameplay so I try to avoid attacks that only do damage and one of my “rules” when designing is that no skill is allowed to do only 1 thing. Ice for example freezes units so they can’t do anything for 1 turn which sounds pretty standard but…
A frozen unit will prevent fire from spreading and the ice will melt when attacked by fire. So you can freeze one of your own units to protect from a fire attack! The other thing you can do is freeze water to create bridges. If somebody stands on the frozen ice and they get hit with fire… Well the ice will melt and the unit will drown. Fire also spread randomly between tiles which gives the game some dynamism. I’m very pleased with how ice and fire is interacting though more graphical work is required to show it off more clearly.
Here’s some fire:
Lots of if cases 😂. Tiles can hold ice and fire (child gameobjects of the tile) and there is code to detect if something is frozen when hit by fire etc.
I think having different types of tiles is important in a tactical turnbased game since it makes positioning more “complicated”. The most common way of doing this is to give different tiles different bonuses/penalties: forests have +1 defense while hills increase the range of attacks or something like that (this is in the game already). Another way is by setting a movement cost for different units and tiles. In Fire Emblem for example, units on horseback have a harder time crossing forest tiles. I wanted movement to be impacted somehow but I’ve never been a fan of the “movement cost” approach since I feel it’s too fiddly so I needed to try something a bit different. Enter roads. A unit beginning their turn on a road can move their distance OR move freely on roads until blocked by an enemy. This allows you to move great distances. To mitigate this a bit I added a defensive penalty on roads which makes units on roads very vulnerable to damage. Here’s an example:
My first challenge was to place the appropriate road sprite on the corresponding position. I began by having a specific type for each road tile like “NorthEastRoad” and “NorthSouth” road etc but this quickly became unwieldy since mapdesign was hard and if cases for detecting types of tiles were huge and unreadable and I knew I was going to have to refactor it at some point. I then changed the architecture to work like this: all road tiles have the type “road” but when they are placed I examine all their neighboring tiles, if a road tile has a road above and below it then I know I have to place a “NorthSouthRoad” graphic there. This code was then reused to handle water as well. It’s now super simple to “paint” roads and water since the corresponding graphic is drawn without me having to think about it when designing 🎉.
The other problem was related to pathfinding and allowed tiles in a turn. When a units turn begins I check if it’s on a road tile. If it is I draw paths out from where the unit is standing and only add road tiles to the path until I can’t add anymore. So my “allowed tile movement” contains the normal range + the road tiles from the pathfinding. When a unit wants to move to another road tile I check if its within the unit’s normal range and if it is not I know that the unit wants to do a special road move and I restrict the red path arrows to only follow the road. My normal pathfinding cares about showing the shortest path so I need to restrict it so the unit doesn’t move outside of the road crossing hills, forests etc. The feature needs to be tested some more but it spices up the movement and feels different in a good way.
I’ve added some more shading to the units and also changed up the tiles to add some more variety on the maps and make them look a bit better. The graphics are still on the simplistic side and I’m favoring production speed and clarity over “beautiful” graphics, mostly because it’s the only realistic way to actually make and finish the game on my own.
There are still a million things to do but my main focus right now is to send something out to my closest friends to let them have first stab on it and iron out some things before I make a “meatier” demo. This demo will most likely be used as an incentive for signing up on an email list that I will be creating shortly.
The other BIG thing is that I need a name for the game before I can start creating store pages on steam and itch. Once I have that I’ll be setting up a website to increase visibility and all of the other stuff you need to do so people know your game exists…
I’ll try to post a bit more often hereafter (aiming for once every two weeks) but you know how it is 😂
Finally, here some actual gameplay to finish up! Thanks for reading 🙏 / Luis