RLS Studios
ProjectsPatreonCommunityDocsAbout
Join Patreon
BeamNG Modding Docs

Guides

Reference

Server CommandsGE UtilitiesGame Engine MainNavigation GraphScreenshot CaptureServerServer ConnectionSpawnpoint ManagerSimulation TimeVehicle SpawningSuspension Frequency Tester
Editor AI TestsEditor AI VisualizationEditor – Assembly Spline ToolAsset BrowserAsset DeduplicatorAsset Management ToolSFX Previewer (Audio Events List)Audio Ribbon EditorAutoSaveBarriers EditorBiome ToolBuilding EditorBulk RenameCamera BookmarksCamera TransformCamera Path EditorCEF HelperCo-Simulation Signal EditorCrawl Data EditorCreate Object ToolDataBlock EditorDecal EditorDecal Spline EditorDocumentation HelperDrag Race EditorDrift Data EditorDrive Path EditorDynamic Decals Tool (Vehicle Livery Creator)Engine Audio DebugExtensions DebugExtensions EditorFFI Pointer Leak TestFile DialogFlowgraph EditorForest EditorForest ViewEditor Gizmo HelperEditor Ground Model Debug HelperEditor Headless Editor TestEditor Icon OverviewEditor ImGui C DemoEditor InspectorEditor Layout ManagerEditor Level SettingsEditor Level ValidatorEditor LoggerEditor Log HelperEditor MainEditor Main MenuEditor Main ToolbarEditor Main UpdateMap Sensor EditorMaster Spline EditorMaterial EditorMeasures Inspector HeaderMesh Editor (Base)Mesh Road EditorMesh Spline EditorMission EditorMission PlaybookMission Start Position EditorMulti Spawn Manager (Vehicle Groups)Navigation Mesh EditorEditor News MessageObject Tool (Object Select Edit Mode)Object To Spline EditorParticle EditorPerformance Profiler / Camera RecorderPhysics ReloaderPrefab Instance EditorEditor PreferencesRace / Path EditorRally EditorRaycast Test Editor ToolRenderer Components Editor ToolRender Test Editor ToolResource Checker Editor ToolRiver EditorRoad Architect EditorRoad DecorationsRoad Editor (Decal Road)Road Network ExporterRoad River Cache HandlerRoad River GUIRoad Spline EditorRoad Template EditorRoad UtilitiesScene TreeScene ViewScreenshot Creator BootstrapScript AI EditorScript AI ManagerSensor Configuration EditorSensor DebuggerShape EditorShortcut LegendSidewalk Spline EditorSites EditorSlot Traffic EditorSuspension Audio DebugTech Server ManagerTerraform ToolTerrain And Road ImporterTerrain EditorTerrain Materials EditorText EditorTool ManagerTool ShortcutsTraffic DebugTraffic ManagerTraffic Signals EditorUndo History ViewerVehicle Bridge TestVehicle Detail ViewerVehicle Editor MainEditor - VisualizationEditor Viz HelperEditor Water Object HelperEditor Windows Manager
Rally Editor - Driveline TabRally Editor - Measurements TabRally Editor – Mission Settings TabRally Editor – Notebook Info TabRally Editor – Pacenotes TabRally Editor – Recce TabRally Editor – System Pacenotes TabRally Editor – Test Tab

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 ExtensionseditorrallyEditor

Rally Editor – Pacenotes Tab

Primary editor tab for managing rally pacenotes: selection, creation, drag editing, waypoint manipulation, camera playback, and validation.

Primary editor tab for managing rally pacenotes: selection, creation, drag editing, waypoint manipulation, camera playback, and validation.


Overview

Large class-based tab (C, ~1740 lines) handling the full pacenote editing workflow. Uses a snaproad (loaded via DrivelineV3) for snapping waypoints and measuring corners. Supports mouse-based 3D interaction, gizmo manipulation, and orbit camera.


Class Methods – Selection & Navigation

