<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Keck X</title>
    <description>The latest articles on DEV Community by Keck X (@kax168).</description>
    <link>https://dev.to/kax168</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3968219%2F1c884347-4f35-4668-85bb-b7bfed2705d5.jpeg</url>
      <title>DEV Community: Keck X</title>
      <link>https://dev.to/kax168</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kax168"/>
    <language>en</language>
    <item>
      <title>I Built Solstice Cipher, a Light-and-Shadow Puzzle for the June Solstice Game Jam</title>
      <dc:creator>Keck X</dc:creator>
      <pubDate>Thu, 04 Jun 2026 11:46:43 +0000</pubDate>
      <link>https://dev.to/kax168/i-built-solstice-cipher-a-light-and-shadow-puzzle-for-the-june-solstice-game-jam-17io</link>
      <guid>https://dev.to/kax168/i-built-solstice-cipher-a-light-and-shadow-puzzle-for-the-june-solstice-game-jam-17io</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/june-solstice-game-jam-2026-06-03"&gt;June Solstice Game Jam&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cnlwnpzirhuu9321yaq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4cnlwnpzirhuu9321yaq.png" alt="Solstice Cipher cover" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Solstice Cipher&lt;/strong&gt;, a small browser puzzle game about balancing light and shadow during the solstice.&lt;/p&gt;

&lt;p&gt;The game is played on a maze-like canvas. You move with &lt;code&gt;WASD&lt;/code&gt; or arrow keys, collect four cipher sparks, keep the light meter inside a safe band, and then reach the gate before time runs out.&lt;/p&gt;

&lt;p&gt;The theme connection is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Solstice:&lt;/strong&gt; the central mechanic is balancing the longest day and the shortest night.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Light and darkness:&lt;/strong&gt; collecting light sparks pushes the meter upward, while shadow sparks pull it downward.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alan Turing:&lt;/strong&gt; the gate only opens after collecting enough cipher sparks, a small mechanical nod to code breaking and computation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to make something compact but actually playable, not just a themed mockup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Quick demo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8e5hgemw73uhpnpi0esk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8e5hgemw73uhpnpi0esk.gif" alt="Solstice Cipher gameplay demo" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Play it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kax168.github.io/solstice-cipher/" rel="noopener noreferrer"&gt;https://kax168.github.io/solstice-cipher/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/kax168/solstice-cipher" rel="noopener noreferrer"&gt;https://github.com/kax168/solstice-cipher&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Controls:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WASD / Arrow keys: move
Start / Restart: reset the run
Sound toggle: enable or disable small collection sounds
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Win condition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Collect 4 cipher sparks + keep balance in the golden band + reach the gate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I kept the stack intentionally small:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML for the page shell&lt;/li&gt;
&lt;li&gt;CSS for the moody solstice visual style&lt;/li&gt;
&lt;li&gt;JavaScript modules for level data and game logic&lt;/li&gt;
&lt;li&gt;Canvas for rendering the maze, player, gate, sparks, and HUD&lt;/li&gt;
&lt;li&gt;A tiny Node test to validate level metadata and win-condition data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The level is stored as ASCII map data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;LEVEL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;########################&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#P..l....#.....s......G#&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#.####.#.#.###.###.#####&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That made the game easy to tune because I could move walls, sparks, the player start, and the gate without touching rendering code.&lt;/p&gt;

&lt;p&gt;The most interesting part is the balance meter. Movement nudges the meter, spark collection changes it more dramatically, and the timer drains faster when the player lets light or shadow drift too far. The gate only opens when the player has enough cipher sparks and the balance meter is stable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;The hardest part was keeping the game small while still making it feel like a real game.&lt;/p&gt;

&lt;p&gt;I originally wanted more mechanics, but the better choice was to make one mechanic legible:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The solstice is a turning point, so the player should constantly feel pulled between two states.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That gave the game a clearer identity. It also made the theme visible through play instead of only through text.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;If I keep going, I would add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a second level where the ideal light band moves over time&lt;/li&gt;
&lt;li&gt;a tiny story card about Alan Turing and code breaking&lt;/li&gt;
&lt;li&gt;a Pride palette challenge mode&lt;/li&gt;
&lt;li&gt;mobile touch controls&lt;/li&gt;
&lt;li&gt;a short gameplay GIF for the DEV post&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For now, I am happy that it is a complete playable jam entry: a maze, a timer, a resource, collectibles, a win condition, and a theme that is part of the mechanics.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Disclosure
&lt;/h2&gt;

&lt;p&gt;I used AI assistance while designing and implementing this submission. Final game direction, code review, testing, and publishing decisions were made by me.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gamechallenge</category>
      <category>gamedev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
