Liberty City arrives in slices
10 min read
By Eduardo Orellana ·
Grand Theft Auto III, Rockstar North, 2001. Liberty City could not fit in memory. It was streamed in around the player, which is what made the city possible.
The city was never all in memory
Grand Theft Auto III, Rockstar North, 2001, is remembered as the game that made a city feel continuous. The technical fact underneath is the opposite of continuity. Liberty City did not fit in PlayStation 2 memory. The blocks around you were loaded as you drove, and the blocks behind you were thrown away. The illusion of a whole city is a window.
That window is a design constraint, not just an engineering one. A mission can rely on what is near the player and cannot rely on a distant district still being in memory. The streaming is why the city can be large, and also why a chase has a texture pop, a door that is not there yet, a skyline that is a picture. Later cities hide the window better. They are still windows. Design the mission for the window you actually have.
Why Liberty City would not fit in 32 MB
Grand Theft Auto III wears several hats. It set up one of the most profitable franchises the medium has produced, it pushed a wave of open-world imitators into production, and it drew a steady stream of nervous press coverage.
It is also a piece of engineering sleight of hand. Rockstar North, then still DMA Design, got a four kilometer wide riff on New York City running inside the PlayStation 2's 32 MB memory chip.
The shape of the problem is easy to state. A PS2 DVD held 4.7 GB, plenty of room for every model, texture, sound effect and radio station in the game. The catch was speed: the drive moved only about 5 to 6 MB per second. System memory was far quicker and far smaller.
Most games of the era worked around that gap with structure. Load one area, funnel the player into a door or a hallway, dump the old assets, and bring in the next area behind a loading screen. Liberty City offered no such chokepoints. The player could head in any direction at any time.
Across the full city there were thousands of distinct models for buildings, cars and pedestrians, and thousands more textures for materials, signage and skins. That came to roughly 130 MB. Splitting Liberty City into three islands helped, but a single island still would not sit comfortably in the PS2's memory.
Streaming a moving window of the world
The answer was to keep only the player's immediate surroundings in memory and to swap that content continuously as they moved. Before landing there, the team weighed a cheaper option.
That cheaper option was to make the city plainer. Crude 3D models and low-resolution textures would have shrunk each island enough to fit. It balanced the budget and left Liberty City looking dull.
Streaming was the ambitious route. Liberty City was carved into thousands of small sectors. An invisible square followed the player, the models and textures inside it were loaded, and sectors falling outside it were dropped.
Distance is what makes that work. Assets tended to be requested while they were still far away, which gave the drive time to fetch them from the DVD before anyone got close enough to scrutinize them.
So the game stopped trying to hold a city and started maintaining a window. It quietly assembled the world ahead of the player and disposed of the world behind them. The ceiling moved with it: the team could build whatever city they liked, provided the area around the player fit in memory and could be pulled off the disc fast enough.
Why an open city breaks the usual loading tricks
Because a player in a city can go anywhere, the game cannot know which assets to prepare next. Loading during play was not new. Predicting an open city was.
Games before this one had already split worlds into chunks and pulled the next chunk in as the player neared it. It is why so much level design of the period leans on narrow gaps, elevators, doorways and corridors. Each one buys the machine time to get the next area ready.
A dense city takes those crutches away. There is no linear corridor to lean on and no reliable door, tunnel or elevator to hide a load behind. The player can drive in almost any direction, double back, cut across a block, or stare at a landmark on the far side of the map.
The streaming system had to cope with a full 360 degrees of open ground rather than a chain of disguised loading zones. Five problems followed from that: pop-in, the rest of the memory budget, fragmentation, disc seeking, and player speed.
Pop-in, and the detail levels that hide it
Pop-in is what you get when the loading radius is tight: buildings and props snapping into existence just before the player reaches them. The fix was to look further out and load at different levels of detail.
Sectors close to the player were loaded in full. Sectors further out only needed their largest shapes, meaning buildings, bridges, ships, cranes and whatever else reads on the skyline.
Those far shapes were simplified low-poly imposters wearing low-resolution textures. As the player closed in, the genuine model and texture streamed in and faded over the cheap stand-in.
This is level of detail, or LOD, and it reached across the water too. Portland, Staunton and Shoreside each had distant low-poly versions serving as horizon scenery, with separate versions for separate viewing directions. Nothing is gained by rendering the back of a skyscraper the player can only see from the east.
The payoff is a skyline that stays readable for immersion and navigation while the far distance costs a fraction of the memory.
The rest of the game wants memory as well
City geometry was only one claim on 32 MB. Animation, pedestrian AI, physics, the position of the player's last car and a long list of other systems all lived in the same space.
Radio was the exception, since the stations could play straight off the DVD. Everything else meant only a slice of memory was ever free for city streaming. San Andreas, on the same console and the same broad engine lineage, records the figure in its stream.ini: roughly 13.5 MB set aside for streaming the city.
Traffic and crowds needed their share as well. Grand Theft Auto III carried around 60 vehicle types, and holding the whole fleet in memory was out of the question. The game ran a strict pool instead, with eight vehicle types resident at a time.
A spawning car had to take one of those eight slots or evict an older type. The pool also had to cover the car the player was in, the one they drove before it, parked cars nearby, and staples such as taxis and police cruisers.
That constraint produces an oddity open-world players will recognize. Track down some specific car, and suddenly half the city seems to be driving it. Once the model is resident, spawning another copy is cheap.
None of the streaming worked in isolation. Every neighboring system had to be trimmed and capped so the city had room to breathe.
Fragmented memory and the custom allocator
Loading and unloading all day fragments memory. Small assets leave small holes behind, and free space can add up to plenty while none of it sits in one piece.
A larger asset arriving later may find no contiguous block to occupy. Placed past the end of the budget instead, it takes the game down with it.
Rockstar wrote its own memory manager for that, one that could merge and shift blocks to keep fragmentation under control. It could also free assets aggressively when it had to, dropping things behind the camera or distant skyline pieces to claw back space.
A second tactic was to make large numbers of asset files exactly the same size. Hundreds of models and textures came in at 2 KB, hundreds more at 4 KB. Assets of matching size slot cleanly into each other's holes rather than opening new ones.
Testing it meant attaching the player character to the train looping around Portland and leaving several PS2 development kits running overnight. The first attempts died within minutes. Later ones lasted longer. In the end the game could churn assets in and out until morning without falling over.
Disc seek time and how assets were laid out
A DVD reads continuous data well and jumps between scattered files badly. Each jump is a seek, and it means moving the laser head, letting it accelerate, settle and read again.
Grand Theft Auto III asked the PS2 drive for scattered reads constantly. Rockstar's response was to control where assets physically sat on the disc. Data from the same part of the city was grouped together, so fetching neighboring buildings and roads meant a shorter trip for the laser.
The reader also declined to serve requests strictly in the order they arrived. It could favor whatever sat nearest the current read position, cutting seek time.
The team also tried duplicating common assets across the disc. Storing several copies of a tree or a lamppost beside different chunks of city data can beat seeking back to a single master copy every time the object comes up.
The idea outlived the console. Later games have duplicated common props on physical media for the same reason. Storage hardware changed and the underlying constraint did not: a world only appears smoothly if its data can reach memory in time.
Capping player speed so the disc could keep up
When optimization ran out, the last lever was the player. Move through Liberty City fast enough and you outrun the streaming system, watching the world assemble ahead of you or dropping through ground that has not arrived.
So the game slowed you down. Cars carried firm top speeds. In certain parts of the city, air resistance on vehicles was quietly raised by a few percentage points, too small for players to feel and large enough to give streaming a head start.
Flight was ruled out. The single plane in the game was clipped so it barely leaves the ground. That was not purely a design preference. Seeing Liberty City from above would surface edge cases the city was never built to survive.
The map itself moved to suit. Portland originally had a long main road where players built up speed faster than the code could load the buildings lining it. A large building was dropped into the middle of that run to break the straightaway.
It is a good reminder that technical limits leave fingerprints on level design. A map is not only art and wayfinding. It is also a device for holding the streaming system inside the range where it works.
What later open worlds inherited from it
Played normally, Grand Theft Auto III almost never shows its hand, which is the achievement. Buildings, trees, cars and textures move through memory without pause, and the illusion generally holds.
The same groundwork carried through the rest of the PS2 run. Vice City managed helicopters by switching to low-poly models above a certain altitude, keeping memory free for distant skylines. San Andreas dropped the hard island loading breaks in part by spacing its cities out with enough countryside that one could leave memory before the next arrived.
Better hardware did not retire the technique. It raised the ambition instead. A modern machine can hold all of Grand Theft Auto III's Liberty City at once, but it still cannot hold a much newer open world at full detail.
Solid-state drives remove the mechanical seek, which helps, but open worlds still shuttle data in and out of memory. The principle has not moved: show enough of the world, at enough detail, at the moment the player needs it.
Liberty City worked on underpowered hardware because a moving streaming window, LOD stand-ins, hard asset pools, a bespoke memory manager, a deliberate disc layout and quiet speed limits were designed together. The feat was never that the whole city fit. It was that players believed it did. You only learn whether your own world holds up the same way by running the build and driving through it.
Build it in Flockbay
In the Flockbay app, do not ask for a city. Ask for three blocks that stream in as the player drives, and one mission that only needs those blocks. Play the drive. If the mission requires a fourth block you cannot see yet, the mission is larger than the machine you are pretending to have.
An AI open-world game maker and an open-world adventure template are the temptation to ask for everything. Three blocks.
Keep reading
- Rain in Hyrule is the argument
- Metro turns menus into objects
- Banjo worlds are small and full
- Start an open city small with the AI open world game maker
Big worlds hold together when memory, layout, traversal speed and visual detail are planned as one system, and the fastest way to know if yours does is to play it.
More notes on game design