Files
TeslaRel410/emulator/render-bridge/launch_pod.ps1
T
CydandClaude Opus 4.8 2bb2ff7302 Weapons fire; hat-glance + MFD fixes; windowless bridge
vpx-device/vpxlog.cpp -- WEAPONS FIRE. The game's fire gate is
targetReticle.targetEntity (mech+0x388), filled every frame by a Division-board
reticle pick (dpl_RapidSectPixel) our HLE never answered, so every shot
misfired. The device now casts the camera centre ray against the live scene
(Moller-Trumbore) and returns the full hit -- instance + DCS + geogroup +
geometry -- piggybacked on the draw_scene reply; terrain is a valid target so
you can fire and miss. Sending geogroup=0 was hanging the game (GetAppSpecific
on a null); returning the real geogroup fixed it. Pick is default-on with a
single VPX_NO_PICK escape hatch. Also swaps the upper-left/right MFD explode
windows (screen location only -- decode untouched, real cause TBD on a pod).

dpl3-revive/patha/vrview.py -- HAT-GLANCE fix at the source. One cockpit DCS
(0xa2c) flushes a rank-2 rotation (shifted body -> wrong read window) that
collapsed the camera chain to rank 2 and smeared the head glance onto the wrong
axis (left/right hat read as pitch). chain_matrix(fix_degenerate) treats a
degenerate chain DCS as identity: preserves the look exactly and keeps stick-Y
torso pitch working (an earlier bridge-level yaw/pitch swap broke stick-Y and
was reverted). User-verified live: hat all 4 dirs + stick-Y both correct.

render-bridge/launch_pod.ps1 -- launch the bridge with pyw (windowless) so no
console window parks over the cockpit displays (Start-Process ignores
-WindowStyle once stdout/stderr are redirected).

render-bridge/live_bridge.py -- surface bridge render errors, flush the status
line; reverted glance-swap note.

Also vendored HUD (dpl2d) renderer work in vrboard/vrview_gl and RENDERER-COLLAB
/ RIO notes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 09:53:14 -05:00

87 lines
4.5 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
}
$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)"
}