{
"$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"
}