CI / quality (push) Failing after 5m53s
- Rojo + Wally project; ProfileStore (loleris) for safe saves - Shared: GameConfig, Cars (RX-7 free starter), ProfileTemplate, Remotes - Server: DataManager, Economy, CarManager, RaceManager, MapBuilder, AntiCheat - Client: neon HUD + Garage/Dealership UI (buy/equip/upgrade), race/daily - Procedural Tokyo expressway (spawn pad, finish line, neon pylons, kill walls) - CI workflow (Gitea/GitHub), Makefile, selene+stylua clean, rojo builds - Docs: README, GDD, realistic solo ROADMAP
89 lines
3.1 KiB
Markdown
89 lines
3.1 KiB
Markdown
# Fast & Furious: Tokyo Expressway — MVP
|
|
|
|
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.
|
|
|
|
**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.
|
|
|
|
---
|
|
|
|
## Prerequisites
|
|
|
|
Toolchain is managed by [Rokit](https://github.com/rojo-rbx/rokit). Once Rokit is
|
|
installed and on your `PATH`:
|
|
|
|
```bash
|
|
rokit install # installs 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 |
|
|
| wally | Package manager (ProfileStore) |
|
|
| selene | Static analysis / linter |
|
|
| stylua | Code formatter |
|
|
|
|
## Build & run
|
|
|
|
```bash
|
|
# Build a standalone place file you can open in Studio:
|
|
rojo build --output build.rbxl
|
|
|
|
# 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**.
|
|
|
|
## Quality gates (run before every commit)
|
|
|
|
```bash
|
|
stylua --check src/ # formatting
|
|
selene src/ # lint
|
|
rojo build --output build.rbxl # must compile
|
|
```
|
|
|
|
CI runs all three on every push (see `.github/` → mirrored to Gitea Actions).
|
|
|
|
---
|
|
|
|
## Architecture (server-authoritative)
|
|
|
|
Clients **request**, the server **decides**. Money, rep, and car ownership can
|
|
never be set by the client.
|
|
|
|
```
|
|
ReplicatedStorage/Shared GameConfig, Cars, ProfileTemplate, Remotes
|
|
ServerScriptService/Server init.server + managers (below)
|
|
ServerScriptService/ServerPackages ProfileStore (Wally)
|
|
StarterPlayerScripts/Client init.client (HUD + Garage UI)
|
|
```
|
|
|
|
| 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. |
|
|
| `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.
|
|
|
|
## 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
|
|
`unraid-1:/mnt/user/data/yy-roblox-games/0-fast-n-furious-sim/001-1993 Mazda RX-7/`.
|