How GTA 3 Squeezed a 130MB City on 32MB of RAM (And Why We Appreciate It)
Based on a great Game Maker's Tookit video: How Rockstar fit an entire city into PlayStation 2
Here’s the scenario. It’s 2001. You are a game developer. You now have a PlayStation 2 with a development kit with only 32MB of RAM. To put things into perspective, that was less RAM than a single Chrome tab on a PC, back then. Now, imagine someone walked up to you and asked you to design a 3D city filled with seamless, illicit, 3D activities with all city files and resources totaling to 130MB. How would you respond?
If you were the team at Rockstar North (back when the company went by the name of DMA Design), you would do exactly what you said you would do and not shed a single tear in the process. You would design the first streaming memory for open world games.
Lately, I have been re-watching the amazing deep dives of Mark Brown on Game Maker’s Toolkit. It left me with an appreciation for the technology of Grand Theft Auto III. I have no right to complain about my 16GB of VRAM, my compiles are out of this world, "Package it ready for deployment".
The “Wait, None of This Fits” Problem
Here’s a breakdown (this is really just a Game Maker’s Toolkit inspired math problem):
PS2 RAM = 32 MB
Liberty City ≈ 130 MB
You cannot just “load the level.” It is literally impossible. So, being a desperate but also brilliant team, Rockstar knew that to solve a problem, you need to be able to cheat.
They decided to segment the city’s map into 3 islands (Portland, Staunton, Shoreside Vale) with a loading screen in between the 3. Fair enough. But even one island was too large so they had to get more creative. So, they implemented a system of a moving window of memory. The game would unload behind the player and load the area in front while the player was driving the car.
This is something every developer understands now, but in 2001? On a PS2 with DVD reading speeds? This was black magic.
The Pop-In Problem (It’s Still a Thing!)
Are you familiar with open-world games and how they've got that annoying tree pop-in thing? That's all thanks to GTA 3. Rockstar had that challenge too; if you were to load things too quickly you'd have a stutter. If objects loaded too slowly, you were staring into the void.
Their solution was LOD (Level of Detail). Things that were very far away got low-detail models, or low-poly “imposter” models. And then, when those models were finally close enough, they replaced them with the full, high-detail models. Today, this is a standard. But, back in the day, the ability to do a fade transition between two versions of a building was an amazing accomplishment with no visible jump.
As a developer, this is the part that’s so funny to me; they left most the pop-in. So, their solution was to limit the speed of the player.
You couldn’t drive cars too fast.
Helicopters? Forget about it.
The city was full of walls and tight turns to ensure you couldn’t break the speed that was the limit of their streaming engine.
That is the most developer thing to do. “The streaming is too slow? Guess we need to nerf how fast you can drive.”
“Why Can’t You Fly the Dodo?”
There's a not-so-common urban legend that the Dodo was designed to be made as a barely-flyable plane in GTA 3 because of 9/11, and the game really couldn't have made anything less flyable. Game Maker's Toolkit confirms the last bit. Of course, there are limitations.
From a developer perspective:
If you decide to fly high, you could view the whole city.
The way the game was built, only the ground would be fully loaded.
The game doesn't bother to load all the data for the tops of buildings (it doesn't expect you to land up there).
So, if you could fly properly, you'd see a lot of buildings floating in mid air, you'd fall through the tops of buildings, and a lot of exploding game glitches. So, Rockstar said: "Just make the plane handle like a brick with a cold." Legend move.
The Quietly Genius Stuff
I want to highlight two things from the Game Maker’s Toolkit research that don’t get enough love:
1. Disc layout optimization
The PS2 DVD drive had slow seek times. So Rockstar physically placed assets that belong together (e.g., buildings in the same neighborhood) close together on the disc. They even duplicated common models in multiple spots so the laser didn’t have to jump far. That’s insane. That’s “we have no budget but we have time” level craft.
2. Custom memory manager
When you load/unload stuff constantly, you get memory fragmentation – little unusable gaps that eventually crash the game. Rockstar wrote a custom allocator that merges free blocks and forces assets into fixed sizes (2KB, 4KB, etc.).
I’ve had to debug memory fragmentation on a console. It’s not fun. They solved it with duct tape and genius.
So What’s My Point?
As a developer, it’s easy to look at GTA 3 now and see clunky controls, low-poly characters, and fog everywhere. But underneath is a foundation that every open-world game since has built on.
We still stream. We still use LOD. We still battle pop-in. We just have faster SSDs and more RAM to hide our sins.
Whenever I complain about optimization, I try to remember: somewhere in 2001, a Rockstar coder got a 130MB city to run on 32MB of RAM, and then their manager said “Great, now add traffic and pedestrians.”
And I’m grateful to Game Maker’s Toolkit for digging up these details so I don’t have to reverse-engineer a PS2 disc myself.