RLS Studios
ProjectsPatreonCommunityDocsAbout
Join Patreon
BeamNG Modding Docs

Guides

Reference

server/commands - Camera & Input Commandsge_utils - Game Engine Utility Functionsmain.lua - GE Lua Entry Point & Game Loopmap.lua - Navigation Graph (AI Road Map)screenshot.lua - Screenshot Systemserver/server - Level Loading & Game ServerserverConnection - Client-Server Connection Manager`setSpawnpoint` - Default Spawn Point Persistence`simTimeAuthority` - Simulation Time & Bullet Time Control`spawn` - Vehicle Spawning & Safe Placement`suspensionFrequencyTester` - Suspension Natural Frequency Analysis
Auto AnnotationBoosterCalibrate ESCCompile ImpostersCompile MeshesConfig List GeneratorDecal Roads EditorDependency TreeDoc CreatorExport (glTF)Follow The White RabbitForest GeneratorGround Model DebugInput System UtilsInstanced Line Render DemoJBeam StatsLog StreamsMap TilesNode Beam ExportNode StreamPhotomodePrecompile ShadersPrecompile VehiclesProcedural Track (Gymkhana Generator)Rectangle GeneratorRender Components APIResave MaterialsRich PresenceSave Dynamic DataScreenshot Creator (Vehicle Thumbnails)ShowroomSort LinesStep HandlerTerrain GeneratorTest Extension ProxiesTest JSON Files Syntaxutil/vehicleRopeDebug - Rope Physics Debug UIutil/worker - Batch Job Workerutil/wsTest - WebSocket Test Server

UI

Resources

BeamNG Game Engine Lua Cheat SheetGE Developer RecipesMCP Server Setup

// RLS.STUDIOS=true

Premium Mods for BeamNG.drive. Career systems, custom vehicles, and immersive gameplay experiences.

Index

HomeProjectsPatreon

Socials

DiscordPatreon (RLS)Patreon (Vehicles)

© 2026 RLS Studios. All rights reserved.

Modding since 2024

API ReferenceGE Extensionsutil

Save Dynamic Data

Automated tool that iterates all vehicle configs, spawns each, and runs dynamic data tests to generate vehicle info files.

Automated tool that iterates all vehicle configs, spawns each, and runs dynamic data tests to generate vehicle info files.


Overview

util_saveDynamicData spawns every vehicle configuration on the autotest level and runs dynamicVehicleData.performTests() on each via vlua. Results are cached as info_<config>.touched files - existing configs are skipped. Includes watchdog and max-runtime safety.

Extension path: lua/ge/extensions/util/saveDynamicData.lua


Exports (M)

FunctionSignatureDescription
onInit()Logs initialization.
onExtensionLoaded()Loads blacklist files, ensures camera/extensions are ready.
onExtensionUnloaded()Logs unload.
work(pcFile?, vehicle?)Starts the test pipeline. Optionally filters by config/vehicle name.
vehicleDone()Signals that the current vehicle's tests are complete.
heartbeat()Resets the watchdog timer (called from vlua).
onClientStartMission(levelPath)Marks the level as ready when autotest loads.

Internals

Test Flow

  1. work(pcFile, vehicle) starts the job system coroutine _workMain.
  2. Waits for mod manager readiness and autotest level load.
  3. Iterates filtered configs from core_vehicles.getConfigList(true).
  4. For each config without an existing .touched file:
    • Spawns the vehicle via core_vehicles.replaceVehicle.
    • Loads dynamicVehicleData extension on the vehicle.
    • Calls dynamicVehicleData.performTests(model, config) via queueLuaCommand.
    • Waits for vehicleDone() signal, watchdog timeout (20s), or max runtime (600s).
  5. After all configs, calls shutdown(0).

Blacklist

Vehicles can be excluded via blacklist.json or blacklistDefault.json at the root. Blacklisted model names are skipped.

Safety Mechanisms

  • Watchdog: If heartbeat() isn't called within 20 seconds, the vehicle is skipped.
  • Max Runtime: Each vehicle has a 600-second cap.
  • Physics Speed: Set to physicsSpeedFactor (default 0) during tests.

How It Works

  1. Load extension, optionally pass filter params to work().
  2. autotest level loads automatically.
  3. Each vehicle config is spawned, tested, and results saved.
  4. Game shuts down on completion.

Lua Examples

-- Run all vehicle configs
extensions.util_saveDynamicData.work()

-- Run only pickup configs
extensions.util_saveDynamicData.work(nil, "pickup")

-- Run a specific config
extensions.util_saveDynamicData.work("d15_4wd_A", "pickup")

Additional Exports

  • M.heartbeat - (undocumented)
  • M.onClientStartMission - (undocumented)
  • M.onExtensionLoaded - (undocumented)
  • M.onExtensionUnloaded - (undocumented)
  • M.onInit - (undocumented)
  • M.vehicleDone - (undocumented)
  • M.work - (undocumented)

Rich Presence

Manages Steam and Discord rich presence status, showing what the player is doing (level, vehicle, activity).

Screenshot Creator (Vehicle Thumbnails)

M.dependencies = {"ui_imgui", "render_renderViews"}

On this page

OverviewExports (M)InternalsTest FlowBlacklistSafety MechanismsHow It WorksLua ExamplesAdditional Exports