RLS Studios
ProjectsPatreonCommunityDocsAbout
Join Patreon
BeamNG Modding Docs

Guides

Reference

Server CommandsGE UtilitiesGame Engine MainNavigation GraphScreenshot CaptureServerServer ConnectionSpawnpoint ManagerSimulation TimeVehicle SpawningSuspension Frequency Tester
Gameplay AchievementGameplay CityDiscoverForce FieldGarage ModeMarker InteractionParking SystemGameplay Playmode MarkersGameplay PoliceGameplay RallyGameplay Rally LoopGameplay Raw POIsGameplay Skidpad TestSpeed Trap LeaderboardsSpeed Traps and CamerasGameplay StatisticsTaxi Ride SystemTraffic SystemVehicle PerformanceWalking

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 Extensionsgameplay

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

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, navigation, and ground marker rendering.


Public API

FunctionSignatureReturnsDescription
M.getCurrentInteractableElements()tableReturns elements currently within interaction range
M.formatMission(mission)tableFormats a mission object for UI display
M.formatDataForUi()table|nilReturns formatted mission data for all current interactable elements
M.closeViewDetailPrompt(force?)nilCloses the activity accept dialogue
M.showMissionMarkersToggled(active)nilClears and resends POI data when setting changes
M.setMarkersVisibleTemporary(visible)nilTemporarily shows/hides all markers
M.skipNextIconFading()nilSkips fade animation for next frame
M.clearCache()nilForces re-evaluation of open prompts
M.setForceReevaluateOpenPrompt()nilFlags prompt re-evaluation on next frame
M.onNavigateToMission(poiId)nilSets navigation target, resets focus
M.onPreRender(dtReal, dtSim)nilMain render/update loop
M.getGameContext(fromMissionMenu?)tableReturns mission screen data
M.abandonCurrentvalue-abandonCurrent handler
M.changeUserSettings(id, settings)-changeUserSettings handler
M.dependenciesvalue-Returns list of extension dependencies
M.getClusterMarkervalue-Returns ClusterMarker
M.onAnyMissionChanged(state)-Callback for AnyMissionChanged event
M.onClientEndMission(levelPath)-Callback for ClientEndMission event
M.onSelectDetailPromptClicked(idx)-Callback for SelectDetailPromptClicked event
M.onSettingsChanged()-Callback for SettingsChanged event
M.onUIPlayStateChanged(enteredPlay)-Callback for UIPlayStateChanged event
M.restartCurrentvalue-restartCurrent handler
M.setPreselectedMissionId(mId)-Sets PreselectedMissionId
M.startMissionById(id, userSettings, startingOptions)-startMissionById handler
M.stopMissionById(id, force)-stopMissionById handler

Dependencies

  • gameplay_missions_missions, gameplay_missions_missionManager, freeroam_bigMapMode, gameplay_playmodeMarkers, freeroam_bigMapPoiProvider, ui_missionInfo

Internals

Speed-Based Interaction

Two speed gates control when markers become interactable:

  • Parking speed (< 1 km/h → interactable): Uses hysteresis between 1–3 km/h
  • Cruising speed (> 20 km/h → icons fade): Uses hysteresis between 20–30 km/h

Walking mode uses area enter/exit events instead of speed checks.

Marker Rendering Pipeline (onPreRender)

  1. Calculate vehicle position, bounding box, velocity
  2. Query playmodeMarkers quadtree for nearby clusters (100m radius)
  3. For each nearby cluster: show marker, call marker:update(updateData), collect ground decals
  4. If at parking speed: call marker:interactInPlayMode() → collect interactable elements
  5. If interactable elements found: open activity accept dialogue via ui_missionInfo
  6. Render all collected decals via Engine.Render.DynamicDecalMgr.addDecals

Navigation

When navigating to a mission (onNavigateToMission), ground markers guide the player. When path length < 7m, reachedTarget() fires and clears navigation.

Activity Accept Dialogue

When multiple activities overlap, onActivityAcceptGatherData hook collects data from all systems, sorted by type/order. Displayed via ui_missionInfo.openActivityAcceptDialogue().

How It Works

  1. Markers are provided by gameplay_playmodeMarkers as clusters with type-specific marker objects
  2. Each frame, visible markers are updated with vehicle/camera data
  3. Speed determines interaction mode: cruising (icons visible) vs parking (prompts appear)
  4. Walking mode triggers on area enter/exit rather than speed

Hooks / Lifecycle

FunctionDescription
onPreRenderMain render/update loop: marker visibility, interaction, decals
onSettingsChangedUpdates screen dimensions for marker rendering
onAnyMissionChangedRefreshes POI data on mission start/stop
onClientEndMissionClears navigation target
onUIPlayStateChangedForces prompt re-evaluation when entering play state

Usage Example

-- Navigate to a specific POI
gameplay_markerInteraction.onNavigateToMission("missionMarker#myMission")

-- Force prompt refresh
gameplay_markerInteraction.setForceReevaluateOpenPrompt()

See Also

  • Gameplay Achievement - Related reference
  • Gameplay City - Related reference
  • discover - Discover / Experience System - Related reference
  • Gameplay Systems Guide - Guide

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

Parking System

Reference for `gameplay_parking`, which manages spawning, positioning, and recycling of AI parked vehicles using parking spot site data and vehicle active pooling.

On this page

Public APIDependenciesInternalsSpeed-Based InteractionMarker Rendering Pipeline (onPreRender)NavigationActivity Accept DialogueHow It WorksHooks / LifecycleUsage ExampleSee Also