Vehicle Light Bulbs



Vehicle Light Bulbs

Starting with version 0.39, official vehicles moved away from defining lights directly inside props sections with embedded lights . Instead, they now use shared light emitter parts located in vehicles/common/lightEmitters/.

This approach allows multiple vehicles to reuse the same light definitions (for example, halogen headlights or tail light bulbs), ensuring consistent behavior and easier maintenance. Any updates to light calibration, beam shape, or cookies can be made in one place and automatically apply to all vehicles using that emitter.

How common light emitters work

Each file in vehicles/common/lightEmitters/ defines one or more auxiliary parts. These parts contain a props section with a light definition that uses $-prefixed variables (such as $posX, $electric, etc.).

Vehicle lamp housing parts do not define lights directly. Instead, they reference emitters using the slots2 system. At runtime, the selected emitter is attached to the vehicle and its variables are resolved, resulting in a fully functional light with the correct position, behavior, and settings.

Slots2 setup

Bulb slots use the standard Slots2 structure:

  • name
    Unique slot identifier. Must not be reused anywhere else on the same vehicle.

  • allowTypes
    List of allowed slotType values. These are matched against the slotType field inside emitter parts (not the part name itself).
    In most cases, bulb slots should only allow a single type.

  • denyTypes
    Typically left as an empty array [].

  • default
    The default emitter part to load. This must be the internal part name (the key used in the JBeam file), not the display name. It may or may not match the slotType.

These slots are marked with "coreSlot": true and are not intended to be user-selectable. Emitters themselves use the isAuxiliary tag, which keeps them hidden from the parts selector.

Variables

Emitter-specific parameters are defined in the parent part under variables. These values are passed into the emitter and control things like position, direction, and electrical behavior.

This system avoids duplicating light definitions while keeping vehicle-specific configuration flexible and maintainable.

Example: fullsize right headlight (low beam)

"slots2":[
        ["name",                               "allowTypes",                 "denyTypes",       "default",                "description"],
        //headlight emiters
        ["fullsize_headlight_R_low_bulb",      ["headlightBulb_halogen_55W"],      [],          "headlightBulb_halogen_55W",      "Right Lowbeam Headlight Bulb"
        {
        "coreSlot":true,
        "variables":{
          "$electric": "lowhighbeam_filament",
          "$lightPattern": "US",
          "$nodeRef":"he4l",  "$nodeX": "he3l",  "$nodeY":"he2l"
          "$deformGroup": "headlightglass_R_break"
          "$posX": -0.675,
          "$posY": -2.20,
          "$posZ": 0.67,
          "$rotX":-0.57,
          "$rotY": 0,
          "$rotZ": 180,
          //"$cookieName": "art/special/BNG_cookie_test_1.png"
          "$shadowEnable":0
        }
        }],
    ]

Example 2: pigeon right tail lamps

Rear lamps reuse the same general idea as headlamps ($electric, nodes, pose, and so on) but usually omit $lightPattern, since non-headlight bulbs generally do not use dedicated road-beam cookies. You can still override the cookie from the slot if you need to.

    "slots2": [
        ["name",                         "allowTypes",                  "denyTypes", "default",                "description"],
        ["pigeon_taillight_R_reverse_bulb", ["incandescent_white_21W"], [],          "incandescent_white_21W", "Right Reverse Bulb",
        {
        "coreSlot":true,
        "variables":{
          "$electric":"reverselight_filament",
          "$nodeRef":"rb4rr", "$nodeX":"rb4r", "$nodeY":"rb3rr",
          "$deformGroup":"taillight_R_break",
          "$posX":-0.385, "$posY":1.778, "$posZ":0.363,
          "$rotX":0, "$rotY":0, "$rotZ":0,
          "$shadowEnable":1,
        }
        }],
        ["pigeon_taillight_R_tailbrake_bulb", ["incandescent_red_21W"], [],          "incandescent_red_21W",   "Right Tail/Brake Bulb",
        {
        "coreSlot":true,
        "variables":{
          "$electric":"lowhighBrake_filament",
          "$nodeRef":"rb4rr", "$nodeX":"rb4r", "$nodeY":"rb3rr",
          "$deformGroup":"taillight_R_break",
          "$posX":-0.441, "$posY":1.778, "$posZ":0.363,
          "$rotX":0, "$rotY":0, "$rotZ":0,
          "$shadowEnable":1,
        }
        }],
        ["pigeon_taillight_R_signal_bulb",  ["incandescent_amber_21W"], [],          "incandescent_amber_21W", "Right Signal Bulb",
        {
        "coreSlot":true,
        "variables":{
          "$electric":"signal_R_filament",
          "$nodeRef":"rb4rr", "$nodeX":"rb4r", "$nodeY":"rb3rr",
          "$deformGroup":"taillight_R_break",
          "$posX":-0.499, "$posY":1.778, "$posZ":0.363,
          "$rotX":0, "$rotY":0, "$rotZ":0,
          "$shadowEnable":1,
        }
        }]
    ],

