An invisible wall is almost never a bug in the map you just installed. It is usually two maps disagreeing about the same piece of the world — one of them drawing the building you can see, and the other still supplying the collision for a building that is no longer there.

The game does not warn you about this. There is no error in your console and nothing in any log. The only symptom is that you walk into something.

Why it happens

A map add-on ships two different kinds of file. The parts you can see — the models and textures — and the parts you cannot, which describe where the solid surfaces are. When two add-ons ship a file with the same name, the game does not merge them and does not complain. It simply keeps whichever one loaded last and throws the other away.

So you can end up with the visible half from one add-on and the solid half from another. The old building is invisible but still solid. That is your wall.

If a wall is invisible, stop looking at the map you just installed and start looking for a second thing that touches the same place.

Find the exact spot first

Before hunting through files, pin down where the wall actually is. Walk into it, then read your coordinates — most admin menus show them, and on a development server you can print them to the console. Write the numbers down. You will use them three times.

While you are there, note whether the wall is a flat plane, a box, or the outline of a building. A building-shaped wall means a whole structure's collision is still loaded. A thin plane is usually a wall or fence that has been removed visually.

Work out what is actually running

This is the step almost everyone skips, and it is the one that saves the evening. Open your server.cfg and read it properly. A resource sitting in your resources folder does nothing at all unless something starts it.

Look for four things:

  • ensure resourcename — this one loads
  • start resourcename — this one loads too
  • A commented line beginning # — this one does not load, no matter what is in the folder
  • ensure [maps] or similar with square brackets — this loads every resource inside that folder, which is where surprises live

Also follow any exec lines. They pull in another config file, and that file can start resources too. A conflict you cannot explain is very often coming from a resource started three files away from the one you were reading.

Write down only the map resources that genuinely load. That is your suspect list, and it is usually much shorter than the folder.

Find the overlap

Now compare the suspects. You are looking for the same filename appearing in more than one of them. In practice the collision file is the one that matters, and it will have the same base name as the model it belongs to.

On Windows, searching your resources folder for a filename will show you every copy at once. If two running resources both contain it, you have found your conflict.

Two resources shipping the same filename is the whole problem in one line. Everything after this is deciding which one should win.

Work out which one is currently winning

Load order decides it, and load order is the order things appear in your config — later wins. So if your config reads:

ensure old_city_pack
ensure new_pawnshop

then new_pawnshop is supplying the file, and old_city_pack's copy is being ignored. Reverse those two lines and you reverse the outcome.

This matters because it tells you whether your wall is the old collision winning, or the new visual winning over old collision that was never removed.

Fixing it, in order of preference

  1. Change the load order. Move the ensure line for the resource you want to win so it comes last. This is a one-line change, it deletes nothing, and it is trivially reversible. Try this first — people dismiss it as a non-fix, and it is frequently the correct one.
  2. Stop the resource you do not want. If the older map pack was only ever there for one building you have now replaced, comment its line out. Reversible, and it costs nothing to test.
  3. Override just the one file. Create your own small resource that ships only the collision file you want, and load it last. The originals stay untouched, so an update to either add-on does not wipe your fix.
  4. Edit the original add-on. Last resort. It works, and the next update from the author silently undoes it — which is a far worse afternoon, because by then you will have forgotten you did it.

Whichever you pick, back up the file before you touch it, and change one thing at a time. Two changes at once and you will not know which one worked.

Test it properly

Restart the server rather than refreshing, then fully quit the game and rejoin. Map and collision data is cached on the client, so a reconnect alone will often show you the old world and convince you your fix failed when it did not. This single detail is responsible for an enormous amount of wasted time.

Then walk to the coordinates you wrote down at the start and try to walk through the wall.

If it is still there

Two things worth checking before you start again. First, whether the object is actually part of the base game rather than anything you installed — in which case no add-on of yours is responsible and you are looking for something that failed to remove it. Second, whether a third resource you did not consider is also shipping that file, which is common on servers that have been running for a couple of years.