This matrix is the working acceptance baseline for the remaining compatibility
release. PASS means that the named evidence is executable and deterministic;
it does not imply that adjacent behavior is complete. Retail scenarios read
only legal, user-supplied Quake II data and never copy it into the repository.
| ID | Scenario | Current evidence | Status | Remaining parity gate |
|---|---|---|---|---|
| P01 | base1 load, signon and first frame |
--play <root> base1 1; client active, models/sounds complete, world PVS submitted |
PASS | manual input/device sweep |
| P02 | Player move, look and all stock weapons | weapon/ballistics goldens plus exact view-weapon offset/angle/frame interpolation, BSP/dynamic per-vertex alias lighting with UserCmd lightlevel feedback, 3.19 planar world-alias shadows with view-weapon/translucent exclusion, persistent live right/left/center handedness, custom third-person model/skin/visible weapons, 3.19 temp-entity, layered muzzle-sound, monster-flash, trail/teleport/Steam/Widow/Nuke particle-family, moving snapshot projectile-trail/light and fixed-pool lifecycle goldens | PASS (mechanics/client protocol feedback) | paired original view-model/recoil pixel capture |
| P03 | Dense bunk1 snapshot |
39-map session smoke; 64-entity packet cap and adaptive packet budget | PASS | paired original snapshot/delta trace |
| P04 | waste1 brush, water, MD2 and alpha rendering |
paired installed-original ref_gl gate: 2,303 ppm MAE for world/water/MD2; deterministic Mini replay; grounded base1 shadow-toggle isolation changes 2,058 pixels with invariant world/brush/MD2 counts |
PASS (differential) | broaden cameras, GPUs and alpha/inline runtime states |
| P05 | Stock monster frame sequencing | attack/ranged/melee with exact attack movement and mechanical sounds; collision-bound ground/step/fly/swim movement; eight-marker lost-sight PlayerTrail; 63 pain/43 death plans covering all 1,813 movement frames; stock frame sounds, Infantry/Soldier death fire, boss explosion entry, sight/search and all reachable secondary locomotion/fidget callbacks; exact Medic resurrection; live misc_actor; live MZ2 and beam chains; corpse bounds and physical gibs |
PASS (stock tables/callbacks/movement) | paired original full-encounter trace |
| P06 | Save during an active monster sequence | Private-Save v18 attack/reaction, held death-fire frame, boss aim/refire, shared-random, Medic owner/old-enemy, live turret sight/cooldown, lost-sight pursuit, environment/power-armor, gravity/push, water state, player item-rule/cooperative checkpoint and chat-flood fields; dynamic World references, boss persistence plus live-gib/dropped-item round trips; older readers retained | PASS | strict original native machine-layout saves remain explicitly rejected |
| P07 | boss2 endgame |
Jorg staging, exact Jorg/Boss2 death-explosion entry, Makron successor, counter and changelevel with persistence | PASS | paired full-encounter weapon/audio trace for both bosses |
| P08 | Multiplayer deathmatch | all 11 stock weapon modes through real UDP UserCmds; Protocol-34 use/weapon/inventory/drop, chat/team/flood, score/help/players/playerlist, kill/wave and gated cheat commands; bilateral projectile model/sound snapshots; userinfo rate clamp/SV_RateDrop; scoring/respawn, spectator transition, maplist re-signon, four-client soak, server admin/RCON/master lifecycle and functional Join/Start/DM-options UI |
PASS (local functional matrix) | remote-host/device soak belongs to P12 |
| P09 | Two-player cooperative play | shared item/reconnect, skill 0/3, teammate damage, plus 39-BSP/51-goal-transition route with 39 live two-player checkpoints | PASS | functional local gate complete; remote-host/device soak belongs to P12 |
| P10 | Complete single-player map lifecycle | direct 39-map transport smoke, 39-map physical input/PMove/weapon/snapshot entry matrix, plus 39-unique-BSP/51-change goal route through keys, counters, timers, triggers, deaths, bosses and victory.pcx |
PASS (physical entry + goal graph) | full corridor navigation, combat clearing and item-resource playthrough |
| P11 | Original Protocol-34 process interop | independent bidirectional raw peer passes; the external-process harness validates the exact 3.20 image, detects distribution-client redirection and cleans up replacement processes | PARTIAL | this Steam build redirects the classic image to the protocol-incompatible rerelease; an isolated copy is rejected by Steam DRM, so the same harness must run with an unwrapped original image on a compatible host |
| P12 | Release/package/device acceptance | current 192-program Release matrix, Debug product graph, byte-reproducible/extracted-smoked packages, RTX-5080 fullscreen restart, native default-device cinematic, deterministic controller/focus/gamma/audio gates, 100,000-frame/212,822-packet retail session soak with zero rejects or pending sounds, and the 47-map/500-frame-per-map Release FPS matrix | PARTIAL (local RC complete) | second-host GPU/audio, physical hot-unplug, attached-controller/manual latency and compatible-host original process |
| P13 | Retail cinematic, demo and intermission playback | stock d1 attract loop; *ntro.cin+base1; product --cinematic completes idlog.cin; both installed DM2s complete; one shared host executes DM2/map and installed unit/end chains; --play consumes validated queued gamemap |
PASS (product chain) | paired original demo timing/pixel trace on compatible host |
| P14 | Product menu, inventory and volume | stock attract loop interrupted by any input into the persistent main menu, live mode restart, versioned persistent config/key capture plus in-memory map handoff, difficulty-aware *ntro.cin+base1 New Game, durable same/cross-map slots with metadata/screenshots, Join/Start Server and DM options, rotating 3D Player Setup preview, Reset Defaults, Go to Console, single-player pause, hardware gamma, settings/quit, inventory and mixer gain |
PASS (local functional matrix) | paired original UI capture and external-device evidence belong to P12 |
The data-driven sequence layer follows the original 0.1-second game frame and
uses the original MZ2 identifiers. All integrated selection and refire paths
consume the original shared Win32 CRT stream, whose state is persisted so a
save/reload resumes the same branch and refire sequence. Live callbacks now
cover Gunner, Medic, Chick, Flyer, Hover, Tank, Soldier, Supertank, Jorg and
Boss2, plus the Brain follow-up and Mutant jump decisions. This block schedules weapon callbacks at the original relative
frames and projects every attack timeline onto its stock MD2 frames. A companion
reaction/movement layer contains 63 pain variants, 43 normal-death variants,
all 1,813 corresponding movement frames, the stock duck/dodge ranges for six
families, and stand, idle, walk and run ranges for all 22 combat entries. Live
frame callbacks cover the complete reachable secondary fidget/locomotion
inventory, reaction/death sounds, Infantry/Soldier death fire and the exact
Supertank/Boss2/Jorg explosion-entry frames. Death terminals apply per-class
corpse bounds, exact per-family gib model/count inventories, timed exported gib
edicts, immediate flying-monster explosions and the eight-stage boss
explosion/final-gib chain. The remaining gate is a paired original full-
encounter trace rather than a known missing stock movement or callback table.
The live locomotion boundary is no longer a direct transform: the shared
m_move.c port traces BSP/inline/dynamic hulls, maintains ground and water
state, touches triggers, and follows the eight-marker PlayerTrail after losing
line of sight.
| Family | Implemented sequence |
|---|---|
| Infantry | attack111 wind-up and 10–25 held machinegun frames, MZ2 26 |
| Gunner | 7-frame open, MZ2 45–52 chain with live 50% refire; four-grenade MZ2 53–56 alternative |
| Light/shotgun soldier | both stock attack layouts, live next-frame refires and their distinct MZ2 39/40 and 41/42 positions |
| Machinegun soldier | attack403 hold for 3–10 shots at the correct fourth position, MZ2 88 |
| Jorg | paired left/right six-frame machinegun cycle, MZ2 120/126, live 90% refire |
| Boss2 | paired machinegun loop and simultaneous four-rocket MZ2 78–81 frame |
| Makron | BFG, 17-frame hyperblaster and saved-position rail alternatives |
| Medic | stock blaster/refire plus strongest visible corpse claim, 28-frame cable movement, nine TE_MEDIC_CABLE_ATTACK beams and in-place patient resurrection |
| Gladiator/Tank/Chick/Flyer/Floater/Hover/Supertank | stock ranged wind-up, live burst/refire, saved Gladiator rail aim, muzzle order and MD2 frame projection |
| Berserk/Infantry/Flipper/Chick/Flyer/Brain/Floater/Mutant | stock close-combat loops, conditional Brain chain, physical Mutant jump, event damage and MD2 frame projection |
| Parasite | 18-frame drain move, first/subsequent damage split and ordered TE_PARASITE_ATTACK beam handoff |
Private-Save v17 persists attack/melee/pain/death counts, reaction debounce,
live refire cycles, saved Gladiator/Makron aim, Mutant jump state, the shared Win32 random seed,
monster AI flags and stable old-enemy/owner references, plus the in-flight
nextFrame, pauseTime, attackState, last sighting, saved/temporary goal,
trail/search time, yaw, velocity, air/damage debounces and power-armor state.
World/player records additionally retain per-entity gravity, trigger-push
prediction/sound debounce and toss/bounce water type/level. World records also retain
the flags, damage/clip/gib state and trail/cooldown fields used by a live turret
driver. A restored attack or
reaction therefore resumes at its next event rather than restarting or
silently collapsing to one shot; dynamic gib and dropped-item entities retain
model, physics, ownership and expiry across a level save, and an active Medic cable resumes against
its reserved patient instead of losing or duplicating the resurrection.
The v10+ world payload length-prefixes the complete retail entity text instead
of using the network string limit, reconstructs dynamic DelayedUse and gib
edicts, and restores activator/owner/team/target/enemy/ground references by
stable edict number. The v17 reader remains compatible with v7-v16 payloads.
The managed player path now follows the stock p_weapon.c fire boundaries for
Blaster, Shotgun, Super Shotgun, Machinegun, Chaingun, grenade/rocket launcher,
HyperBlaster, Railgun, BFG10K and the special cooked hand grenade. Golden tests
cover the Shotgun pump frame, BFG wind-up and late ammo recheck, held/released
Machinegun and HyperBlaster loops, all three Chaingun burst stages, infinite
ammo, handed muzzle projection, recoil, silencing and hand-grenade cook/release.
The product callback follows the original Win32 C-runtime rand sequence from
seed 1. Bullet and pellet spread, grenade impulse, Machinegun/Chaingun recoil,
BFG damage roll and Rocket Launcher's 100 + random()*20 direct damage consume
the same ordered 15-bit values as the original 3.19 Windows game-DLL path;
fixed Golden vectors guard the seed, state and first eight outputs.
Every real shot emits Protocol-34 player muzzle flashes and appropriate impact,
blood, armor-spark, splash, bubble, rail, explosion and BFG temp entities.
Managed moving projectiles own reusable engine edicts with the stock model,
effect and loop-sound fields. Late model/sound configstrings are delivered
reliably after sign-on and registered into the live client asset generation; a
real two-client UDP gate observes a live Bolt, its indexes and matching
configstrings in both clients before the normal seven-shot Blaster kill. Remaining evidence
is visual/differential rather than a known missing player-weapon family: paired
original view-model/recoil pixel captures. Functional view-weapon interpolation,
left-projection mirroring, center suppression and live Game-API handedness are
covered. The
separate rotation gate changes a connected spectator back into a solid player
through reliable clc_userinfo, reaches a frag-limit intermission, consumes
the queued gamemap, re-signs both clients on the successor map without
rewinding either Netchan, and then runs 500 additional server frames without a
rejected packet.
runtime.multiplayer_session now accepts a bounded 2–8 clients rather than
hard-coding two. The four-client acceptance fixture proves distinct server
slots and complete snapshot visibility, recovers simultaneous signon
telefrags through the normal force-respawn path, drives every Netchan, drops
and reconnects two peers, preserves all eight client/server channel objects
through a same-map four-player checkpoint, changes map without rewinding any
sequence and completes a 500-frame steady-state tail. Late classic
three-disconnect bursts are bounded before the tail; no additional packet is
rejected during steady state. The 4-MB-GC run processed 6,330 received and
6,323 sent datagrams; the four counted rejects are only the bounded stale
disconnect bursts preceding the clean tail.
runtime_multiplayer_all_weapons_tests equips each stock weapon only as test
setup, then requires the actual attack to travel through a decoded UDP UserCmd.
Blaster, both shotguns, Machinegun, Chaingun, both launchers, HyperBlaster,
Railgun and BFG produce bilateral muzzle handoffs; the cooked hand grenade
becomes a networked hgrenade visible in both snapshots. Every ammo cost and a
300-frame post-matrix soak are checked under both normal and 4-MB GC limits.
No known stock base-game callback remains open in this matrix. Remaining work is acceptance evidence rather than an identified implementation family:
- Run a normal human-driven 39-map campaign playthrough.
- Broaden the passing original
ref_gl, view-model and encounter differentials across cameras, GPUs and runtime alpha/inline states. - Run original-process interoperability on a compatible Windows host.
- Complete second-host audio/GPU, hot-unplug and manual input-latency gates.
- Preserve the closed save, coop, deathmatch, menu and performance matrices.
Every block must leave its focused native test, adjacent regressions, project syntax/inventory, Release build and relevant retail smoke green before it is marked complete.
The current local Release/Debug/package evidence is recorded in
RELEASE_ACCEPTANCE.md. P12 remains partial only for
the explicitly hardware- or external-host-dependent gates listed there.