← All devlog posts

Earfh

The dash, the streaks and a shield you earn

In two days Earfh's dodge roll got a tap and a hold, melee and ranged streaks got pair bonuses, and a perfect dash turned out to be farmable. The fix for that fed a shield pool, and the shield fed the streaks.

Written up later from the repo's history and dated to the days it describes.

On October 3 and 4, Earfh gained a layer of systems that all depend on each other: combo streaks, a controllable dash, streak sustain and a shield pool. The order they landed in matters, because each one fixed a problem the one before it created.

Streaks that reward not missing

The first piece was two streaks, one for each weapon slot. The Melee streak counts consecutive landed swings, and the Ranged streak counts consecutive firing patterns that hit. Each pays out in four tiers, at 6, 12, 20 and 30 points, with bonuses that run from 8% damage at tier one to 35% damage and 20% attack speed at tier four.

The detail that took the most design is what counts as a miss. Swinging at empty air never breaks a streak, so a player can keep punching after a kill. A swing breaks it only if it landed nothing while a live enemy stood within one and a half times the weapon's reach. A shotgun blast counts as one pattern however many pellets it throws, and a Whirlwind through a crowd is one hit, not ten.

Weapons also differ a lot in cadence. The Bat swings every 0.55 seconds and the Switchblade every 0.18, so counting hits would let the fast weapon climb three times as quickly. Each hit is worth the weapon's own cooldown divided by 0.4 instead, clamped between 0.4 and 1.5. A Bat swing is worth 1.375 points and a Switchblade stab 0.45, so every weapon climbs at about the same rate per second and nobody's attack speed had to be cut to keep it fair.

The third slice added pair bonuses. Two streaks held at once, counting the existing Dash Chain as one, switch on a named effect. CLOCKED IN pairs the Dash Chain with Melee, DRIVE-BY pairs it with Ranged, and SWITCH HITTER pairs Melee with Ranged for 10% more damage on both. The first smoke test showed that holding two streaks at tier two was too hard, so the threshold dropped to three points each.

The dash that could be farmed

The original pair bonus gave the paired streak one extra point for every perfect dash, which is a dash timed to the beat as a roll charge comes back. The owner smoke-tested it on October 4 and found that a perfect dash moved a streak without any attack. With the paired streak's decay halved, a player could stand there and dash on the beat to hold a streak up.

The fix is that a perfect dash adds nothing by itself. It arms the paired streak's next hit instead. Land a hit within two seconds and it earns 1.5 times its points. The dash now has to be followed by an attack, and a break or a dropped pair clears the arming.

That same day the roll itself changed. It had been a fixed 0.25 second burst, fully invulnerable, with only its cooldown upgradable. The owner asked for more control and an invulnerability window that could be upgraded. A tap now ends the roll at 0.12 seconds, a hop of about 70 pixels, and a hold runs the full 150. A held direction bends the roll at up to 270 degrees a second, and a melee swing or the ability cancels it. Shooting does not.

The invulnerability is now its own window. It lasts as long as the roll does, so a full roll keeps its 0.25 seconds and no boss attack changed. A new Supply Depot track called Safety Training adds a grace period after the roll ends, 30 milliseconds a level for five levels, ending at 150.

Sustain you have to play for

Mob density stage 1 had made the horde harder, which the owner wanted. Healing was thin, though. It came from a timed regen powerup, one mod and a boss's bite, and the streaks paid only damage and speed.

So the streaks now pay in health. Melee lifesteal heals 2, 4, 6 or 8% of the HP a swing removes, capped at 10% of max HP per second so that a Whirlwind through a crowd cannot fully heal. Ranged regen gives back 0.5 to 2% of max HP every second while the streak holds. Both disappear the moment the streak breaks.

The shield pool is charged by the Dash Chain. Each link adds 3, 4, 5 or 6% of max HP by tier, and a perfect dash adds 2% on top. The pool caps at half of max HP and starts to decay at 2% a second after four seconds without chain activity. One hit can be absorbed for at most 40% of max HP, so a boss slam eats the pool and still spills into health, while crowd chip damage goes through the shield first. A hit the shield absorbs in full removes no HP, and the existing rule is that a streak breaks on HP actually lost, so a fully absorbed hit breaks nothing.

That makes a loop: the chain feeds the shield, the shield protects the chain. The spec names the per-hit limit and the decay as the two things that keep the loop from snowballing, and says to tune them after a smoke. Every number in this post is a first-pass constant.

The same pull request replaced the shotgun's Tighter Spread track, which narrowed the cone until the shotgun behaved like a rifle. Its replacement, Buckshot, adds pierce to every pellet, and each enemy a pellet passes through takes 25% less damage than the one before. The first takes full damage, the second 75%, the third 56%. Anyone who had bought Tighter Spread got their Stock back once.

Still in review

A guard on L1 or Q is open as a pull request and not yet merged. It is a held block with a meter that depends on the equipped melee weapon, and a perfect-timing window that staggers the attacker. It is not described here until it has been played.

← All devlog posts