{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreidc2xcyqv6yj55p6hy74iiscxndi2dnk7x4rhvmcooq36it4hbm5u",
"uri": "at://did:plc:25rdn5elo5izoxrmtis34zuk/app.bsky.feed.post/3moswackxvy72"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreiazgn3ykk3lfycqv55qgwoohwfap56ighyv6zfbx5nmqoxpgc733u"
},
"mimeType": "image/webp",
"size": 50126
},
"path": "/vinny_0f23e2d307e45b62614/solstice-a-light-routing-puzzle-game-1827",
"publishedAt": "2026-06-21T17:15:40.000Z",
"site": "https://dev.to",
"tags": [
"devchallenge",
"gamechallenge",
"gamedev",
"June Solstice Game Jam",
"jacksonvincent012-web",
"Solstice-Game",
"solstice-game-pi.vercel.app",
"View on GitHub",
"https://solstice-game-pi.vercel.app"
],
"textContent": "_This is a submission for the June Solstice Game Jam_\n\n## What I Built\n\nSolstice is a puzzle game where you place mirrors to guide light beams across a grid. Each level has two modes — SUN and MOON. You toggle between them to route both beams to their targets. Both need to be lit at the same time to win.\n\nClick a cell to place a `/` mirror, click again for `\\`, again to remove. Right-click removes it. Ctrl+Z to undo. That's the whole mechanic — but the levels get hard fast.\n\nThere are 18 levels split into 7 tiers. It starts simple (one mirror, one beam) and builds up to puzzles where you have fewer than 10 free cells and every placement has to count. I verified every level with a Python solver to make sure they're all solvable at the stated par.\n\nThe game has a terminal with a Bletchley Park theme. You get 3 questions, the AI responds like a trapped wartime consciousness, and at the end you decide if it was human or machine. It connects to the Gemini API if you have a key, otherwise it uses pre-written responses.\n\nVideo Demo\n\nCode\n\n## \n jacksonvincent012-web\n / \n Solstice-Game\n \n\n###\n\n# Solstice\n\n**A light-routing puzzle game with a custom ray-tracing engine, dual-spectrum beam physics, 18 levels across 7 tiers, a CRT terminal narrative, undo/redo, and a star-based rating system.**\n\nBuilt with vanilla JavaScript, rendered on HTML Canvas 2D, with audio synthesis via the Web Audio API and optional AI-powered dialogue through Google Gemini. Deployed as a static site on the Vercel CDN.\n\n**solstice-game-pi.vercel.app**\n\n## Architecture\n\nEach subsystem is a standalone ES module communicating through a central game state, orchestrated by a `requestAnimationFrame` game loop.\n\n### Core Rendering Pipeline\n\n\n flowchart LR\n subgraph Pipeline[Core Pipeline]\n direction LR\n GL[\"GAME LOOP<br>main.js<br>requestAnimationFrame<br>renderer.draw()<br>updateUI()\"]\n RT[\"RAY TRACER<br>raytracer.js<br>Dual-pass simulation<br>SUN + MOON paths<br>Cycle detection\"]\n RD[\"RENDERER<br>renderer.js<br>3-pass canvas draw<br>Glow + dashes + pulses<br>Particle integration\"]\n PS[\"PARTICLES<br>particles.js<br>emit() / burst()<br>update(dt) / draw()<br>Lifecycle management\"]\n end\n\n GL --> RT --> RD --> PS\n\n style GL fill:#1a1a3a,stroke:#ffd700,color:#ffd700\n style RT fill:#1a1a3a,stroke:#4a90d9,color:#4a90d9\n style RD fill:#1a1a3a,stroke:#7b68ee,color:#7b68ee\n style PS fill:#1a1a3a,stroke:#00ff88,color:#00ff88\n style Pipeline fill:#0a0a1a,stroke:#333,color:#888\n\n\nLoading\n\n### Supporting Systems\n\n\n flowchart TB\n subgraph Systems[Supporting Systems]\n direction TB\n IM[\"INPUT<br>input.js<br>Mouse +\n\n…\n\nView on GitHub\n\nPlay it here: https://solstice-game-pi.vercel.app\n\nHow I Built It\n\nVanilla JavaScript with HTML Canvas for rendering. No frameworks, no libraries — just ES modules and the Canvas 2D API.\n\nThe ray tracer uses grid-based ray marching. Each frame runs twice — once for SUN, once for MOON. Mirrors transform the direction vector: `/` does `[dx, dy] → [-dy, -dx]`, `\\` does `[dx, dy] → [dy, dx]`. Cycle detection prevents infinite loops from mirror pairs facing each other.\n\nAudio is all Web Audio API oscillators — no sound files at all. The terminal uses the Gemini API when configured, with a system prompt that keeps the Bletchley persona consistent.\n\nLevels are hand-designed with increasing wall density. Levels 11-18 went through multiple redesigns after my Python solver kept finding unintended shortcuts.\n\nPrize Category\n\n**Best Ode to Alan Turing**\nThe terminal is a Turing Test. You talk to something that believes it was a code-breaker at Bletchley Park in 1945. Three questions, then you judge. The dialogue touches on Enigma, ration books, the hum of valves. The ending asks the same question Turing posed — can you tell the difference?\n\nBest Google AI Usage\nThe terminal connects to the Gemini API for dynamic responses. The AI stays in character as a wartime consciousness. Without a key it falls back to pre-written dialogue, but with Gemini every conversation is unique.",
"title": "Solstice — A Light-Routing Puzzle Game"
}