Browse docs

Custom Engine Sounds

Add built-in or custom GTA engine sounds to Mechanic tuning, load audio packs, configure labels, and troubleshoot missing audio.

How Engine Sounds work

Sky Mechanic Job adds configured sounds to the Engine Sounds section of the tuning menu. Selecting an entry previews it immediately, and focusing the option continuously revs the engine so players can compare sounds before purchase.

After a sound is selected, its GTA audio name is synchronized through the vehicle state. Nearby players therefore hear the same engine sound.

Adding a name to engine_sounds_config.lua does not install its audio files. A custom sound pack must also be loaded by sky_mechanicjob or another ensured FiveM resource.

Configuration file

Engine Sound tuning is configured in:

sky_mechanicjob/config/engine_sounds_config.lua

The default structure is:

Config.EngineSounds = {
    enabled = true,
    section = "engine_sounds",
    optionId = "engine_sound",
    cameraPart = "rear",
    engineUpgradeDefaults = {
        [1] = "Monster",
        [2] = "Cheetah",
        [3] = "Banshee"
    },
    sounds = {
        { audioName = "MONSTER", label = "Monster" },
        { audioName = "ADDER", label = "Adder" },
        { audioName = "BANSHEE", label = "Banshee" }
    }
}
SettingPurpose
enabledEnables or disables the complete Engine Sounds tuning section
sectionInternal tuning section ID; normally keep engine_sounds
optionIdInternal tuning option ID; normally keep engine_sound
cameraPartCamera position used while the option is selected
engineUpgradeDefaultsOptional default sound assigned to Custom Handling engine-upgrade stages
soundsSounds displayed in the tuning option

Add a built-in GTA sound

Built-in sounds do not require additional audio files. Add the GTA audio name and the label shown to players:

sounds = {
    { audioName = "MONSTER", label = "Monster" },
    { audioName = "ADDER", label = "Adder" },
    { audioName = "CHEETAH", label = "Cheetah" },
    { audioName = "ENTITYXF", label = "Entity XF" }
}

Restart sky_mechanicjob, open a tuning menu, select More, and open Engine Sounds.

Add a custom sound pack

You need the exact audio name supplied by the sound pack. For example, a pack containing the audio name a80ffeng is added like this:

sounds = {
    { audioName = "a80ffeng", label = "Toyota Supra A80" }
}

The value of audioName must match the name expected by the pack's audio metadata. The label can be changed freely because it is only displayed in the menu.

Keep the downloaded sound pack as its own FiveM resource and start it before Mechanic Job:

ensure my_engine_sounds
ensure sky_base
ensure sky_jobs_base
ensure sky_mechanicjob

The sound resource must load its .awc files and audio metadata through its own fxmanifest.lua. Once the sound works in FiveM, add its audio name to Config.EngineSounds.sounds.

This approach keeps custom audio separate from Mechanic Job updates and makes replacing or troubleshooting a sound pack easier.

Alternative: include files in sky_mechanicjob

Place the sound pack files in the matching folders:

sky_mechanicjob/
|-- audioconfig/
|   |-- a80ffeng_amp.dat151.rel
|   |-- a80ffeng_game.dat151.rel
|   `-- a80ffeng_sounds.dat54.rel
`-- sfx/
    `-- dlc_a80ffeng/
        `-- *.awc

File names and extensions vary between packs. Keep the names provided by the pack and register the correct files in fxmanifest.lua:

data_file 'AUDIO_SYNTHDATA' 'audioconfig/a80ffeng_amp.dat'
data_file 'AUDIO_GAMEDATA' 'audioconfig/a80ffeng_game.dat'
data_file 'AUDIO_SOUNDDATA' 'audioconfig/a80ffeng_sounds.dat'
data_file 'AUDIO_WAVEPACK' 'sfx/dlc_a80ffeng'

