Skip to content

Latest commit

 

History

History
152 lines (134 loc) · 14.3 KB

File metadata and controls

152 lines (134 loc) · 14.3 KB

MiniQuake2 Playability and Parity Matrix

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.

Reproducible scenarios

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

Current attack-sequence coverage

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.

Current player-weapon coverage

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.

Closure order

No known stock base-game callback remains open in this matrix. Remaining work is acceptance evidence rather than an identified implementation family:

  1. Run a normal human-driven 39-map campaign playthrough.
  2. Broaden the passing original ref_gl, view-model and encounter differentials across cameras, GPUs and runtime alpha/inline states.
  3. Run original-process interoperability on a compatible Windows host.
  4. Complete second-host audio/GPU, hot-unplug and manual input-latency gates.
  5. 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.