June 24 2023

4 min read

Turn Lifecycle (Part 2)

Back in April I was thinking about Article #10 Turn Lifecycle (part 1). I severely underestimated the work needed for the combat specific events to properly render; making the month of May a spelunker's adventure deep into the event system and how to pass em all the way upstream into proper visuals.

Combat Diff From Maneuvering?

I dug back into this codebase after 6 months of modelling. The old Pokemon Tactics engine that would originally allow either movement or combat interchangibly has been exchanged with a more strict approach of all ships moving first followed by all ships attacking together.

Despite this ancient divergence, the flow of event creation through solver is still the same as maneuvering. Combat does proc (activate) a bunch of varied effects that accelerate players towards the end of a match faster.

Fun Effect Procs

Damage is perhaps the most exciting thing in games with conflict. All the differing ways something can be destroyed really enriches the experience.

Even basic attacks were made as exciting as possible. A standard salvo uses the skill of the pilot and crew to take shots at a target in range. Most strat games end there with a simple subtraction of health plus some hawt animations.

What happens in the SteelPinion engine is a number of possibilities based on how the target ship responds and what is on the path to that target.

typical turn visual example of two ships not hitting eachother because they take turns


You fool! You've missed! Now what? Depending on the gunnery rank of the ship, you might accidentally hit another friendly ship instead! Or maybe you get lucky and the enemy ships are clustered, so that you get a lucky shot on a different valid target.


You were so close you basically hit the target, only... Wait, did that just bounce off and hit something else?

We've got a rudimentry ricochet mechanic for near-miss standard shots. This one was more fun than I realized, so I want to come back to this and rework it to be a more fundamental behavior of the physics instead of a specific event proc.


If an enemy target dodges a shot, then the round will fly past them and into something behind them. Having a better gunnery rank will allow some shots to avoid becoming friendly fire.

Elemental Edges

Pokemon battles are all elemental balance. It's boring back in forth face slapping strategy is only remotely strategic due to the elemental weakness table.

SteelPinion has a similarly inspired armor material table exposed in the mods which grants certain resistances or amplifications of certain elements. While pokemon had a whopping 15 types to start with, I found that number hard to balance. So I dropped it down to 4 elemental types for SteelPinion.

It is possible to add more element types pretty easily thanks to the mods.


Fire damage is a classic that we'd be remiss to include! In this world, a ship on fire will consume stacks of fire in exchange for health. If a ship has too much fire at one time, then the flames may intensify and consume an upgrade on the ship.

So if a player is facing an opponent with superior optional attachments, one way to balance the playing field is to set those parts on fire and melt the capability off their ship.

The default weakness table has wood hulls weak against fire which adds an extra stack anytime the ship is set on fire. Resistance to fire is only found in the rare steel armor.

Ice Ice Baby...

Perhaps it was Vanilla Ice whom inspired me to include cryogenic steampunk weapons onto the field. Frost can counter fire. When a ship has both stacks then they start to cancel eachother out before invoking "bad things".

If one manages to get cold, then the ships maneuverability suffers for it. Not being able to access a ship's full set of maneuvers can make your future positions predictable. In other words, getting too much frost makes you like a fish in a barrel ready to be shot.

Larger lumbering ships are likely not as affected by frost, but the smaller more maneuverable ships could be severely hampered by such a debuff.


Another popular elemental effect is electricity. Eureka! Shock will behave like mild critical hits. Preventing some finer access to things like complex maneuvers, simple maneuvers, or crew intents.

What is shocking about shock stacks is that it will be random which functionality gets hampered. Intense shock can access a more menacing lookup table like perk removal, or pilot unconsciousness.


The last one is a basically acid. It is meant to counter heavily armored ships. Armor in SteelPinion is pivotal to a match. The angles where you get hit matter, and corrosion can make those angles matter much less by melting nearby armor off.

Normally it takes one shot per peice of armor. Yet a single proc of corrosion could completely open up an angle, exposing the ship to devestating critical hits.

Critical Hit!

No game is complete without some form of critical hit. Whether Role-Playing, First-Person-Shooter, Real-Time-Strategy, Tactics, etc; it is there! Maybe as a headshot, ultimate move, or vulnerable state.

In SteelPinion, critical hits have a chance to proc if you don't have armor and are hit by a standard shot or ballistic round. There are some standard crits that do double damage, and disable things.

It was fun to add in effects like having a crewman tossed overboard or knocking out the captain. We have some fires that can get started atop damage taken, or my personal favorite, breaking some unknown thingamajig on the ship which takes up a customization slot and debuffs some core stats all at once.

What's Next

typical turn visual example of two ships not hitting eachother because they take turns

Looking at a timestamp in the design document, and it has been about one year since I began the quest of adding graphics to this headless engine. It has taken a full year to not master Houdini, but get adept enough to produce something close to what was imagined.

I am proud of were the project is today, and it'll be a little more push before we start doing graphical updates regularly. The expectation is to be in a groove moving from modelling, animating, integrating with shaders at runtime, then sharing that progress here more regularly. Living in the code is good fun for me, but it would be nice to share with people in a way that ressonates more than the mere descriptions above. Reading about the effects or seeing the numbers in ASCII isn't the same as experiencing sound with particle effects with a good camera shot!

Join our newsletter!