Skip to main content

Tattoo Configuration

The tattoo system controls:

  • tattoo definitions
  • tattoo labels
  • tattoo collections
  • tattoo zones
  • tattoo compatibility data

Configuration is located inside:

shared/data/tattoos.lua

System Purpose

The tattoo system was designed to support:

  • freemode tattoos
  • opacity control
  • tattoo synchronization
  • compatibility conversions
  • external appearance structures

The system operates independently from clothing data.


Structure Overview

Main structure:

Config.Tattoos = {}

Example:

Config.Tattoos = {
ZONE_TORSO = {
{
name = "TAT_AR_000",
label = "Turbulence",
hashMale = "MP_Airraces_Tattoo_000_M",
hashFemale = "MP_Airraces_Tattoo_000_F",
zone = "ZONE_TORSO",
collection = "mpairraces_overlays"
}
}
}

Tattoo Zones

Supported zones:

ZONE_HEAD
ZONE_TORSO
ZONE_LEFT_ARM
ZONE_RIGHT_ARM
ZONE_LEFT_LEG
ZONE_RIGHT_LEG

These zones are used for:

  • UI grouping
  • tattoo filtering
  • tattoo rebuilding
  • compatibility conversion

Tattoo Entry Structure

Each tattoo entry contains:

{
name = "",
label = "",
hashMale = "",
hashFemale = "",
zone = "",
collection = ""
}

name

Internal tattoo identifier.

Example:

name = "TAT_BB_021"

Used for:

  • saving
  • synchronization
  • conversions
  • rebuilding

label

Display name shown inside the UI.

Example:

label = "Pirate Skull"

hashMale / hashFemale

Actual GTA tattoo overlay hashes.

Example:

hashMale = "MP_Bea_M_Head_000"
hashFemale = "MP_Bea_F_Head_000"

Used internally during tattoo application.


collection

Defines the GTA tattoo collection.

Example:

collection = "mpbeach_overlays"

Opacity Support

The system supports tattoo opacity.

Example saved structure:

{
name = "TAT_BB_021",
opacity = 0.4
}

Opacity is internally normalized between:

0.0 -> 1.0

Tattoo Save Structure

The XDEV tattoo structure supports:

{
ZONE_HEAD = {
{
name = "TAT_BB_021",
opacity = 0.4
}
}
}

Compatibility Structures

The system supports conversion between:

  • XDEV tattoo structures
  • Illenium-compatible structures

Example Illenium-compatible structure:

{
collection = "mpbeach_overlays",
name = "TAT_BB_021",
label = "Pirate Skull",
zone = "ZONE_HEAD",
hashFemale = "",
hashMale = "MP_Bea_M_Head_000",
opacity = 0.6
}

Internal Tattoo Workflow

Internally the system:

1. Reads tattoo data
2. Rebuilds tattoo state
3. Clears existing overlays
4. Applies active tattoos
5. Synchronizes opacity

Tattoo Refresh System

The resource includes a full tattoo refresh workflow.

Purpose:

  • rebuild overlays
  • prevent desync
  • restore tattoos after ped changes
  • synchronize compatibility data

This is especially important for:

  • custom ped switching
  • appearance reloads
  • outfit rebuilding
  • reconnect synchronization

Freemode Requirement

Full tattoo support requires freemode peds:

mp_m_freemode_01
mp_f_freemode_01

Custom/addon peds may not support overlays properly.


UI Features

The tattoo UI supports:

  • category filtering
  • opacity editing
  • live previews
  • tattoo search
  • tattoo removal

Tattoo Search

The UI includes built-in tattoo filtering.

Players may search tattoos by:

label
name

This improves navigation for large tattoo collections.


Recommended Usage

Recommended workflow:

1. Configure tattoo definitions
2. Verify collections
3. Verify overlay hashes
4. Test opacity handling
5. Test synchronization

Developer Notes

Unlike many appearance systems, XDEV separates:

skin
tattoo
peddata

This architecture improves:

  • tattoo rebuilding
  • compatibility workflows
  • ped synchronization
  • overlay stability