crazykickboxer

/ vkQuake fork / Windows x64

Particle Quake: Aftershock

Overview

Quake, rebuilt out of light and rubble

Particle Quake: Aftershock is a Windows x64 fork of vkQuake, the Vulkan Quake source port descended from QuakeSpasm-Spiked. It redraws supported world and model surfaces as dense particle samples, reconstructs them through a neon fidelity pass, and adds a separate PhysX and Blast sandbox in which rockets permanently break eligible walls.

Two systems do superficially similar things and are deliberately kept apart. Holo Physics is a renderer-owned GPU disturbance layer: combat pushes luminous points around and a critically damped spring pulls them home. It is cosmetic, and it never touches Quake's simulation, networking, collision, AI, damage or QuakeC. The destruction sandbox is the opposite. It runs CPU PhysX with Blast, it permanently removes structural cells, and the rubble it leaves is solid enough to block a doorway.

Because of that, world mode is a deliberate choice rather than a quality slider. Faithful keeps native visibility and collision, and is the mode for campaigns, demos and multiplayer. Destruction is a local single-player sandbox, restricted on purpose, because breaking campaign architecture can bypass progression.

The renderer and the world mode switch independently. r_holo 0 returns to stock vkQuake rendering, though it does not heal a world you have already broken; that needs faithful mode and a reload.

Specification

Tech spec

Particle Quake: Aftershock technical specification
Host enginevkQuake, QuakeSpasm-Spiked lineage
PlatformWindows x64, MSVC Release, Visual Studio 2022
GraphicsVulkan and GLSL
Surface samplesTwo 16-bit face-local texture coordinates packed into 4 bytes
Encoding error1/16 texel per axis, maximum
Face metadata96 bytes, six float4 values, in a device-local buffer
Model samples16 bytes per MDL sample, GPU keyframe interpolation
VisibilityCPU surface and frustum tests, per-face instanced draws
Structural physicsCPU PhysX with Blast, 120 Hz, 32 Quake units per physics unit
Appearanceas_style 0–13, as_structure 0–10, as_layers 1–4
PostRGBA16F scene, four-scale HDR bloom, temporal reconstruction, screen-space floor reflections
Capacities8,192 structural chunks, 512 inferred panels, 64 pending explosion events
Off switchesr_holo 0, r_holo_physics 0, as_reflections 0, as_gibs 0
LicenceGPL-2.0-or-later. Quake game data is user-supplied and ships with nothing

Features

What it does

  • Layered particle surfaces. Ten structure modes give real disc and mesh silhouettes rather than squares: discs, spheres, angular chips, cubes, closed flakes, splinters, curved ribbons, lobed blobs, hollow toruses and mixed debris. Placement is deterministic and irregular, across one to four independent depth layers.
  • The Neon Cathedral preset. Cyan and gold emissive grains on BSP boundaries, magenta silhouettes for monster models, darkened sky, filtered grains, HDR bloom, temporal reconstruction and optional screen-space floor reflections.
  • Progressive destruction. Rockets chip eligible walls and weaken their structural bonds instead of deleting a whole panel on the first hit. Metal is tougher than stone, wood is weaker, and connections to permanent geometry are reinforced. Unsupported sections drop as one compound body, then break apart again as further bonds fail.
  • Real PhysX, not an approximation. The SDK builds from source with genuine actor motion, contacts, sleeping and repeated damage, and there is no fallback integrator hiding behind it. Rubble above the 250-unit mass threshold stays a substantial obstacle.
  • Holo Physics. Traveling blast fronts, inward suction and damped spring recovery, with reflected impact cones and hot flashes. Monster models leave a GPU snapshot on death that dissolves, with the core fading last.
  • Directional gibs and goo. A fixed 120 Hz cosmetic simulation with swept collision against walls, moving brushes and live PhysX rubble. Floor drag makes chunks slide and settle. Splashes are clipped to the struck face and revalidated against the geometry holding them, so marks vanish when their wall opens.
  • Saves that remember the damage. A normal Quake save is paired with a versioned, checksummed structural sidecar holding event history, bond health and exact body poses. Wrong map, bad schema and corrupt data are all rejected rather than loaded.
  • Everything switches off independently. Renderer, world mode, reflections, fidelity, gibs, goo, nails and reactive physics each have their own control, live in the console or in the launcher.

Destruction

What actually breaks

Eligibility is deliberately conservative. The extractor pairs matching axis-aligned rectangular BSP faces, requires 4 to 64 units of thickness and at least 48 units across, samples solid contents at five depths and at every cell corner, and confirms open air beyond both exterior faces. What survives that is subdivided into roughly 24-unit cells. Vertical panels anchor along their base, horizontal slabs around their perimeter.