The Mechanic Job manifest already includes files from audioconfig and sfx, but every pack still needs matching data_file declarations. Example declarations are included as a commented block in the supplied fxmanifest.lua.

Use the paths and data types supplied by the sound pack. Do not rename metadata or wavepack folders unless you also update every internal and manifest reference.

Supported sound entry formats

The recommended format is:

{ audioName = "a80ffeng", label = "Toyota Supra A80" }

The parser also accepts these common formats:

sounds = {
    { soundName = "a80ffeng", label = "Toyota Supra A80" },
    { sound = "amg1eng", title = "Mercedes AMG" },
    { value = "4age", displayName = "Toyota 4A-GE" },
    "2strkbeng",
    ["Audi RS4 Milltek"] = "audirs4milltekeng"
}

Supported audio-name fields include audioName, soundName, sound, value, hash, and name. Supported display fields include label, title, and displayName.

Audio-name matching is case-insensitive for configured selections, but the exact configured value is preserved when FiveM applies the sound.

Engine upgrade default sounds

engineUpgradeDefaults can automatically associate Custom Handling engine-upgrade stages with configured sounds:

engineUpgradeDefaults = {
    [1] = "MONSTER",
    [2] = "CHEETAH",
    [3] = "BANSHEE"
}

The value must match one of the entries in sounds. A manually selected Engine Sound takes priority over an automatic engine-upgrade default. Selecting Stock disables the custom sound and restores the vehicle's normal model audio.

Complete custom example

Config.EngineSounds = {
    enabled = true,
    section = "engine_sounds",
    optionId = "engine_sound",
    cameraPart = "rear",

    engineUpgradeDefaults = {
        [1] = "4age",
        [2] = "a80ffeng",
        [3] = "amg1eng"
    },

    sounds = {
        { audioName = "MONSTER", label = "Monster" },
        { audioName = "4age", label = "Toyota 4A-GE" },
        { audioName = "a80ffeng", label = "Toyota Supra A80" },
        { audioName = "amg1eng", label = "Mercedes AMG" }
    }
}

Testing checklist

  1. Ensure the sound-pack resource starts without audio metadata errors.
  2. Restart the sound resource and sky_mechanicjob.
  3. Open the tuning menu and select More -> Engine Sounds.
  4. Confirm every configured label appears once.
  5. Focus each sound and confirm the engine rev preview is audible.
  6. Select a custom sound and verify it remains active after closing the menu.
  7. Ask a second nearby player to confirm they hear the same sound.
  8. Store and retrieve an owned vehicle and confirm the selected sound is restored.
  9. Select Stock and confirm the original vehicle sound returns.

Troubleshooting

The option does not appear

  • Confirm Config.EngineSounds.enabled = true.
  • Confirm sounds contains at least one valid entry.
  • Confirm config/engine_sounds_config.lua is still loaded by fxmanifest.lua.
  • Update the built frontend and locale files if the Engine Sounds section is missing after an older installation.

The entry appears but has no custom audio

  • Confirm the sound-pack resource is started before sky_mechanicjob.
  • Verify the exact audioName from the sound pack.
  • Check the server and client console for missing audio metadata or wavepack errors.
  • Confirm all required .awc and .rel files are present.
  • Confirm the pack's AUDIO_SYNTHDATA, AUDIO_GAMEDATA, AUDIO_SOUNDDATA, and AUDIO_WAVEPACK declarations are correct.

Only the tuning player hears the sound

  • Update to Mechanic Job 1.14.0 or newer.
  • Confirm source/server/engine_sounds.lua is present and loaded by fxmanifest.lua.
  • Ensure the vehicle is networked and both players are close enough to stream it.
  • Restart the complete resource instead of only rebuilding the frontend.

The wrong sound returns after an engine upgrade

  • Check engineUpgradeDefaults.
  • Confirm its values match entries in sounds.
  • Select a sound manually if it should override the upgrade default.
  • Select Stock to remove the manual custom sound and return to normal model audio.