RE:NODE

Guides10 min read

FiveM MLOs and maps without the lag

How FiveM MLOs, map edits and streamed assets work: the stream folder, ytyp and fxmanifest lines, oversized asset warnings, conflicts and download size.

0 readers

An MLO is a custom interior for GTA V - rooms, portals and the props inside them - and on FiveM it is installed like any other resource: a folder with an fxmanifest.lua and a stream folder holding the model, texture and collision files. Every file in a stream folder is downloaded by every player who joins, and every file is loaded into client memory when the player gets near it. That gives you the two rules that decide whether a map-heavy server runs well: keep individual assets small enough that FXServer does not warn about them, and keep the total small enough that first joins and texture memory stay sane. This guide covers how streaming works, the manifest lines an MLO needs, the file types, conflicts between maps, and how to cut a bloated asset pack down.

How streaming works on FiveM#

GTA V loads the world in pieces as you move through it, from archives on disk. FiveM adds a layer on top: resources can ship extra files that the client registers as if they were part of the game's own archives. Those are streamed assets.

  • Any file inside a folder called stream in a resource is registered for streaming automatically. Sub-folders inside stream are fine and help organisation.
  • On first join, the client downloads every streamed file from the server's HTTP endpoint on TCP 30120 and stores it in its local cache. Later joins only fetch files that have changed.
  • Streaming works by file name. A file called v_ilev_door.ydr in your resource replaces the game's file of the same name. Two resources streaming files with the same name conflict, and one of them silently loses.
  • The client loads streamed assets into memory when the player comes near something that uses them, exactly as it does for the base game.

So streamed assets cost three things: server disk and bandwidth for downloads, client download time on the first join, and client memory while playing. They cost almost nothing in server CPU. A map pack does not make your server tick slower; it makes joining slower and can make the game fail to load textures in a busy area.

The file types you will see#

ExtensionWhat it holds
.ymapPlacements: which objects sit where in the world
.ytypArchetype definitions, including MLO interiors and their rooms
.ydrA single drawable model
.yddA dictionary of drawables, often clothing or props
.ytdA texture dictionary
.ybnCollision bounds
.yftFragment models, such as vehicles and breakable objects
.ycdAnimation clips

An MLO pack is usually a .ytyp that defines the interior, a .ymap that places it in the world, .ydr and .ytd files for the shell and its props, and .ybn files for collision. A map edit that only adds exterior props may be nothing more than a .ymap and some models. Vehicles are their own topic with their own meta files, covered in FiveM vehicles and addon cars.

The tools people use to build and inspect these are CodeWalker for viewing and placing, OpenIV for browsing the game archives, and the Sollumz add-on for Blender for modelling. You need none of them to install a finished MLO, but CodeWalker is worth having for diagnosing a conflict.

Installing an MLO#

A typical MLO resource looks like this:

code
resources/  [maps]/    cfx_pillbox_hospital/      fxmanifest.lua      stream/        pillbox_shell.ydr        pillbox_shell.ytd        pillbox_col.ybn        pillbox.ytyp        pillbox_mlo.ymap
fxmanifest.lua
fx_version 'cerulean'game 'gta5'this_is_a_map 'yes'data_file 'DLC_ITYP_REQUEST' 'stream/pillbox.ytyp'

this_is_a_map 'yes' marks the resource as map content so the client treats its streamed files accordingly. The DLC_ITYP_REQUEST line registers the archetype file that defines the interior; most MLO packs include it and you should leave it in place even where the .ytyp would load without it. Some packs also ship an interiorproxies.meta, registered with:

lua
files { 'interiorproxies.meta' }data_file 'INTERIOR_PROXY_ORDER_FILE' 'interiorproxies.meta'

Then add the resource to server.cfg:

config
ensure cfx_pillbox_hospital

Folders in square brackets such as [maps] are containers, not resources, so the ensure line takes the resource name only. A new folder added while the server is running needs refresh in the console before ensure will find it. The ensure order and the rest of the file are covered in FiveM server.cfg explained.

The oversized asset warning#

FXServer checks streamed files as it starts and warns about any that will take too much memory on the client:

code
Asset pillbox_shell.ytd uses 38.0 MiB of physical memory. Oversized assets can and WILLlead to streaming issues (such as models not loading/rendering).

The threshold is 16 MiB of physical memory per asset. The warning means what it says: the game's streaming system was built around assets far smaller than that, and a single 38 MiB texture dictionary competes with everything else the client is trying to load nearby. The symptoms are textures that stay blurry, buildings that appear late, and in bad cases parts of the city that never load at all around the oversized asset.

Almost always the cause is textures. A creator exported 4096 by 4096 textures for surfaces a player sees from three metres away, or left uncompressed formats in place. Fixing it means opening the .ytd, resizing the large textures to 2048 or 1024, saving them in a compressed format, and checking that nothing visible got worse. On a typical over-built MLO that halves the size without anyone noticing in game. If you do not want to touch the files yourself, the warning is a fair thing to send back to the creator; a paid MLO that ships with several oversized assets has a quality problem.

Do not fix it by deleting the low-detail versions (LODs) of models, which some guides suggest to save space. LODs are what the game draws at a distance; without them, objects pop in from nothing.

Total size and first joins#

Each asset passing the size check is not enough. Every new player downloads the whole lot, and the client keeps the textures for everything nearby in memory at once. A server with forty MLOs and three hundred cars can ask a new player to download several gigabytes before they see the character menu.

