Files
tokyo-wangan-racing/README.md
T
jesse 9a2f2d4dc9
CI / quality (push) Failing after 5m53s
Initial MVP: drivable RX-7 vertical slice + server-authoritative systems
- 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
2026-07-21 23:30:53 -04:00

3.1 KiB

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. Once Rokit is installed and on your PATH:

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

# 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)

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/.