Every tattoo, crew badge and shirt decal GTA 5 ships — 3,373 overlays across 39 collections, with both hashes, the body zone, and which freemode ped each one was authored for. Search it, filter it by collection, and copy a finished AddPedDecorationFromHashes call. The pair is the data here: a collection without an overlay, or an overlay without its collection, applies nothing.
1,786 are tattoos and 1,587 are badges or decals; 1,712 are authored for the male freemode ped, 1,598 for the female and 63 for either. Names and hashes from the publicly published GTA V data dumps, with the native signatures read from the Cfx.re natives repository.
3,373 of 3,373 decorations
FM_CREW_M_000_A
badge or decalmaletorso
FM_CREW_M_000_B
badge or decalmaletorso
FM_CREW_M_000_C
badge or decalmaletorso
FM_CREW_M_000_D
badge or decalmaletorso
FM_CREW_M_000_E
badge or decalmaletorso
FM_CREW_M_000_F
badge or decalmaletorso
FM_CREW_F_000_A
badge or decalfemaletorso
FM_CREW_F_000_B
badge or decalfemaletorso
FM_CREW_F_000_C
badge or decalfemaletorso
FM_CREW_F_000_D
badge or decalfemaletorso
FM_Tat_Award_M_000
tattoomalehead$20,000
FM_Tat_Award_M_001
tattoomaleleft arm$1,400
FM_Tat_Award_M_002
tattoomaleright arm$9,750
FM_Tat_Award_M_003
tattoomaletorso$2,150
FM_Tat_Award_M_004
tattoomaletorso$10,000
FM_Tat_Award_M_005
tattoomaletorso$12,400
FM_Tat_Award_M_006
tattoomaleright leg$3,500
FM_Tat_Award_M_007
tattoomaleleft arm$4,950
FM_Tat_Award_M_008
tattoomaletorso$1,350
FM_Tat_Award_M_009
tattoomaleleft leg$1,450
FM_Tat_Award_M_010
tattoomaleright arm$2,700
FM_Tat_Award_M_011
tattoomaletorso$1,200
FM_Tat_Award_M_012
tattoomaletorso$1,500
FM_Tat_Award_M_013
tattoomaletorso$2,650
FM_Tat_Award_M_014
tattoomaletorso$1,900
FM_Tat_Award_M_015
tattoomaleleft arm$4,950
FM_Tat_Award_M_016
tattoomaletorso$2,400
FM_Tat_Award_M_017
tattoomaletorso$5,100
FM_Tat_Award_M_018
tattoomaletorso$7,400
FM_Tat_Award_M_019
tattoomaletorso$10,000
FM_Tat_M_000
tattooeitherright arm$10,000
FM_Tat_M_001
tattoomaleright arm$12,500
FM_Tat_M_002
tattoomaleleft leg$3,750
FM_Tat_M_003
tattoomaleright arm$10,000
FM_Tat_M_004
tattoomaletorso$10,000
FM_Tat_M_005
tattoomaleleft arm$2,400
FM_Tat_M_006
tattoomaleleft arm$5,100
FM_Tat_M_007
tattoomaleright leg$3,750
FM_Tat_M_008
tattoomaleleft leg$4,800
FM_Tat_M_009
tattoomaletorso$12,350
FM_Tat_M_010
tattoomaletorso$2,500
FM_Tat_M_011
tattoomaletorso$1,900
FM_Tat_M_012
tattoomaletorso$10,000
FM_Tat_M_013
tattoomaletorso$4,500
FM_Tat_M_014
tattoomaleright arm$5,000
FM_Tat_M_015
tattoomaleleft arm$3,600
FM_Tat_M_016
tattoomaletorso$12,250
FM_Tat_M_017
tattoomaleright leg$3,500
FM_Tat_M_018
tattoomaleright arm$7,500
FM_Tat_M_019
tattoomaletorso$12,300
FM_Tat_M_020
tattoomaletorso$7,500
FM_Tat_M_021
tattoomaleleft leg$5,000
FM_Tat_M_022
tattoomaleright leg$7,300
FM_Tat_M_023
tattoomaleleft leg$7,250
FM_Tat_M_024
tattoomaletorso$11,900
FM_Tat_M_025
tattoomaletorso$2,750
FM_Tat_M_026
tattoomaleleft leg$1,750
FM_Tat_M_027
tattoomaleright arm$7,300
FM_Tat_M_028
tattoomaleright arm$3,250
FM_Tat_M_029
tattoomaletorso$1,000
FM_Tat_M_030
tattoomaletorso$5,000
FM_Tat_M_031
tattoomaleleft arm$7,500
FM_Tat_M_032
tattoomaleleft leg$5,100
FM_Tat_M_033
tattoomaleleft leg$5,050
FM_Tat_M_034
tattoomaletorso$2,450
FM_Tat_M_035
tattoomaleleft leg$4,950
FM_Tat_M_036
tattoomaletorso$5,100
FM_Tat_M_037
tattoomaleleft leg$12,250
FM_Tat_M_038
tattoomaleright arm$1,150
FM_Tat_M_039
tattoomaleright leg$7,500
FM_Tat_M_040
tattoomaleright leg$7,600
FM_Tat_M_041
tattoomaleleft arm$2,600
FM_Tat_M_042
tattoomaleright leg$2,500
FM_Tat_M_043
tattoomaleright leg$7,450
FM_Tat_M_044
tattoomaletorso$7,500
FM_Tat_M_045
tattoomaletorso$10,000
FM_Tat_M_046
tattoomaletorso$10,000
FM_Tat_M_047
tattoomaleright arm$2,500
FM_Tat_Award_F_000
tattoofemalehead$20,000
FM_Tat_Award_F_001
tattoofemaleleft arm$1,400
FM_Tat_Award_F_002
tattoofemaleright arm$9,750
FM_Tat_Award_F_003
tattoofemaletorso$2,150
FM_Tat_Award_F_004
tattoofemaletorso$10,000
FM_Tat_Award_F_005
tattoofemaletorso$12,400
FM_Tat_Award_F_006
tattoofemaleright leg$3,500
FM_Tat_Award_F_007
tattoofemaleleft arm$4,950
FM_Tat_Award_F_008
tattoofemaletorso$1,350
FM_Tat_Award_F_009
tattoofemaleleft leg$1,450
FM_Tat_Award_F_010
tattoofemaleright arm$2,700
FM_Tat_Award_F_011
tattoofemaletorso$1,200
FM_Tat_Award_F_012
tattoofemaletorso$1,500
FM_Tat_Award_F_013
tattoofemaletorso$2,650
FM_Tat_Award_F_014
tattoofemaletorso$1,900
FM_Tat_Award_F_015
tattoofemaleleft arm$4,950
FM_Tat_Award_F_016
tattoofemaletorso$2,400
FM_Tat_Award_F_017
tattoofemaletorso$5,100
FM_Tat_Award_F_018
tattoofemaletorso$7,400
FM_Tat_Award_F_019
tattoofemaletorso$10,000
FM_Tat_F_001
tattoofemaleright arm$12,500
FM_Tat_F_002
tattoofemaleleft leg$3,750
FM_Tat_F_003
tattoofemaleright arm$10,000
FM_Tat_F_004
tattoofemaletorso$10,000
FM_Tat_F_005
tattoofemaleleft arm$2,400
FM_Tat_F_006
tattoofemaleleft arm$5,100
FM_Tat_F_007
tattoofemaleright leg$3,750
FM_Tat_F_008
tattoofemaleleft leg$4,800
FM_Tat_F_009
tattoofemaletorso$12,350
FM_Tat_F_010
tattoofemaletorso$2,500
FM_Tat_F_011
tattoofemaletorso$1,900
FM_Tat_F_012
tattoofemaletorso$10,000
FM_Tat_F_013
tattoofemaletorso$4,500
FM_Tat_F_014
tattoofemaleright arm$5,000
FM_Tat_F_015
tattoofemaleleft arm$3,600
FM_Tat_F_016
tattoofemaletorso$12,250
FM_Tat_F_017
tattoofemaleright leg$3,500
FM_Tat_F_018
tattoofemaleright arm$7,500
FM_Tat_F_019
tattoofemaletorso$12,300
FM_Tat_F_020
tattoofemaletorso$7,500
FM_Tat_F_021
tattoofemaleleft leg$5,000
FM_Tat_F_022
tattoofemaleright leg$7,300
FM_Tat_F_023
tattoofemaleleft leg$7,250
FM_Tat_F_024
tattoofemaletorso$11,900
FM_Tat_F_025
tattoofemaletorso$2,750
FM_Tat_F_026
tattoofemaleleft leg$1,750
FM_Tat_F_027
tattoofemaleright arm$7,300
FM_Tat_F_028
tattoofemaleright arm$3,250
FM_Tat_F_029
tattoofemaletorso$1,000
FM_Tat_F_030
tattoofemaletorso$5,000
FM_Tat_F_031
tattoofemaleleft arm$7,500
FM_Tat_F_032
tattoofemaleleft leg$5,100
FM_Tat_F_033
tattoofemaleleft leg$5,050
FM_Tat_F_034
tattoofemaletorso$2,450
FM_Tat_F_035
tattoofemaleleft leg$4,950
FM_Tat_F_036
tattoofemaletorso$5,100
FM_Tat_F_037
tattoofemaleleft leg$12,250
FM_Tat_F_038
tattoofemaleright arm$1,150
FM_Tat_F_039
tattoofemaleright leg$7,500
FM_Tat_F_040
tattoofemaleright leg$7,600
FM_Tat_F_041
tattoofemaleleft arm$2,600
FM_Tat_F_042
tattoofemaleright leg$2,500
FM_Tat_F_043
tattoofemaleright leg$7,450
FM_Tat_F_044
tattoofemaletorso$7,500
FM_Tat_F_045
tattoofemaletorso$10,000
FM_Tat_F_046
tattoofemaletorso$10,000
FM_Tat_F_047
tattoofemaleright arm$2,500
FM_Tshirt_Award_000
badge or decalmaletorso
FM_Tshirt_Award_001
badge or decalmaletorso
FM_Tshirt_Award_002
badge or decalmaletorso
FM_Tshirt_Award_F_000
badge or decalfemaletorso
FM_Tshirt_Award_F_001
badge or decalfemaletorso
FM_Tshirt_Award_F_002
badge or decalfemaletorso
FM_F_Hair_003_a
tattooeitherhead
FM_F_Hair_003_b
tattooeitherhead
FM_F_Hair_003_c
tattooeitherhead
FM_F_Hair_003_d
tattooeitherhead
FM_F_Hair_003_e
tattooeitherhead
FM_F_Hair_005_a
tattoofemalehead
FM_F_Hair_005_b
tattoofemalehead
FM_F_Hair_005_c
tattoofemalehead
FM_F_Hair_005_d
tattoofemalehead
FM_F_Hair_005_e
tattoofemalehead
FM_F_Hair_006_a
tattoofemalehead
FM_F_Hair_006_b
tattoofemalehead
FM_F_Hair_006_c
tattoofemalehead
FM_F_Hair_006_d
tattoofemalehead
FM_F_Hair_006_e
tattoofemalehead
FM_F_Hair_013_a
tattoofemalehead
FM_F_Hair_013_b
tattoofemalehead
FM_F_Hair_013_c
tattoofemalehead
FM_F_Hair_013_d
tattoofemalehead
FM_F_Hair_013_e
tattoofemalehead
FM_F_Hair_014_a
tattoofemalehead
FM_F_Hair_014_b
tattoofemalehead
FM_F_Hair_014_c
tattoofemalehead
FM_F_Hair_014_d
tattoofemalehead
FM_F_Hair_014_e
tattoofemalehead
FM_F_Hair_long_a
tattoofemalehead
FM_F_Hair_long_b
tattoofemalehead
FM_F_Hair_long_c
tattoofemalehead
FM_F_Hair_long_d
tattoofemalehead
FM_F_Hair_long_e
tattoofemalehead
FM_M_Hair_001_a
tattoomalehead
FM_M_Hair_001_b
tattoomalehead
FM_M_Hair_001_c
tattoomalehead
FM_M_Hair_001_d
tattoomalehead
FM_M_Hair_001_e
tattoomalehead
FM_M_Hair_003_a
tattoomalehead
FM_M_Hair_003_b
tattoomalehead
FM_M_Hair_003_c
tattoomalehead
FM_M_Hair_003_d
tattoomalehead
FM_M_Hair_003_e
tattoomalehead
FM_M_Hair_006_a
tattoomalehead
FM_M_Hair_006_b
tattoomalehead
FM_M_Hair_006_c
tattoomalehead
FM_M_Hair_006_d
tattoomalehead
FM_M_Hair_006_e
tattoomalehead
FM_M_Hair_008_a
tattoomalehead
FM_M_Hair_008_b
tattoomalehead
FM_M_Hair_008_c
tattoomalehead
FM_M_Hair_008_d
tattoomalehead
Showing 200. Pick a collection and a body zone and most searches land under fifty rows.
1 of the 39 collections are present in the dump with no overlays at all. They are shown as empty rather than dropped, because a missing collection reads as a gap in the list and an empty one reads as what it is: the game registering a collection it never filled.
THE COLLECTION AND THE OVERLAY
Two hashes, and neither one works alone
AddPedDecorationFromHashes takes a ped, a collection hash and an overlay hash. Understanding why it is two and not one is the difference between a tattoo system that works and an afternoon of silent failures.
The collection is the file
Every decoration the game ships lives in an overlay collection — one XML file per DLC, named things like mpbeach_overlays, mpbiker_overlays or singleplayer_overlays. The collection is a namespace, exactly the way a sound set is for audio. The same overlay name can only be found inside the collection it was filed under.
The overlay is the item
Inside each collection the individual items carry a nameHash entry — MP_Bea_F_Back_000, FM_Hair_Fuzz, mk_000 — plus a zone, a type, a gender and the garment it is allowed on. That name is the overlay. One collection plus one overlay identifies exactly one decoration, and neither half means anything on its own.
Both arguments are hashes
AddPedDecorationFromHashes takes two Hash values, not two strings. The collection hash is the joaat of the collection’s filename and the overlay hash is the joaat of the item’s name, which is why every working example calls GetHashKey on both. Pass the strings themselves and you have handed the native two pointers it will read as numbers.
Which is why case does not matter
GetHashKey lowercases its input before hashing, so GetHashKey("mpBeach_overlays") and GetHashKey("mpbeach_overlays") are the same number. We checked all 39 collection hashes and all 3,373 overlay hashes in the dump against our own joaat implementation and every one of them matches the hash of the lowercased name — so the numbers on this page and a GetHashKey call are interchangeable.
The same decoration, three ways
Client-side. The numbers and the GetHashKey calls are interchangeable — these two lines apply the identical decoration. Copy whichever suits your storage: numbers are faster, names are readable in a database.
local collection = "mpbeach_overlays"
local overlay = "MP_Bea_F_Back_000"
print(GetHashKey(collection))
print(GetHashKey(overlay))
AddPedDecorationFromHashes(PlayerPedId(), 2575696819, 2143620721)
AddPedDecorationFromHashes(PlayerPedId(), GetHashKey(collection), GetHashKey(overlay))
Five steps, and the last one is where the bugs live
Finding the pair is the easy part. Keeping it on the ped through a model change is the part that separates a working tattoo system from one that loses everything on respawn.
01 Pick a collection first
Filter the list to one collection and you are looking at one DLC’s worth of tattoos and decals. Search across everything only when you already know the overlay name.
02 Check the gender and the zone
The row tells you which freemode model the overlay was authored for and which body zone it lands on. An overlay applied to the wrong model fails quietly.
03 Copy the call, not the name
The copy button gives you a finished AddPedDecorationFromHashes line with GetHashKey on both halves. There is a numeric version too, if you would rather not hash at runtime.
04 Stream the texture before you apply
RequestStreamedTextureDict on the collection name, then wait for HasStreamedTextureDictLoaded. Skipping this is why a decoration sometimes appears on the second attempt and not the first.
05 Re-apply after every model change and every spawn
Keep your own list of applied pairs, clear the ped, and replay the list. That is the whole of a working tattoo system, and it is the part most of them get wrong.
A test command for any collection and overlay pair
Client-side. /tattoo mpbiker_overlays MP_MP_Biker_Tat_000_M applies one, /tattooclear wipes the ped. The wait loop before the apply is not optional: a decoration applied before its texture is resident draws as nothing.
local function applyDecoration(ped, collection, overlay)
RequestStreamedTextureDict(collection, false)
local tries = 0
while not HasStreamedTextureDictLoaded(collection) and tries < 200 do
Wait(5)
tries = tries + 1
end
AddPedDecorationFromHashes(ped, GetHashKey(collection), GetHashKey(overlay))
end
RegisterCommand("tattoo", function(_, args)
local collection = args[1] or "mpbeach_overlays"
local overlay = args[2] or "MP_Bea_F_Back_000"
applyDecoration(PlayerPedId(), collection, overlay)
end, false)
RegisterCommand("tattooclear", function()
ClearPedDecorations(PlayerPedId())
end, false)
WHY THEY DISAPPEAR
The ped changed, so the decorations went with it
Decorations live on the ped instance, not on the player. Every system that swaps a model is therefore a system that throws your decorations away, and the engine does not warn you about any of it.
A model change destroys the ped that was wearing them
Decorations are stored on the ped instance, not on the player. SetPlayerModel or SetEntityModel does not re-skin the ped you had — it creates a new one and hands you that. The new ped is clean, and every decoration you applied went with the old one. This is the number one reason a tattoo system looks like it is losing data: the data was never lost, the ped was.
So does every respawn
The same thing happens on death and on a fresh spawn, and it happens before most frameworks fire their own ready event. Re-apply from your saved list on playerSpawned rather than trusting what is already on the ped, and keep the list in your own storage — there is no native that reads the applied decorations back out by name.
Freemode male and female are different models
mp_m_freemode_01 and mp_f_freemode_01 are separate peds with separate UV layouts, and the dump marks most overlays GENDER_MALE or GENDER_FEMALE for that reason. Applying a male overlay to the female model is not an error the native reports; you simply get nothing, or something stretched across the wrong part of the body.
A missing texture looks like a missing decoration
If the decoration’s texture is not resident the ped renders without it and nothing is logged. Request the texture dictionary and wait for it before you apply, which is what the snippet on this page does. The appearance resources everybody uses request the collection name as the dictionary, and that is the pattern we recommend — the per-item txdHash the game data carries is not in the public dump, so we cannot list it here.
Clearing takes the scars with it
ClearPedDecorations wipes everything on the ped, including damage decals and anything another resource applied. If you only want to drop the tattoos and keep facial scars, CLEAR_PED_DECORATIONS_LEAVE_SCARS is the one to call. And since there is no native to remove a single decoration, changing one tattoo means clearing the ped and re-applying the whole set.
Keep your own list and replay it
Client-side. This is the shape of every working tattoo system: your list is the truth, the ped is a render of it. /skin swaps the model and the decorations survive, because they are re-applied rather than preserved.
local applied = {}
local function remember(collection, overlay)
applied[#applied + 1] = { collection = collection, overlay = overlay }
end
local function replayAll()
local ped = PlayerPedId()
ClearPedDecorations(ped)
for _, deco in ipairs(applied) do
RequestStreamedTextureDict(deco.collection, false)
while not HasStreamedTextureDictLoaded(deco.collection) do
Wait(5)
end
AddPedDecorationFromHashes(ped, GetHashKey(deco.collection), GetHashKey(deco.overlay))
end
end
AddEventHandler("playerSpawned", function()
replayAll()
end)
RegisterCommand("skin", function(_, args)
local model = args[1] or "mp_m_freemode_01"
RequestModel(model)
while not HasModelLoaded(model) do
Wait(10)
end
SetPlayerModel(PlayerId(), model)
SetModelAsNoLongerNeeded(model)
replayAll()
end, false)
There is no native in the published list that reads a ped’s applied decorations back out by name, and no native that removes one of them. That is not an omission on our part — it is the reason the pattern above is the pattern. Your storage is the record; CLEAR_PED_DECORATIONS plus a replay is the only edit operation you have.
ZONES, PEDS AND GARMENTS
Three fields that decide whether anything shows up
Every row carries them, and each one fails silently when it is wrong. The native returns void, so a mismatch looks exactly like a bad hash.
Zone
Overlays
What lands there
ZONE_TORSO
2,297
Chest, stomach, back and sides. The biggest zone by a wide margin, and where every shirt decal lands.
ZONE_HEAD
348
Face and neck, including the hairline overlays and the facial tattoos.
ZONE_LEFT_ARM
229
Left upper and lower arm. Sleeves are authored as one overlay per arm, not one per pair.
ZONE_RIGHT_ARM
256
Right arm, filed separately, so a matching pair means applying two overlays.
ZONE_LEFT_LEG
134
Left thigh and calf. Mostly hidden by anything other than shorts.
ZONE_RIGHT_LEG
109
Right leg, same as its counterpart.
Gender is a model, not a preference
mp_m_freemode_01 and mp_f_freemode_01 are different peds with different UV layouts, which is why 1,712 overlays are marked male and 1,598 female. Only 63 are marked as working on either. Apply an overlay to the model it was not drawn for and you get nothing, or something stretched across the wrong place.
Garment locks a decal to one torso
68 of the 3,373 overlays name a specific torso component instead of All — the single-player shirt decals. The decoration only draws while the ped is wearing that exact component, so a clothing change can make it disappear without anything clearing it. Those rows are tagged in the list.
The facing is the finer placement
Where the game data records one, the row shows it: front, back, left, right, chest or stomach. ZONE_TORSO covers a lot of ground, and the facing is how you tell a back piece from a chest piece without applying it to find out.
Price is the game’s, not ours
1,462 overlays carry a non-zero price in the game data — what the in-game tattoo parlour charges for them in GTA Online. It is shown because it is in the dump and because it is a decent proxy for how prominent a piece is. It has nothing to do with this site; everything here is free.
QUESTIONS
About ped decorations in FiveM
What is a ped decoration in FiveM?
Anything the game paints onto a ped’s skin or clothing without changing the model: tattoos, crew badges, shirt decals and the award logos. They are not clothing components and they are not props — you do not set them with SetPedComponentVariation. They are applied one at a time with AddPedDecorationFromHashes and removed all at once with ClearPedDecorations, and the game ships thousands of them split across one overlay collection per DLC.
What is the collection, and why do I need GetHashKey on it?
The collection is the overlay file the decoration lives in — mpbeach_overlays, mpbiker_overlays, singleplayer_overlays and so on — and it works as a namespace, so an overlay name is only findable inside its own collection. AddPedDecorationFromHashes is declared as taking two Hash arguments, not two strings, so both halves have to be hashed before they go in. GetHashKey is joaat, and joaat lowercases its input first, which is why the capitalisation you use does not matter. We verified every hash in this list against our own joaat implementation: all 39 collections and all 3,373 overlays hash to exactly the numbers the dump records, so you can paste the number from a row or call GetHashKey on the name and get the same result.
Why do my tattoos disappear when the ped changes clothes or models?
Because the decorations belong to the ped, and a model change does not modify your ped — it replaces it. SetPlayerModel spawns a new ped and gives you that, so everything you had applied stayed with the one the engine threw away. Death and respawn do the same. The fix is not a native, it is an architecture: keep your own list of collection-and-overlay pairs, and after any model change or spawn clear the ped and replay the whole list. Clothing component changes do not clear decorations, but anything that swaps the model does.
Why is my decoration applied but invisible?
Three usual causes. The texture was not resident when you applied it — call RequestStreamedTextureDict on the collection and wait for HasStreamedTextureDictLoaded before AddPedDecorationFromHashes. The overlay was authored for the other gender, so a GENDER_MALE overlay on mp_f_freemode_01 lands on nothing. Or the overlay is garment-locked: a handful of the single-player decals are restricted to one specific torso component, and if the ped is not wearing that component the decal has nowhere to draw. The row on this page shows the gender, the zone and the garment for exactly this reason.
How do I remove just one tattoo?
You cannot, and that is the honest answer — the published native list has no per-decoration remove. ClearPedDecorations wipes the ped completely, including damage decals and anything another resource applied, and CLEAR_PED_DECORATIONS_LEAVE_SCARS is the softer version that keeps facial scars. So removing one item means clearing the ped and re-applying everything you still want, which is another reason to keep your applied list in your own storage rather than reading it back off the ped.
Where does this list come from?
The publicly published GTA V data dumps, specifically pedOverlayCollections.json: 39 collections and 3,373 overlays with their names, hashes, type, zone, gender, garment restriction and in-game price, as the game data records them. The native signatures are from the Cfx.re natives repository. The hashes were independently re-derived with joaat and all 3,412 of them match. Nothing is invented: two of the 39 collections are present in the dump with no overlays at all, and they are shown that way rather than quietly dropped.
Names, hashes and attributes from the publicly published GTA V data dumps (pedOverlayCollections.json); native signatures from the Cfx.re natives repository. The decoration art itself is the property of Take-Two Interactive and Rockstar Games — see our trademark and IP notice.
ALSO FREE
Tools that go with this one
Picked because they touch the same files, natives or part of the game.