MATT HASTINGSHOMEFRONT END PHILOSOPHYPROJECTSTHREE HAMMERS
Presentation · Oct 1, 2026

What is left on the field

Dead units used to freeze for a few seconds and vanish. Now they fall, settle, become bones or splinters, and fade. Here is how, and what it cost.

Until this week a dead unit held its last frame for a few seconds and disappeared. This chapter covers the new lifecycle every creature now has in review: a fall, a settled body, a skeleton (or splintered wreckage for machines), a dissolve and a puff, built without an engine change, and what it does to the fight.

A battle in an RTS ends twice: once when the last unit falls, and once when the field clears. For Three Hammers the second ending was a weak one. A dead unit held its final frame for 180 cycles, six seconds, and then vanished, with a dust puff on a timer that did not care what the body was doing. I wanted the aftermath to read: you can see where the fighting was, and then it quietly goes away.

Four moments after four test fights: dwarf guards against trogg brutes, with settled bodies and skeletons lying where they fell.
Four moments after four test fights: dwarf guards against trogg brutes, with settled bodies and skeletons lying where they fell.

The lifecycle

Every creature now follows the same sequence, in game cycles after the kill (thirty to the second):

That is 242 cycles in all, about eight seconds, against 212 before. The skeleton is built from a template per body plan: a skull with two sockets, a spine, ribs, a pelvis and four limbs, outlined to match the sprite. The sheets grew by new rows at the bottom; every row that was already there is byte-identical.

Moving through the fight: bodies lie where they fell, then turn to bones behind the living.

One animation, no extra units

The engine can do this the obvious way: when a unit dies, replace it with a "corpse" unit type that has its own animation. I measured what that costs, and chose not to. A unit that dies mid-step snaps up to a tile, 28 pixels in the test, because the engine overwrites its position offset at the moment of death. Corpse types also add names that an older save game cannot find.

So the whole lifecycle lives inside the unit's own death animation, which the project's notes call route B. Sound and death hooks fire once at the kill, exactly as before. Remains draw beneath living units, so a skeleton never covers a fighter. They cannot be selected or targeted, and they do not count for anything. The engine itself is unchanged.

The price is that a save made mid-death replays the fall after loading. It is cosmetic, and it lasts one lifetime.

Machines splinter

Nothing anatomical applies to a siege engine. Its remains are broken planks, metal and a scorch mark, with identity pieces, a wheel or a plate, left as drawn, then the same dissolve. Skeletons would have been wrong for the Siege Engine and the rams; so would a wreck for the boar.

The Siege Engine, then the stages of its wreck left to right: planks, scorch, and a slow dissolve.
The Siege Engine, then the stages of its wreck left to right: planks, scorch, and a slow dissolve.

The war boar got a quadruped skeleton: a skull with a snout and tusks, a six-pair ribcage, four legs and a tail stub. The Wildhammer Ram-Rider is on the same boar skeleton for now, with no rider, because its real art has not landed yet. That is on the list of things owed.

The falls that were wrong

Going through every unit's death turned up three that were broken before any of this. The Shieldguard stayed upright with its shield braced and then lifted a hammer, which is a flourish, not a death. The Ironguard Champion's death was built from bracing frames, and the Stone-Speaker's from channelling frames. All three now fall. Two stand-in casters, the Runesmith and the Stormcaller, had their death rows re-sourced.

The Shieldguard's old death above, new below: the old one stays on its feet, the new one goes down and lies.
The Shieldguard's old death above, new below: the old one stays on its feet, the new one goes down and lies.

Does it hurt a big fight?

A longer death keeps a unit in the game longer. Slot use in test waves of two hundred victims did not change, but with the long timing profile and waves spaced close together, the peak count of units alive plus dying rose from 400 to 600. The short profile, the default, did not. A third profile, same_total, matches the old lifetime exactly. Same winner either way in the large fights, though the traces differ.

The final puff got two candidates, a dim ash and a brighter cloud. Which one organic remains use is still open.

Two candidate puffs, each at one and two times scale. The faint ash is the top pair; the brighter cloud is the bottom pair.
Two candidate puffs, each at one and two times scale. The faint ash is the top pair; the brighter cloud is the bottom pair.

What is proven and what is judged

Every dwarf, trogg, human, beast and machine in the roster now has either a finished lifecycle or a written reason for not having one: the Commander, walls, buildings, trees and gold mines are exempt. A switch makes this permanent: a new creature that arrives without one fails the checks. The headless runs prove the stages, the timings, the release and the slot use. I looked at the look in a real window on a test field and approved it. That field has no pause, fog, zoom or selection, so those have not been looked at yet.

None of it is in the game's files yet. The game folder is held still until I have played the current review build, and this work waits in its own branches until then.