BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
버튼을 눌러 걸으며 균형을 잡고, 토스트 전에 7단 케이크를 방을 가로질러 옮기는 무료 픽셀 아트 게임
Hold to walk. Move to balance. Get a 7-tier cake across the room before the toast in this free pixel-art game. Wedding hall, pirate ship and space station.
게임TypeScript · CSSGitHub @PaulJoshi온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기CAKE WALK - a 60-second pixel-art wedding-cake balancing game. Hold to walk. Move to balance.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
60 seconds to save the wedding. Hold to walk. Move to balance.
🏆 1st prize winner at the TinkerHub x Devin event in Kochi 🏆
Seven tiers, sixty seconds, and not a single cake dropped.
You are a nervous waiter carrying a 7-tier wedding cake from the kitchen to the cake table
across a chaotic reception. The best man's toast happens at 0:00. If the cake isn't on the table
by then, or if it falls, the wedding is ruined.README 전문 보기 ↗60 seconds to save the wedding. Hold to walk. Move to balance.
___________
'._==_==_=_.' .------------------------------------.
.-\: /-. | |
| (|:. 1st |) | | * W I N N E R * |
'-|:. |-' | |
\::. / | TINKERHUB KOCHI |
'::. .' | DEVIN EVENT - 1ST PRIZE |
) ( | |
_.' '._ | 7 TIERS . 60 SECONDS . 0 DROPPED |
'-------' '------------------------------------'
You are a nervous waiter carrying a 7-tier wedding cake from the kitchen to the cake table across a chaotic reception. The best man's toast happens at 0:00. If the cake isn't on the table by then, or if it falls, the wedding is ruined.
Made for the "60 Seconds to Save It" game jam (Night Out with Devin): one minute, one level, two inputs, a clear win or loss, and a cake that almost falls a lot but rarely actually does.
Play: https://cake-walk-two.vercel.app
Both inputs act on the same horizontal axis: speeding up tips the cake back, stopping tips it forward. Slide the tray under the lean.
| Desktop | Mobile | |
|---|---|---|
| Walk | Hold Space / W / ↑ or the left mouse button | Touch and hold the right half of the screen |
| Balance | Move the mouse left/right, or A/D / ←/→ | Tilt the phone (tap Enable tilt controls), or drag on the left half |
| Retry | R | Retry button |
| Pause | P / Esc (also automatic when the tab loses focus) | ❚❚ button |
| Mute | M | ♪ button |
| Fullscreen | F | ⛶ button |
Stop inside the glowing zone in front of the cake table, slow and upright, and hold still for half a second to set the cake down.
Pick a world on the title screen with the three square picture buttons under the menu (or
← / → on a keyboard). The choice is remembered, and ?world=pirate or ?world=space links
straight to it.
The same 60-second walk across two ships lashed together at sunset, to the captain's table.
An astronaut is marrying an alien on the observation deck. Carry the cake there from the docking bay, past windows full of planets, while the station does its best to stop you.
Every obstacle telegraphs itself about a second ahead with a ! bubble or animation.
YYYY-MM-DD).?seed=anything forces a seed (great for replaying a friend's run).The layout is fixed; the seed varies the uncle's rhythm, the Roomba's route, the toddler's delay, grandma's patience, the bass-drop direction, the bouquet's landing offset and the conga timing. On the ship it varies the swell, where the cannonballs, barrel, plank and kraken sit, the barrel's swing, how long the parrot stays and when the wave breaks. On the station it varies the walkway's length and speed, the laser's rhythm, the gravity cycle, how far the teleporter throws you, the saucer's sway and the meteors' count, timing and first side.
Win: cake set down before 0:00 with at least 4 tiers.
Lose: the tower topples ("The cake has left the building."), fewer than 4 tiers remain ("That's not a wedding cake. That's a cupcake."), or time runs out ("The best man toasted an empty table.").
Every try scores, win or lose, with no ceiling. The score adds up:
So two runs that end at the same spot still score differently. The parts are on the results
card; the formula is src/score/formula.ts and its constants live in tuning.ts.
Grades: S = 7 tiers and ≥ 15 s left, A = 6+, B = 5, C = 4, F = loss.
Personal best: one per world (Daily Challenge and Random share it), kept in IndexedDB with the player's name and id. The title shows it next to a link to the scoreboard.
Scoreboard: top 10 per world, this week (ISO week, UTC) and all time. Each player gets a
random name (e.g. WobblyOtter42) that they can change under Controls or on the
scoreboard. See Scoreboard for how it is stored.
Share sends a score card (the final frame plus the score) through the Web Share API, copies
it to the clipboard on desktop, or saves it, along with text like
🎂 CAKE WALK — Daily Challenge 2026-09-30 — 19,880 pts — Grade S — 7/7 tiers — 17.3s left.
Requires Node 20+.
npm install
npm run dev # http://localhost:5173
| Script | What it does |
|---|---|
npm run dev | Vite dev server |
npm run build | Type-check and build to dist/ |
npm run preview | Serve the production build |
npm test | Vitest unit tests + the 30-seed headless bot run |
npm run lint | ESLint + Prettier check |
npm run typecheck | tsc --noEmit (strict) |
npm run e2e | Playwright smoke test against the built site (run npx playwright install chromium once) |
?debug=1 - overlay with FPS, θ, ω, L, aTray, per-tier slides, hitboxes, block line and the
seed. Keys 1-9, 0 skip to each zone.?bot=1 - the autopilot plays the real round (handy for demos and recording GIFs).src/game/tuning.ts, commented.imageSmoothingEnabled = false, devicePixelRatio aware.src/physics/, pure and unit-tested): the cake is an inverted pendulum on the
tray, θ'' = (G/L)·sinθ − (aTray/L)·cosθ − DAMP·ω − GLUE·θ + impulses, with L recomputed
from the tiers still standing (so losing tiers makes the cake twitchier). Each tier slides on
the one below with a damped spring; past 45 % of the lower tier's width it falls off along with
everything above it.src/input/) reduces keyboard, mouse, touch and gyro into one
Intent { walk, trayTarget } per tick - the simulation never sees raw input.src/game/World.ts) is completely headless, so the autopilot
(src/bot/autopilot.ts, a PD controller on the lean plus predictive hazard gating) can play it
in tests and in the title-screen attract mode.The feel was tuned with headless parameter sweeps against controllers with simulated human reaction delays:
| Constant | Value | Why |
|---|---|---|
G / L_SCALE | 135 / 2.4 | Full cake L ≈ 61 px, G/L ≈ 2.2: an unbalanced full-throttle start topples in ~2.3 s |
DAMP | 1.0 | Low on purpose - high damping makes slow tray corrections useless |
GLUE / GLUE_ZONE | 9 / 8.5° | Frosting "catch net": small wobbles self-correct, big ones don't |
ARM_COUPLING | 0.5 | Half the walking jolt reaches the tray |
TRAY_SPEED / RESPONSE | 60 px/s / 7 | Smooth tray = forgiving of late, jerky corrections |
SLIDE_GAIN | 4.1 | Top tier slides off after a sustained ~22° lean |
TOPPLE_ANGLE | 40° | Whole cake falls |
A naive "hold walk and ignore the tray" run always topples; a tray controller with a 0.3 s reaction delay still wins. The perfect bot wins all 30 test seeds with 7 tiers in 35.5-37.8 s (22+ s to spare).
The repo deploys with zero configuration beyond importing it. vercel.json pins the Vite preset,
npm ci, npm run build, output dist, SPA-safe rewrites and immutable long-cache headers for
/assets/*.
cake-walk GitHub repository.npm run build, output dist).main then deploys to production, and PRs get previews.Or from the CLI:
npx vercel@latest # first run links the project
npx vercel@latest --prod
api/scores.ts is a Vercel Function backed by a free Upstash Redis
database. Until the database is connected it answers 503 and the game simply hides the
scoreboard; personal bests always work offline.
One-time setup: in the Vercel project open Storage → Create Database → Upstash for Redis
(free plan) and connect it to the project. That adds KV_REST_API_URL and KV_REST_API_TOKEN
(plain UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN work too). Redeploy.
cw:all:<world> and cw:week:<week>:<world> sorted
sets, plus a cw:names hash). Weekly boards expire 40 days after their last write.ZREM in the Upstash
console.?bot=1) and debug (?debug=1) rounds are never recorded.index.html carries the Open Graph and Twitter tags that WhatsApp, iMessage, Slack, Discord and
X read for link previews, plus a canonical URL and VideoGame structured data for search engines.
public/ holds the share image (og-image.png, 1200×630), icons, site.webmanifest,
robots.txt and sitemap.xml. These use the absolute production URL
https://cake-walk-two.vercel.app; if the domain changes, update it in index.html,
robots.txt and sitemap.xml.