> For the complete documentation index, see [llms.txt](https://duddzy-scripts.gitbook.io/duddzy-scripts-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://duddzy-scripts.gitbook.io/duddzy-scripts-docs/scripts/duddzy-jail-3/paint-and-chameleon-paints.md).

# Paint & Chameleon Paints

DZ Customs includes a full paint customisation system with grouped paint categories, wheel colours, pearlescent colours, and optional chameleon paint support.

***

### Paint Categories

Paint options are split into cleaner category menus instead of showing every colour in one long list.

Example flow:

```
Paint
→ Primary Paint
   → Classic
   → Matte
   → Metals
   → Worn
   → Utility
   → Chameleon

→ Secondary Paint
→ Pearlescent
```

Wheel colour is available from the wheels category:

```
Wheels
→ Wheel Colour
   → Classic
   → Matte
   → Metals
   → Worn
   → Utility
   → Chameleon
```

***

### Standard Paint Support

DZ Customs supports standard GTA vehicle colours such as:

* Classic
* Matte
* Metals
* Worn
* Utility
* Pearlescent
* Wheel colours

The menu automatically applies paint previews live to the vehicle.

***

### Chameleon Paint Support

Chameleon paints are optional.

They require the separate paint data resource:

```
dz_chameleonpaints
```

Recommended `server.cfg` order:

```cfg
ensure dz_chameleonpaints
ensure dz_customs
```

***

### Chameleon Paint Config

In `dz_customs/shared/config.lua`:

```lua
Config.Paint = {
    enableChameleon = true,
    requireExternalPaintResource = true,
    paintResourceName = 'dz_chameleonpaints'
}
```

To disable chameleon paints:

```lua
Config.Paint = {
    enableChameleon = false,
    requireExternalPaintResource = false,
    paintResourceName = 'dz_chameleonpaints'
}
```

***

### Chameleon Paint Resource Structure

The optional paint resource should look like this:

```
dz_chameleonpaints/
├── fxmanifest.lua
├── carcols_gen9.meta
├── carmodcols_gen9.meta
├── client/
│   └── textentries.lua
└── stream/
    └── vehicle_paint_ramps.ytd
```

***

### Chameleon Paint Manifest

Example `dz_chameleonpaints/fxmanifest.lua`:

```lua
fx_version 'cerulean'
game 'gta5'
lua54 'yes'

author 'Duddzy Scripts'
description 'DZ Chameleon Paint Data'
version '1.0.0'

client_scripts {
    'client/textentries.lua'
}

files {
    'carcols_gen9.meta',
    'carmodcols_gen9.meta'
}

data_file 'CARCOLS_GEN9_FILE' 'carcols_gen9.meta'
data_file 'CARMODCOLS_GEN9_FILE' 'carmodcols_gen9.meta'
```

The `vehicle_paint_ramps.ytd` file should stay inside the `stream` folder.

You do not need to add streamed `.ytd` files to the `files` section if they are inside a proper `stream/` folder.

***

### Text Entries

The `client/textentries.lua` file registers the chameleon paint names.

This prevents colours appearing as missing labels or raw hashes.

Example:

```lua
CreateThread(function()
    AddTextEntryByHash(0x13BA6BF3, 'Anodized Red Pearl')
    AddTextEntryByHash(0xB65F5BB6, 'Green/Red Flip')
end)
```

***

### Restart Notes

You can safely restart:

```cfg
restart dz_customs
```

during development.

Avoid restarting:

```cfg
restart dz_chameleonpaints
```

while players are connected.

If you change streamed paint files or `.meta` files, a full server restart is recommended.

***

### Paint Troubleshooting

#### Chameleon colours do not appear

Check that the paint resource is started:

```cfg
ensure dz_chameleonpaints
```

Check the config:

```lua
Config.Paint.enableChameleon = true
Config.Paint.requireExternalPaintResource = true
Config.Paint.paintResourceName = 'dz_chameleonpaints'
```

***

#### Chameleon colours appear but do not change the vehicle

Check that:

* `carcols_gen9.meta` is installed
* `carmodcols_gen9.meta` is installed
* `vehicle_paint_ramps.ytd` is inside `stream/`
* `dz_chameleonpaints` starts before `dz_customs`
* Your server game build supports the paint data

***

#### Chameleon paint does not save

DZ Customs saves the colour indexes to the owned vehicle properties.

If paint does not restore after garage retrieval, your garage may not be applying saved vehicle colour indexes correctly.
