Scope cut: drive-only MVP (remove racing + economy)
CI / quality (push) Successful in 1m1s

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:
2026-07-22 00:11:11 -04:00
parent 5fc03d611d
commit 07a67204ca
14 changed files with 347 additions and 781 deletions
+7 -13
View File
@@ -71,20 +71,14 @@ local function onPlayerAdded(player: Player)
profile:AddUserId(player.UserId) -- GDPR-friendly association
profile:Reconcile() -- fill missing template keys
-- Grant the correct starter car for THIS player (RX-7 only for allowlisted
-- UserIds; everyone else gets the public starter). Idempotent: only grants
-- if the player has no cars yet (i.e. genuinely first join).
-- Assign the player's default car if they don't have one yet, and validate:
-- if their saved car is the restricted RX-7 but they're no longer allowlisted,
-- fall back to the public default so they can still drive.
local data = profile.Data
if #data.OwnedCars == 0 then
local starterId = GameConfig.starterCarFor(player.UserId)
table.insert(data.OwnedCars, {
Id = starterId,
Upgrades = { Engine = 0, Tires = 0, Nitro = 0 },
})
data.EquippedCarId = starterId
elseif data.EquippedCarId == "" then
-- Safety: if somehow they own cars but have nothing equipped, equip the first.
data.EquippedCarId = data.OwnedCars[1].Id
if data.EquippedCarId == "" then
data.EquippedCarId = GameConfig.defaultCarFor(player.UserId)
elseif data.EquippedCarId == GameConfig.RestrictedCarId and not GameConfig.isRX7Allowed(player.UserId) then
data.EquippedCarId = GameConfig.PublicDefaultCarId
end
profile.OnSessionEnd:Connect(function()