CI / quality (push) Successful in 55s
The straight strip becomes a closed rounded-rect loop (~7,400 studs/lap) built from centerline samples, Shuto-C1 style. Landmark zones: - Daikoku Futo PA: drivable meet lot off the south straight (guardrail gap entrance), painted bays, flood-light towers, bilingual sign — cars now SPAWN at Daikoku like a proper meet - Rainbow Bridge over the east straight: white suspension towers with beacons, cross beams, rainbow-colored rail lights - Odaiba beyond the bridge: blocky Unicorn Gundam (glowing eyes, horn, pink psycho-frame strips) + 16-cabin neon ferris wheel - Yamate-style tunnel enclosing the whole north straight - Tokyo Tower replica (orange/white tiers, two lit decks, antenna) west - Tatsumi PA overlook pad NE - City-core skyline inside the loop + outer ring skipping landmark zones - Bilingual green highway signs via SurfaceGui (JP + EN) Gameplay contract preserved: SpawnPad/FinishLine/KillWall names intact, kill walls hug every road edge except the Daikoku entrance.
83 lines
4.5 KiB
Markdown
83 lines
4.5 KiB
Markdown
# Roadmap — realistic solo-dev plan
|
|
|
|
Assumes **one part-time developer learning as they go**. The MVP is intentionally
|
|
tiny — *just driving* — so there's a fun, testable thing FAST. Everything else is
|
|
layered on only after the driving feels good.
|
|
|
|
> Expect **months, not weeks** to a polished full game. That's normal. This order
|
|
> guarantees you always have something that runs.
|
|
|
|
---
|
|
|
|
## ✅ M0 — Drive-only MVP (DONE — this repo)
|
|
Spawn on the neon expressway, drive a car, switch cars, respawn. RX-7 demo-locked
|
|
to owner + son. Cars persist between sessions. CI green on a self-hosted runner.
|
|
|
|
## M1 — Make driving feel GOOD (the real work, do this next)
|
|
- [x] Adopt a **constraint chassis** for real suspension/grip instead of the raw
|
|
VehicleSeat: springs + prismatic suspension, servo steering (speed-sensitive
|
|
lock), motor-driven wheels, engine braking, ballast anti-roll. Shared tuning
|
|
in `src/shared/Chassis.luau`; client-side `ChassisController` drives it
|
|
(driver owns network physics). **Needs a Studio playtest to tune feel.**
|
|
- [ ] Import the **real RX-7 mesh**; weld the shell onto the chassis `Body`.
|
|
See `docs/MESH_SWAP.md` for the exact steps (needs Studio for asset upload).
|
|
- [ ] Tune acceleration curve and grip (after first playtest).
|
|
- [x] **Chase camera**: scriptable follow cam while seated — damped chase with
|
|
look-ahead, flat horizon (ignores car pitch/roll), speed-based FOV kick.
|
|
`src/client/CameraController.luau`. Tune constants after playtest.
|
|
- [x] Sound: two-layer engine (idle + rev loops crossfaded by speed — keeps
|
|
engine character instead of chipmunking one loop) + tyre squeal on lateral
|
|
slip / hard braking. `src/client/SoundController.luau` with per-car sound
|
|
sets (`CAR_SOUNDS`).
|
|
- [ ] **RX-7 rotary audio**: record the REAL car's 13B (owner has it + video),
|
|
process into idle/rev loops on the workstation, upload, fill `CAR_SOUNDS`.
|
|
Full pipeline: `docs/ROTARY_SOUND.md`. Generic loop is the stand-in.
|
|
**Exit test:** the RX-7 is genuinely fun to just drive around. Ship nothing else
|
|
until this is true.
|
|
|
|
## M2 — More cars + polish (still no racing)
|
|
- [ ] Import a few more real car meshes.
|
|
- [x] Better map v3 — **"Shuto Night Loop"**: closed ~7,400-stud circuit
|
|
inspired by Tokyo's Shuto expressway, with real-Tokyo landmark zones:
|
|
**Daikoku Futo PA** (drivable meet lot + painted bays + light towers —
|
|
cars spawn here), **Rainbow Bridge** (suspension towers, rainbow rail
|
|
lights), **Odaiba** beyond it (blocky Unicorn Gundam statue with glowing
|
|
psycho-frame + giant neon ferris wheel), **Yamate-style tunnel** (north
|
|
straight), **Tokyo Tower** replica (west), **Tatsumi PA** overlook,
|
|
bilingual green highway signs (大黒PA, レインボーブリッジ, お台場, 辰巳PA),
|
|
city-core + outer-ring procedural skyline. Not geographically accurate —
|
|
a themed loop, not a map of Tokyo.
|
|
- [x] Day/night, weather mood: `src/server/Ambience.luau` — Atmosphere haze
|
|
catching the neon, bloom + cool color-correction post effects, and a slow
|
|
22:00→03:00 clock drift (10-min ping-pong) so the night sky breathes.
|
|
|
|
## M3 — Racing (the first "game" layer)
|
|
- [ ] Checkpoints + timing (a new RaceManager — the old one was removed in M0).
|
|
- [ ] Personal best times.
|
|
- [ ] Simple point-to-point and drag modes.
|
|
|
|
## M4 — Progression & economy (only once racing is fun)
|
|
- [ ] Money from races, a garage, buying/unlocking cars, upgrades, reputation.
|
|
(These systems existed as scaffolding and were cut for the MVP; reintroduce
|
|
them deliberately when they have a purpose.)
|
|
|
|
## M5 — Systems hardening & monetization
|
|
- [ ] Leaderboards, anti-cheat pass 2, DataStore backup drill.
|
|
- [ ] Performance pass (StreamingEnabled, part budget, mobile).
|
|
- [ ] Fair gamepasses/products — never pay-to-win.
|
|
|
|
## M6 — Traffic AI (deferred hardest system)
|
|
- [ ] Spline-following dummy cars first (cheap). True AI only if perf allows.
|
|
|
|
---
|
|
|
|
## Standing engineering rules
|
|
- Every change must pass `stylua --check`, `selene`, and `rojo build` — CI on the
|
|
self-hosted Gitea runner enforces all three on every push.
|
|
- Keep the client dumb: it requests, the server decides. The RX-7 allowlist and
|
|
anti-cheat live server-side.
|
|
- Add tunables to `GameConfig`, not scattered magic numbers.
|
|
- Add a save key by adding it to `ProfileTemplate` (auto-reconciles); never remove
|
|
a key without a migration (bump `ProfileStoreName` `_vN` in dev to wipe).
|
|
- Test in Studio after every server change (ProfileStore uses a mock store there).
|