BeamNG Game Engine Lua Cheat Sheet
A collection of 50+ high-frequency one-liners and snippets for game engine-side scripting.
A collection of 50+ high-frequency one-liners and snippets for game engine-side scripting.
| Task | One-Liner |
|---|
| Spawn Vehicle | local veh = spawn.spawnVehicle("etk800", "vehicles/etk800/default.pc", vec3(0,0,100), quat(0,0,0,1)) |
| Delete Vehicle | veh:delete() |
| Get Player Vehicle (0) | local veh = be:getPlayerVehicle(0) |
| Get Vehicle by ID | local veh = be:getObjectByID(vehID) or getObjectByID(vehID) |
| Get Vehicle by Name | local veh = scenetree.findObject("vehiclename") |
| Get Vehicle Count | local count = be:getObjectCount() |
| Iterate All Vehicles | for i = 0, be:getObjectCount() - 1 do local veh = be:getObject(i) end |
| Get Vehicle ID | local id = veh:getID() |
| Get Vehicle JBeam File | local jbeam = veh:getJBeamFilename() |
| Reset Vehicle | veh:reset() |
| Set Vehicle Active | veh:setActive(true) |
| Set Vehicle Visible | veh:setHidden(false) |
| Task | One-Liner |
|---|
| Get Position | local pos = veh:getPosition() |
| Get Rotation | local rot = veh:getRotation() |
| Get Velocity | local vel = veh:getVelocity() |
| Teleport Vehicle | veh:setPosition(Point3F(x, y, z)) |
| Teleport with Rotation | veh:setPositionRotation(x, y, z, rx, ry, rz, rw) |
| Set Rotation | veh:setRotation(QuatF(0, 0, 0, 1)) |
| Set Transform Matrix | veh:setTransform(MatrixF(quat, pos)) |
| Move Vehicle Relative | local pos = veh:getPosition(); veh:setPosition(Point3F(pos.x + 10, pos.y, pos.z)) |
| Teleport to Ground | veh:setPosition(Point3F(x, y, z)); veh:reset() |
| Get Direction Vector | local dir = veh:getDirectionVector() |
| Set Velocity | veh:setVelocity(vec3(0, 0, 0)) |
| Task | One-Liner |
|---|
| Set Time of Day | core_environment.setTimeOfDay({time = 0.5}) -- 0.0-1.0 float (0.5 = noon) |
| Set Gravity | core_environment.setGravity(-9.81) -- number, not vec3 |
| Pause Simulation | simTimeAuthority.pause(true) |
| Resume Simulation | simTimeAuthority.pause(false) |
| Set Physics Speed | be:setPhysicsSpeedFactor(0.5) -- half speed |
| Start Physics | be:physicsStartSimulation() |
| Stop Physics | be:physicsStopSimulation() |
| Get Ground Height | local height = be:getSurfaceHeightBelow(pos) |
| Task | One-Liner |
|---|
| Start Mission | gameplay_missions_missionManager.start(missionId) |
| Stop Mission | gameplay_missions_missionManager.stop(missionId) |
| Get Active Mission | local id = gameplay_missions_missionManager.getForegroundMissionId() |
| Get Mission by ID | local m = gameplay_missions_missions.getMissionById(missionId) |
| Check Mission Unlocked | local ok = gameplay_missions_unlocks.getSimpleUnlockedStatus(missionId) |
| Aggregate Attempt | gameplay_missions_progress.aggregateAttempt(missionId, attempt, "default") |
| Task | One-Liner |
|---|
| Get Money | local money = career_modules_playerAttributes.getAttributeValue("money") |
| Add Attributes | career_modules_playerAttributes.addAttributes({money = 1000}, {label = "reward"}) |
| Pay Money | career_modules_payment.pay({money = {amount = 500, canBeNegative = false}}, {label = "purchase"}) |
| Can Afford | local ok = career_modules_payment.canPay({money = {amount = 500, canBeNegative = false}}) |
| Check Career Active | if career_career and career_career.isActive() then ... end |
| Get Inventory | local vehicles = career_modules_inventory.getVehicles() |
| Get Current Vehicle | local id = career_modules_inventory.getCurrentVehicle() |
| Task | One-Liner |
|---|
| Show Toast | guihooks.trigger('toastrMsg', {type = 'info', title = 'Hello', msg = 'World'}) |
| Show Message | guihooks.message("Hello World!", 5, "info") |
| Open UI Module | guihooks.trigger('MenuOpenModule', 'vehicleselect') |
| Hide Menu | guihooks.trigger('MenuHide') |
| Change Game State | guihooks.trigger('ChangeState', {state = 'menu'}) |
| Stream Data to UI | guihooks.queueStream('key', value) |
| Flush Streams | guihooks.sendStreams() |
| Task | One-Liner |
|---|
| Get Current Map | local mapData = map.getMap() |
| Get Road Nodes | local nodes = map.getMap().nodes |
| Get Node Position | local pos = nodes["nodename"].pos |
| Get Node Links | local links = nodes["nodename"].links |
| Force Map Load | map.assureLoad() |
| Get Ground Height | local height = be:getSurfaceHeightBelow(pos) |
| Task | One-Liner |
|---|
| Find Object by Name | local obj = scenetree.findObject("objectName") |
| Find Objects by Class | local ids = scenetree.findClassObjects("TSStatic") |
| Find Object by ID | local obj = scenetree.findObjectById(id) |
| Hide Object | obj:setHidden(true) |
| Show Object | obj:setHidden(false) |
| Get Class Name | local class = obj:getClassName() |
| Check if Hidden | local hidden = obj:isHidden() |
| Get Object Position | local pos = obj:getPosition() |
| Set Object Position | obj:setPosition(Point3F(x, y, z)) |
| Delete Object | obj:delete() |
| Task | One-Liner |
|---|
| Load Extension | extensions.load('myExtension') |
| Unload Extension | extensions.unload('myExtension') |
| Reload Extension | extensions.reload('myExtension') |
| Check Loaded | local loaded = extensions.isExtensionLoaded('myExtension') |
| Trigger Hook | extensions.hook('onResetGameplay', playerID) |
| Get Loaded Names | local names = extensions.getLoadedExtensionsNames() |
| Task | One-Liner |
|---|
| Send Command to Vehicle | veh:queueLuaCommand("extensions.load('controller')") |
| Send to Vehicle by ID | be:getObjectByID(id):queueLuaCommand("electrics.set_motor_boost(1)") |
| Print from VE | obj:queueGameEngineLua("print('Hello from VE')") |
| Call VE Function | veh:queueLuaCommand("myFunction()") |
| Task | One-Liner |
|---|
| JSON Encode | local str = jsonEncode({key = "value"}) |
| JSON Decode | local data = jsonDecode('{"key": "value"}') |
| Pretty JSON | local pretty = jsonEncodePretty({a = 1, b = 2}) |
| Read JSON File | local data = jsonReadFile("path/to/file.json") |
| Write JSON File | jsonWriteFile("path/to/file.json", data, true) |
| Dump Table | print(dumps(myTable)) |
| Deep Copy | local copy = deepcopy(original) |
| Clamp Value | local val = clamp(x, 0, 100) |
| Lerp | local val = lerp(a, b, 0.5) |
| Sign | local s = sign(x) -- -1, 0, or 1 |
| Round | local r = round(3.14159) -- rounds to nearest int |
| Task | One-Liner |
|---|
| Set Game State | core_gamestate.setGameState('freeroam', 'freeroam', 'freeroam') |
| Request State | core_gamestate.requestGameState() |
| Start Freeroam | freeroam_freeroam.startFreeroam(levelPath) |
| Return to Menu | returnToMainMenu() |
| Task | One-Liner |
|---|
| Set Camera by Name | core_camera.setByName(0, "orbit") -- playerIndex, modeName |
| Set Camera FOV | core_camera.setFOV(0, 60) |
| Set Camera Position | core_camera.setPosition(0, pos) |
| Set Camera Distance | core_camera.setDistance(0, 10) |
| Set Camera Rotation | core_camera.setRotation(0, rot) |
| Category | Count |
|---|
| Vehicle Spawning & Management | 11 |
| Teleport & Transform | 11 |
| Environment & Physics | 8 |
| Missions & Gameplay | 6 |
| Career System | 7 |
| UI & Notifications | 7 |
| Map & Navigation | 6 |
| Scene Tree | 10 |
| Extensions | 6 |
| GE ↔ VE Communication | 4 |
| Utility Functions | 11 |
| Game State | 4 |
| Camera | 5 |
| Total | 96+ |