ULC is an all-in-one lighting controller for non-ELS vehicles in FiveM! It uses the extra-based lighting stages on your vehicles and adds extra automation and improvements to create amazing, realistic, and fully-configurable lighting controls.
If you are a vehicle developer, view the full documentation.
Join Discord
Full ULC documentation
Config Generator
- Stage Controls
- Park Patterns
- Park Pattern Sync
- Intuitive & Minimal UI
- Brake Extras
- Reverse Extras
- Smart Steady Burns
- Blackout Command
- Horn/Honk Patterns & Extras
- Smart Stage Controls
- Granular Configuration per Vehicle
- Re-mappable Keybindings
- Great performance
- more!
- place
ulc
in yourresources
folder - add
ensure ulc
to yourserver.cfg
- add the names of your ULC ready resources in the
config.lua
For more installation help view the video tutorial!
onesync
(as of v1.7.0)baseevents
- theebu - for help with auto repair limitation
- Everyone who helped test!
Get started by viewing the full documentation here!
Each vehicle that is configured to use ULC can have it's own dedicated configuration. This configuration can even be included in the vehicle's resource as a ulc.lua
file, this way vehicle developers can deliver their vehicles pre-configured for ULC.
ULC offers a wide range of configuration settings and all features are opt-in.
By default, no vehicles are affected by ULC's functionality. In order to enable ULC for a vehicle, you must configure it. There are two methods for doing so.
The UI is built using React, Vite, Typescript, and Tailwind CSS. The React project in /ulc/src
builds out to /ulc/html
which is where FiveM runs it from.
Follow these steps to run and test locally.
cd ulc/src/src
npm i
- Uncomment the debugging buttons in
App.tsx
. npm run dev
- View the app in your browser and use the debug buttons to show the UI.
To build the UI to the html
folder:
- Simply
npm run build
- All changes that effect the
ulc.lua
config in any way must be 100% backwards compatible. That is, aulc.lua
file that was created on the first day ULC was released must still work today.- Any new features should never throw errors if that config section is not present and by default the new behavior should be entirely disabled.
- Changes to the configuration format of an existing feature must also still support the old format.
- For this reason, it's imperative that new features be well though-out in terms of the format of their configuration in the
ulc.lua
files.