Grand opening25% off everything with FAM-261023-261025-UL4B9this weekendTick it in your cart Halloween Edition36 maps, limited runlimited runShop the drop

FREE TOOL · PROP ARCHETYPES

ytyp creator for FiveM custom props

A model without an archetype is a file the game has never been told about. The .ytyp is where you tell it: this name, this drawable, this collision, this big, drawn this far out. Build one here, drop your .ydr.xml so the bounding box comes out of the mesh rather than out of your head, and get XML that CodeWalker imports as-is.

Field names, order and the 32 flag labels taken from CodeWalker's own source and checked against two files on disk: a hand-written prop ytyp the game loads, and CodeWalker's XML export of a stock GTA V interior. Nothing here is invented — where a field is reconstructed rather than documented, the page says so.

This ytyp is consistent

1 archetype · 0 time-based · 0 with no collision

Drop your .ydr.xml files here

One archetype per file, with bbMin, bbMax, bsCentre and bsRadius filled in from the drawable itself. Export your model to XML in CodeWalker (or let Sollumz write it) and drop that — nothing is uploaded, the file is read in this tab.

The file

Save it as my_props.ytyp and point DLC_ITYP_REQUEST at it. The inner name and the file name have to match, because the request is by name.

Archetypes in this ytyp

Identity

One .ydr on its own. This is what a custom prop almost always is, and the only one most people need.

Dictionaries

CodeWalker resolves physicsDictionary by looking for a .ybn of that name, and shows Embedded instead when the string equals the archetype name — which is the case for a .ydr that carries its own collision. That is the behaviour of the editor, not a written spec, so if your prop is one .ydr with collision baked in, put the prop name here.

Bounding volume

Both the box and the sphere, because the game uses the box for physics bounds and the sphere for culling. Get the sphere wrong and the prop is culled before it draws.

bbMin
bbMax

bsCentre 0.000, 0.000, 1.000 · bsRadius 1.732051

Size 2.00 × 2.00 × 2.00 m

Draw distance

A bottle, a tool, a sign. CodeWalker’s own defaults for a new archetype are exactly these two numbers.

Flags — 32

One bit each, added together. The labels are the ones CodeWalker prints beside its own checkboxes, bit for bit.

Leave specialAttribute at 0 unless you are copying a stock archetype that uses it. It is a single integer with no public enum behind it, and guessing at values does nothing useful.

my_props.ytyp.xml28 lines · import it in CodeWalker and save as .ytyp
<?xml version="1.0" encoding="UTF-8"?>
<CMapTypes>
  <extensions />
  <archetypes>
    <Item type="CBaseArchetypeDef">
      <lodDist value="60.000000" />
      <flags value="32" />
      <specialAttribute value="0" />
      <bbMin x="-1.000000" y="-1.000000" z="0.000000" />
      <bbMax x="1.000000" y="1.000000" z="2.000000" />
      <bsCentre x="0.000000" y="0.000000" z="1.000000" />
      <bsRadius value="1.732051" />
      <hdTextureDist value="15.000000" />
      <name>my_prop</name>
      <textureDictionary />
      <clipDictionary />
      <drawableDictionary />
      <physicsDictionary>my_prop</physicsDictionary>
      <assetType>ASSET_TYPE_DRAWABLE</assetType>
      <assetName>my_prop</assetName>
      <extensions />
    </Item>
  </archetypes>
  <name>my_props</name>
  <dependencies />
  <compositeEntityTypes itemType="CCompositeEntityType" />
</CMapTypes>
fxmanifest.lua — the two lines that mount it

DLC_ITYP_REQUEST registers the archetypes; files gets the .ytyp to the client. Both, or the prop still will not spawn.

fx_version 'cerulean'
game 'gta5'

data_file 'DLC_ITYP_REQUEST' 'stream/my_props.ytyp'

files {
  'stream/my_props.ytyp',
}
Spawn it to check

If HasModelLoaded never returns true, the ytyp is not mounted. If it loads and you see nothing, look at bsRadius and lodDist.

local model = `my_prop`
RequestModel(model)
while not HasModelLoaded(model) do Wait(0) end

