The 0xBBE heat-sink BANK was built as a plain HeatSink, so the numeric-R cockpit gauge binding HeatSink/AmbientTemperature (L4GAUGE.CFG:4552) had no publisher -> the LAST unresolved config attribute. Reconstruct AggregateHeatSink : HeatSink (ctor @4ae8d0, own GUID 0x50e590), byte-exact + static_assert-locked (heatSinkCount@0x1D0, ambientTemperature @0x1D4=300, helper@0x1D8 0xC link node, sizeof 0x1E4 == factory alloc @9993). Publish HeatSinkCount + AmbientTemperature via a dense-prefix attribute table chained to HeatSink::NextAttributeID (shared HeatSink table unchanged, so CoolantMass/CoolantCapacity keep resolving). Move CreateHeatSinkBankSubsystem into heatfamily_reslice.cpp (needs the class def) and build the real class at factory case 0xBBE; mech.cpp unchanged. DELIBERATE DEVIATION (documented in the class): keep the base HeatSinkSimulation the HeatSink ctor installs; do NOT reimplement the authentic Performance @4ae73c -- it derefs a raw self+0xE0 -> [+0x158] that does not map in our compiled layout (AV/NaN, and runs for EVERY mech), and ambientTemperature is a frozen constant so the gauge reads 300 either way. Authentic relaxation model deferred. Verified: [attr] HeatSink/AmbientTemperature OK; all 50 config attribute bindings resolve (0 NULL); no every-mech crash; combat TARGET DESTROYED, FIRED #41+, un-regressed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
24 lines
1.0 KiB
PowerShell
24 lines
1.0 KiB
PowerShell
Add-Type @"
|
|
using System; using System.Runtime.InteropServices; using System.Text;
|
|
public class E {
|
|
[DllImport("user32.dll")] public static extern bool EnumWindows(D cb, IntPtr p);
|
|
[DllImport("user32.dll")] public static extern bool IsWindowVisible(IntPtr h);
|
|
[DllImport("user32.dll")] public static extern int GetWindowText(IntPtr h, StringBuilder s, int n);
|
|
[DllImport("user32.dll")] public static extern uint GetWindowThreadProcessId(IntPtr h, out uint pid);
|
|
public delegate bool D(IntPtr h, IntPtr p);
|
|
}
|
|
"@
|
|
$rows=@()
|
|
$cb=[E+D]{ param($h,$p)
|
|
if([E]::IsWindowVisible($h)){
|
|
$sb=New-Object System.Text.StringBuilder 256
|
|
[void][E]::GetWindowText($h,$sb,256)
|
|
$t=$sb.ToString()
|
|
$wp=0; [void][E]::GetWindowThreadProcessId($h,[ref]$wp)
|
|
$pn=""; try{$pn=(Get-Process -Id $wp -EA Stop).ProcessName}catch{}
|
|
$script:rows+=[pscustomobject]@{Hwnd=[long]$h;Ppid=$wp;Proc=$pn;Title=$t}
|
|
}; return $true
|
|
}
|
|
[void][E]::EnumWindows($cb,[IntPtr]::Zero)
|
|
$rows | Where-Object {$_.Proc -like "*btl4*"} | Format-Table -Auto | Out-String | Write-Host
|