What actually helps, in order of payoff:

  1. Remove what nobody uses. Interiors for jobs you no longer run, a second police station from an old map, test props. Every unused resource still downloads.
  2. Shrink the largest textures. Sort your stream folders by size and start at the top; the biggest ten files are usually most of the problem.
  3. Avoid duplicates. Two map packs that both ship the same props under different names double the download. Two that ship them under the same name conflict instead, which is worse.
  4. Tell players. A loading screen that says the first join downloads a large amount is better than a support channel full of people who think the server is frozen.

Players can help on their side too: recent FiveM clients have an extended texture budget option in their settings, which gives streamed textures more room on machines with enough video memory. It is a workaround, not a reason to stop trimming.

On the server side, assets are served from disk over the TCP endpoint. Fast storage makes the server's half of that quick, and the rest is the player's own connection. On RE:NODE every plan is on NVMe and bandwidth is unmetered, which means you are not billed per gigabyte - it is not an invitation to make every new player download five gigabytes, and the player's connection was always going to be the slow end anyway. Bandwidth and fair use covers what that means in practice.

Conflicts between maps#

Two map resources can collide in three ways, and each looks different in game.

Same location. Two MLOs placed in the same space - say, two different versions of the Mission Row police station - overlap. Players see walls through walls, fall through floors where one interior's collision does not match the other's model, or find doors that open into nothing. Only one interior per location; remove the other.

Same file name. Streaming is by file name, so two resources shipping prop_desk_01.ydr with different contents conflict. Which one wins depends on load order, and it can change after a restart. Rename on one side or remove the duplicate.

Vanilla interiors and IPL loaders. Resources such as bob74_ipl load GTA Online interiors and their variants. An MLO that replaces one of those interiors fights with the loader. Disable that interior in the loader's configuration when you install a replacement.

When you suspect a conflict, stop half the map resources, restart, and check the place in question. CodeWalker loaded with your server's files will show what is placed where, which is faster than walking around with a resource list.

Interiors in game: entity sets, collision and teleports#

Many MLOs have optional parts called entity sets - different furniture layouts, a damaged and an intact version, extra rooms - switched on from a script:

lua
-- client sidelocal interior = GetInteriorAtCoords(311.0, -594.0, 43.0)ActivateInteriorEntitySet(interior, "pillbox_reception")RefreshInterior(interior)

The MLO's documentation names its entity sets. Nothing is shown until something activates them, which is why an interior can look empty after install.

Falling through the floor after teleporting into an interior is a collision timing problem rather than a broken MLO. The player arrives before the collision for that spot has loaded. Teleport scripts should request collision and wait for it:

lua
RequestCollisionAtCoord(x, y, z)while not HasCollisionLoadedAroundEntity(PlayerPedId()) do    Wait(0)end

If players fall through the floor when walking in normally, the .ybn is missing, damaged or conflicting with another map.

Game build matters too. An MLO built with props from a recent GTA Online update only works if the server enforces at least that build with sv_enforceGameBuild. The creator should say which build an MLO needs; if props are missing in game, check that first.

Keeping a map-heavy server manageable#

Large servers end up with dozens of map resources. A few habits keep that from becoming a mystery:

  • One folder per purpose. [maps] for MLOs, [vehicles] for cars, [props] for small additions. Easier to bisect, easier to measure.
  • A list of what each map is for. Which job uses it, who bought it, from where, which build it needs. When a creator's account changes or a licence moves, you need this.
  • Measure before and after. Note the total size of the stream folders when you add a pack, so you know what each addition costs your new players.
  • Back up the resources, not just the database. A paid MLO you can no longer download is gone if the folder goes. Backups that actually restore applies here as much as to the database.

On RE:NODE you can drag a whole map resource into the file manager and archives are unpacked in place, or upload over SFTP if the pack is large; SFTP and the file manager has the connection details. Backups run from the panel, can be scheduled, and are stored off the machine.

Troubleshooting#

"Oversized assets can and WILL lead to streaming issues". An asset over 16 MiB of physical memory, usually a texture dictionary. Shrink its textures or ask the creator to.

The interior is invisible or empty. Missing DLC_ITYP_REQUEST line, the resource is not started, or its entity sets are not activated.

Players fall through the floor. Collision not loaded yet after a teleport, or a missing or conflicting .ybn.

Textures stay blurry in one area. Too much streamed content near that spot for the client's texture budget. Shrink the textures in the nearby packs.

Two buildings in one place. Two maps at the same location, or an MLO fighting an IPL loader. Keep one.

A map works for some players, not others. Players on an older game build, or escrowed content tied to a key that has changed. Check sv_enforceGameBuild and the console for entitlement errors.

FAQ#

What is an MLO in FiveM?

A custom interior: a set of rooms and portals defined in a .ytyp file, placed in the world by a .ymap, with its own models, textures and collision. It is installed as a resource with a stream folder like any other map content.

Do MLOs make a FiveM server lag?

Not on the server - streamed files are served from disk and cost little CPU. They cost the client: download time on first join and memory while playing. Oversized assets cause missing textures and slow loading, which players often call lag.

What is the limit for a streamed asset?

FXServer warns for any asset above 16 MiB of physical memory. It still loads, but large assets compete with everything else nearby and cause streaming problems. Keep each asset below the threshold.

Why do two of my maps break each other?

Either they occupy the same location, or they stream files with the same name, or an MLO replaces an interior that an IPL loader also loads. Remove one, rename the duplicate, or disable the interior in the loader.

Do players have to download maps every time they join?

No. Streamed files are cached on the player's machine after the first join. Only files that have changed since are downloaded again, which is why updating a large pack means another long join for everyone.


Comments

Completely anonymous: no account, no email, no cookie. We store the name you type, the text and the time - nothing else. Links are limited and markup is not rendered.

0/2000