The Donnington Project
Recreating 14th-Century Berkshire Ruins in a 1996 Engine.
The Engine & The Budget
Before we continue, lets discuss about Game Engines, The original Quake has been well supported over the years by the game modding community and this has included many aspects of the features and enhancements, one has included creating custom game engines to meet new technology needs. Think of a Game Engine as the "executable brain" of the game. It is the core program that takes raw data maps, 3D models, and stone textures and translates them into the images you see on your screen. It handles everything from the way the Berkshire sun hits the towers to how the game responds when you move your mouse. Essentially, it is the stage manager for the entire digital performance.
However, the original 1996 engine comes with strict Engine Limits - essentially a rigid "memory budget". It can only track a specific number of "brushes" (the 3D blocks used to build the castle) before the world breaks. If I try to make a ruin look truly realistic by adding hundreds of tiny, jagged stones, I quickly "overdraw" that budget, and the engine simply refuses to load the map or crashes entirely.
Why use a Modern Client?
Modern "source ports" like AfterQuake or FTE QW act like an upgraded brain. They vastly expand these invisible budgets, allowing for complex geometry and smoother lighting that 1996 software could never process. By using a modern client, you see the historical detail I intended like the intricate flint-work without the "Object Limit" errors that would have stopped a 90s computer in its tracks.
Donny6
Snapshot Date: 5 June 2024
So, at this point, we had the main stucture, we had the hill but I wanted to reflect the valley of Newbury and Thatcham that you can see from the castle, to do this I used a background tile that I believe came from another game to give the effect I was after. I also began to add additional grass nodes to indicate using the func_illusionary 1px depth class, this was where I may have gone a little overboard and began to cause issues with some of the game engines that had lower limits
Donny9
Snapshot Date: 9 June 2024
So, in the 4 days between Donny6 and Donny9, I experimented a lot with how i was going to render the grass, I removed some of the single func_illusionary grass elements and replaced them with a "strip" of grass that did the same thing, this ended up being rejected due to the fact I could not line up a longer strip of grass horizonally due to the nature of the hill elements. This was soon reverted. It was also during this time I looked at implemented shillotees of trees in the background that would add more depth to the map. You can see this in the screenshot below
Depth of vision removes the join in the sky.
This was always a concern of mine when looking at the map in game, If you are trying to replicate the feel that someone is emerged in an environment, you need to ensure that they feel enclosed - one huge issue was that the sky never looked correct and had a "event-horizon" style texture feel where the angles of the map joined by adding in tree lines this stopped this experience from happening - The screenshots show this join as it's taken direct from the render seen in J.A.C.K.
DonnyA
Snapshot Date: 16 June 2024
A few additional days later and You can see i'm adding in a "vertical arch" to pin-point the end of the grass line, this is the maximum level the grass will come up to the top level of the castle, This will be removed later. I am also planning any of the additional paths that go through the grass as seen from arial shots.
Expert Note
I have included a quick overhead shot of the castle on the left, from here you can see what i mean, the grass is mostly trimmed near the castle ruins and is much longer futher out as it rolls down the hill, I wanted to ensure this was kept so added the vertical arch to the floor as a nature trim line so to speak. You can also see additional footpaths from this view.
The BSP Evolution
In the world of Quake, a map isn't just a 3D model; it's a compiled Binary Space Partition (BSP) file. As the Donnington Project grew in complexity - transitioning from simple gatehouse sketches to forensic flint-work - I had to navigate the strict versioning of these formats.
Legacy BSP Version 29
The original 1996 standard. Up until the early DonnyC3 snapshots, this was the format used. It is incredibly stable but has hard-coded "ceilings." If a map exceeds 32,767 planes or nodes, the compiler simply fails. This is the "Engine Limit" of the original Quake maps used in ealier engines including the original DOS and WinQuake Engines from the late 90s / Early 2000s.
Modern BSP2 Format
Modern source ports like Ironwail and Quakespasm support the newer BSP2 format. It removes the 16-bit integer limits of the original, allowing for maps of vast scale. This format is what allows the current builds to feature thousands of high-detail models without crashing the renderer.
DonnyC3
Snapshot Date: 2 July 2024
So at this point, I'm naming the files with a Letter followed by number, and DonnyC3 is an intresting one. At this point, I'm adding in the backroad behind the castle and I've added a car that will be set to move along the road, there is also a gate and a fence which I am adding - This is all based again on airel photos
DonnyD6
Snapshot Date: 5 January 2025
We are skipping quite a few versions here to DonnyD6 as small incremental changes are made throughout late 2024, until this point, firstly, some additional rock prefabs have been added to increase the feeling of the hill, the grass elements have been increased to the corners and work has started on building the secret!
We start hitting limits...
So adding in so many func_illusionary grass elements means we're hitting the limits for even the top level modern engines, I'm going to have to scale these back soon, the grass with have to be a little bit patchy
DonnyD9
Snapshot Date: 27 March 2025
All the grass is completed! We've also improved the gateway ruin and we look to be finishing up the majority of the scentic elements - Well, we may need to review this later and clean up the large number of func_illusionary grass elements so it will run under more engines