MethodSignatureDescription
selectPacenoteC:selectPacenote(id)Selects pacenote by ID; updates snaproad partition, measurements, form.
selectWaypointC:selectWaypoint(id)Selects waypoint within current pacenote; updates gizmo and snaproad filter.
deselectC:deselect()Deselects waypoint first, then pacenote on second call.
selectPrevPacenoteC:selectPrevPacenote()Navigates to previous pacenote respecting search filter.
selectNextPacenoteC:selectNextPacenote()Navigates to next pacenote respecting search filter.
selectNextWaypointC:selectNextWaypoint()Toggles between corner start and corner end waypoints.
selectRecentPacenoteC:selectRecentPacenote()Re-selects most recently deselected pacenote.
selectedPacenoteC:selectedPacenote()Returns selected pacenote object or nil.
selectedWaypointC:selectedWaypoint()Returns selected waypoint object or nil.

Class Methods – Editing

MethodSignatureDescription
deleteSelectedC:deleteSelected()Deletes the selected pacenote.
deleteSelectedPacenoteC:deleteSelectedPacenote(shouldSelect)Removes pacenote; optionally selects adjacent.
deleteAllPacenotesC:deleteAllPacenotes()Clears all pacenotes from notebook.
createMouseDragPacenoteC:createMouseDragPacenote()Ctrl+click creation on snaproad with auto-positioning.
cleanupPacenoteNamesC:cleanupPacenoteNames()Renumbers pacenote names with undo support.
autofillDistanceCallsC:autofillDistanceCalls()Auto-calculates distance call text between pacenotes.
refreshPacenotesC:refreshPacenotes()Full refresh: names, distance calls, all pacenotes.
mergeSelectedWithPrevPacenoteC:mergeSelectedWithPrevPacenote()Merges freeform text with previous pacenote.
mergeSelectedWithNextPacenoteC:mergeSelectedWithNextPacenote()Merges freeform text with next pacenote.

Class Methods – Snaproad & Measurement

MethodSignatureDescription
loadSnaproadC:loadSnaproad()Loads snaproad from DrivelineV3 final driveline file.
getSnaproadC:getSnaproad()Returns current snaproad instance.
measureSelectedPacenoteC:measureSelectedPacenote()Measures partition and applies measurements to pacenote.
moveSelectedWaypointForwardC:moveSelectedWaypointForward(steps)Moves waypoint forward along snaproad.
moveSelectedWaypointBackwardC:moveSelectedWaypointBackward(steps)Moves waypoint backward along snaproad.

Class Methods – Camera & Drawing

MethodSignatureDescription
setOrbitCameraToSelectedPacenoteC:setOrbitCameraToSelectedPacenote()Sets orbit camera centered on selected pacenote.
cameraPathPlayC:cameraPathPlay()Toggles camera path playback along snaproad.
cameraPathIsPlayingC:cameraPathIsPlaying()Returns true if camera path mode is active.
drawDebugEntrypointC:drawDebugEntrypoint(globalOpacity, dt)Draws all pacenote debug visualizations.
placeVehicleAtPacenoteC:placeVehicleAtPacenote()Teleports player vehicle to selected pacenote position.

Class Methods – Mouse Interaction

MethodSignatureDescription
handleMouseInputC:handleMouseInput()Main mouse handler: gizmo, hover detection, ctrl-create.
handleMouseDownC:handleMouseDown(hoveredWp)Selection logic on click.
handleMouseHoldC:handleMouseHold()Simple drag of waypoints along snaproad.
handleMouseUpC:handleMouseUp()Commits drag undo action.
detectMouseHoverWaypointC:detectMouseHoverWaypoint()Raycast-based hover detection for waypoints.

Usage Example

local pacenotesTab = require('/lua/ge/extensions/editor/rallyEditor/pacenotes')(rallyEditor)
pacenotesTab:setPath(notebook)
pacenotesTab:selected()
pacenotesTab:draw(mouseInfo)

Module Variables

  • windowDescription (string) - Module variable.
  • windowDescription (string) - Module variable.

Functions

onEditModeActivate()

Callback for edit mode activate event.

Returns: nil

init(rallyEditor)

Initializes the module.

  • rallyEditor (any)

Returns: self.pacenoteToolsState.snaproad

isValid()

Checks if valid.

Returns: self.pacenoteToolsState.snaproad

onEditModeActivate()

Callback for edit mode activate event.

Returns: nil

onEditModeDeactivate()

Callback for edit mode deactivate event.

Returns: nil

getRacePath()

Returns the race path.

