Rizka Afif
game-feelidle-boss-slayer

Hit pause as a pose hold

Why I kept Idle Boss Slayer's simulation moving while making every strike land harder.

Idle Boss Slayer's Power Slash cut-in banner over the frozen arena
The Power Slash cut-in holds the fight briefly, then returns the withheld time before the slash lands.

I wanted Idle Boss Slayer’s sword hits to feel deliberate without making an idle game stutter. The first idea was the obvious one: stop the clock on every impact. It looks good in a fighting game, but it breaks down when automatic attacks can arrive ten times a second. A 50 ms stop on each of those hits freezes half of the game, including the HUD, and the player starts feeling delay instead of weight.

So I separated the simulation from the presentation. The simulation clock keeps stepping. Damage, gold, cooldowns, and attack timing stay honest. On an eligible hit, I hold the hero on the strike frame and hold the boss in its hit pose. The boss still flashes, squashes, and moves three CSS pixels left and right. That small pose hold gives the eye enough time to read the impact without stealing time from the game.

The numbers are intentionally modest. Auto attacks get a hold only when their interval is at least 250 ms, and the hold is eight percent of that interval up to 50 ms. Criticals can reach 100 ms, capped at forty percent of the interval. Taps get no hold: at ten taps per second there is no useful visual budget left. Across a rolling second, the total hold budget is 150 ms. If granting a hold would cross that line, I skip it.

const hitPause = {
auto: { maxMs: 50, intervalPercent: 0.08, minIntervalMs: 250 },
critical: { maxMs: 100, intervalPercent: 0.4 },
tapMs: 0,
rollingBudgetMs: 150,
bossShakePx: 3,
};

Those limits came from a practical constraint, not a claim that there is one magic hit-stop value. A long pause is fine when attacks are seconds apart. Dense idle combat needs the same signal in a much smaller slice of time. I also alternate the shake by drawn frame instead of on a short timer; a 12 ms timer can alias against a 60 Hz display and vanish on some hits.

The same distinction helped with Power Slash. A manual press on a ready skill gets a cut-in banner: 120 ms in, 400 ms held, and 180 ms out. The fight freezes and dims during the entrance and hold, then resumes as the banner leaves. Unlike ordinary hits, this is an intentional moment the player asked for. The withheld simulation time is credited back through the existing hit-stop path, in steps no larger than the frame cap, so the player loses neither damage nor gold.

The idea as a seven-second clip: the hit lands, the render holds, the withheld time is credited back.

I keep the banner for manual casts only. AUTO casts do not need a half-second interruption every eight seconds, and presses inside cooldown do nothing. The banner itself has no pointer events, so it cannot eat the next tap. It is also a setting, alongside hit pause and hero animation; reduced-motion users start with those effects off.

What I like about this approach is that it leaves a clear test boundary. I can measure that the strike frame dwells longer with the setting on, that the boss moves on every attack, that ten fast hits never exceed the budget, and that ninety seconds of simulation end in the same state with the feature on or off. The game can feel heavier without becoming less predictable.