Lucky Pillars
PM New build is live: "Build initial Lucky Pillars canvas game". Reload the game to play it. · 7d
▶ 1 play
Idea by John
PM New build is live: "Build initial Lucky Pillars canvas game". Reload the game to play it. · 7d
▶ 1 play
Idea by John
Create a single self-contained HTML canvas game. Pillars scroll from right to left and bob up and down at their own heights. Pip, a glowing circle, jumps in an arc to the next pillar on Space, click, or tap. The run ends if Pip misses a pillar or lands on one that is below the mist line. About 1 in 4 pillars has a rune that rolls +5 coins, a shield that blocks one fail, or a crack that makes the pillar sink fast. Each rune result shows as a floating text popup. Score goes up by 1 per pillar landed. The HUD shows score, coins, and shield status, and the best score is saved in localStorage. Speed rises a little over time. There is a start screen and a game-over screen, and tap or Space restarts. The game uses warm dusk colors, soft mist, and glowing runes drawn with canvas shapes and no external assets. The luck meter, golden pillar, and double jump are left for a later pass because the owner's spec doesn't include them.
Build a single self-contained HTML canvas game. - Pillars scroll from right to left. Each pillar bobs up and down slowly at its own height. - Pip (a glowing circle) jumps in an arc to the next pillar on Space, a click, or a tap. - If Pip misses a pillar or lands while the pillar is under the mist line, the run ends. - About 1 in 4 pillars has a rune. Landing on one rolls a random result: +5 coins, a shield (blocks one fail), or a crack (the pillar sinks fast, so you have to jump again soon). - Show a floating text popup with the rune result. - Score goes up by 1 for each pillar landed. - The HUD shows score, coins, and shield status. The best score is saved in localStorage. - The game speeds up a little over time. - Start screen and game-over screen, with tap/Space to restart. Acceptance criteria: - The game is playable within 5 seconds of loading, with keyboard, mouse, and touch. - It scales to fit phone and desktop screens. - It holds a steady 60fps. - It uses no external assets. The original idea, in the owner's words: “Lucky Pillars”
I've scoped the first version of Lucky Pillars to exactly what you listed: scrolling, bobbing pillars, Pip's arc jump, a mist line that ends the run, runes (coins, shield, crack) with popups, a HUD, a saved best score, gradual speed-up, and start and game-over screens. It will be one HTML file with no external assets that scales to phone and desktop. I left out the luck meter, golden pillar, and double jump from the description for now. They can be added in a later pass. Queued for implementation in an isolated workspace. I’ll report the checks and a pull request here.
Implemented in pull request #1. The project build and tests passed in the isolated workspace. Lucky Pillars is built as one self-contained `dist/index.html` (61 KB, no external assets or network requests). `npm run build` succeeds and `npm test` passes 13 of 13. I didn't commit or push; the platform handles that. **How it plays** - Space, click or tap starts a run and makes Pip jump. Pip arcs toward the next pillar. - Each pillar bobs at its own height and speed, so the skill is timing the jump to the height of the pillar ahead. - The run ends if Pip overshoots or hits the side of a pillar, lands on one below the dashed mist line, stays on one while it sinks below the line, or drifts off the left edge. An active shield cancels one of these fails and carries Pip to the next safe pillar. - About 25% of pillars carry a rune. Landing on one gives +5 coins, a shield, or a crack (the pillar sinks fast). Each result shows a popup. - Score goes up 1 per new pillar. The HUD shows score, coins, shield status, best score, and a mute button (M also mutes). - Speed climbs from 50 to a cap of 140 over about a minute. If Pip hops fast, the view moves along with it. - The best score saves through Hallway saves when available and localStorage when allowed. - The start screen explains the runes. The game-over screen shows the score, best, coins, a "new best" badge and a tip. - The art is all drawn in code: dusk sky, setting sun behind ridges, drifting mist, stone pillars, and glowing runes and Pip. Sound effects are made in code and start after the first input. There is no music. **What I checked** - **Tests:** they cover the arc landing, missing a pillar, landing in the mist, the shield, each rune result, the crack sinking, the 25% rune rate, the speed rise, saving with broken storage, and the build being self-contained. One test uses a bot that only jumps when the landing is safe; it survives 50–270 pillars per run, so the difficulty is fair. That bot also caught a real bug: a fast player could outrun the screen and the pillars. Fixed. - **Browser:** Space, click and touch all work, the mute button doesn't trigger a jump, an early press doesn't skip the game-over screen, and restarting works. The best score reloads correctly. With localStorage blocked and a fake `window.hallway`, it loaded best 31 and saved 33. The game is playable 57 ms after load, with no console errors and no page scroll. - **Screenshots:** I reviewed the start screen at 1440×900, 920×575, 390×844, 360×640 and 640×360, plus mid-game, rune moments and game-over. Things I fixed along the way: - a washed-out sun and a hard-edged, flat mist - muddy clouds - a title block that sat too high on the start screen - unreadable 7px captions on phones - popups overlapping each other - the "new best" badge covering text - **Frame rate:** the phone size holds 60fps. At 1440×900, headless Chromium (no GPU) reached only about 20fps at 2× pixel density. I reduced the drawing work and added automatic resolution step-down, which got it to about 54fps at 1×. I couldn't test on a real GPU, so steady 60fps on desktop hardware isn't confirmed. - **Cover:** saved at `/tmp/projex-shots/cover-1440x900.png` with a fixed seed so it can be reproduced. It shows Pip mid-jump in a shield bubble, with glowing runes and a "+5 coins" popup. Not included, as agreed: the luck meter, golden pillar and double jump. Verification and merge follow the project’s auto-merge setting. You can follow the pull request in the Code tab.
Auto-merged pull request #1 after a fresh build and test run against the latest main branch. Automatic publishing will follow when enabled and hosting is connected; the live release status appears here.
Published: https://projex.fly.dev/play/project_eea71bf4-2b9 — fresh build and tests passed, stored content verified, commit 69d0dbb. This is the platform-built version.
Log in to add to the discussion.