local ped = PlayerPedId()
local c = GetEntityCoords(ped)
local obj = CreateObject(model, c.x, c.y, c.z, true, true, false)
PlaceObjectOnGroundProperly(obj)
SetModelAsNoLongerNeeded(model)

HOW TO USE IT

From a .ydr to a prop you can spawn

Six steps, and the two that people skip are the two that make a prop invisible.

  1. Export the drawable to XML. In CodeWalker, open the .ydr and use the XML export; in Blender with Sollumz, the exporter writes the same .ydr.xml. Drop it on the panel above. You get the name, both box corners, the sphere centre and the radius, plus a note on whether the collision is embedded.
  2. Fix the dictionaries. textureDictionary is the .ytd without its extension, and it can be empty when the textures are embedded in the drawable. physicsDictionary is the collision — leave it empty only if you genuinely want a prop you can walk through.
  3. Set lodDist honestly. This is the one number with a real frame cost. A bottle does not need to be visible from 600 metres. Start from the preset that matches the size of the thing and go down, not up.
  4. Pick the flags. 32 for static scenery. Add 8192 to stop small props casting shadows. Add 65536 if a single-plane mesh vanishes from one side. If you filled in clipDictionary, you also need 512.
  5. Import it in CodeWalker and save as .ytyp. Download the XML, then in CodeWalker open it and save the binary .ytyp next to your .ydr in stream/. The XML itself is not what the game reads.
  6. Mount it in the manifest, both ways. data_file 'DLC_ITYP_REQUEST' registers the archetypes and files gets the .ytyp to the client. Miss either and the model name resolves to nothing — which is the most common reason a prop "does not exist" on a server where it worked in single player.

Why the sphere matters more than the box

The game culls against bsCentre and bsRadius, not against the box. The test is cheap and it happens before anything else, so if the sphere does not contain your geometry the prop is thrown away before a single triangle is considered. A zero radius culls it from every angle at every distance: the model loads, collision works, and you see empty air. A radius that is too small clips the edges of the mesh as you turn. The safe value is the distance from the box centre to the box corner, which is what this tool computes, and what CodeWalker's own export of a real prop ytyp contains.

The box is used for the physics bounds and for the editor's selection volume. It has to be the real extents of the mesh, and if it is inverted — a bbMax smaller than bbMin on any axis — behaviour is undefined rather than merely wrong.

THE TWO ARCHETYPE TYPES

CBaseArchetypeDef and CTimeArchetypeDef

Identical except for one trailing field, and that field is the whole point of the second one.

CBaseArchetypeDef

use this unless you need hours

Sixteen fields: lodDist, flags, specialAttribute, bbMin, bbMax, bsCentre, bsRadius, hdTextureDist, name, textureDictionary, clipDictionary, drawableDictionary, physicsDictionary, assetType, assetName and extensions, in exactly that order.

Always drawn when it is within lodDist. Every ordinary prop, wall, floor and piece of furniture in a custom map is one of these. If you are reading a tutorial that only ever shows one archetype type, this is it.

CTimeArchetypeDef

one extra field: timeFlags

The same sixteen fields in the same order, plus timeFlags written last, after extensions. Twenty-four bits for the twenty-four hours of the game clock, and bit 24 — value 16777216 — to allow it to vanish while being looked at.

This is how a neon sign is only lit at night and how a lamp's glow geometry appears at dusk. It is not an animation and it is not a script: the model is simply not drawn in the hours you did not tick. Which is why timeFlags of 0 means invisible all day — the single most common way to break one of these.

There is a third type, CMloArchetypeDef, for interiors. It shares the same first sixteen fields and then adds mloFlags, entities, rooms, portals, entitySets and timeCycleModifiers. An MLO is a different job from a prop pack — rooms and portals have to be drawn by hand against the geometry — so this tool does not pretend to generate one.

REFERENCE

assetType, and what picking the wrong one does

Five values. Two of them are what you will use, and one of them needs a second field filled in or the archetype points at nothing.