Mandatory slot variables

These are the variables most vehicle-mounted bulb slots are expected to supply so the emitter can place and drive the spotlight.

Variable
Explanation
Variable
$electric
Explanation
Electrics channel this lamp listens to. Must match a value your vehicle actually drives (custom filaments, core signals, etc.). See the vehicle electrics documentation.
Variable
$nodeRef, $nodeX, $nodeY
Explanation
Node frame for the SPOTLIGHT: attachment node and two non-collinear helpers for deformation. Prefer nodes on the lamp part; keep nodeRef close to the bulb. All three must be different node IDs.
Variable
$posX, $posY, $posZ
Explanation
Emitter position in vehicle global coordinates for vehicle-mounted bulbs using baseTranslationGlobal.
Variable
$rotX, $rotY, $rotZ
Explanation
Emitter orientation in degrees in the same sense as baseRotationGlobal on SPOTLIGHT props (aim of the beam).

Electrics naming and custom filaments are documented under vehicle electrics .

Most vehicle light emitters use $posX, $posY, and $posZ with baseTranslationGlobal. The flashlightBulbs.jbeam and streetLightBulbs.jbeam emitters are offset-based instead: they use $offsetX, $offsetY, and $offsetZ, and they allow $lightIntensityCd to override their default intensity.

Extra slot variables

These are not mandatory for every spotlight to work, but can be used to fine-tune emitters that expose them.

Variable
Purpose
Variable
$lightPattern
Purpose
Road headlight beam cookie preset: LHD, RHD, or US. Required on normal low/high beam slots when the emitter chooses a patterned cookie from it; omit for fog, markers, or non-road lamps.
Variable
$cookieName
Purpose
Overrides the emitter’s default light-cookie texture path for this slot.
Variable
$lightRange
Purpose
Overrides spotlight range (clamped falloff distance), in place of the emitter default.
Variable
$lightInnerAngle
Purpose
Overrides inner cone angle (degrees).
Variable
$lightOuterAngle
Purpose
Overrides outer cone angle (degrees).
Variable
$offsetX, $offsetY, $offsetZ
Purpose
Offset-based translation used by flashlightBulbs.jbeam and streetLightBulbs.jbeam instead of $posX, $posY, and $posZ.
Variable
$lightIntensityCd
Purpose
Overrides the default candela value on emitters that expose it, currently flashlight and streetlight emitters.
Variable
$flareScale
Purpose
Underglow emitter flare scale override.
Variable
$deformGroup
Purpose
Deform group name so the lamp follows the same damage / visibility rules as the housing mesh.
Variable
$breakGroup
Purpose
Optional break group string forwarded to the spotlight prop.
Variable
$disable
Purpose
If set to 1, forces the emitter spotlight disabled regardless of electrics.
Variable
$shadowEnable
Purpose
Per-slot shadow toggle; emitters interpret 0/1 differently (e.g. many headlights default shadows on unless disabled; many tail emitters need 1 to enable shadows).
Variable
$headlightPitchComp
Purpose
Extra pitch in degrees added inside supported headlight emitters (see tuning section). Usually supplied from the root part’s variables / Tuning UI, not hard-coded on every slot.

Headlamp aim convention and $headlightPitchComp