Returns: Snaproad(driveline, styleData, RallyEnums.drivelineMode.rout

unselect()

Handles unselect.

Returns: end

attemptToFixMapEdgeIssue()

Handles attempt to fix map edge issue.

Returns: end

resetGizmoTransformToOrigin()

Handles reset gizmo transform to origin.

Returns: end

updateGizmoTransform(index)

Updates gizmo transform.

  • index (number)

Returns: end

beginDrag()

Handles begin drag.

Returns: end

dragging()

Handles dragging.

Returns: end

endDragging()

Handles end dragging.

Returns: end

drawDebugCameraPlaying()

Draws debug camera playing.

onPacenoteDrag(pn_sel)

Callback for pacenote drag event.

  • pn_sel (any)

setHover(wp)

Sets the hover.

  • wp (any)

Returns: worldEditorCppApi.getAxisGizmoSelectedElement() ~= -1

handleUnmodifiedMouseInteraction(hoveredWp)

Handles handle unmodified mouse interaction.

  • hoveredWp (any)

Returns: worldEditorCppApi.getAxisGizmoSelectedElement() ~= -1

debugDrawNewPacenote(pos_cs, pos_ce)

Handles debug draw new pacenote.

  • pos_cs (any)
  • pos_ce (any)

Returns: end

debugDrawNewPacenote2(pos_cs, pos_ce)

Handles debug draw new pacenote2.

  • pos_cs (any)
  • pos_ce (any)

Returns: end

wpPosForSimpleDrag(wp, mousePos, mouseOffset)

Handles wp pos for simple drag.

  • wp (any)
  • mousePos (any)
  • mouseOffset (any)

Returns: end

refreshPacenotesTab()

Handles refresh pacenotes tab.

Returns: end

insertMode()

Handles insert mode.

Returns: end

validate()

Handles validate.

Returns: end

drawPacenotesList()

Draws pacenotes list.

Returns: end

searchPacenoteMatchFn(pacenote)

Handles search pacenote match fn.

  • pacenote (any)

Returns: end

pacenoteSearchMatches(pacenote)

Handles pacenote search matches.

  • pacenote (any)

Returns: end

insertNewPacenoteAfter(note)

Handles insert new pacenote after.

  • note (any)

Returns: end

toggleCornerCalls()

Toggles corner calls.

Returns: the result

setModeEditAll()

Sets the mode edit all.

Returns: function(...)

setModeEditCorners()

Sets the mode edit corners.

Returns: o

setupEditMode()

Handles setup edit mode.

Returns: o

generateElevationProfile()

Handles generate elevation profile.

Returns: o

Module Variables

  • windowDescription (string) - Module variable.
  • windowDescription (string) - Module variable.

Functions

onEditModeActivate()

Callback for edit mode activate event.

Returns: nil

init(rallyEditor)

Initializes the module.

  • rallyEditor (any)

Returns: self.pacenoteToolsState.snaproad

isValid()

Checks if valid.

Returns: self.pacenoteToolsState.snaproad

onEditModeActivate()

Callback for edit mode activate event.

Returns: nil

onEditModeDeactivate()

Callback for edit mode deactivate event.

Returns: nil

getRacePath()

Returns the race path.

Returns: Snaproad(driveline, styleData, RallyEnums.drivelineMode.rout

unselect()

Handles unselect.

Returns: end

attemptToFixMapEdgeIssue()

Handles attempt to fix map edge issue.

Returns: end

resetGizmoTransformToOrigin()

Handles reset gizmo transform to origin.

Returns: end

updateGizmoTransform(index)

Updates gizmo transform.

  • index (number)

Returns: end

beginDrag()

Handles begin drag.

Returns: end

dragging()

Handles dragging.

Returns: end

endDragging()

Handles end dragging.

Returns: end

drawDebugCameraPlaying()

Draws debug camera playing.

onPacenoteDrag(pn_sel)

Callback for pacenote drag event.

  • pn_sel (any)

setHover(wp)

Sets the hover.

  • wp (any)

Returns: worldEditorCppApi.getAxisGizmoSelectedElement() ~= -1

handleUnmodifiedMouseInteraction(hoveredWp)

Handles handle unmodified mouse interaction.

  • hoveredWp (any)

Returns: worldEditorCppApi.getAxisGizmoSelectedElement() ~= -1

debugDrawNewPacenote(pos_cs, pos_ce)

Handles debug draw new pacenote.

  • pos_cs (any)
  • pos_ce (any)

Returns: end

debugDrawNewPacenote2(pos_cs, pos_ce)

Handles debug draw new pacenote2.

  • pos_cs (any)
  • pos_ce (any)

Returns: end

wpPosForSimpleDrag(wp, mousePos, mouseOffset)

Handles wp pos for simple drag.

  • wp (any)
  • mousePos (any)
  • mouseOffset (any)

Returns: end

refreshPacenotesTab()

Handles refresh pacenotes tab.

Returns: end

insertMode()

Handles insert mode.

Returns: end

validate()

Handles validate.

Returns: end

drawPacenotesList()

Draws pacenotes list.

Returns: end

searchPacenoteMatchFn(pacenote)

Handles search pacenote match fn.

  • pacenote (any)

Returns: end

pacenoteSearchMatches(pacenote)

Handles pacenote search matches.

  • pacenote (any)

Returns: end

insertNewPacenoteAfter(note)

Handles insert new pacenote after.

  • note (any)

Returns: end

toggleCornerCalls()

Toggles corner calls.

Returns: the result

setModeEditAll()

Sets the mode edit all.

Returns: function(...)

setModeEditCorners()

Sets the mode edit corners.

Returns: o

setupEditMode()

Handles setup edit mode.

Returns: o

generateElevationProfile()

Handles generate elevation profile.

Returns: o


See Also

  • Rally Editor - Driveline Tab - Related reference
  • Rally Editor - Measurements Tab - Related reference
  • Rally Editor – Mission Settings Tab - Related reference
  • World Editor Guide - Guide

Rally Editor – Notebook Info Tab

Editor tab for viewing and editing notebook metadata (name, authors, description, audio mode) and managing co-drivers.

Rally Editor – Recce Tab

Editor tab for managing recce recordings: viewing driveline data, importing cuts as pacenotes, and downsampling the recorded driveline.

On this page

OverviewClass Methods – Selection & NavigationClass Methods – EditingClass Methods – Snaproad & MeasurementClass Methods – Camera & DrawingClass Methods – Mouse InteractionUsage ExampleModule VariablesFunctionsonEditModeActivate()init(rallyEditor)isValid()onEditModeActivate()onEditModeDeactivate()getRacePath()unselect()attemptToFixMapEdgeIssue()resetGizmoTransformToOrigin()updateGizmoTransform(index)beginDrag()dragging()endDragging()drawDebugCameraPlaying()onPacenoteDrag(pn_sel)setHover(wp)handleUnmodifiedMouseInteraction(hoveredWp)debugDrawNewPacenote(pos_cs, pos_ce)debugDrawNewPacenote2(pos_cs, pos_ce)wpPosForSimpleDrag(wp, mousePos, mouseOffset)refreshPacenotesTab()insertMode()validate()drawPacenotesList()searchPacenoteMatchFn(pacenote)pacenoteSearchMatches(pacenote)insertNewPacenoteAfter(note)toggleCornerCalls()setModeEditAll()setModeEditCorners()setupEditMode()generateElevationProfile()Module VariablesFunctionsonEditModeActivate()init(rallyEditor)isValid()onEditModeActivate()onEditModeDeactivate()getRacePath()unselect()attemptToFixMapEdgeIssue()resetGizmoTransformToOrigin()updateGizmoTransform(index)beginDrag()dragging()endDragging()drawDebugCameraPlaying()onPacenoteDrag(pn_sel)setHover(wp)handleUnmodifiedMouseInteraction(hoveredWp)debugDrawNewPacenote(pos_cs, pos_ce)debugDrawNewPacenote2(pos_cs, pos_ce)wpPosForSimpleDrag(wp, mousePos, mouseOffset)refreshPacenotesTab()insertMode()validate()drawPacenotesList()searchPacenoteMatchFn(pacenote)pacenoteSearchMatches(pacenote)insertNewPacenoteAfter(note)toggleCornerCalls()setModeEditAll()setModeEditCorners()setupEditMode()generateElevationProfile()See Also