Map Race Pickups Plan
Status: planned only.
This document defines the intended external API contract for race pickups. It is not a shipped public Lua runtime contract yet.
Why Pickups Are Separate​
Race pickups are not markers and not checkpoints.
They carry authoritative gameplay effects such as:
- giving nitro
- repairing the vehicle
- changing the vehicle
Because of that, pickups should stay a separate family from generic markers and checkpoints.
Planned Pickup Types​
nitrorepairvehicle_change
Additional gameplay pickup types can extend this family later.
Authority Split​
Server-authoritative:
- pickup hit validation
- vehicle/player eligibility
- effect application
- future respawn/cooldown behavior
Client-only:
- pickup visual presentation
- pulse/spin/billboard presentation
- feedback after the authoritative effect has been applied
Planned Authored API​
Planned authored shape:
{
"id": "pickup_01",
"kind": "race_pickup",
"pickupType": "nitro",
"position": { "x": 0.0, "y": 2.0, "z": 0.0 },
"scale": { "x": 3.0, "y": 3.0, "z": 3.0 },
"visible": true,
"collision": true,
"render": true,
"effect": {
"amount": 1.0,
"vehicleId": null
},
"visual": {
"visualType": "corona",
"color": { "r": 0.2, "g": 0.8, "b": 1.0, "a": 0.9 },
"opacity": 1.0,
"emission": 1.0,
"pulse": true,
"spinSpeed": 0.0
}
}
Planned authored field meanings:
id: stable pickup idkind: alwaysrace_pickuppickupType: gameplay effect familyposition: authored local positionscale: authored trigger/visual scalevisible: editor/runtime visibility intentcollision: whether the pickup participates in authoritative baked pickup/query datarender: whether a baked render descriptor should be emittedeffect: type-specific authoritative parametersvisual: presentation-only visual choice and parameters
Planned Baked Authoritative API​
Planned baked descriptor:
{
"pickupId": "pickup_01",
"pickupType": "nitro",
"position": { "x": 0.0, "y": 2.0, "z": 0.0 },
"size": { "x": 3.0, "y": 3.0, "z": 3.0 },
"effect": {
"amount": 1.0,
"vehicleId": null
},
"enabled": true
}
Planned rules:
- only authoritative baked descriptors drive effect application
- client render state must not decide whether a pickup effect is granted
- type-specific effect payloads should stay validated and minimal
Planned Baked Render API​
Planned render descriptor:
{
"pickupId": "pickup_01",
"visualType": "corona",
"position": { "x": 0.0, "y": 2.0, "z": 0.0 },
"scale": { "x": 3.0, "y": 3.0, "z": 3.0 },
"color": { "r": 0.2, "g": 0.8, "b": 1.0, "a": 0.9 },
"opacity": 1.0,
"emission": 1.0,
"pulse": true,
"spinSpeed": 0.0
}
Planned Runtime Events​
Event direction after runtime pickup behavior is implemented:
map:race_pickup_hitmap:race_pickup_consumedmap:race_pickup_respawned
These events should come from authoritative gameplay logic.
Not Shipped Yet​
Not implemented as stable public API yet:
- pickup authoring/runtime implementation
- effect application contract
- respawn/cooldown behavior
- final event payloads
Related Documents​
map_gameplay_plan.mdx