# 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 # 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/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) [switch]$Mipmap # VRVIEW_MIPMAP=1: mip-filter minified # textures (kills RP's checkerboard-floor # shimmer). Non-authentic (board had no # mipmaps); set at BOOT so no mid-mission # bridge restart churns the RIO. ) $ErrorActionPreference = 'Stop' New-Item -ItemType Directory -Force $Work | Out-Null # pcap backend needs wpcap.dll; without it the NE2000 silently comes up dead # ("NO PACKET DRIVER FOUND" at netnub). Don't trust the invoking shell's PATH. if ($env:Path -notlike '*\Npcap*') { $env:Path = "C:\Windows\System32\Npcap;$env:Path" } # 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) $env:VWE_AWE_WAV = "$Work\awe" # crackle taps: awe_front/_rear/_mix.wav } $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 if ($Mipmap) { $env:VRVIEW_MIPMAP = '1' } else { Remove-Item Env:VRVIEW_MIPMAP -ErrorAction SilentlyContinue } # 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)" }