On official vehicles, high beams are aimed straight forward: $rotX = 0 (no extra pitch on X). Low beams use a small downward pitch on X of -0.57 degrees in the vehicle’s as-spawned pose. Those angles are not meant to include suspension trim or wheel-size pitch changes.

To compensate per configuration, supported headlight emitters add $headlightPitchComp inside their rotation expression. You normally expose that on the root vehicle part as a tuning variable so players can trim pitch in the Tuning UI: use the negative of what the in-game Pitch UI app shows for the headlight line you are correcting (if the app reads -0.5, set compensation to +0.5).

Example from pickup root part variables (range in degrees, category Headlights):

    "variables": [
        ["name", "type", "unit", "category", "default", "min", "max", "title", "description"],
        ["$brakestrength", "range", "", "Brakes", 1, 0.6, 1.0, "Brake Force Multiplier", "Scales the overall brake torque for this setup", {"minDis":60, "maxDis":100}],
        ["$ffbstrength", "range", "", "Chassis", 1, 0.5, 1.5, "Setup-Specific Force Feedback Multiplier", "Scales the force feedback strength for THIS SETUP ONLY", {"minDis":50, "maxDis":150}],
        ["$headlightPitchComp", "range", "degree", "Headlights", 0, -3, 3, "Setup Specific Headlight Pitch Compensation", "Adjusts the headlight pitch  for this setup", {"minDis":-3, "maxDis":3}]
    ],

If your vehicle does not define $headlightPitchComp yet, add a similar variables row on the main part so tuning can adjust pitch without editing each headlamp slot.

Light intensity reference

The lightIntensityCd value on each emitter is the peak luminous intensity in candela (cd) for a single bulb (one side, not a pair). For separate low/high setups the low-beam and high-beam bulbs are defined independently; combined bulbs use H4-style dual-filament tech, so their low and high values are listed separately.

The forward road beams below are calibrated against real photometric standards: ECE R112 (EU low/high beam) and FMVSS 108 (US). Reference points used:

  • Low beam is glare-limited. The useful hotspot caps at about 10 100 cd (ECE point 75R) and 13 200 cd (point 50L); the US lets the hotspot reach roughly 20 000 cd.
  • High beam peak intensity (Imax) must not exceed 215 000 cd under ECE; the US limit is 75 000 cd at H-V per side. A typical halogen high beam sits around an ECE reference value of 12.5-30 (≈ 54 000-129 000 cd).
  • Front fog (ECE R19) is a wide, low beam with a modest 1 000-3 000 cd peak.
A cookie modulates brightness as well as beam shape: each texel scales the output in that direction, where white is the peak (the full lightIntensityCd) and darker values dim it proportionally (50% grey ≈ half). A cookie can only attenuate, it can never push output above the set value. So set lightIntensityCd to the true beam peak, then let the cookie shape and dim the rest.

Forward road lighting (headlights and fog)

Light / bulb class
In-game (cd)
Real-world reference
Light / bulb class
Low beam, halogen reflector / combined (55 W)
In-game (cd)
13 000
Real-world reference
ECE R112 hotspot ~10-13 kcd; FMVSS 108 hotspot up to ~20 kcd
Light / bulb class
Low beam, halogen projector (55 W)
In-game (cd)
20 000
Real-world reference
Sharper, more concentrated hotspot than reflector
Light / bulb class
High beam, halogen (60 W)
In-game (cd)
83 000
Real-world reference
ECE R112 Imax (ref ~19); combined H4-style unit 88 800; US cap 75 kcd at H-V
Light / bulb class
Low beam, HID xenon reflector (35 W)
In-game (cd)
25 000
Real-world reference
HID puts roughly 2x the light of halogen into the hotspot
Light / bulb class
Low beam, HID xenon projector (35 W)
In-game (cd)
30 000
Real-world reference
Most common HID optic, tightest hotspot
Light / bulb class
High beam, HID xenon (35 W)
In-game (cd)
100 000
Real-world reference
Well under the 215 kcd ECE Imax cap
Light / bulb class
Low beam, LED (25 W)
In-game (cd)
24 000
Real-world reference
Comparable to HID
Light / bulb class
High beam, LED (30 W)
In-game (cd)
90 000
Real-world reference
Between halogen and HID
Light / bulb class
Low beam, halogen sealed beam (55 W)
In-game (cd)
13 000
Real-world reference
US round / rectangular sealed-beam reflector
Light / bulb class
High beam, halogen sealed beam (65 W)
In-game (cd)
83 000
Real-world reference
Combined unit 88 800
Light / bulb class
Low beam, tungsten sealed beam (40 W)
In-game (cd)
12 000
Real-world reference
Pre-halogen sealed beam, dimmer than halogen
Light / bulb class
High beam, tungsten sealed beam (50 W)
In-game (cd)
30 000
Real-world reference
Combined unit 34 500
Light / bulb class
Low beam, vintage 6 V prefocus (~21 cp)
In-game (cd)
2 500
Real-world reference
1930s bulb behind a silvered reflector
Light / bulb class
High beam, vintage 6 V prefocus (~32 cp)
In-game (cd)
6 000
Real-world reference
Sits below sealed-beam low, matching period data; yellow tint 5 000
Light / bulb class
Fog: halogen 55 W / sealed 35 W / LED 20 W
In-game (cd)
3 200 / 2 200 / 3 000
Real-world reference
ECE R19 front fog, wide low beam, peak ~1-3 kcd

