Repository navigation
Gauges & Meters
✨ You can add as many gauges/meters as you want.
- Place the node at the pivot point where the needle should rotate.
- Make sure the pivot is at the needle base, so rotation sweeps correctly from Empty → Full.
- Align the needle in 3D space so it points at 0 value initially.
- Scale the needle to match your dashboard: adjust length & thickness.
- Multiple needles? Add numbers:
x_gauge_fixed1,x_gauge_fixed2, … - Each needle needs its own pivot node.
- Create a parent node with child nodes representing digits or states.
- Position & scale digits so they fit perfectly on your display.
- Name children sequentially:
0, 1, 2…and assign textures/materials.
📌 Path: ModelExtras/data/<FILENAME>.jsonc or modloader/AnyFolder/<FILENAME>.jsonc
Both model ID and model name are valid FILENAME (e.g. 602.jsonc or alpha.jsonc).
💡Tip: It is recommended to use model names instead of model IDs to avoid conflicts with other mods — especially when using added vehicles.
Every JSONC configuration requires a metadata specification before any other settings. See here: METADATA
- Match dashboard layout: pivot points, rotation angles, needle/digit positions.
- Check rotation direction: clockwise or counter-clockwise.
- Keep naming consistent if you have multiple gauges.
- Test in-game to ensure proper sweep & alignment.
ModelExtras supports VehFuncs and custom gauge naming conventions out of the box:
| ModelExtras Node | VehFuncs / Alternate Node | Description |
|---|---|---|
x_sm |
fc_sm, speedook
|
Speedometer needle |
x_rpm |
fc_rpm, tahook
|
RPM Tachometer needle |
x_odometer |
fc_om |
Odometer cylinder digits |
x_gearmeter |
fc_gm |
Gear indicator frames |
x_gauge_fixed |
x_gasmeter, x_gm, petrolok
|
Fixed / Fuel level gauge |
x_chain |
fc_chain |
Animated bike/bicycle chain |
- Displays a fixed/random value.
- Set the value in JSONC: (ME will choose a random value without that range)
{
"gauges": {
"x_gauge_fixed1": {
"minangle": 20,
"maxangle": 70
}
}
}- Displays vehicle speed.
- Make sure needle rotates correctly according to your model’s scale.
{
"gauges": {
"x_sm2": {
"maxspeed": 100.0,
"maxrotation": 100.0,
"kph": true
}
}
}kph defaults to true. Set it to false to convert the measured km/h value to mph. Match maxspeed to the dial's units and full-scale value.
- Displays engine RPM (estimated).
- Align needle pivot with your RPM dial.
{
"gauges": {
"x_rpm3": {
"maxrpm": 100.0,
"maxrotation": 100.0
}
}
}- Displays turbo pressure (estimated).
- Align the needle to match turbo gauge scale.
{
"gauges": {
"x_tm4": {
"maxturbo": 100.0,
"maxrotation": 100.0
}
}
}- Shows current vehicle gear using textures.
Setup:
- Create a parent object
x_gearmeter. - Add child nodes for each gear.
- Name children sequentially:
0, 1, 2… - Assign number textures.
- Position & scale to fit the dashboard.
Hierarchy Example:
x_gearmeter
├── 0 (Texture: "0") // Reverse Gear
├── 1 (Texture: "1")
├── 2 (Texture: "2")
├── 3 (Texture: "3")
├── 4 (Texture: "4")
├── 5 (Texture: "5")
- Measures distance traveled, up to 6 digits (999999 max).
Setup for Analog Odometer:
- Add dummy node
x_odometer. - Add 6 cylinder-shaped objects (10 faces each) for digits.
- Position, scale, and rotate cylinders to match dashboard.
- Ensure digits are visible to the driver.
Hierarchy Example:
x_odometer
├── Cylinder_6 (10 faces)
├── Cylinder_5 (10 faces)
├── Cylinder_4 (10 faces)
├── Cylinder_3 (10 faces)
├── Cylinder_2 (10 faces)
├── Cylinder_1 (10 faces)
JSONC Example:
{
"gauges": {
"x_odometer5": {
"kph": true
}
}
}Visual References: 
In-game hour & minute for the vehicle dashboard.
You need 10 models, one for each number from 0 to 9.
- These models will represent the digits of your speedometer.
- The order of the models matters — make sure they are arranged from
0to9. - The position of digits doesn't matter; it will be deleted during the game.
Digit1, Digit2 are the positions for the hour & Digit3, Digit4 are for the minute.
JSONC Example:
{
"clocks": {
"x_dclock1": {
"12hformat": true
}
}
}