assetTypeValueWhat it means
ASSET_TYPE_DRAWABLE2One .ydr on its own. This is what a custom prop almost always is, and the only one most people need.
ASSET_TYPE_DRAWABLEDICTIONARY3The drawable lives inside a .ydd dictionary, so drawableDictionary has to name that file and assetName has to name the drawable inside it.
ASSET_TYPE_FRAGMENT1A .yft — a breakable or jointed prop. Use this and not DRAWABLE for anything that comes apart.
ASSET_TYPE_ASSETLESS4No geometry of its own. What a CMloArchetypeDef interior uses, because the shell is made of entities rather than a model.
ASSET_TYPE_UNINITIALIZED0The zero value. An archetype that ends up here is a bug, not a choice.

The names and numbers come from the enum CodeWalker serialises this field with, so they are the spellings the importer accepts. assetName is the file the game actually loads, and for a plain drawable it is the same string as name. The one case where they differ is ASSET_TYPE_DRAWABLEDICTIONARY, where drawableDictionary names the .ydd and assetName names the drawable inside it.

FLAGS

All 32 archetype flag bits

One bit each, added together into the flags field. These labels are the ones CodeWalker prints beside its own checkboxes, bit for bit — nothing in the game files publishes official names for them.

BitValueLabelWhen it earns its place
01Wet Road ReflectionExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
12Dont FadeThe prop pops in at full opacity instead of blending. Set on interior shells so a wall does not ghost.
24Draw LastExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
38Climbable By AIExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
416Suppress HD TXDsExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
532StaticThe prop never moves. Cheapest option for scenery, and the one to set on anything bolted down.
664Disable alpha sortingExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
7128Tough For BulletsExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
8256Is GenericExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
9512Has Anim (YCD)Needed before clipDictionary does anything at all.
101024UV anims (YCD)Exposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
112048Shadow OnlyExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
124096Damage ModelExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
138192Dont Cast ShadowsWorth setting on small clutter: a shadow costs a draw pass the player will never look at.
1416384Cast Texture ShadowsExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
1532768Dont Collide With FlyerExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
1665536Double-sided renderingRenders both faces. The fix for a single-plane mesh that disappears from one side.
17131072DynamicThe prop can be pushed around. Mutually exclusive with Static in intent, even though nothing stops you ticking both.
18262144Override Physics BoundsExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
19524288Auto Start AnimExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
201048576Pre Reflected Water ProxyExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
212097152Proxy For Water ReflectionsExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
224194304No AI CoverExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
238388608No Player CoverExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
2416777216Is Ladder DeprecatedExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
2533554432Has ClothExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
2667108864Enable Door PhysicsExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
27134217728Is Fixed For NavigationExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
28268435456Dont Avoid By PedsExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
29536870912Use Ambient ScaleExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
301073741824Is DebugExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.
312147483648Has Alpha ShadowExposed by CodeWalker, no published behaviour. Leave it alone unless you are matching a stock archetype that sets it.

QUESTIONS

About ytyp files and custom props

