Skip to content

Demo vs full game: Daily best time, 3 demo rides a day, no practice split (#641) - #642

Open
petegordon wants to merge 2 commits into
mainfrom
feat/641-demo-daily
Open

petegordon wants to merge 2 commits into
mainfrom
feat/641-demo-daily

Conversation

@petegordon

@petegordon petegordon commented Nov 7, 2026 •

Copy link
Copy Markdown
Owner

Closes #641. Builds the demo-vs-full design agreed with Pete on 2026-11-07.

Daily Ride: one rule for both editions

  • The practice / ranked chooser is removed. START RIDE on the Daily just rides. Every ride counts. The day's best unaided time is what the card and the board use.
  • Full game: unlimited rides. Demo: 3 a day. A ride counts when it starts, so quitting and starting again uses one. A checkpoint retry inside the ride does not. A 4th ride (START RIDE, PLAY AGAIN or NEXT LEVEL) goes back to the lobby, or the room in co-op, with a toast.
  • Demo Daily is the real road on Adventurous, the same as the full game. Demo finalize (2026-10-04): Slingshot + Chaos Coins into main, forgiving steering, Castle out, room audio/video behind a flag #400's Weekly Ride on Chill is deleted.
  • Demo Daily stays locked until the Tutorial and Grandma's are both finished. The card shows locked with the reason, and a click explains. NEXT LEVEL after the first Grandma's finish checks the lock live.
  • Helping hand (Retries get easier: visible helping hand after 3 failed attempts at a checkpoint, skip after 5 #403) is on for every Daily ride. A ride that used any help posts no board time but still counts as a finish for streaks, tokens and Coming Back. "Help" means SAFETY or SPEED at any point, the DDA's silent tune, ASSIST, the helping hand, or the Royal Shortcut. SAFETY and SPEED are no longer locked during a Daily ride.
  • Victory sheet: "📅 Daily Ride 2 of 3 today" (demo), plus "🛟 Help used, so this time stays off the board" when it applies.
  • Share strip: leads with today's best (and its medal) and adds "1st try 2:55" once the day has more than one ride. The 🏋️ practice flag is gone, and the demo shares too.

Server (worker/leaderboard.js, auto-deploys on merge)

POST /daily used to answer a second result with a 409. It now keeps the better time: a finish replaces a DNF or a slower time, and a DNF only fills an empty day. The UNIQUE key and the table are unchanged, so no migration. Pre-#641 builds still work (they get 200 instead of 409). Tested against real SQLite (test/unit/daily-board-upsert.test.mjs).

The Daily board is now on (DAILY_BOARD_ENABLED = true, Pete 2026-11-07): every clean Daily finish posts, demo included. No screen in the game shows the board yet (auth.fetchDailyBoard has no caller); that view is a follow-up design question.

Demo scope

  • Versus is full game only. The button shows locked with "🔒 In the full game", and a click explains.
  • Bikes: Grandma's Classic and Marmalade Express. The other colours and the holiday bikes show locked with "In the full game".
  • Achievements: an opt-in list of the 20 the demo can award (DEMO_ACHIEVEMENTS in js/edition.js) replaces the 21 demo: false flags. The other 80 keep counting stats and unlock on the full game's first check.
  • Level scores: demo level scores now post to the 🏆 leaderboard too (new postScores rule, on in both editions; Pete 2026-11-07).
  • Demo end screen copy: "unlimited Daily Rides, Versus, every bike colour, every Slingshot stage and all 100 achievements."

Achievement text (Steam resync needed after merge)

  • daily_first Daily Ride: "Finish your first Daily Ride" (was "first ranked").
  • daily_practice_10 Practice Makes Perfect: "Finish 10 Daily Rides".
  • daily_gold Road Scholar: dropped "(practice counts)".

Tests

  • npm test: all unit tests pass. Updated: edition, room-edition, achievements, economy, daily-ride. New: the share strip with first try, and the board upsert. Removed: weekly-road.
  • smoke:daily-best (replaces smoke:ranked): no chooser, rides count, a retry is the same ride, help keeps a ride off the board, best plus first try, demo lock then 3 rides then refused.
  • smoke:edition: demo Daily locked → opens → 3 rides, Versus and bikes locked, full game unlimited.
  • Updated for the removed chooser: smoke:tv-playtest, smoke:tourist-coop, smoke:helping-hand, smoke:hud-layout, plus shot-end-sheets / probe-props / smoke-grandma-finish / smoke-props-3d.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VDbZGpypLbzSQxBu62RC96

…plit (#641)

- Daily Ride: the practice/ranked chooser is gone. Every ride counts and the
  day's best unaided time is kept. The full game is unlimited; the demo gets
  3 rides a day (counted at start), opened by finishing the Tutorial and
  Grandma's.
- The demo rides the real Daily on Adventurous; #400's Weekly Ride is removed.
- Helping hand on every Daily ride. Any help (SAFETY/SPEED, silent tune,
  ASSIST, helping hand, shortcut) keeps a ride off the board.
- Share strip: today's best plus "1st try".
- Server POST /daily keeps the better time instead of 409ing a second ride
  (board still dark behind DAILY_BOARD_ENABLED).
- Demo: Versus and 5 bike colours locked, 20 opt-in achievements, level scores
  still off the leaderboard (postScores).
- Tests: unit + smoke:daily-best (replaces smoke:ranked), smoke:edition and
  the smokes that clicked the old chooser.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VDbZGpypLbzSQxBu62RC96
@github-actions

github-actions Bot commented Nov 7, 2026 •

Copy link
Copy Markdown
PR Preview Action v1.8.2

QR code for preview link

🚀 View preview at
https://petegordon.github.io/Tandemonium/pr-preview/pr-642/

Built to branch gh-pages at 2026-11-07 19:12 UTC.
Preview will be ready when the GitHub Pages deployment is complete.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Demo vs full game: Daily best-of-3 (demo) / unlimited (full), no practice split; demo scope for Next Fest

1 participant