Per user direction, the MVP is now simply driving cars on the expressway. - Removed RaceManager and Economy modules entirely - Slimmed Remotes to DataUpdated / SpawnCar / EquipCar - ProfileTemplate now just remembers the last driven car (v2) - Cars: dropped price/rep/upgrade fields; kept identity + driving stats - CarManager: stat-based tuning only; RX-7 allowlist via GameConfig.canDrive - DataManager: assign default car on join; downgrade RX-7 if de-allowlisted - Client: replaced garage/economy UI with a simple car picker + respawn - Docs: GDD/ROADMAP/README rewritten for drive-only; added docs/MESH_SWAP.md - Gates: stylua clean, selene 0/0, rojo builds
This commit is contained in:
@@ -1,25 +1,25 @@
|
||||
# Fast & Furious: Tokyo Expressway — MVP
|
||||
# Fast & Furious: Tokyo Expressway — MVP (drive-only)
|
||||
|
||||
A Roblox street-racing simulator. Start in a 1993 Mazda RX-7 (the owner's real car),
|
||||
race the neon Tokyo expressway, earn cash + rep, buy and upgrade faster cars.
|
||||
A Roblox game where you cruise a neon Tokyo expressway at night in cool cars —
|
||||
starting with a real 1993 Mazda RX-7. **This MVP is deliberately tiny: just
|
||||
driving.** No racing, money, or upgrades yet — the goal is to nail the driving
|
||||
feel and be testable fast. See `docs/ROADMAP.md` for what comes next.
|
||||
|
||||
**Status:** Playable vertical slice. Drive → race → earn → save works end to end.
|
||||
Built code-first — there is nothing to hand-build in Studio to run it.
|
||||
**Status:** Playable. Spawn → drive → switch cars → respawn. CI green on a
|
||||
self-hosted Gitea runner. Built code-first — nothing to hand-build in Studio.
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Toolchain is managed by [Rokit](https://github.com/rojo-rbx/rokit). Once Rokit is
|
||||
installed and on your `PATH`:
|
||||
Toolchain is managed by [Rokit](https://github.com/rojo-rbx/rokit). With Rokit on
|
||||
your `PATH`:
|
||||
|
||||
```bash
|
||||
rokit install # installs rojo, wally, selene, stylua at pinned versions
|
||||
rokit install # rojo, wally, selene, stylua at pinned versions
|
||||
wally install # restores ProfileStore into ServerPackages/
|
||||
```
|
||||
|
||||
Installed tools (see `rokit.toml`):
|
||||
|
||||
| Tool | Purpose |
|
||||
|---|---|
|
||||
| rojo | Sync/build code ↔ Roblox place |
|
||||
@@ -30,17 +30,16 @@ Installed tools (see `rokit.toml`):
|
||||
## Build & run
|
||||
|
||||
```bash
|
||||
# Build a standalone place file you can open in Studio:
|
||||
rojo build --output build.rbxl
|
||||
|
||||
rojo build --output build.rbxl # standalone place file to open in Studio
|
||||
# OR live-sync into an open Studio place (install the Rojo Studio plugin):
|
||||
rojo serve
|
||||
```
|
||||
|
||||
Then in Studio press **Play**. You spawn on the expressway; use the bottom bar:
|
||||
**GARAGE** (buy/equip/upgrade), **SPAWN CAR**, **RACE**, **DAILY**.
|
||||
In Studio press **Play**. You spawn on the expressway in your car. Bottom bar:
|
||||
**CARS** (switch car) and **RESPAWN** (re-spawn if you flip). The RX-7 only
|
||||
appears for allowlisted accounts.
|
||||
|
||||
## Quality gates (run before every commit)
|
||||
## Quality gates (CI enforces these on every push)
|
||||
|
||||
```bash
|
||||
stylua --check src/ # formatting
|
||||
@@ -48,41 +47,36 @@ selene src/ # lint
|
||||
rojo build --output build.rbxl # must compile
|
||||
```
|
||||
|
||||
CI runs all three on every push (see `.github/` → mirrored to Gitea Actions).
|
||||
CI runs on a self-hosted **Gitea Actions** runner on UNRAID-1 (Ubuntu 24.04 job
|
||||
container — rojo's binary needs glibc 2.39). Workflow: `.gitea/workflows/ci.yml`.
|
||||
|
||||
---
|
||||
|
||||
## Architecture (server-authoritative)
|
||||
|
||||
Clients **request**, the server **decides**. Money, rep, and car ownership can
|
||||
never be set by the client.
|
||||
Clients **request**, the server **decides**. The RX-7 allowlist and anti-cheat
|
||||
are server-side.
|
||||
|
||||
```
|
||||
ReplicatedStorage/Shared GameConfig, Cars, ProfileTemplate, Remotes
|
||||
ServerScriptService/Server init.server + managers (below)
|
||||
ServerScriptService/ServerPackages ProfileStore (Wally)
|
||||
StarterPlayerScripts/Client init.client (HUD + Garage UI)
|
||||
StarterPlayerScripts/Client init.client (HUD + car picker)
|
||||
```
|
||||
|
||||
| Module | Responsibility |
|
||||
|---|---|
|
||||
| `DataManager` | Wraps **ProfileStore** — session locking, reconcile, Studio mock. The data-safety foundation. |
|
||||
| `Economy` | The only place cash/rep/ownership change. Buy, upgrade, daily, race payouts. |
|
||||
| `CarManager` | Spawns the equipped car (VehicleSeat-driven placeholder) with upgrade-scaled tuning. |
|
||||
| `RaceManager` | Solo time-trial; server validates the finish-line touch before paying out. |
|
||||
| `MapBuilder` | Procedurally builds the expressway, spawn pad, finish line, neon pylons, kill walls. |
|
||||
| `DataManager` | Wraps **ProfileStore** — session locking, reconcile, Studio mock. Remembers your last car. |
|
||||
| `CarManager` | Spawns the equipped car (VehicleSeat-driven placeholder) and enforces the RX-7 allowlist. |
|
||||
| `MapBuilder` | Procedurally builds the expressway, spawn pad, neon pylons, kill walls. |
|
||||
| `AntiCheat` | Movement sanity check (speed/teleport) — a speed bump, not a fortress. |
|
||||
|
||||
See `docs/GDD.md` for the game design doc and `docs/ROADMAP.md` for the realistic
|
||||
solo-dev plan.
|
||||
The RX-7 demo-lock: `GameConfig.RX7AllowedUserIds` holds the owner's + son's
|
||||
Roblox UserIds; only they can select/drive the RX-7 (enforced in `CarManager` and
|
||||
the `EquipCar` remote).
|
||||
|
||||
## Replacing the placeholder RX-7 with the real mesh
|
||||
|
||||
The car is currently a coloured block + `VehicleSeat` so the game is drivable today.
|
||||
When you import the real RX-7 model:
|
||||
1. Drop the mesh/model into `ReplicatedStorage` (or an assets folder).
|
||||
2. Rewrite only `CarManager.buildCarModel` to clone it and weld a `VehicleSeat`.
|
||||
3. Everything else (economy, upgrades, races, saving) keeps working unchanged.
|
||||
|
||||
Reference photos of the real car live on the NAS at
|
||||
One function changes: `CarManager.buildCarModel`. Full step-by-step in
|
||||
`docs/MESH_SWAP.md`. Reference photos live on the NAS at
|
||||
`unraid-1:/mnt/user/data/yy-roblox-games/0-fast-n-furious-sim/001-1993 Mazda RX-7/`.
|
||||
|
||||
Reference in New Issue
Block a user