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
Rally Audio ManagerRally Camera Path PlayerRally ClientRally Cut CaptureRally EnumsRally Extension HelperRally GeometryRally ManagerRecce ManagerRecce AppRecce SettingsRally Settings ManagerSnap-to-RoadTraffic Exclusion ZonesRally UtilityRally Vehicle CaptureRally Vehicle Tracker
Rally CodriverRally Mission SettingsRally PacenotePacenote GeneratorPacenote WaypointNotebook PathStructured Pacenote DataSystem PacenotesWaypoint Types
Library CompositorStructured Pacenote SchemaText CompositorVisual Compositor

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 Extensionsgameplayrallynotebookstructured

Structured Pacenote Schema

Defines the schema for structured pacenote fields - the machine-readable description format for rally corners, caution levels, modifiers, and special events. Provides field definitions with types, def

Defines the schema for structured pacenote fields - the machine-readable description format for rally corners, caution levels, modifiers, and special events. Provides field definitions with types, defaults, and valid ranges/values.


Public API

FunctionSignatureReturnsDescription
M.default(keyName)anyReturns the default value for a schema field
M.initDefaultFields(fields)nilPopulates a table with all default field values
M.schemavalue-schema handler

Schema Fields

Corner Descriptors

FieldTypeDefaultRange/ValuesDescription
cornerSeveritynumber-1-1 to 100Corner tightness (-1 = unset, 0 = gentle, 100 = tightest)
cornerDirectionenum0-1, 0, 1Left (-1), straight (0), right (1)
cornerLengthnumber500 to 100Normalized length (0 = short, 100 = extra long)
cornerRadiusChangenumber500 to 100Normalized radius change (0 = opens, 100 = tightens)
cornerSquarebooleanfalse-Special square/switchback corner type

Caution Descriptors

FieldTypeDefaultValuesDescription
cautionenum00, 1, 2, 3None, caution, double caution, triple caution

Modifiers

FieldTypeDefaultDescription
modDontCutbooleanfalse"Don't cut" warning
modNarrowsbooleanfalseRoad narrows
modWaterbooleanfalseWater crossing/splash
modBumpybooleanfalseBumpy surface
modBumpbooleanfalseSingle bump
modJumpbooleanfalseJump/crest with air
modCrestbooleanfalseBlind crest

Special

FieldTypeDefaultDescription
finishLinebooleanfalseFinish line announcement

System Pacenotes

The schema also defines system pacenote names (not structured fields, but listed for reference):

system = {
  'damage', 'go',
  'countdown1', 'countdown2', 'countdown3', 'countdown4', 'countdown5',
  'firstnoteintro', 'firstnoteoutro',
  'finish'
}

How It Works

  1. Schema defines the contract for structured pacenote data
  2. initDefaultFields(fields) populates a table with all defaults - used by Structured:init()
  3. default(keyName) provides individual field defaults
  4. The text compositor uses this schema to know which fields exist and their types
  5. Legacy migrations in Structured:onDeserialized handle old value ranges (e.g., cornerLength 20 → 50)

Usage Example

local Schema = require('gameplay/rally/notebook/structured/schema')

-- Initialize a fields table with defaults
local fields = {}
Schema.initDefaultFields(fields)
-- fields.cornerSeverity == -1
-- fields.cornerDirection == 0
-- fields.modDontCut == false
-- etc.

-- Get a single default
local defaultSeverity = Schema.default('cornerSeverity')  -- -1

-- Check schema definition
local severityDef = Schema.schema.cornerSeverity
-- { type='number', default=-1, min=-1, max=100 }

See Also

  • Library Compositor - Related reference
  • TextCompositor - Structured Pacenote Text Generation - Related reference
  • VisualCompositor - Pacenote Visual Icon Generation - Related reference
  • Gameplay Systems Guide - Guide

Library Compositor

Core composition engine that converts structured pacenote fields into human-readable text phrases. Handles corner calls, caution phrases, modifiers, distance calls, finish lines, and phrase enumeratio

Text Compositor

Converts structured pacenote data into human-readable text strings for co-driver audio. Handles distance rounding, unit conversions, and phrase enumeration for TTS audio generation.

On this page

Public APISchema FieldsCorner DescriptorsCaution DescriptorsModifiersSpecialSystem PacenotesHow It WorksUsage ExampleSee Also