Oh boy, oh boy do we have a lot for you! According to my calculations, I scratched 24 major items off of my to-do list this month (and that’s not including some other behind the scenes changes)!

TL;DR: Look at the pretty pictures towards the end.

I’m going to ease you into this, so let’s start simple.

Crucibles

They don’t exist anymore. Why? I got rid of them! I was hung up on how to integrate them with unit spawning so I asked myself, “How do Crucibles enhance gameplay?”.

Short Story: they don’t. They were basically just less interesting keeps.

I made a list of “core elements” to help guide my design decisions.

1) Team based multiplayer.

2) History–toying with the idea of permanence and legacy.

3) Genetics–breeding, research, sabotage.

Crucibles didn’t fit in there.

Outposts

Did you know that Crucibles were a type of Outpost? Although Crucibles are gone, Outposts received some significant improvements!

Outposts now include events that detail why the outpost was entered or exited (movement, spawn, death, pickup, and drop). This is also applied to when units move around in an outpost. With this in place I can appropriately assign/unassign units to thrones…and implement baby thievery…

Build Command

Previously, outposts could only be built by a builder unit. To remedy this I’ve added a BuildCommand that doesn’t require a unit to use. This allows me to start games with pre-made buildings.

Start Game Command

With the addition of the BuildCommand, the StartGameCommand was just begging to be created! The StartGameCommand is a network command that sets up the initial state of the game based on players/settings in the lobby.

Lobby

What lobby!? This lobby!

Lobbies were added to better facilitate networked game creation.

Skill Class

More on the back end of things I removed the Skill class and replaced it with its base class: UnitAction. This allows me to be a bit more flexible when creating skills. It also reduced a lot of clutter in my code.

Melee Skill

Speaking of skills, I used the same code from building previews (which I talked about in my last update) to allow players to choose which tile they want to attack from when using the Melee Skill.

I also fixed a small bug that made Pillars untargetable by this skill.

Pillars

Pillars have been given some decent attention this month. They now have appropriate events for things like damage, spawning, visibility, and death.

With that functionality added, I was able to make Pillars take only one point of damage per hit. This is to ensure strategic depth when choosing whether or not to attack a pillar.

OnChange Modifiers

In order to accomplish this amazing feat with Pillars, some new code was added into the mix. OnChange Modifiers modify incoming stat changes (e.g. cap or multiply the amount of damage done by an attack).

Stat Changes

To ensure that the OnChange Modifiers could actually be called (and that units actually got experience for a kill), I locked down stats to only be changeable via function calls.

I also gave stats an in-game visual display (at least for health).

On a related note, the “+1” icon (used for indicating available skill points) now only shows for the appropriate player at the appropriate time.

Knockback

Not much here on the visual front, but code-wise I replaced my basic knockback object with a KnockbackAnimationManager. Knockback is now run via the animation system and can be canceled via unit abilities (COUGHOVERWATCHCOUGH).

After refactoring a couple of times, the knockback manager requires two animations: a placeholder animation and a knockback animation. The placeholder handles animation triggering for knockback chains and the knockback animation actually plays it out.

I also added the ability to turn off knockback chaining so I can reuse the knockback code in the Hookshot skill and not knockback/damage the caster.

DeathManager

The knockback manager caused some issues with the old setup. When units would die, their death event would get triggered and they’d be deleted off the board. The problem was that this would happen even in the middle of knockback! Having null objects being pushed around with no position on the board caused some pretty major issues.

DeathManager to the rescue! Now, when a unit dies, it’s added to the DeathManager queue. The DeathManager runs at the appropriate time and triggers the death event for any dead units.

TileExitedViaDeath

While we’re talking about death, it’s probably good to mention that I’ve added the TileExitedViaDeath event (as was alluded to in the Outposts section). It triggers an event whenever a tile becomes unoccupied due to the death of the previous occupant. It’s useful for things like Fog of War.

Fog of War

Fog of War has been added! Players can now only see a certain distance from their units.

Miscellaneous

On a not so exciting note, here are the things that were too unrelated/boring to talk about above!

Created additional interfaces so I can add more unit tests. Added unit tests to Keeps and Infirmaries. Made a spawner class and shared between Keeps and Cities. Added basic addition/equality functions to Point and Tile classes–with units tests as well.

Happy New Year!

–VOX