This is a submission for the June Solstice Game Jam
What I Built
Turing’s Dawn is a browser puzzle game where daylight is a resource that drains in real time, and the only way to hold back the dark is to break the codes a vanished mind left behind.
On the longest day of the year, the light starts running out. You’re stranded in the seam between the longest day and the shortest night, and a daylight meter drains the entire time you’re solving. Six chambers, six codebreaking disciplines — a Caesar dial, a binary sunrise, a logic-gate garden, the pattern of days, an honest-to-goodness Turing machine, and a final Vigenère “Dawn Key” assembled from every fragment you collect. Solve a chamber and you claw some light back; stall, and the screen literally closes in — a vignette deepens, the edges bleed red, and a heartbeat starts up under the music.
My goal was to make the solstice theme mechanical, not decorative. “Longest day → shortest night” isn’t a backdrop painted behind a cipher game — it’s the pressure. Daylight is a real, draining clock, so the theme becomes a verb you can lose. And the whole thing is an ode to Alan Turing, who broke codes to push back a darkness of his own, and whose dawn came far too late.
Video Demo
https://youtu.be/kwdbez-77X8?si=WnSFTmtgGdSi5NRe
Code
https://github.com/pooja-bhavani/Turing-s-Dawn
How I Built It
Stack: React + TypeScript + Vite, Tailwind v4, Framer Motion for the juice, the Web Audio API for a drone / heartbeat / solve-chime built entirely in code, Google Gemini for adaptive hints, and Vitest for the engine. No game backend — it’s a static site.
A few decisions I’m happy with:
- The clock changes everything. Light drains on a requestAnimationFrame loop while you play. That one mechanic turns “decode this string” into “decode this string before the dark wins” — and the soft-fail, the heartbeat, the vignette, and the score chase all fell out of it. To keep it fair, the timer pauses during narrative beats and end screens, and failure is soft: run out of light and the chamber waits — you rekindle and retry with no progress lost.
- The chamber I’m proudest of — “The Bombe.” It doesn’t ask you to describe a Turing machine; it makes you run one. You get a tape, a head, a state, and a rules table. You read the cell under the head, the matching rule lights up, you Step — head moves, cell rewrites, state changes — until it halts, then lock in what the tape reads. It animates a pure, unit-tested traceTuring() engine, so the UI is just drawing real machine configurations one step at a time. That’s the ode I wanted: not a portrait of Turing, but a few minutes spent thinking the way his machines did.
- Every cipher is a hands-on instrument, never a plain text box: a Caesar dial you rotate, binary sunrise lamps you tap to read each byte, a logic-gate garden of switches that light the network live, sequence tiles for the pattern, the step-through Bombe, and the Dawn Key that aligns your collected fragments under the final Vigenère cipher.
- A living, AI-powered hint guide (Google Gemini). When you ask for help, gemini-2.5-flash reads the puzzle and the attempt you just typed and writes a fresh, in-character coach line that escalates with the tier. The hard part was spoiler-safety — LLMs love to blurt the answer — so the architecture is built to prevent it (details below).
- Built to be provably solid. The whole cipher engine is pure TypeScript — no React, no DOM, no side effects — so it’s fully unit-tested with Vitest. Every chamber in the data file is proven solvable, every verifier proven to reject near-misses, and the Turing trace is tested to agree with the run-to-halt result and to terminate even on pathological rule sets. The game is data-driven: adding a chamber is a JSON entry, not new code.
- Accessible by default. Keyboard-playable throughout, prefers-reduced-motion aware, ARIA live regions announce the light meter / hints / narrative, color is never the only signal, and the synthesized audio only starts on your first click with a mute toggle that persists.
Prize Category
Best Ode to Alan Turing. The whole game is built around him. Every chamber is a codebreaking puzzle in the lineage of his work, and the hero chamber — “The Bombe” — puts you inside an interactive Turing machine: you step the head across the tape, watch rules fire and the state change, and run it to halt yourself. The narrative honors a man who broke codes to push back a darkness of his own. The draining daylight is the pulse; the Turing tribute is the heart.
Best Google AI Usage. The hint system isn’t a static lookup table — it’s a living guide powered by Google Gemini (gemini-2.5-flash) that reads your actual attempt and writes an adaptive, in-character nudge that escalates by tier (reframe the goal → name the technique → point at the next step). What I’m proudest of is the spoiler-safety architecture, since letting an LLM near a puzzle game is genuinely risky:
- The canonical solution is never sent to Gemini — the model can’t leak what it never sees.
- Each chamber’s authored hint is passed as a ceiling of specificity; the model may rephrase and adapt, but a strict systemInstruction forbids it from ever exceeding that or stating the decoded answer.
- It’s one clean seam (getHint → Gemini → authored fallback). If there’s no key or the call fails, the game falls back to authored hints — so AI enhances the experience rather than gating it, and the game stays fully playable either way.
An ode to Alan Turing. Race the dark. Keep the light.
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.