Files
iw4L/docs/PRESENTATION.md
vtroc7 acc57a5c9d Make underbarrel attachments work across families, bound transport and qualify match publication
- Underbarrel attachments work across IW4, IW5, T5 and T6, including
  per-family impact FX, T5 flamethrower streams and T6 launcher fuses.
- Viewmodel notetrack sounds play in third person.
- Transport operations and queues are bounded; Quinn congestion control
  returns to its default.
- Match publication, presentation context and prepared content semantics
  are qualified and validated; cosmetic and entity occurrence lifecycles
  are preserved.
- GPU skinning batches within supported device budgets.
- Immutable UI projections and correlated class replies are reconciled.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 16:28:56 +03:00

3.5 KiB

Presentation publications

render_fx::PresentedFireFx owns receipts for one world and replay timeline. A receipt identifies a fire cause and product, with pellet/segment identity for tracer, impact, glass and marks. Positions, normals, surface and target are result data. Authority replaces that data; conflicting authority is refused.

product prediction authority
muzzle/brass create when available retain success or retry refusal
tracer/transient impact create when available retain success or retry using authoritative result
marks defer schedule mark emission once
glass defer evaluate authoritative segment once, including zero hits
execute admits scope/verdict/budget before invoking creation. It records
success after creation returns. Dependency and allocation refusals remain
retryable; intentional tracer interval skips are terminal. Marks report
Scheduled, separately from Created: a scheduled effect can later encounter a
receiver/material refusal in the mark subsystem.
Impact effects carry Transient or Marks emission policy through runners,
emitted children, impacts, deaths and trails. Transient effects cannot emit
decals; Marks effects simulate child motion without drawing particles,
models/lights/trails or playing sounds.
Expiration runs once per presentation frame, including idle frames. Receipts and
tracer shot decisions retain a 5000 ms horizon; the receipt bound is 8192
products. Saturation refuses admission rather than evicting recent successes.
World/timeline replacement or clock rewind resets the scope; i32 wrap remains
legal. Late delivery after expiry may create a fresh product. fx_dump reports
scope/time, product budget refusals, receipt size/capacity and sweep costs.
asset_material::UiImagePublication owns material mappings, preview policy,
zone payloads and archive indices. Shell/match installation selects privately
prepared products. A late shell completion cannot replace an installed match.
HUD caches and class/loading previews adopt publication identity. Shell previews
use this publication; gameplay archive image plans begin with the first match
and remain shared. Menu overlays replace maps and caches when menus change.
Installation revisions cover relevant file metadata, following game symlinks.
Unix revisions also include inode/change time. A new load checks the revision;
there is no automatic file watcher. Archive indices retain opened readers, so
atomic file replacement preserves old readers for referenced publications.
In-place corruption is refused through archive length/CRC validation.

EditorWeaponCatalog exposes map-independent selection and class admission; it cannot be installed as PreparedWeapons. Match admission additionally checks prepared FPV assemblies and map-selected hands. Appearance selection keeps NativeReady, BaseByPolicy and DeclaredUnavailable separately for view and world models. Render consumers retain refusal reasons and do not replace a declared unavailable model with the base weapon.

Accepted pellet impacts publish independently of FX, keyed by installation, timeline and shot/pellet/segment. Replay reuses retained snapshot metadata; a retention gap restores the cosmetic checkpoint before applying retained occurrences. Corpse identity includes an authority spawn sequence, and corpse equipment/team appearance is captured at death. Cosmetic physics keeps its canonical hull and mask during recovery; incomplete collision refuses activation. FX pieces freeze analytic spin only after supported low motion; angular torque is not simulated.