Cooking with Gas

It has been a fructuous month for game dev in my household. Starting off the month strong I made an appearance at Nexus and had some great chats with people in the Irish game dev community. Lots of great presentations, got some great feedback on the game, and a huge motivational boost. So maybe it’s no surprise that looking at my task list I made for last month’s dev blog I can say I’ve accomplished ¾ of them! I’ve added the following to the game:

  • Buff & Debuff spells

  • Active effects (like poison or heal over time)

  • Class abilities

  • Unique abilities

  • Positional abilities (bonus for being near eachother)

  • Additional terrain effects

  • Conditional terrain effects (like how a closed door is impassible)

  • Conditional actions (like opening a door)

  • Lots of consumable items using all these new effects

  • Weapon proficiency (and the framework for support conversations)

  • AoE spells and attacks

  • Battle Objectives ( not just kill everyone)

  • Pause menu

I even threw in a few features not listed like:

  • Integrate MMF_Feel library and migrate attack animations to use it.

  • In-world health bar and status icons.

  • Add a downed / revival mechanic for units that hit 0 hp

  • Refactor the Unit.cs class and pull out a ton of logic into static utility classes

  • Switch game balance to using a true level vs a display level system.

  • Switched all the game’s fonts

Showing off the new unit info panel and new fonts

Oh where to begin? The month started with a lot of big and scary refactors. I completely re-wrote the combat and action system to leverage MMF_Feel as our main animation system which allows me to time and position sprites, movement, sounds, particles, and floating text with a lot more precision than before. It was a lot of hard coded guts getting ripped out and replaced with what is probably even more code just in new places.  The overall effect is that my side of things is a lot cleaner, and I have a lot more control over the animations so in general they feel a lot juicier and more impactful.

A side effect of integrating MMF_Feel is that I can use it for UI as well :) so the progress bars got a huge style boost and I was able to bring in some very nice tween animations for the unit info panels that slide in and out. I still have on my list to revamp a bunch of the older UIs and I’m excited to bring this new library of functionality to them.


A large number of completed features all tie in to the same system, which is Status Effects. I started by implementing a basic status effect system where a unit can get stacks of a given effect, at a specific trigger point that effect activates and a stack is removed. Then I tied those into some lifecycle events of the turn, so start/end of turn, before/after combat, on damage and on heal. I have some basic status effects in the game, poison/burn (damage over time), regen (heal over time) and stat buffs and debuffs (might up / might down).

Ylsse showing off all her abilities

Of course, had to make some new UI to show off all these cool effects and also added them to the unit info panel so you can see them at a glance.  The next feature, which I dubbed Active Effects originally, was easy to add on to this system. After some back and forth settled on Unit Abilities as the name for this system. They are effects which are permanent and come from either the unit’s class, or their weapon, or are unique to that unit.  A good number of these active effects create “silent” status effects in order to affect gameplay.

Some good examples of this are:

  • Luigi’s Temper ability

    • If Luigi takes damage he gives himself 2 stacks of Might Up (offensive boost)

  • Aleyt’s Regeneration ability

    • Aleyt always has 1 stack of Regen (heal over time)

  • Yeoman Class’s Buddy System ability

    • If two or more Yeomen end their turns next to each other they all get a stack of Guard Up (defensive boost)

Unclear if these will stay in the game exactly as implemented for now but I’m enjoying playing around with them.

Another system that piggybacked on the status effects is Weapon Skill. As a unit uses a specific weapon type over and over they gain a silent XP in that weapon, at certain thresholds that levels up and they get a passive bonus when using that weapon type. So rank D in swords grants the user +1 damage with sword weapons. The XP and tracking was new, but under the hood these give the player an Ability, which in turn gives them a silent status effect, which increases their stats in combat.

In-world health bars

The culmination of all this status effect and ability work came with the implementation of AoE attacks and spells.  This is a big departure from original fire emblem and even the modern games don’t do a ton in this space. But I was really interested in trying to increase the value proposition of buffs and debuffs. So having them affect multiple targets and last multiple turns seemed like the way to make that happen. There are a bunch of supported shapes but my favorite is the laser, which hits every square between the source and target.

Enemy Yeoman about to get lasered

Next I picked up another refactor that had been on my plate for a while, which was to split out tile gameplay properties from tile visual properties. I had, in my arrogance and naivete tied everything about a tile to a single enum, TileType. But this quickly became a problem with low walls and hills where we wanted a tile that looked like plains, but had defensive properties. So I was able to split it out and even was able to add some prefab overrides to my map editor so I can quickly override certain tiles with common effects (like closed door, hill, etc).

The crew hanging out between the terrain info panel and the objectives info panel.

Shifting gears I was a bit intimidated to start in on the work to expand the available actions to a unit. The action system we had was some of the earliest code in the game and took a long time to get working. Up until this point all our supported actions followed the same flow: Move -> select action -> select item -> select target -> preview - > do the thing.  And I was going to mess with that. I knew that I would need to do this kind of thing for Doors and Chests, where you have an action that is sometimes available based on your position, and the action doesn’t affect another unit. The flow for these new actions is Move -> select action -> select target -> do the thing. So thankfully no new steps!

Finally pulling it all together I finished off the month implementing a very cool feature I’d been thinking about for a while. In old Fire Emblem games it’s not uncommon to have to restart the whole battle because you make a mistake. In later game they’ve added a time-rewind mechanic to lessen the impact of a simple mistake. I had thought I would implement something similar even in my earliest design documents.  But in the mean time as I’ve developed this game and played through other SRPG titles for research, I kind of feel like the time-rewind is a cop-out. Either you don’t have many rewinds so you end up with the same problem, or you have a ton of rewinds, so you can use them with abandon and none of your decisions have repercussions.

Tybalt is down, this is not a drill!

I wanted something in the middle, so I’ve added a “downed” status to player units. When your unit hits 0 health they become downed.  Downed is a special kind of status effect and when you remove the final stack of it, the unit is truly dead. (Permadead dead). But while a unit is downed you can spend an action to rescue them, which sends them back to camp. They keep any XP they gained this battle, and they aren’t dead, they’re just out of the fight.  All of the systems implemented this month played a key role:

  • The conditional location-based actions.

  • The status effects

  • The action animations (and hit animations)

Looks like someone’s about to be rescued.

That’s a lot of stuff and some of these deserve maybe their own whole blog posts.  Maybe I’ll start doing some mid-month features where I can deep dive one of these more fully. But I’m not committing to it. You didn’t just read me committing to doing more things.

So after all that, here’s what’s remaining on that original “all of q4 milestone” list from last month:

  • UI revamp for some of the oldest menus and UX

  • Early skeleton campaign system

  • New battle tileset: Town (art and assets for battles in a town)

Granted some of these are big, ambiguous, items (laughs in early campaign system) but at times like these all we can do is add more stuff to the to-do list! Stuff like:

  • Walking and Idle animations for base classes

  • Fog of war (can’t see into buildings you haven’t opened yet)

  • Night missions!

  • New Main Menu Art

  • Polish, so much polish.

Yeoman off for a stroll.

I am aiming to have a vertical slice for this game in the springtime so I’m going to slowly be shifting away from new features and into polish, quality of life fixes and visual updates. Still plenty of new features to go before we get there.

Until then.

Next
Next

Milestone In the Bank