Q2PRO-XQ2PRO-X websiteContentsRUEN
II. Developing the Client

Earth, a Black Hole and the Map’s Inhabitants

July–August 2026 · Q2PRO-X 1.5

Earth appeared beside the Moon in early July. Textures were prepared at 4K, 8K and 16K: the difference was barely visible on a distant disc, but enlarging it revealed detail across the continents. The planet rotated and remained an independent object. It could be seen alongside the Moon and Sun, so the old approach of merely replacing one sky picture with another no longer sufficed.

Testing quickly moved beyond the planet itself. If Earth covered the Sun, the solar disc could not remain drawn over it. The same applied to bloom, volumetric light and the final screen-space rays. Each layer took its own route through the renderer, so a correct shadow at one point did not guarantee a correct frame. Too broad a mask removed useful light along with the excess; too narrow a mask left a glow on the planet's surface. Several revisions were needed to reconcile the visible edge with the soft pattern of rays around it.

Light Around a Black Hole

The next object required a look at NASA visualisations. Around a black hole, the far side of the accretion disc seems to appear above the dark centre: light bends around it. The near and far sides differ in brightness because the hot material is moving, and narrow images of the disc appear close to the shadow. These features were studied in scientific materials. Drawing a fiery ring was easy; producing the recognisable arrangement in which part of the disc passes in front of the shadow and another part appears above it was much harder.

Existing graphics examples proved too expensive. One repeatedly traced a ray before calculating the disc and noise; across a full-screen image, the step count reached billions. Such a picture might be viewed on its own, but not used as the sky over a playable match. Scientific material supplied visual reference points, while the game's calculations were bounded. The result was a visual model of characteristic light distortion, rather than a complete simulation of general relativity.

The celestial scenery brought real astronomical data together with graphical approximations for a game. The black hole had to work with the sky, map and reflections.
The celestial scenery brought real astronomical data together with graphical approximations for a game. The black hole had to work with the sky, map and reflections.

The hardest part came when the existing sky entered the distorted region. A star had to move, be covered by the shadow or disappear; its old copy could not remain with another drawn on top. Earth, the Moon, planets, clouds and luminous objects were checked separately. Water and puddles added another view of the same scene. If a reflection drew the sky differently, the black hole could become two different objects in the main view and underfoot. Distortion, shadow and emitted light therefore had to agree across several passes.

Later, the black hole could capture matter: meteors and comets changed course, stretched and vanished, while solar plasma formed streams. A mundane bug emerged from the spectacle. If the black hole itself moved, a captured object could chase it forever. Capture duration had to be bounded. Passing spacecraft added further checks: their appearance, reflection and sound had to fit everything else happening in the sky.

Materials and Vegetation

Walls and floors were changing meanwhile. Original textures gained three-dimensional details, cracks, plants and seasonal materials. Geometry determined where they belonged: the old map authors had left no instructions about where future grass might grow. Mistakes needed no diagnostic numbers—a plant protruded from a wall or floated over a step. Every placement change meant another walk through familiar levels.

Familiar Quake II architecture with new surroundings. Map geometry remains the foundation; extra materials and vegetation have to fit it.
Familiar Quake II architecture with new surroundings. Map geometry remains the foundation; extra materials and vegetation have to fit it.

In August, a tester disabled materials, loaded a map and turned them back on. They did not appear. Four more fixes followed the first: real faults disappeared, yet that sequence still failed. Eventually, the investigation reached the surfaces' auxiliary data. Disabling the system freed it, but enabling it did not recreate it. Start the test with materials already on and the client seemed perfectly healthy. After the discovery, testing followed the exact failing sequence: load with materials off, then enable them on the running map.

Wildlife and Snakes

The map's creatures gained turns, pauses, visibility rules and interaction with their surroundings. Eighteen independent switches affected their behaviour—262,144 possible states. Automated runs exercised millions of transitions and found settings being lost. Yet a snake could survive every switch correctly and still move unconvincingly. That required ordinary observation: watching how it chose a route and went around an obstacle.

Free World let people linger in a map without immediately looking for an opponent. They could change the environment, watch its inhabitants and explore the geometry; training with monsters on DM levels developed alongside it. Settings could strip that richness back for a network duel. Movement at the edge of the screen is interesting during a walk, but easily mistaken for an opponent during a match.

Allowing snakes to attack exposed the boundary between two parts of the game. A decorative animal exists on the client; the server calculates health and damage. A link to a game entity was added for optional snake combat in local single-player. Collisions checked that it was still the same entity: a freed number might already belong to another object. On a remote server, a decorative snake gained no power to interfere with the match.

Local modes offered different uses for old maps and monsters. Their gameplay rules were kept separate from the client-side effects of online play.
Local modes offered different uses for old maps and monsters. Their gameplay rules were kept separate from the client-side effects of online play.

Even a snake's death mark exposed quirks of the old renderer. If it died beneath opaque water, a stain on the bottom could not be seen. Blood had to reach the water surface, fit its boundaries and move with its waves. Transparent and opaque water were drawn at different stages but remained the same medium. Surface detection was therefore tied to the real water volume, not the picture's transparency. In a narrow pool, the mark needed clipping at the banks so it did not spill onto nearby floor. These cases later helped with the general contact-effects system.

Why Loading Took Minutes

All these changes increased the number of graphics programs needed before drawing. On one output path, compiling shaders from cold took about 153 seconds. Initial changes reduced that to two minutes—still far too long. The large set had to be divided into families, account for different output buffers and prepare the required combinations in advance. After the rework, the measured scenario took about forty seconds on first launch and half a second with a populated cache.

A repeat launch with the cache initially looked fast, but the game then stopped for another six and a half seconds. A forgotten variant without bloom was being compiled on first use, after the map had appeared. From then on, timing did not stop at the end of loading. Testing continued through play and settings changes, while lighting, materials and reflections were compared with their previous appearance.

The public Q2PRO-X 1.5 package arrived on 25 August, with 22 Russian and 22 English guides. It was checked in a clean folder. A working installation could conceal a missing asset, an accidentally saved setting or an incomplete preset; a new user had none of those reserves. Even a catalogue containing hundreds of variables could be silently truncated. Once the package had been checked and published, work moved to Q2PRO-X 1.6.

Download the book in PDF