Signal, brake and marker lighting

Rear signalling values follow FMVSS 108 / ECE photometric ranges (per single bulb). Colour variants of the same wattage share their intensity.

Function (bulb / emitter)
In-game (cd)
Real-world reference
Function (bulb / emitter)
Tail / rear position (red, 5 W)
In-game (cd)
8
Real-world reference
FMVSS 108 / ECE rear position ~2-12 cd
Function (bulb / emitter)
Stop / brake (red, 21 W)
In-game (cd)
135
Real-world reference
FMVSS 108 stop lamp 80-300 cd per compartment
Function (bulb / emitter)
Turn signal (amber, 21 W)
In-game (cd)
160
Real-world reference
Rear ~50-700 cd; front signals are brighter
Function (bulb / emitter)
Reverse / backup (white, 21 W)
In-game (cd)
520
Real-world reference
FMVSS 108 backup lamp min 80 cd
Function (bulb / emitter)
Park / marker incandescent (white 5 W)
In-game (cd)
200
Real-world reference
Front park / marker glow; amber 5 W 12-15, red 5 W 8
Function (bulb / emitter)
Modern LED marker / tail (1-5 W)
In-game (cd)
60 - 200
Real-world reference
Values vary by colour and wattage
Function (bulb / emitter)
CHMSL LED strip (4 W)
In-game (cd)
250
Real-world reference
FMVSS center stop 25-160 cd, tuned for visible glow
Function (bulb / emitter)
LED position light bar (2 W)
In-game (cd)
200
Real-world reference
Position / accent strip
Function (bulb / emitter)
Generic round / oval LED cluster (5 W)
In-game (cd)
2 250
Real-world reference
Multi-LED signal / marker; white variant 4 250
Function (bulb / emitter)
Generic compact LED (1 W)
In-game (cd)
150
Real-world reference
Small marker / indicator
Function (bulb / emitter)
Vintage 6 V small lamp (3 / 6 / 12 W)
In-game (cd)
4 / 7.5 / 22.5
Real-world reference
~3 / 6 / 21 cp tail / marker family

Emergency and warning lighting

Emergency warning lamps are regulated: in the EU by ECE R65, and in the US by SAE J595 (directional) and SAE J845 (omnidirectional, 360 degrees). Both express limits in effective candela:

  • ECE R65 (flashing blue / amber beacons and bars): Class 1 from 50 cd, Class 2 from 100 cd minimum horizontal, with peaks of a few thousand cd. The EU bar models a per-side total (about 2 500 cd for the main flash) split across its physical light units, so each emitter carries only a fraction.
  • SAE J595 / J845: Class 1 ≥ 8 100 cd (primary emergency warning), Class 2 1 981-8 099 cd, Class 3 < 1 980 cd (peak). US bar values are per head; several heads per side combine toward the device class.

