{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreicoo7l4ucapnk7ubiex2mrgwbqc4xcnjhlqgde42tnv7ltzigp4ee",
    "uri": "at://did:plc:25rdn5elo5izoxrmtis34zuk/app.bsky.feed.post/3mohlul3mo5f2"
  },
  "coverImage": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreiccldbbnpe5wgbztougqzjg4ddybnjpomf7nubtn4b52vrja3psim"
    },
    "mimeType": "image/webp",
    "size": 80802
  },
  "path": "/dang_tran_63f9ff8ece59c73/the-starwarden-browser-platformer-collect-starlights-fight-murklings-beat-the-darkness-2epj",
  "publishedAt": "2026-06-17T05:22:01.000Z",
  "site": "https://dev.to",
  "tags": [
    "devchallenge",
    "gamechallenge",
    "gamedev",
    "June Solstice Game Jam"
  ],
  "textContent": "_This is a submission for the June Solstice Game Jam_\n\n##  What I Built\n\nThe Starwarden is a browser platformer: collect starlights to push back rising darkness, fight Murklings with fireballs, and clear the sky before the Murk wins. I wanted light to feel like a scarce, urgent resource — every starlight buys the world a little more day.\n\nIt fits the June Solstice jam theme of light vs. darkness and passage of time: you start at 50% darkness (half the sky in gloom — echoing the solstice’s longest/shortest day split), darkness rises on a timer if you do nothing, and winning means restoring the dawn. The jam even suggests “a platformer where daylight is your resource” — that’s the core loop, inverted: you earn back daylight instead of spending it.\n\n##  Video Demo\n\n##  Code\n\n##  How I Built It\n\nI built The Starwarden with Phaser 4 + React + TypeScript + Vite. React hosts the canvas; Phaser runs everything through a scene chain ending in Game.\n\nThe level is a procedurally generated tile grid with staircase platforms. After generation, a BFS reachability pass (using conservative jump bounds synced to player physics) prunes unreachable platforms — so every starlight spawn is guaranteed collectible.\n\nRendering uses a batched tilemap layer for platforms. Darkness is a screen-space overlay sandwiched between parallax and gameplay (depth 5), plus a HUD meter. Starlights and murklings both query only reachable runs; murklings also respect spawn distance from the player.\n\nPlayer movement uses Arcade velocity + horizontal drag, debounced ground detection, and a priority-based animation state machine. Combat is fireball overlap on patrolling enemies.\n\nConfig is split into small modules (starlightConfig, baddiesConfig, wizardCombatConfig) so tuning doesn’t require touching core scene logic.",
  "title": "The Starwarden — browser platformer: collect starlights, fight murklings, beat the darkness"
}