This page describes level-local drift spot folders.
Drift spots define freeroam drift challenges. They combine UI metadata, scoring objectives, spatial setup, route data, boundary data, and scene marker objects.
Drift spots are stored under the level root:
levels/<levelName>/driftSpots/<spotName>/
Common files:
info.json
spot.driftSpot.json
race.race.json
bounds.sites.json
preview.jpg
The drift system discovers spots by scanning for spot.driftSpot.json.
When a level is loaded, the drift spot system scans:
levels/<levelName>/driftSpots/
Each folder containing spot.driftSpot.json is treated as one drift spot. The folder name becomes part of the drift spot id, so keep it stable after releasing or after career/progress data references it.
| File | Purpose |
|---|---|
info.json |
Display name, unlock data, objectives, rewards, and UI metadata. |
spot.driftSpot.json |
Spatial drift spot setup, big map teleport transform, drift line definitions, and scene marker references. |
race.race.json |
Path/route data used by the drift gameplay. |
bounds.sites.json |
Boundary zones for the playable or scoring area. |
preview.* |
Optional preview image for UI fallback. |
info.json
The drift spot info.json is not the same as level info.json. It is local to one drift spot and usually contains UI and progression data:
| Field | Purpose |
|---|---|
name |
Display name or translation key. |
objectives |
Score thresholds and rewards, such as bronze, silver, and gold. |
unlock |
Optional unlock/progression data. |
Score thresholds should be tuned with real driving. If they are too low, progression feels accidental; if they are too high, the spot may appear broken to players.
Minimal info.json:
{
"name": "levels.example.driftSpots.harbor.name",
"objectives": [
{
"id": "bronze",
"score": 5000,
"rewards": {
"money": 500,
"beamXP": 25
}
},
{
"id": "silver",
"score": 10000,
"rewards": {
"money": 1000,
"beamXP": 50
}
},
{
"id": "gold",
"score": 15000,
"rewards": {
"money": 1500,
"beamXP": 75
}
}
],
"unlock": {}
}
Use stable objective ids. Progress systems may store completion by objective id.
spot.driftSpot.json
This file stores spatial setup for the spot. Common concepts include:
| Concept | Purpose |
|---|---|
bigMapTp |
Big map teleport position/rotation/scale for the drift spot. |
lines |
One or more start/scoring line definitions. |
markerObjects |
Scene objects used as visible or managed markers. |
startDir |
Direction used by the drift line or start logic. |
The exact line layout can vary by spot. Keep the file authored by the Drift Data Editor when possible.
Minimal spot.driftSpot.json shape:
{
"spatialInfo": {
"bigMapTp": {
"pos": [0, 0, 0],
"rot": [0, 0, 0, 1],
"scl": [1, 1, 1]
},
"lines": {
"lineOne": {
"markerObjects": [
"harbor_line_1_a",
"harbor_line_1_b",
"harbor_drift_sign"
],
"pos": [0, 0, 0],
"rot": [0, 0, 0, 1],
"scl": [6, 2, 2],
"startDir": [1, 0, 0]
}
}
}
}
spot.driftSpot.json fields
| Field | Required | Notes |
|---|---|---|
spatialInfo |
Yes | Container for teleport and line data. |
spatialInfo.bigMapTp |
Recommended | Big map teleport transform. |
spatialInfo.lines |
Yes | One or more drift line definitions. |
markerObjects |
Recommended | Scene object names managed by the drift spot. |
pos / rot / scl |
Yes for each line | Transform of the line trigger/volume. |
startDir |
Recommended | Expected entry direction for the line. |
rot is stored as a quaternion array. scl controls the line volume size.
race.race.json and bounds.sites.json
The drift spot loader expects these files next to spot.driftSpot.json:
race.race.json
bounds.sites.json
race.race.json describes the path used by drift gameplay. bounds.sites.json contains the playable/scoring area. These formats are shared with other gameplay systems, so prefer creating them with the existing path and sites tools instead of writing large files manually.
The spot id is derived from the current level and the folder name:
<levelName>/<spotName>
Keep folder names stable once progress, career data, leagues, or UI references exist.
spot.driftSpot.json can reference scene marker objects for drift lines and signs. These objects are usually hidden or managed by the drift system at runtime.
When moving or renaming drift marker objects, update the drift spot file at the same time.
Marker objects should be grouped clearly in the scene so the drift spot can be maintained without searching the entire level tree.
Drift spots can appear as big map POIs and can share patterns with mission path data. The race.race.json and bounds.sites.json files should be treated as part of the spot, even though similar file names are also used by missions.
The drift system can also save player progress separately from the level files. Changing folder names, objective ids, or spot ids after release can disconnect existing scores or completion data.
spot.driftSpot.json with the Drift Data Editor where possible.race.race.json for the intended route.bounds.sites.json for the scoring/play area.info.json objectives from real test runs.Use the Drift Data Editor when available. It helps keep the spatial data and marker references consistent.
Recommended editor-first workflow:
levels/<levelName>/driftSpots/<spotName>/.race.race.json for the intended drift path.bounds.sites.json for the scoring area.info.json with name, unlock data, and objectives.Keep marker object names short but descriptive. For example:
garage_line_1_a
garage_line_1_b
garage_drift_sign
Manual authoring is possible, but it is easier to break marker references or transforms. If editing by hand, work in this order:
info.json with a name and a small set of objectives.bounds.sites.json in the Sites Editor.race.race.json path, then adjust it for the spot.spot.driftSpot.json last, after marker object names and transforms are stable.The minimum useful drift spot folder normally needs:
info.json
spot.driftSpot.json
race.race.json
bounds.sites.json
Do not tune objective scores until the line placement, route, and boundary are final.
When editing an existing spot:
bronze, silver, and gold unless intentionally resetting progress.markerObjects entry.Check:
levels/<levelName>/driftSpots/.spot.driftSpot.json exists.info.json exists or the fallback display data is acceptable.Check:
spot.driftSpot.json exists in the level scene.Check:
race.race.json follows the intended route.bounds.sites.json covers the intended scoring area.info.json objective score thresholds were tuned with the intended vehicle class.spot.driftSpot.json and info.json.race.race.json exists and matches the intended route.bounds.sites.json exists and covers the intended area.spot.driftSpot.json exist in the level scene.info.json are reachable in normal gameplay.Was this article helpful?