Lineage 2 Geodata Setup: Stop Walking Through Walls

Lineage 2 geodata is the height and collision map of the world. Without it a server still runs and players still log in — they just walk through walls, hit mobs through floors, and fall out of the map at specific edges. Every symptom looks like a client bug, which is why owners spend hours on the wrong layer.
This is the setup that actually changes behaviour: the right files in the right folder, one engine mode chosen on purpose, and a test that proves walls exist after the restart.
What geodata actually contains
The world is divided into a grid of square regions, and each region has its own file. aCis documents the grid as 176 regions for its supported world, with file names like 22_16.l2j — the two numbers are the region coordinates, not a version. Inside each file are the height layers and the blocked-cell flags that the server uses for three separate jobs:
- Movement — can a character stand at this coordinate, and can it walk to the next one.
- Line of sight — can a skill or arrow reach a target through this space.
- Pathfinding — when the direct line is blocked, what route goes around it.
Formats differ. .l2j is the standard Java format, .l2d is the diagonal variant some packs use, and _conv.dat files come from the official client and are read by L2OFF-based servers and converters. A pack that loads the wrong format either ignores the files or floods the console with parse errors.

Step 1: put the files where the engine looks
Every L2J-family server expects a geodata folder relative to the game server's working directory, usually data/geodata. The setting that points at it has different names per pack, and this is the first place people get lost:
| Pack | Config file | Path setting |
|---|---|---|
| L2J Server | game/config/geodata.properties | GeoDataPath |
| L2JMobius | game/config/GeoData.properties | GeoDataPath |
| aCis | config/geoengine.properties | GeoDataPath |
Leave it relative (./data/geodata) and start the server from its own folder. An absolute path on a machine that later moves, or a relative path resolved from the wrong working directory, produces the same result: no regions loaded and no clear error.
For High Five, the official L2J project distributes a compatible pack from its geodata repository (l2j_geodata). Take the pack that matches your chronicle and core; region files from a different chronicle load but misplace terrain and doors.
Step 2: choose the engine mode on purpose
The three engines expose the same idea under different key names, and the behaviour is what matters:
| Mode | aCis | L2J / L2JMobius | Result |
|---|---|---|---|
| Off | GeoData = 0 | geodata not loaded (bad GeoDataPath or all regions off) | Walls are ignored; players and mobs pass through them |
| Collision + LoS | GeoData = 1 | PathFinding = 0 with geodata loaded | No walking or casting through walls; mobs cannot aggro through them |
| Full pathfinding | GeoData = 2 | PathFinding = 2 (or 1 for path-node files) | Blocked movement is routed around the obstacle |
In aCis, GeoData = 2 is the right default for a live server. In L2J and L2JMobius the collision layer comes from loading geodata at all, and PathFinding = 2 adds the routing. Without routing, a mob whose target stands behind a fence stands still instead of walking around. The cost is CPU, because every failed direct path triggers a search. On a crowded siege that is measurable, and the first thing to test under load.
Two companion settings are worth understanding:
CoordSynchronize—-1synchronises only the Z axis;2is the value intended for geodata and lets the server correct a client that reports a position inside a wall. Set2when you enable geodata.ForceGeoData— loads the buffers into physical memory at boot. Faster and steadier, at the price of RAM. Turn it off on a small VPS and watch for stutter instead.
Enable geodata before your first open beta, not after. Players who learn to clip through a castle wall do not forget it, and every fix after launch looks like a nerf to them.

Step 3: load only what you need, or verify everything
L2J and L2JMobius let you control the region set. TryLoadUnspecifiedRegions = True loads every region present in the folder, including ones you did not list, and does not fail startup when a file is missing; setting it to False restricts loading to the regions you list, which keeps startup fast while you build out a custom map. aCis takes the list approach directly: its config enumerates region filenames and comments out the ones the client does not support.
Partial loading has a trap. A region that is not loaded behaves like mode 0 for that part of the world: walls vanish locally. If players report that one specific castle has no collision, check whether that region's line is commented out before you suspect the pack.
Step 4: prove it worked
Restart the game server after any change — geodata is read once at boot. Then confirm, in this order:
- The startup log reports loaded regions without a wall of parse errors. A single unreadable file is normal; hundreds mean the wrong format.
- Walk a character into a known wall in a starting village. Blocked movement is the baseline test.
- Stand behind a fence and pull a mob. It should path around, not stand still and not hit you through the fence.
- Cast a targeted skill through a wall at a clanmate. It should fail to acquire or fail on line of sight.
- Jump from a ledge that used to drop you out of the world. You should land, not fall through.
On aCis, a wall you can walk through with clean logs means GeoData is still 0. On L2J and L2JMobius the same symptom means that region never loaded — check the region list before PathFinding. If walls block but mobs stand still behind them, collision is on and routing is off.
Mistakes that break geodata
- Mixing formats. Loading
_conv.datinto an engine that expects.l2j, or the reverse, with no format setting. aCis hasGeoDataFormatfor exactly this; set it toL2J,L2OFForL2Dto match the files you have. - Testing with teleports. GM teleport skips the collision check that a walk exercises. Always test by walking.
- Editing config with the server running. Nothing reloads, and the next restart "magically" fixes it, which teaches the wrong lesson.
- Copying a geodata folder between chronicles. It loads, and then doors, bridges and terrain edges are subtly wrong in ways only players notice.
- Ignoring RAM. Full geodata plus forced loading is a real memory commitment. Size the VPS for it — see VPS and hardware requirements.
What comes next
Geodata is the first thing that makes a server feel like Lineage 2 rather than a test bench. After it, tune rates and drops to match what you advertise, then get players in: a free listing on L2Calendar puts your server in the chronicle and rate pages where players search — add your server. If you want the placement above the free list, VIP listing is the paid route, and this breakdown covers when it pays for itself.