Emitter
In-game (cd)
Standard / class
Emitter
EU LED lightbar - main flash (per unit)
In-game (cd)
833
Standard / class
ECE R65; ~2 500 cd total split over 3 units per side
Emitter
EU LED lightbar - centre flasher
In-game (cd)
1 500
Standard / class
ECE R65 flashing warning
Emitter
EU LED lightbar - stop / warning / turn
In-game (cd)
421 - 500
Standard / class
ECE R65 / rear signalling
Emitter
EU LED lightbar - alley / work (white)
In-game (cd)
750
Standard / class
Scene light, not a warning function
Emitter
US LED lightbar module (per head)
In-game (cd)
2 250
Standard / class
SAE J595/J845; heads per side combine toward Class 1 (>=8 100 cd)
Emitter
US halogen lightbar / spinner (per head)
In-game (cd)
2 000
Standard / class
SAE J595/J845, older rotator / strobe
Emitter
Rotating beacon
In-game (cd)
22 500
Standard / class
SAE J845 Class 1 (>=8 100 cd), instantaneous beam
Emitter
Roof / deck LED flasher
In-game (cd)
154 - 307
Standard / class
Compact supplementary flasher (below Class 3)
Emitter
Ambulance incandescent warning
In-game (cd)
15 000
Standard / class
SAE Class 1 sealed-beam flasher
Emitter
School-bus warning incandescent (55 W)
In-game (cd)
15 000
Standard / class
Red / amber bus warning lamps

Auxiliary and off-road lighting (unregulated)

Off-road driving lights, steerable search / spot lights, and decorative or environment emitters are not bound by a road-beam standard, so they are tuned for believable effect and can be very bright. Off-road lights are generally not road-legal for on-road use.

Emitter
In-game (cd)
Notes
Emitter
Off-road auxiliary LED flood (25 W)
In-game (cd)
4 250
Notes
Off-road only; wide flood, low peak
Emitter
Off-road auxiliary LED spot (30 W)
In-game (cd)
125 000
Notes
Off-road only; long-range spot
Emitter
Wide LED light bar (100 W)
In-game (cd)
150 000
Notes
Off-road only; high-power bar
Emitter
Police / search spotlight, halogen (50-100 W)
In-game (cd)
100 000 - 245 000
Notes
Steerable search / spot light, not a warning beacon
Emitter
Police EU work light (55 W)
In-game (cd)
5 000
Notes
Weak flood work light
Emitter
Street lamp (sodium / metal halide)
In-game (cd)
17 700
Notes
Environment fixture, overridable
Emitter
Underglow strip
In-game (cd)
6 000 - 7 000
Notes
Decorative, not a road light
Emitter
Limo dome / cabin
In-game (cd)
750
Notes
Interior lighting
Emitter
Flashlight (handheld LED)
In-game (cd)
2 250
Notes
Default value, tunable via $lightIntensityCd

Beam cookie textures

The shared emitters reference ready-made cookie textures that ship in art/special/. .color.png files are greyscale beam masks. Assign one through the cookieName field, or override it per slot with $cookieName.

Road-beam cookies come in left-hand-traffic, right-hand-traffic, and US variants. Headlight emitters pick the right one automatically from $lightPattern (LHD / RHD / US) and fall back to a sensible default when it is unset.