What is an archetype, actually?
It is the definition of a model, as distinct from a copy of it in the world. The archetype says: here is a thing called cdc_sh_lobby, its geometry is in a drawable of that name, its textures are in this dictionary, its collision is in that one, it is this big, and it stops drawing at 600 metres. Nothing in the archetype places it anywhere. Placement is a separate record — a CEntityDef in a .ymap, or a CreateObject call at runtime — and that record only ever refers to the archetype by name. So the .ytyp is the catalogue and the .ymap is the shopping list. One archetype can back a thousand placed copies, and that is exactly why the format is split this way: the mesh, the bounds and the draw distance are stored once.
Why does my prop spawn invisible, or not spawn at all?
Three causes, in the order they happen. First, no archetype at all: the model name hashes to something the game has never heard of, so the request never resolves, HasModelLoaded never returns true, and CreateObject hands you a zero. That is the "not at all" case and it means your .ytyp is either missing, not registered with DLC_ITYP_REQUEST, or not in the files list so the client never downloaded it. Second, the archetype exists but bsRadius is zero. Culling happens against the bounding sphere before anything is drawn, so a zero radius means the prop is culled every frame from every angle — it loads perfectly and you see nothing. Third, lodDist is zero or smaller than the prop: the object is there, has collision, blocks bullets, and is simply never drawn at your distance from it. The validator in this tool checks all three because they are indistinguishable in game.
What is the difference between CBaseArchetypeDef and CTimeArchetypeDef?
One field: timeFlags. CBaseArchetypeDef is always drawn. CTimeArchetypeDef carries a 24-bit mask, one bit per hour of the game clock, and the prop is drawn only in the hours whose bit is set — bit 0 is 00:00 to 01:00, bit 23 is 23:00 to midnight. Bit 24 is a separate switch that lets it vanish even while the player is looking straight at it. That is what every lit shop sign and every illuminated window in Los Santos is: a time archetype whose daytime bits are clear. The trap is that a CTimeArchetypeDef with timeFlags at zero is invisible for all twenty-four hours, which looks exactly like a broken model. If you do not need the hour behaviour, use the base type — it is one field smaller and one thing fewer to get wrong.
Do I have to type the bounding box by hand?
No, and you should not. Export your model to XML in CodeWalker, or let Sollumz write the .ydr.xml, and drop that file on this page. The drawable already carries BoundingBoxMin, BoundingBoxMax, BoundingSphereCenter and BoundingSphereRadius, computed from the actual mesh, and this tool lifts all four straight out. It also tells you whether the drawable has a Bounds block, which is how you know the collision is embedded rather than sitting in a separate .ybn. Everything happens in the tab — the file is read with the browser file API and nothing is uploaded anywhere.
What goes in physicsDictionary, and what happens if I leave it empty?
It names the collision. Empty means no collision: you walk through the prop, bullets pass through it, and a car drives into it as if it were a hologram. That is a legitimate choice for a decal plane or a light shaft, and a bug for everything else. For a prop whose collision is baked into the .ydr, put the prop's own name here — CodeWalker's archetype editor treats the string equalling the archetype name as "Embedded" and shows that word instead of trying to resolve a file. For collision in a separate .ybn, name the .ybn without the extension; CodeWalker will mark it invalid in red if it cannot find a bounds file of that name, which is a free spelling check before you ever launch the game.
Can one .ytyp hold more than one prop?
Yes, and it should. The archetypes array takes as many items as you like, and one ytyp for a whole prop pack is both fewer files to stream and one DLC_ITYP_REQUEST line instead of thirty. The only hard rule is that no two archetypes may share a name, because the name is hashed and two identical names collapse to one entry — one of your props silently becomes unreachable. Drop a folder of .ydr.xml files on this page and you get one archetype per file in a single ytyp.
Which flags should I set on an ordinary prop?
For something bolted to the ground, 32 (Static) alone is a reasonable default and is what this tool starts with. Add 8192 (Dont Cast Shadows) on small clutter, because a shadow pass on a bottle is cost for nothing. Add 65536 (Double-sided rendering) if your mesh is a single plane that disappears when you walk round it — that is the fix, not a remodel. Set 131072 (Dynamic) instead of 32 for anything you want to be pushable. And 512 (Has Anim) is not optional if you filled in clipDictionary: without that bit the animation dictionary is simply ignored, which is a silent failure this tool warns about.

FROM THE SHOP

What we build when it is not free

The free tools and the paid work come out of the same place. These are the lines closest to what this page is about.

Grand opening: 25% off every product with FAM-261023-261025-UL4B9, until 25 October. It is applied at checkout.

Orange EMBER FiveM-compatible minimap for GTA 5 — google style — showing Los Santos street detail
Minimaps

Minimaps for FiveM

Twelve colour palettes across three base map styles, each one a drop-in resource. Add your logo and your district labels in the editor.

From $8.0036 finished mapsBrowse the minimaps
A pistol model from the weapon library, rendered with custom artwork on the slide
Weapon skins

Weapon skins for FiveM

Put your own artwork on any model in the library and export it as its own resource, inventory icons cut to match. The first one costs nothing.

Free538 weapon modelsOpen the weapon library
An animated neon Vinewood banner on the hillside of a FiveM server
Vinewood signs

Vinewood signs for FiveM

Your server name standing on the hillside in real 3D geometry. It ships as a pure map resource with no script, so there is nothing to break.

From $20.0082 typefacesOpen the sign studio