Renderer (dpl3-revive/patha): - Instance visibility honored at DRAW time (stored word 4 = live dpl_SetInstanceVisibility field): laser beams (4-frame pulses) and missile models now render; cache tags w3 0/1 instances 'gated' - PSFX world bursts (dcs=0 muzzle/impact/explosion) rendered; psfx storage list-based so one-shot bursts stop collapsing onto one key - fix_degenerate applied to INSTANCE chains (was camera-only): the beam chain rides four rank-2 rig DCSs; composed rank-2 drew beams away from the guns. Offline f1635 now shows both arm beams converging on the aim point - First-person canopy cull: the always-armed cockpit model at the head drew as a vertical line down screen center (user-confirmed fixed live) Device (vpx-device/vpxlog.cpp): - CAM backchannel on the fifosock: bridge streams its validated camera (+ vehicle root DCS); raycast_pick aims along the player's real look instead of the static view-node pose, which had locked every missile/beam onto one fixed wrong world point - raycast_pick skips hidden-until-armed instances and the player's own articulation subtree: picking own beams created a target feedback loop, picking own missiles retargeted salvos mid-flight, and a picked missile's deleted DCS froze the game (arena2 crash) Sound (vpx-device/vweawe.cpp): stereo-linked peak limiter replaces the hard output clamp (the "generator out" crackle); VWE_AWE_LOG reports pre-limit peaks + duck counts, enabled in launch_pod.ps1. Missile-fire crackle persists: per-voice EMU8000 clamp suspected. Eggs/confs: TESTAR2.EGG + gauge_arena2_sound.conf (map=arena2 city variant); cavern.egg (console-era reference); plasma display on COM2 in the gauge confs; gauge_arena_net_sound.conf (slirp net stack). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
88 lines
4.6 KiB
PowerShell
88 lines
4.6 KiB
PowerShell
# Launch the full pod experience: DOSBox-X pod (pentapus 7-display explode
|
|
# mode + dual-AWE32 sound) + Dave's GL renderer bridged to the live wire.
|
|
#
|
|
# .\launch_pod.ps1 # restart pod + bridge (stops previous run)
|
|
# .\launch_pod.ps1 -NoSound # skip AWE32 (saves the ~4 min SBK upload)
|
|
# .\launch_pod.ps1 -NoBridge # pod only
|
|
# .\launch_pod.ps1 -Conf <path> # different mission/conf
|
|
#
|
|
# Pentapus mode (VPX_EXPLODE=1): all 7 cockpit displays as desktop windows --
|
|
# 5 mono MFDs (green phosphor), portrait radar, Division main -- needs a wide
|
|
# desktop (~2830px). Per-window override: VPX_WIN<g>/VPX_MAIN = "x,y[,w,h]".
|
|
# Eye height for the bridge camera: FP_UPOFF env (see live_bridge.py).
|
|
param(
|
|
[string]$Conf = "$PSScriptRoot\gauge_arena_sound.conf",
|
|
[string]$Work = "$env:LOCALAPPDATA\Temp\vwe-pod",
|
|
[string]$BridgePos = '2020,20', # Division head slot (explode layout)
|
|
[switch]$NoBridge,
|
|
[switch]$NoSound,
|
|
[switch]$ShowNative # also show the native Division window
|
|
# (wire-decode diagnostic; black clear)
|
|
)
|
|
$ErrorActionPreference = 'Stop'
|
|
New-Item -ItemType Directory -Force $Work | Out-Null
|
|
|
|
# a restart means the previous run dies first (COM1 + the fifodump are exclusive)
|
|
foreach ($pidfile in "$Work\pod_pid.txt", "$Work\bridge_pid.txt") {
|
|
if (Test-Path $pidfile) {
|
|
$old = Get-Process -Id (Get-Content $pidfile) -ErrorAction SilentlyContinue
|
|
if ($old) { Write-Host "stopping previous $([IO.Path]::GetFileNameWithoutExtension($pidfile)) ($($old.Id))"; $old | Stop-Process -Force }
|
|
}
|
|
}
|
|
# the bridge pid file records the py.exe wrapper; its python child holds the
|
|
# fifodump open (blocks the Remove-Item below) -- sweep it by command line
|
|
Get-CimInstance Win32_Process -Filter "Name like 'py%'" |
|
|
Where-Object { $_.CommandLine -match 'live_bridge' } |
|
|
ForEach-Object { Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue }
|
|
# fresh wire artifacts each run (the RIO tap APPENDS across runs otherwise --
|
|
# stale init sequences from the previous run poison diagnosis)
|
|
Remove-Item "$Work\live.fifodump", "$Work\riotap.txt" -ErrorAction SilentlyContinue
|
|
|
|
$env:VPXLOG = "$Work\vpxresp.txt"
|
|
$env:VPX_RESPOND = '1'
|
|
$env:VPX_RENDER = '1'
|
|
$env:VPX_EXPLODE = '1' # pentapus: 7 cockpit displays
|
|
$env:VPX_DUMPDIR = $Work
|
|
$env:VPX_FIFODUMP = "$Work\live.fifodump" # archival/replay copy
|
|
$env:VPX_FIFOSOCK = '8621' # live tee the bridge rides
|
|
$env:RIO_TAP = "$Work\riotap.txt"
|
|
# Dave's bridge is the out-the-window view; the native Division window is a
|
|
# decode diagnostic (-ShowNative), cleared black so missing geometry doesn't
|
|
# masquerade as sky.
|
|
if ($ShowNative) { Remove-Item Env:VPX_NOMAIN -ErrorAction SilentlyContinue }
|
|
else { $env:VPX_NOMAIN = '1' }
|
|
$env:VPX_CLEAR = '0,0,0'
|
|
if ($NoSound) {
|
|
Remove-Item Env:VWE_AWE32, Env:VWE_AWE_ROM -ErrorAction SilentlyContinue
|
|
} else {
|
|
$env:VWE_AWE32 = '1'
|
|
$env:VWE_AWE_ROM = (Resolve-Path "$PSScriptRoot\..\roms\awe32.raw").Path
|
|
$env:VWE_AWE_LOG = '1' # 10s reports incl. limiter stats (crackle diagnosis)
|
|
}
|
|
|
|
$dosbox = (Resolve-Path "$PSScriptRoot\..\src\src\dosbox-x.exe").Path
|
|
$p = Start-Process $dosbox -ArgumentList '-conf', $Conf `
|
|
-RedirectStandardError "$Work\pod_err.txt" `
|
|
-RedirectStandardOutput "$Work\pod_out.txt" -PassThru
|
|
$p.Id | Set-Content "$Work\pod_pid.txt"
|
|
Write-Host "pod PID $($p.Id) conf=$([IO.Path]::GetFileName($Conf)) work=$Work"
|
|
if (-not $NoSound) { Write-Host "sound ON: boot adds ~4 min for the SoundFont upload" }
|
|
|
|
if (-not $NoBridge) {
|
|
# park the bridge window on the Division head slot (SDL honors this at
|
|
# window creation)
|
|
$env:SDL_VIDEO_WINDOW_POS = $BridgePos
|
|
# bridge rides the socket tee (retries until the device listens); the
|
|
# fifodump path is its catch-up source if it ever (re)starts mid-mission.
|
|
# Launch with pyw (windowless pythonw), NOT py: py opens a console window
|
|
# that parks over the displays, and Start-Process ignores -WindowStyle once
|
|
# stdout/stderr are redirected (UseShellExecute=false). pyw has no console
|
|
# at all; stdout/stderr still land in the bridge_*.txt logs, and the GL
|
|
# render window appears normally at SDL_VIDEO_WINDOW_POS.
|
|
$b = Start-Process pyw -ArgumentList '-3.13', "$PSScriptRoot\live_bridge.py", 'tcp:8621', "$Work\live.fifodump" `
|
|
-RedirectStandardError "$Work\bridge_err.txt" `
|
|
-RedirectStandardOutput "$Work\bridge_out.txt" -PassThru
|
|
$b.Id | Set-Content "$Work\bridge_pid.txt"
|
|
Write-Host "bridge PID $($b.Id) [GL, windowless] (arrows in the RENDER window tune eye height)"
|
|
}
|