Cookie file (in art/special/)
Beam / role
Region ($lightPattern)
Cookie file (in art/special/)
BNG_light_cookie_reflector_lhd_eu.color.png
Beam / role
Reflector low beam
Region ($lightPattern)
LHD (EU)
Cookie file (in art/special/)
BNG_light_cookie_reflector_rhd.color.png
Beam / role
Reflector low beam
Region ($lightPattern)
RHD
Cookie file (in art/special/)
BNG_light_cookie_sealed_beam_low.color.png
Beam / role
Reflector / sealed low beam
Region ($lightPattern)
US + default
Cookie file (in art/special/)
BNG_light_cookie_projector_lhd_eu.color.png
Beam / role
Projector low beam
Region ($lightPattern)
LHD (EU)
Cookie file (in art/special/)
BNG_light_cookie_projector_rhd.color.png
Beam / role
Projector low beam
Region ($lightPattern)
RHD
Cookie file (in art/special/)
BNG_light_cookie_projector_us.color.png
Beam / role
Projector low beam
Region ($lightPattern)
US + default
Cookie file (in art/special/)
BNG_light_cookie_reflector_combined_lhd_eu.color.png
Beam / role
Combined (H4) low beam
Region ($lightPattern)
LHD (EU)
Cookie file (in art/special/)
BNG_light_cookie_reflector_combined_rhd.color.png
Beam / role
Combined (H4) low beam
Region ($lightPattern)
RHD
Cookie file (in art/special/)
BNG_light_cookie_high.color.png
Beam / role
High beam (reflector / projector)
Region ($lightPattern)
all
Cookie file (in art/special/)
BNG_light_cookie_sealed_beam_high.color.png
Beam / role
Sealed-beam high beam
Region ($lightPattern)
all
Cookie file (in art/special/)
BNG_light_cookie_reflector_combined_high.color.png
Beam / role
Combined (H4) high beam
Region ($lightPattern)
LHD / US + default
Cookie file (in art/special/)
BNG_light_cookie_reflector_combined_high_rhd.color.png
Beam / role
Combined (H4) high beam
Region ($lightPattern)
RHD
Cookie file (in art/special/)
BNG_light_cookie_fog.color.png
Beam / role
Front fog, wide low beam
Region ($lightPattern)
all
Cookie file (in art/special/)
BNG_light_cookie_generic_incandescent.color.png
Beam / role
Small incandescent tail / marker / signal
Region ($lightPattern)
Cookie file (in art/special/)
BNG_light_cookie_generic_led.color.png
Beam / role
Small / generic LED marker / signal
Region ($lightPattern)
Cookie file (in art/special/)
BNG_light_cookie_taillight_incandescent.color.png
Beam / role
Tail / brake / rear lamp shaping (vehicle-set)
Region ($lightPattern)
Cookie file (in art/special/)
BNG_light_cookie_headlight.dds
Beam / role
Legacy headlight fallback; aux / beacon / search / street / interior spots
Region ($lightPattern)
Cookie file (in art/special/)
BNG_light_cookie_lightbar.dds
Beam / role
Lightbar segments; also vehicle blinkers / flashers via $cookieName
Region ($lightPattern)
Cookie file (in art/special/)
BNG_LED_LightbarWide.dds
Beam / role
Wide LED light bar / position bar
Region ($lightPattern)
Cookie file (in art/special/)
cookie_underglow_new.color.png
Beam / role
Underglow strip
Region ($lightPattern)
Cookie file (in art/special/)
BNG_light_cookie_underglow.dds
Beam / role
Underglow strip (.dds variant)
Region ($lightPattern)

Beyond the emitter defaults, individual vehicles often set $cookieName on a bulb slot to reuse these masks for non-headlight functions, for example BNG_light_cookie_lightbar.dds to shape blinkers and flashers, or BNG_light_cookie_taillight_incandescent.color.png to shape tail and brake lamps.

An empty cookie ("") emits a plain, unshaped cone, used by some small 6 V and marker lamps. Remember that a cookie only attenuates: white passes the full lightIntensityCd, so pick the cookie for the shape and set the intensity separately.

Environment fixtures (street and tunnel lights) instead use IES-derived cookies stored in art/special/ies/. See the IES light profiles section on the PBL page.

Adding new light emitters

Example light emitter:

