Skip to content

Time Warp bike in the chooser, behind its reward (#611) - #647

Open
petegordon wants to merge 2 commits into
mainfrom
feat/time-warp-bike
Open

petegordon wants to merge 2 commits into
mainfrom
feat/time-warp-bike

Conversation

@petegordon

Copy link
Copy Markdown
Owner

Part of #611. What's left (time warp mode, the Solo Flight bots, splashes) is in #644. Pete, 2026-11-07: "This is good let's get it into Tandemonium."

What the player sees

  • Time Warp is the last entry in the bike chooser. It's Pete's steampunk time-travel tandem: a maroon and brass frame, the clock between two glowing blue tubes, sprung saddles, a brass headlamp, the goose fin, and four rockets, a stacked pair on each side of the rear wheel.
  • Locked: a dark silhouette of the bike with "n of N achievements" over it. N is any 90 of the 95 non-calendar achievements, as decided on Time Warp bike (95/100) + time warp mode + All 100 bike #611. Today's list gives 88 of 93; once the Achievements: swap out the 30-day, 4-week, photo-finish and Century badges; add Underdog, Clean Sweep, Full House, Rainbow Gold; Lifer = 100 rides; 5K Together #608 swap lands it becomes 90 of 95 with no code change. A tooltip spells out the rule. Picking it while locked leaves the ride on the default bike.
  • Unlocked: the bike shows in colour with its clock and flames running in the preview, and picking it makes it the ride's bike.
  • In the ride:
    • the minute hand spins two turns a second;
    • the blue flames always burn and flicker, and each engine pops a big orange/red flame now and then;
    • both geese ride it in any outfit, the robots included, exactly as on the tandem, at the same size.
  • Crashes: the wheels, front bars, saddles and stoker bars fly off, as on the tandem.

How

  • js/special-bikes.js (new): the special-bike keys, plus bikeModelPathFor(showRiders, key), which picks the GLB a chooser pick rides.
    • Show Riders off rides the plain frame, because it has no rig to swap onto.
    • ?riders=fused is left alone.
  • js/rewards.js: timeWarpProgress() counts the non-calendar achievements, less 5 (TIME_WARP_SLACK).
  • js/lobby.js, the chooser:
    • the Time Warp's own model loads the first time it's shown;
    • the dark silhouette is a material swap, with the count in the existing #bike-hint overlay;
    • the TimeWarpFX loop runs in the preview loop.
  • js/game.js:
    • _applyBikeChoice() replaces the three ride-start applyPreset calls. It swaps the model through the existing BikeModel.swapModel; the swap does nothing when that bike is already loaded.
    • The Show Riders toggle keeps the pick.
    • Versus loads the goose tandem fresh instead of cloning a Time Warp, because the team colours are paint presets.
  • js/bike-model.js:
    • A bike on the tandem's rig is scaled by the tandem's length (2.466 m) instead of its own. Its rockets and flames make it longer, which would shrink the geese.
    • The flames don't count toward its centring bounds.
  • js/goose-riders.js / goose-rider-clips.js:
    • TimeWarpFX is cut to the Clock* / Flame* bones and plays on the wall clock.
    • The wheel is measured from TW_Wheel_R.
  • Asset: tandem-3d/goose/time_warp_tandem.glb
    • from petegordon/tandemonium-claude-3d feat/time-warp-tandem, scripts/make_time_warp.py, docs/time-warp-tandem.md;
    • built on bike_rigged_goosefit26, the game tandem's own rig, so every socket, Pedal and WheelSpin is unchanged;
    • about 42k triangles, 0.93 MB, glTF validator 0 errors / 0 warnings.

Tests

  • npm test: 829/829. New special-bikes.test.mjs covers:

    • the 90-of-95 rule (whichever five are skipped; calendar achievements never count);
    • the model choice;
    • the effect clip's bones;
    • the GLB keeping the rig.
  • npm run smoke:time-warp (new, SR-30): 15/15. It checks:

    • the locked silhouette and its count;
    • the unlock;
    • the preview animating;
    • a solo ride with both geese seated, the effect loop on its bones, the wheel measured and the tandem's scale;
    • Show Riders off and back on;
    • a return to a paint preset.

    It's in the runner and in CI's modes group.

  • Fit check with the Time Warp swapped in for the tandem (local only): 45/45 for victorian, georgian and robot.

  • smoke:geese locally ran its first steps, then hit Chrome's 15-minute limit on its long colour-sampling step under software rendering. The new code only acts when a bike has a TimeWarpFX clip, and the tandem has none. The full smoke suite is running on this branch in CI.

Not in this PR (#644)

  • Time warp mode itself: the Time Warp unlocks the bike only.
  • Solo Flight in the chooser, and the bots.
  • The reward splashes.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VDbZGqC4HxZpHsv78dTqjQ

merge-test and others added 2 commits November 7, 2026 14:35
…el on the tandem rig, dark silhouette with n of N until any 90 of 95 non-calendar achievements, clock + flames loop

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VDbZGqC4HxZpHsv78dTqjQ
@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-647/

Built to branch gh-pages at 2026-11-07 19:43 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.

1 participant