Johan Alphonso Braga
Typing test⌘J
AboutProjectsReadingStackCraftDesignStatusResume

Utilities

Ask anything Typing test

Elsewhere

GitHub

All projects

Games / 2026 / Live in the browser

Riposte

A typing duel where every enemy strike is a word you can type to parry. Your own strike word keeps its progress while you switch to block, and the difficulty curve was tuned by a bot typist playing whole runs.

Riposte

01

The problem

Typing games usually treat defence as typing faster. I wanted blocking to be its own decision: an enemy winds up, its blow appears as a word on a fuse, and you choose whether to finish your attack or drop it and parry. That only works if switching between words is instant and never guesses wrong, and if each enemy's rhythm forces a different choice.

02

How I approached it

The engine is a DOM-free UMD module, so the page, the tests and a bot simulator run the same createRun, step, press and chooseBoon calls. Typing the first letter of a fresh word switches to it and the word you left keeps its progress. To keep that unambiguous, a word is only allowed on screen when its first letter appears in none of the other words and none of their first letters appear in it. Enemies attack from cycle patterns of offset, fuse, damage and word length: the Gloomrat bites every 3 s, the Cairn Golem swings once every 8.2 s for over three times the damage, the Mirror Duelist throws overlapping pairs, and the Ink Hexer's curses blot out your strike word except its next letter. Damage multiplies letter count by a combo factor and by each word's accuracy squared, and a parry with no typos is a riposte worth 1.5x. A bot typist with set speed, accuracy, reaction and read time plays whole seeded runs, and its win rate by speed set enemy health and damage.

03

The outcome

Nine fights across three acts and a boss that changes pattern at two thirds and one third health. The bot wins 7% of runs at 35 wpm, 48% at 45 and every run at 55. 15 tests with no dependencies cover each damage term, switching with progress kept, the no-ambiguity rule on every frame of three full runs, each enemy's measured rhythm, the boss phases, every boon, and full runs won and lost.

riposte.johanthegoat.xyz Open in a new tab ↗
Next projectPenumbra →