These are inferred structures, not recovered editor brushes. Simple interior walls, rectangular pillars and thin raised bridge slabs qualify. The outer shell of the map, the main floor, low steps, sky, liquids, slopes and anything ambiguous stay protected.

Three console variables shape it: as_progressive enables the damage model, as_rocket_hits sets nominal toughness from 2 to 12, and as_chip_radius sets the local damage radius from 24 to 160 Quake units. Broad walls shed a small chip on the first hit. Narrow load-bearing structures resist that first chip, so an entire support cannot vanish to one rocket.

What has been verified: real rockets remove panel 9 in e1m1 and the player walks through the gap in both renderers. In the original test arena, 43 of 77 cells detach. A three-cell tower drops as one unsupported compound and then breaks into three moving bodies. A generated arena yields five eligible structures and 129 chunks, with the shell, main floor and low steps correctly excluded.

Appearance

Fourteen styles

Styles control colour and material behaviour, and are separate from the structure modes that control silhouette and layering. They change live through as_style, with no map reload. Every one applies to opaque BSP walls and floors, moving brushes and structural rubble, and each brings a matching explosion effect that works in either renderer.

The four original styles are 0 Faithful, 1 Enhanced, 2 Inferno and 3 Inferno Color. This site is named after that third one. The ten animated materials that follow are Living Stone, Volcanic, Sandstorm, Crystal, Corrupted Flesh, Industrial Rust, Spectral, Frozen Ruins, Electric Grid and Cosmic Dust.

Volcanic breathes orange seams through a dark crust and sheds rising embers. Crystal grows diagonal luminous veins and throws rotating shards. Electric Grid runs charge along surface channels and arcs in blue segments. Cosmic Dust drifts nebula bands and expands in rings. They are appearance controls, not separate fracture solvers: the collision geometry and source textures underneath never change.

Effect density has four levels, from 2,048 GPU burst particles per full explosion up to 8,192, with matching surface mote budgets from 6,144 to 24,576. Those are bounded submitted instances rather than a promise that all of them are alive at once, capped at 32 burst emitters and 48 visible surface emitters.

Measurements

Measured, not estimated

Windows x64 Release, CPU PhysX, Enhanced style, Mixed Debris Cloud, three layers, Play density, Cinematic preset. 1920x1080 windowed, v-sync off, host cap 60, threaded renderer, capture disabled. Reference GPU is an RTX 2050.

Measured engine throughput by scenario
e1m1 rockets, classic56.7 host fps, 16.7 ms p50, 6.9 ms GPU mean
e1m1 rockets, particle54.6 host fps, 16.7 ms p50, 16.4 ms GPU mean
start, synthetic explosion60.1 host fps, 16.7 ms p50, 11.8 ms GPU mean
e1m2, synthetic explosion53.8 host fps, 18.4 ms p50, 17.9 ms GPU mean
e1m3, synthetic explosion60.0 host fps, 16.7 ms p50, 5.3 ms GPU mean
PhysX step0.37 to 0.45 ms mean across all five
PhysX errorsZero in all five scenarios

These are short engine-frame measurements, not presented frame rates. The 60 presented-fps target, isolated GPU pass costs and total VRAM budgets remain unverified. PhysX allocator figures exclude Blast, Quake and graphics memory.

Honesty check

What is not implemented

This build implements and verifies the central wall-breach experience. It is not a finished product, and the gaps are published rather than glossed over.

  • No fully indirect GPU world-culling pipeline. Visibility is CPU surface and frustum testing with per-face instanced draws. Compute culling, GPU compaction and indirect draws from GPU-written counts are not implemented.
  • No PhysX GPU path. CPU PhysX only. GPU execution and interop are explicitly rejected, and there is no CUDA path. The CPU path has been tested on an RTX 2050 and not yet on AMD or Intel graphics.
  • Fracture is a box grid. Deterministic cells with density heuristics for stone, metal and wood. No Voronoi hierarchy, no glass authoring, no wood-grain patterns.
  • Sky, liquids, sprites and translucent models are not converted. They keep native vkQuake rendering.
  • Reflections are screen-space. There is no off-screen mirror scene and no ray-traced reflection system. Temporal reconstruction can keep shimmer or disocclusion artifacts.
  • Holo collision is approximate and static. Moving platforms are not in its collision grid, and thin walls and corners are approximate at grid resolution.
  • Compatibility is not certified. Mission pack and mod selection exists, but broad campaign progression, crushing, monster pushing and mod-specific interactions are not comprehensively validated.
  • No photomode, no fracture disk caches, no automatic splitting of oversized sample patches. Oversized faces are rejected rather than overflowing.

The project's own feature table is the authoritative version of this list and ships with the build.

Media

Gallery