Garage Mode
Manages the garage environment for vehicle inspection/customization. Handles camera orbit setup, vehicle freezing, ceiling/pillar auto-hide, lighting groups, input blocking, and garage-to-test-drive t
Manages the garage environment for vehicle inspection/customization. Handles camera orbit setup, vehicle freezing, ceiling/pillar auto-hide, lighting groups, input blocking, and garage-to-test-drive transitions.
Public API
| Function | Signature | Returns | Description |
|---|---|---|---|
M.start | (useCurrentLocation, skipInventoryStep?) | nil | Enters garage mode; loads garage level or uses current location |
M.stop | () | nil | Exits garage mode, unfreezes vehicle, restores camera |
M.isActive | () | boolean | Returns whether garage mode is active |
M.zoom | (value) | nil | Applies camera zoom with acceleration |
M.setCamera | (preset) | nil | Sets orbit camera to named preset (default/front/back/side/left/right/top) |
M.testVehicle | () | nil | Drives vehicle out of garage, fades to black, loads test level |
M.setLighting | (state?) | nil | Sets 3 light groups on/off; nil resets all to on |
M.getLighting | () | table | Returns {bool, bool, bool} light state |
M.setGarageMenuState | (state) | nil | Tracks current menu (e.g. "paint" marks vehicle dirty) |
M.getGarageMenuState | () | string|nil | Current menu state |
M.setObjectsAutohide | (v) | nil | Enables/disables ceiling/pillar auto-hiding |
M.isObjectsAutohide | () | boolean | Current auto-hide state |
M.setVehicleDirty | (dirty, switched?) | nil | Marks vehicle as modified (career only) |
M.getLastOwnedVehicleId | () | id | Last vehicle entered in career |
M.initStepFinished | () | nil | Advances multi-module garage init sequence |
M.garageModeStartStep | () | nil | Saves career data as part of init sequence |
M.dependencies | value | - | Returns list of extension dependencies |
M.onClientPreStartMission | (levelPath) | - | Callback for ClientPreStartMission event |
M.onClientStartMission | (levelPath) | - | Callback for ClientStartMission event |
M.onDeserialized | (v) | - | Callback for Deserialized event |
M.onEnterVehicleFinished | (vehicleId) | - | Callback for EnterVehicleFinished event |
M.onSerialize | () | - | Callback for Serialize event |
M.onSpawnCCallback | (vehicleId) | - | Callback for SpawnCCallback event |
M.onThumbnailTriggered | (active) | - | Callback for ThumbnailTriggered event |
M.onVehicleSaveFinished | () | - | Callback for VehicleSaveFinished event |
M.onVehicleSpawned | (vehicleId) | - | Callback for VehicleSpawned event |
Dependencies
core_jobsystem,core_vehicle_manager
Internals
Camera Presets
camPresets = {
default = vec3(145, -5, 0),
front = vec3(180, 0, 0),
back = vec3(0, 0, 0),
side = vec3(90, 0, 0),
top = vec3(90, -90, 0),
}Object Auto-Hide
Three object groups auto-hide based on camera position:
hide_from_camera(ceiling) - hides when camera Z > 108.1hide_from_camera_pillars_west- hides when camera X > 10hide_from_camera_pillars_east- hides when camera X < -10
Vehicle Freezing
After spawning, waits 5 frames then calls setFreeze(true) via core_vehicleBridge. Engine is turned off via spawnWithEngineRunning = false.
Input Blocking
Blocks: funStuff, bigMap, vehicleMenues, vehicleTeleporting, physicsControls, aiControls, walkingMode, resetPhysics. Pushes GarageMode action map.
Init Sequence
Multi-module init: gameplay_garageMode → career_modules_inventory → career_modules_linearTutorial, each calling garageModeStartStep() then initStepFinished().
How It Works
start(useCurrentLocation)- if current location: sets orbit cam, freezes vehicle, blocks input, sets gamestate togarage- If not current location: loads
garage_v2level, activates ononClientPreStartMission - Per frame: auto-hides ceiling/pillars based on camera, manages zoom deceleration
stop()unfreezes vehicle, pops action map, restores camera FOV/rotation, sets gamestate tofreeroam
Hooks / Lifecycle
| Function | Description |
|---|---|
onVehicleSpawned | Teleports spawned vehicle to spawn point, queues freeze |
onSpawnCCallback | Turns off engine on spawn via additional vehicle data |
onClientPreStartMission | Activates garage mode on level load or deactivates on leave |
onClientStartMission | Replaces vehicle if vehicleToLoad is set |
onSerialize | Saves active state |
onDeserialized | Restores active state |
onThumbnailTriggered | Manages garage mode and object visibility during thumbnail capture |
onEnterVehicleFinished | Tracks last owned vehicle ID |
onVehicleSaveFinished | Advances garage init sequence after vehicle save |
Usage Example
-- Enter garage at current location
gameplay_garageMode.start(true)
-- Set camera angle
gameplay_garageMode.setCamera("front")
-- Exit garage
gameplay_garageMode.stop()See Also
- Gameplay Achievement - Related reference
- Gameplay City - Related reference
- discover - Discover / Experience System - Related reference
- Gameplay Systems Guide - Guide
Force Field
Applies a gravitational planet effect around the player vehicle, pushing or pulling other vehicles. Toggled via radial menu. Disabled automatically during career mode.
Marker Interaction
Central system for rendering and interacting with playmode markers (mission markers, parking spots, gas stations, etc.). Manages marker visibility, speed-based interaction gating, activity prompts, na