The Donnington Project

Engine Porting: Translating Quake 1 Architecture to Quake 2 & Quake 3



DevLog / Background

Going In Blind

Before tackling this conversion, I had built exactly one Quake 2 map back around the year 2000 - simply because a friend and I managed to get our hands on an upgraded copy of Worldcraft (I believe v1.6) that supported Q2 export

Going into this conversion, I was basically going in blind. I didn't remember the exact nuances or structural differences between developing for Quake 1 versus Quake 2 at this point, it had been 25 years, so Safe to say... I learnt pretty fast!

As for Quake 3 Arena mapping, I have no experience what-so-ever and that will be an all-new challenge when the time comes...

IN PROGRESS

Quake 1 to Quake 2 Conversion Process

🎨 Rework Textures

In Quake 1, textures live neatly inside packed .wad libraries. Quake 2 changes the rules completely by requiring individual external .wal texture files stored in exact folder hierarchies which are then packaged into PAK files (which is some form of zip file). First, port of call was to extract the original textures with Wally - so, each of the textures incluiding the flint, stone, and mortar textures required careful palette re-indexing to ensure the historic 14th-century masonry didn't suffer awful color shifts under Quake 2's palette

Wally supports this extraction naturely, although some reworking maybe required. Quake 1 pallete has a tone that is more Gothic with deep desaturated browns, muddy slates, grim dark grays, blood reds, and murky greens. Whereas Quake 2 palette is more Industrial with metallic grays, dark charcoals, rusted orange-browns, steel blues, and military greens.

Although, Both palettes contain 256 individual color entries, where each entry points to a 24-bit RGB value. However, Quake 1 relied heavily on a fixed, software-rendered colormap table, Quake 2's engine natively supported higher color depth, dynamic colored lighting, and external high-color assets, I also had to ensure Surface flags were also set directly on faces so stone rang like stone and dirt behaved like natural earthwork.

💥 Working - Under Software Render Only with Crashes!

Once I’d wrestled the textures out via Wally, the next boss fight was finding a compiler that wouldn't choke on a map of this scale. Enter ericw’s experimental compilers - they finally delivered a glorious, successful compile! (Though I did have to sacrifice the massive field of grass objects cluttering the map... will I ever add them back in? Time will tell).


With the BSP in hand, the moment of truth arrived:


The OpenGL Wall: Firing it up under modern hardware acceleration using yQuake2 resulted in an instant, unceremonious failure.


The Software Mirage: Dropping down to the legacy Software Renderer actually let the map load into the engine... for about three chaotic seconds. It was glitchy beyond belief - with the sky ripping itself apart in a psychedelic nightmare - before flat-out crashing to desktop.


Still, seeing it load proved the geometry was sound. Now came the real cleanup.

☁️ Fixing Sky Map

First things first: dealing with that skybox-shredding glitch.

Sorting this out was straightforward once I swapped the broken assets out, using one of the built-in engine textures to correctly map and generate the sky. From there, I leaned into modern skybox concepts to give the original Makkon designed sky back from the original Quake 1 map - A proper backdrop instead of an infinite software meltdown!

🧹 Entity Wipe

With the software renderer finally behaving, it was time to confront the final boss: getting the map to actually boot under OpenGL. I threw the issue at the Quake Mapping Discord, but was met with radio silence (they focus mostly on Quake 1 maps I guess).

So, operating on equal parts blind guesswork and desperate optimism, I decided to just start gutting things to see what stuck. I performed a scorched-earth entity wipe—purging every single entity from the map—and then manually built back only the essential Quake 2 definitions from scratch.

Lo and behold... it actually worked!

Whether it was a rogue Quake 1 key-value, a corrupted property, or just pure engine voodoo blocking OpenGL from booting, I have no idea. But a win is a win!

🚀 OpenGL Works!

After the texture conversions, compiler experiments, sky fixes, and entity wipes, the hard work paid off OpenGL renders Donnington Castle flawlessly! Walking through the historic gatehouse under hardware-accelerated Quake 2 lighting is a fantastic milestone.

Quake 2 Conversion Progress Work

Screenshots documenting the Q2 conversion across texture passes, light compiles, and engine testing.

Quake 2 Conversion WIP Screenshot 1
Quake 2 Conversion WIP Screenshot 2
Quake 2 Conversion WIP Screenshot 3
Quake 2 Conversion WIP Screenshot 4
Quake 2 Conversion WIP Screenshot 5
Quake 2 Conversion WIP Screenshot 6
Quake 2 Conversion WIP Screenshot 7
Quake 2 Conversion WIP Screenshot 8


A Question of downloads

As I write this just after Halloween in 2026, I need to fix some of the additionally lighting and the transparency on some of the textures, I also need to look into how to allow access to the secret which was originally done via a teleport, which is how gone due to the lack of entity for teleports in Quake 2 or at least it might be my lack of knowledge on Quake 2 entities here

The map is like 95% complete and I will release this version as soon as I feel happy with it.

Madness!

Early Quake 3 Arena Experiment

The Quake 3 Arena Test-Bed

Fine! I admit it...

Alright, confession time: I haven't actually hand-crafted a dedicated Quake 3 Arena version from scratch yet. However, I did run across a wild Quake 2 to Quake 3:Arena Map converter and to my absolute shock, it actually worked, dragging the Q2 conversion straight into the id Tech 3 engine!!


Of course, automated conversion tools always come with a catch (or five):

  • Crispy Textures: The output spits out aggressively low-resolution textures.
  • The Generic Sky: It strips out the custom sky and swaps it for a generic fallback option.
  • Transparency Fail: Custom surface transparency vanishes completely.
  • Lighting Woes: It completely misses out on the nuanced, deep light-compiling that a proper build demands.


Right now, this is purely an experimental proof-of-concept. When I've got some spare time, I fully intend to build out a proper, native Q3 version. But in the meantime, this quick experiment gives you a fun taste of what's possible!

This is just an experimental version of the map, I will actually when I have time build the map properly, but this will give you some indication of what you can expect from the release.

Oh, and I cannot seem to get bot support working.... so that's even more reason to build it properly!

Quake 3 Early Version Screenshots

Early Quake 3 Build Screenshot 1
Early Quake 3 Build Screenshot 2
Early Quake 3 Build Screenshot 3
Early Quake 3 Build Screenshot 4


Downloads for Q3A version?

This version probably isn't suitable for download if I'm honest, however, if the demand is there, I may make this early version avaliable to the community so they can check it out!