"headlightBulb_halogen_55W": { // Internal name: use this string in the slot `default` field
    "information":{
        "authors":"BeamNG",
        "name":"55W Halogen Bulb", // UI name in parts selector
        "value":0,
        "isAuxiliary": true, // Hides part from selector unless "Include auxiliary / debug content" is enabled
    },
    "slotType" : "headlightBulb_halogen_55W", // Goes in slot `allowTypes`
    "props": [ // Standard SPOTLIGHT prop row; many fields are filled from the parent slot `variables`
      ["func"      , "mesh"              , "idRef:", "idX:", "idY:"            , "baseRotation"        , "rotation"                 , "translation"        , "min", "max", "offset", "multiplier"],
      //low beams
      ["$electric"    , "SPOTLIGHT"        , "$nodeRef", "$nodeX", "$nodeY", {"x":0, "y":0, "z":0} , {"x":0, "y":0, "z":0}    , {"x":0, "y":0, "z":0}, 0, 0, 0, 1,
      {
          "baseTranslationGlobal":{"x":"$posX", "y":"$posY", "z":"$posZ"},
          "baseRotationGlobal":{"x":"$= $rotX + ($headlightPitchComp == nil and 0 or $headlightPitchComp)", "y":"$rotY", "z":"$rotZ"},
          "deformGroup":"$deformGroup",
          "breakGroup":"$= $breakGroup ~= nil and $breakGroup or ''",
          "lightScaling":{},
          "disable":"$= $disable == 1 and true or false",
          "lightRange":"$=$lightRange == nil and 150 or $lightRange",
          "lightInnerAngle":"$=$lightInnerAngle == nil and 105 or $lightInnerAngle",
          "lightOuterAngle":"$=$lightOuterAngle == nil and 110 or $lightOuterAngle",
          "flareScale":0,
          "lightIntensityCd":13000, // Intensity (candela)
          "lightColor":{"r":255, "g":178, "b":115, "a":255}, // Emitted light colour
          "lightCastShadows":"$= $shadowEnable == 0 and false or true",
          "flareName":"",
          "cookieName":"$= $cookieName ~= nil and $cookieName or ($lightPattern == 'LHD' and 'art/special/BNG_light_cookie_reflector_lhd_eu.color.png' or $lightPattern == 'RHD' and 'art/special/BNG_light_cookie_reflector_rhd.color.png' or $lightPattern == 'US' and 'art/special/BNG_light_cookie_sealed_beam_low.color.png' or 'art/special/BNG_light_cookie_sealed_beam_low.color.png')", // Beam cookie; this headlight picks LHD / RHD / US from $lightPattern
          "texSize":512,
          "shadowSoftness":0.5,
      }],
    ],
  },

Emitter catalogue (files)

JBeam file
Role
JBeam file
incandescentBulbs.jbeam
Role
Coloured and white 12 V-style incandescent bulbs (tail, signal, interior, warning)
JBeam file
incandescent6VBulbs.jbeam
Role
Low-voltage (6 V) incandescent variants
JBeam file
headlightHalogenBulbs.jbeam
Role
Halogen road headlights, combined low/high, fog, projector variants
JBeam file
headlightXenonBulbs.jbeam
Role
HID xenon headlight units
JBeam file
headlight6VBulbs.jbeam
Role
Vintage 6 V prefocus headlight bulbs
JBeam file
sealedBeamBulbs.jbeam
Role
US-style sealed beam round/rectangular units and fog
JBeam file
LedHeadlightUnits.jbeam
Role
LED headlight and fog units (road-oriented)
JBeam file
genericLEDbulbs.jbeam
Role
Round/oval/offroad LED arrays and generic lightbar-style emitters
JBeam file
LedLightUnits.jbeam
Role
Small modern LED markers, CHMSL strips, position bars
JBeam file
beaconLightBulbs.jbeam
Role
Rotating beacon sealed-beam and incandescent variants
JBeam file
policeSearchLightBulbs.jbeam
Role
Roof/search spot halogen bulbs
JBeam file
USLightbarLedBulbs.jbeam
Role
US-style linear LED lightbar segments
JBeam file
USLightbarHalogenBulbs.jbeam
Role
US-style lightbar incandescent/spinner segments
JBeam file
EULightbarLedBulbs.jbeam
Role
EU-style LED lightbar segments
JBeam file
roofFlasherLedBulbs.jbeam
Role
Compact roof flashers
JBeam file
ambulanceIncandescentBulbs.jbeam
Role
High-power ambulance warning colours
JBeam file
flashlightBulbs.jbeam
Role
Handheld-style LED
JBeam file
streetLightBulbs.jbeam
Role
Street lamp sodium / metal halide
JBeam file
limoBulbs.jbeam
Role
Limo dome / cabin
JBeam file
underglowEmitters.jbeam
Role
Neon underglow strips

Last modified: July 23, 2026

Any further questions?

Join our discord
Our documentation is currently incomplete and undergoing active development. If you have any questions or feedback, please visit this forum thread.