What I made
CHRONO BLINK is a top-down HTML5 arena where time only flows when you move. Stand still and the world crawls at 0.08×. Start moving and it wakes up. Your only attack is a blink-dash: a short invulnerable lunge. Slice an enemy and the dash refunds. Miss and you sit in 1.2s of lockout.
The whole game is one canvas in one index.html. No engine, no build, no install.
What was challenging
Getting the time scale to feel like a mechanic instead of a pause. A hard stop looks broken. It had to lerp, and combos / dash cooldown still run on real seconds so you cannot hide in slow-mo forever.
Phone was the other fight. Glow, scanlines, and chromatic aberration were eating frames, so DPR is capped, scanlines are a 1×4 pattern instead of a fill per row, and the RGB split only composites while the punch is actually on screen. Dash distance is capped so the landing reticle stays on screen. On rotate, resize waits ~120ms because mobile browsers still report the old viewport if you measure on the orientation event.
Shop layout had to reflow too: two columns in short landscape, stacked in portrait, or the buttons become un-tappable.
What I’m proud of
The loop actually clicks. You freeze, the arena goes quiet, you pick a line, you blink through a stalker and the dash comes back. That moment is the whole game.
Also that it runs from a local file on desktop and thumbs on a phone, with AZERTY as first-class, not an afterthought. CrazyGames SDK only loads on CrazyGames (or localhost / ?cg=1). Everywhere else it just uses localStorage and never fetches it.
How to test
Clone the repo and open index.html. Double-click is enough. file:// works.
- Stand still. Time should crawl.
- Move. The arena should speed up.
- Blink through something (refund). Miss on purpose (1.2s lockout).
Desktop: WASD, ZQSD, or arrows. Blink with Space or right-click toward the reticle. M mutes. X skips the tutorial.
Phone: left thumb to move, right-side drag then release to blink.
First run has a skippable tutorial. Coins bank into Reach / Recovery / Magnet between deaths. Progress lives in localStorage (chronoBlink.*) if you want a fresh start.
- 4 devlogs
- 10h