# The Enhanced Asset-Version Wall Is Narrower Than You Think

By AJTheDev — 2026-08-06
Canonical: https://ajthe.dev/blog/posts/enhanced-asset-version-wall.html

> "Asset version mismatch" on FiveM Enhanced only hits textures, models and VFX. Your .ymap, .ybn, .ytyp and meta files stream fine. The version fingerprint, read off paired Legacy and gen9 files, and how to vet a pack offline.

---

![A brick wall with a gap cut through it, wireframe map geometry passing through while textures pile up blocked — the Enhanced asset-version wall](https://ajthe.dev/assets/images/blog/enhanced-asset-version-wall-banner.jpg)

The first thing Enhanced did on launch day, after the first client joined, was reject a streamed pack with `Asset version mismatch`. Fair enough — gen9 changed the file formats and we all knew the Legacy assets would need re-exporting. What I got wrong for the next two weeks was *how much* of them.

I treated the wall as if it covered everything that streams. It doesn't. It's textures, models and VFX. Map data walks straight through. I've got the version numbers to show it, read off real files, and I'd rather you didn't spend a fortnight hedging every map job the way I did.

## The fingerprint

Every RAGE resource file starts with an RSC7 header: the magic `RSC7` in bytes 0–3, then the resource version in bytes 4–7. I had the same assets in both forms on disk — the Legacy copy in a sidelined folder, the gen9 copy live — so the comparison is direct:

| Format | Legacy | gen9 |
| --- | --- | --- |
| `.ytd` (textures) | 13 | **5** |
| `.ydr` (drawables) | 165 | **159** |
| `.ydd` (drawable dicts) | 165 | **159** |
| `.yft` (fragments) | 162 | **171** |
| `.ybn` (collision) | 43 | 43 |
| `.ymap` (placement) | 2 | 2 |
| `.ytyp` (archetypes) | 2 | 2 |

**Only the graphics formats moved.** Collision, placement and archetype definitions are byte-for-byte the same version on both branches, which is why a Legacy MLO's `.ymap` / `.ybn` / `.ytyp` load fine on Enhanced while its `.ytd` and `.ydr` get bounced.

Enhanced still ships RPF7 containers — the magic bytes on `common.rpf`, `x64a.rpf` and `update.rpf` are all `7FPR`. gen9 differs in the asset versions *inside* the container. That's the same fact as the server's rejection, seen from the other end.

Cfx said as much themselves in the 23 July hotfix note: "Default resources like Qbox no longer fail to start because of asset version mismatch errors on streamed files." The check is on streamed files; the formats it bites are the ones above.

## Animations — settled later

The one format I couldn't settle in August was `.ycd`. An emote pack I had was streaming 562 clips at RSC7 version 46 and I had no gen9 clip dictionary to compare against, so "does Enhanced accept Legacy anims" sat as an open question.

Settled on 30 September, reading the Enhanced archives with CodeWalker as a library: **all 25,961 `.ycd` files in the Enhanced game are RSC7 version 46** — identical to Legacy. Animations are not part of the gen9 change at all.

## Vet a pack before it touches the server

Because the version lives in the header, you can check a whole pack offline in a couple of seconds and never find out the hard way at a scheduled restart:

```
Get-ChildItem -Recurse -Include *.ytd,*.ydr,*.ydd,*.yft,*.ybn,*.ymap,*.ytyp,*.ycd | ForEach-Object {
            $b = [byte[]]::new(8); $s = $_.OpenRead(); [void]$s.Read($b, 0, 8); $s.Close()
            [pscustomobject]@{
              File    = $_.Name
              Magic   = [Text.Encoding]::ASCII.GetString($b[0..3])
              Version = [BitConverter]::ToUInt32($b, 4)
            }
          }
```

A `.ytd` reporting 13 is Legacy and will be rejected; 5 is gen9. A `.ydr` at 165 needs re-exporting; 159 is fine. I caught a vehicle pack this way on 29 July — textures at `0x0D` where the known-good ones on the box were `0x05` — before it ever went near a restart.

## What to actually do with Legacy assets

- **Re-export the graphics formats, not the pack.** Sollumz 2.8+ exports gen9 from Blender, and CodeWalker 30 dev48 reads gen9 natively. The `.ymap` / `.ybn` / `.ytyp` you already have can be left exactly as they are. If you've never done the Blender side, my Enhanced MLO guide walks the whole Sollumz 2.9 export end to end — it's in the [FiveM Creator Bundle](https://ajthedev.gumroad.com/l/FiveMCreatorBundle?utm_source=ajthe.dev&utm_medium=blog&utm_campaign=enhanced-asset-version-wall) alongside the scripting guide, the QBCore resource builder and ServerMaster.
- **Sideline, don't delete.** I rename the Legacy `stream` folder to `stream_LEGACY_DISABLED` so the manifest still describes what the resource *should* ship and nothing is lost while the re-export happens.
- **Don't "probe" map data.** I've seen people (and been the person) propose streaming one `.ymap` to see if the server rejects it. It won't. The question is answered; spend the time on the textures.

## One more texture trap while you're in there

A `.ytd`'s dictionary name is stored *inside* the file — `minimap_0_0.ytd` literally contains the string `minimap_0_0`. Renaming or copying a streamed `.ytd` therefore does nothing; the texture has to be re-imported into a container that already carries the right internal name. And a `+hi` dictionary is what renders up close, so a corrected `taxi.ytd` next to a stock `taxi+hi.ytd` looks like the override "isn't working" the moment you walk up to the car.

## FAQ

What causes "Asset version mismatch" on FiveM Enhanced?

Streaming a Legacy-format texture, model or fragment file. Enhanced (gen9) uses new RSC7 versions for `.ytd`, `.ydr`, `.ydd` and `.yft`, and the server rejects the old ones. Map data is unaffected.

Do Legacy .ymap, .ybn and .ytyp files work on FiveM Enhanced?

Yes. Collision (`.ybn` version 43), placement (`.ymap` version 2) and archetype (`.ytyp` version 2) files carry the same RSC7 version on Legacy and gen9, so a Legacy MLO's map data streams fine. Only its textures and models need re-exporting.

What are the gen9 asset versions for FiveM Enhanced?

`.ytd` 5 (Legacy 13), `.ydr` 159 (Legacy 165), `.ydd` 159 (Legacy 165), `.yft` 171 (Legacy 162). `.ybn` 43, `.ymap` 2, `.ytyp` 2 and `.ycd` 46 are unchanged from Legacy.

Do Legacy animations (.ycd) work on FiveM Enhanced?

Yes. All 25,961 `.ycd` files in the Enhanced game archives are RSC7 version 46, the same as Legacy. Animation dictionaries are not part of the gen9 format change.

How do I check an asset's version before streaming it?

Read bytes 4–7 of the file as a little-endian 32-bit integer; bytes 0–3 are the `RSC7` magic. A `.ytd` reporting 13 is Legacy and will be rejected; 5 is gen9.

How do I convert Legacy FiveM assets to gen9 / Enhanced?

Re-export the textures, drawables and fragments with Sollumz 2.8 or later in Blender, which exports gen9 directly. CodeWalker 30 dev48 reads gen9 files. Leave `.ymap`, `.ybn` and `.ytyp` as they are.

If you've got a Legacy MLO or pack you're not sure about, run the header check and [send me the output on Discord](https://discord.gg/d39aaZXAjh). I can usually tell you in a minute what needs re-exporting and what you can ship tonight.

Tags: #fivem #enhanced #gen9 #streaming #sollumz
