BT410 5.3.64: THE COCKPIT EYE IS LIVE -- root+eye composition, and the emulator

deadlock it exposed

The camera gap root-caused and fixed through three layers:

LAYER 1 (ours): "chain the engine after the skeleton" was a non-fix.  The
engine's MakeEntityRenderables only accepts Object/Rubble resources, so
chaining it with a Skeleton printed "wrong video resource type" and built
NOTHING -- the fifodump proved it: zero vr_flush_dcs_artic records.  The real
fix mirrors the engine's Mover composition (L4VIDEO.CPP:4795-4860) inside our
mech case: a Dynamic RootRenderable (whose ctor seeds its DCS from
localToWorld and whose Execute re-flushes on change -- the ONLY source of
per-frame wire articulation), the skeleton hung UNDER its DCS via ReadSKLFile's
new parent_dcs parameter, and for the inside view a DPLEyeRenderable on that
root with the published EyepointRotation.  Also explains the mystery monolith
in the first frame: the skeleton was parked at the world origin with the
camera inside its shins.

LAYER 2 (1995 library, read from our own linked symbols): dpl_DrawSceneComplete
= velocirender_frameack(0), and frameack's unsolicited-reply path prints
"dpl error - unsolicited input during frame ack", adds the 1995 authors' own
puzzled "flush artic??" when the stray action is 0x1f, and calls exit(9).
Documented before it ever fires.

LAYER 3 (emulator, the actual deadlock): with per-frame articulation flowing
for the first time, the game stopped drawing at frame 232 -- one 0x1f burst
per frame forever, no receives, no error.  The VPX device feeds the frame ack
only after 6 CONSECUTIVE empty polls and reset that counter on EVERY
outputData write; per-frame articulation writes made the count unreachable, so
dpl_DrawSceneComplete never went true.  Fix: the reset is gated on
!frame_outstanding -- once a draw is outstanding the only receive the game
will do next is the frame ack.  The iserver-drain concern the reset guarded is
boot-time only, when no frame is outstanding.

Verified: two agreeing runs of ours on the fixed emulator (611 draws / 222
artic batches in run 2 -- the 232 wall is gone), camera travelling with the
mech (cam -329.7,0,60.5 -> -362.3,0,54.5 across 8s), anim_abs 0 -> 1 on the
bridge, view now INSIDE the cockpit cage.  Shipped binary re-run on the fixed
emulator: launches and runs, no regression.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-29 09:46:23 -05:00
co-authored by Claude Fable 5
parent af010c18c2
commit d143f833ab
12 changed files with 973 additions and 121 deletions
+5 -2
View File
@@ -1,5 +1,5 @@
LOG: Early LOG Init complete
LOG: CONFIG: Loaded config file: C:/VWE/TeslaRel410/emulator/render-bridge/pod_render_norio.conf
LOG: CONFIG: Loaded config file: C:/VWE/TeslaRel410/emulator/render-bridge/pod_render_shp.conf
LOG: DOSBox-X's working directory: C:\VWE\TeslaRel410\emulator\src\src
LOG: Logging init: beginning logging proper. This is the end of the early init logging
LOG: Logging: No logfile was given. All further logging will be discarded.
@@ -34,11 +34,14 @@ LOG: mic_input: Selected microphone device: Microphone (Steam Streaming Micropho
LOG: One joystick reported, initializing with 4axis
LOG: Using joystick Xbox One Controller with 6 axes, 16 buttons and 1 hat(s)
LOG: VOODOO LFB now at d0000000
LOG: Serial1: BASE 3f8h
LOG: Serial1: namedpipe client of \\.\pipe\vrio (poll 0.10ms burst x16)
LOG: Serial1: namedpipe connected to \\.\pipe\vrio
LOG: Serial2: BASE 2f8h
LOG: Serial2: namedpipe client of \\.\pipe\vplasma (poll 1.00ms burst x1)
LOG: Serial2: namedpipe connected to \\.\pipe\vplasma
LOG: Serial3: BASE 3e8h
LOG: Serial: port 3 will write to file C:\VWE\TeslaRel410\emulator\render-bridge\podlog.txt
LOG: Serial: port 3 will write to file C:\VWE\TeslaRel410\emulator\render-bridge\podlog_shipped.txt
LOG: Parallel1: BASE 378h
LOG: MPU-401 Registering I/O ports as if IBM PC MPU-401 at base 330h
LOG: Memory I/O complexity optimization enabled aka option 'memory io optimization 1'. If the game or demo is unable to draw to the screen properly, set the option to false.
@@ -0,0 +1,88 @@
LOG: Early LOG Init complete
LOG: CONFIG: Loaded config file: C:/VWE/TeslaRel410/emulator/render-bridge/pod_render_norio.conf
LOG: DOSBox-X's working directory: C:\VWE\TeslaRel410\emulator\src\src
LOG: Logging init: beginning logging proper. This is the end of the early init logging
LOG: Logging: No logfile was given. All further logging will be discarded.
LOG: DOSBox-X version 2026.06.02 Commit d75a57c (MinGW SDL2 64-bit)
LOG: Prevent capture: 0
LOG: SDL: version 2.32.10, Video windows, Audio directsound
LOG: EXPERIMENTAL: Debugger enabled for MinGW build, DOSBox-X crashes depending on the terminal software you use. Launching from command prompt (cmd.exe) is recommended.
LOG: Windows keyboard layout ID is 0x0409
LOG: Host keyboard layout is now us (US English)
LOG: Mapper keyboard layout is now us (US English)
LOG: SDL2 reports desktop display mode 3440 x 1440
LOG: OpenGL Version : 4.6.0 NVIDIA 610.47
LOG: Configured windowposition: -
LOG: SDL: Current window pixel format: SDL_PIXELFORMAT_RGB888
LOG: SDL: You are running in 24 bpp mode, this will slow down things!
LOG: Releasing keyboard
LOG: SDL: Windows 11 round corners will be disabled.
LOG: Screen report: Method 'Win98base' (3440.000 x 1440.000 pixels) at (0.000 x 0.000) (910.167 x 381.000 mm) (35.833 x 15.000 in) (96.000 x 96.000 DPI)
LOG: ISA BCLK: 8333333.333Hz (25000000/3)
LOG: monopal: green,
LOG: Active save slot: 1 [Empty]
LOG: USING AVI+ZMBV
LOG: Pentium CMPXCHG8B emulation is enabled
LOG: Max 1073741824 sz 32768
LOG: Final 32768
LOG: Final arrangement: Below 4GB = 32768KB, Above 4GB = 0KB
LOG: VPXLOG: fifosock listening on 127.0.0.1:8621
LOG: VPXLOG: live render backend started
LOG: VPXLOG: base 0x150 respond=1 handshakes=3 log='C:\Users\cyd\AppData\Local/Temp/vwe-pod/vpxresp.txt'
LOG: MIDI:Opened device:win32
LOG: mic_input: Selected microphone device: Microphone (Steam Streaming Microphone)
LOG: One joystick reported, initializing with 4axis
LOG: Using joystick Xbox One Controller with 6 axes, 16 buttons and 1 hat(s)
LOG: VOODOO LFB now at d0000000
LOG: Serial2: BASE 2f8h
LOG: Serial2: namedpipe client of \\.\pipe\vplasma (poll 1.00ms burst x1)
LOG: Serial2: namedpipe connected to \\.\pipe\vplasma
LOG: Serial3: BASE 3e8h
LOG: Serial: port 3 will write to file C:\VWE\TeslaRel410\emulator\render-bridge\podlog.txt
LOG: Parallel1: BASE 378h
LOG: MPU-401 Registering I/O ports as if IBM PC MPU-401 at base 330h
LOG: Memory I/O complexity optimization enabled aka option 'memory io optimization 1'. If the game or demo is unable to draw to the screen properly, set the option to false.
LOG: The 'scanline render on demand' option is available and may provide a modest boost in video render performance if set to true.
LOG: Allocated APM BIOS pm entry point at f000:ce40
LOG: Writing code to fce40
LOG: Writing code to fce60
LOG: Windows: IID_ITaskbarList3 is available
LOG: ISA Plug & Play BIOS enabled
LOG: VGA ROM BIOS init callback
LOG: pixratio 1.000, dw false, dh false
LOG: Aspect ratio: 640 x 480 xToY=1.333 yToX=0.750
LOG: WARNING: No translation support (to host) for code page 0
LOG: DOS keyboard layout loaded with main language code US for layout us
LOG: XMS: 50 handles allocated for use by the DOS environment
LOG: EMS page frame at 0xe000-0xefff
LOG: COMMAND.COM env size: 720 bytes
LOG: COMMAND.COM environment block: 0x0701 sz=0x002d
LOG: COMMAND.COM main body (PSP): 0x072f sz=0x009a
LOG: COMMAND.COM stack: 0x0749
LOG: pixratio 1.350, dw false, dh false
LOG: Aspect ratio: 720 x 540 xToY=1.333 yToX=0.750
LOG: SHELL:Redirect output to COM3
LOG: VPXLOG: fifosock client connected
VPX lights@f1: type6=0 typeE=0 decoded=0 dir=0 amb(0.00,0.00,0.00)
LOG: 175021494 ERROR MOUSE:Unhandled videomode 79 on reset
LOG: pixratio 1.000, dw false, dh false
LOG: Aspect ratio: 640 x 480 xToY=1.333 yToX=0.750
VPX lightnode t=6 nb=52: [8]00000000/0 [12]00000000/0 [16]00000001/1.4013e-45 [20]3f800000/1 [24]3f800000/1 [28]3f800000/1 [32]64078678/1e+22 [36]64078678/1e+22 [40]3f7c6c01/0.986023 [44]3ce1d649/0.027568 [48]ffffffff/nan
VPX lights@f121: type6=2 typeE=9 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
VPX lights@f241: type6=2 typeE=10 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
VPX lights@f361: type6=2 typeE=10 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
VPX lights@f481: type6=2 typeE=10 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
VPX lights@f601: type6=2 typeE=10 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
VPX lights@f721: type6=2 typeE=10 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
VPX lights@f841: type6=2 typeE=10 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
VPX lights@f961: type6=2 typeE=10 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
VPX lights@f1081: type6=2 typeE=10 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
+595
View File
@@ -0,0 +1,595 @@
BattleTech v4.10
BTL4Application::BTL4Application
RIO never came back from check request!
GaugeInterpreter: undefined label 'Initialization'
[exp] master player experience=2 simLive=1 heatModelOn=1 advDamage=1
[role] 'Role::Default' lives=1000 killBonus=500 dmgMod=1
[torso] horizJoint 'jointtorso' -> 0x00a559b4 type=1 enabled=1
[weap] 'AFC100' seg=13 mount=sitelgunport rear=0
[proj] 'AFC100' ammoBinIndex=21 -> AmmoBinAFC100 (rounds=20)
[weap] 'ERLLaser' seg=7 mount=siterugunport rear=0
[weap] 'ERSLaser_1' seg=13 mount=sitelgunport rear=0
[weap] 'ERSLaser_2' seg=8 mount=siterdgunport rear=0
[weap] 'LRM15_1' seg=18 mount=sitelmissleport rear=0
[proj] 'LRM15_1' ammoBinIndex=26 -> AmmoBinLRM15_1 (rounds=16)
[weap] 'LRM15_2' seg=19 mount=sitermissleport rear=0
[proj] 'LRM15_2' ammoBinIndex=28 -> AmmoBinLRM15_2 (rounds=16)
[mech] segment walk done: subsystemCount=32 weaponCount=6
[skel] jointSubsystem=0x009eb3c4 jointCount=25
[mech] model params: walkTR=65 runTR=40 maxAcc=20 throttleAdj=0.8 (deg,deg,u/s^2,scale)
[mech] look angles: L=50 R=-50 F=-15 B=0 (deg)
[mech] damage zones streamed: 22 [dz_dtorso,dz_hip,dz_larm,dz_ldleg,dz_ldoor,dz_lfoot,dz_lgun,dz_ltorso,dz_luleg,dz_rarm,dz_rdleg,dz_rdoor,dz_reardtorso,dz_rearltorso,dz_rearrtorso,dz_rearutorso,dz_rfoot,dz_rgun,dz_rtorso,dz_ruleg,dz_searchlight,dz_utorso]
[cyl] table 'madcat' LOADED rows=7
[valve] 'Condenser1' valve=1 flow=0.166667
[valve] 'Condenser2' valve=1 flow=0.166667
[valve] 'Condenser3' valve=1 flow=0.166667
[valve] 'Condenser4' valve=1 flow=0.166667
[valve] 'Condenser5' valve=1 flow=0.166667
[valve] 'Condenser6' valve=1 flow=0.166667
[mapper] ctor id=0 throttleAttr=0x0096b248 controlModeAttr=0x0096b284
[gau2] cluster slot=14 classID=3011 auxScreen=5 name=Avionics
[gau2] cluster slot=15 classID=3014 auxScreen=6 name=Myomers
[gau2] cluster slot=22 classID=3021 auxScreen=1 name=AFC100
[gau2] cluster slot=23 classID=3016 auxScreen=10 name=ERLLaser
[gau2] cluster slot=24 classID=3016 auxScreen=3 name=ERSLaser_1
[gau2] cluster slot=25 classID=3016 auxScreen=12 name=ERSLaser_2
[gau2] cluster slot=27 classID=3024 auxScreen=2 name=LRM15_1
[gau2] cluster slot=29 classID=3024 auxScreen=9 name=LRM15_2
ColorMapperArmor warning: damage zone dz_missle not found
ColorMapperArmor warning: damage zone dz_missle not found
ColorMapperArmor warning: damage zone dz_lmissle not found
ColorMapperArmor warning: damage zone dz_rmissle not found
ColorMapperArmor warning: damage zone dz_ftorso not found
ColorMapperArmor warning: damage zone dz_btorso not found
[link] InitializePlayerLink -> vehicle playerLink=0x00adc2c0
[launch] state=11 minPriorityEmpty=0 ticks=14713
[queues] p0=BUSY p1=BUSY p2=BUSY p3=BUSY p4=- nextReady=1
[posts] id3=416
[launch] state=11 minPriorityEmpty=0 ticks=15726
[queues] p0=BUSY p1=BUSY p2=BUSY p3=BUSY p4=- nextReady=1
[posts] id3=502
[launch] state=11 minPriorityEmpty=0 ticks=16736
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=11 minPriorityEmpty=0 ticks=17745
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=11 minPriorityEmpty=0 ticks=18754
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 1 class=3035 view=0 res=0
[mer] 2 class=42 view=0 res=1
[mer] 3 class=42 view=0 res=1
[mer] 4 class=42 view=0 res=1
[mer] 5 class=42 view=0 res=1
[mer] 6 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=19831
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 7 class=42 view=0 res=1
[mer] 8 class=42 view=0 res=1
[mer] 9 class=42 view=0 res=1
[mer] 10 class=42 view=0 res=1
[mer] 11 class=42 view=0 res=1
[mer] 12 class=42 view=0 res=1
[mer] 13 class=42 view=0 res=1
[mer] 14 class=42 view=0 res=1
[mer] 15 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=20940
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 16 class=42 view=0 res=1
[mer] 17 class=42 view=0 res=1
[mer] 18 class=42 view=0 res=1
[mer] 19 class=42 view=0 res=1
[mer] 20 class=42 view=0 res=1
[mer] 21 class=42 view=0 res=1
[mer] 22 class=42 view=0 res=1
[mer] 23 class=42 view=0 res=1
[mer] 24 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=22051
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 25 class=42 view=0 res=1
[mer] 26 class=42 view=0 res=1
[mer] 27 class=42 view=0 res=1
[mer] 28 class=42 view=0 res=1
[mer] 29 class=42 view=0 res=1
[mer] 30 class=42 view=0 res=1
[mer] 31 class=42 view=0 res=1
[mer] 32 class=42 view=0 res=1
[mer] 33 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=23160
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 34 class=42 view=0 res=1
[mer] 35 class=42 view=0 res=1
[mer] 36 class=42 view=0 res=1
[mer] 37 class=42 view=0 res=1
[mer] 38 class=94 view=0 res=1
[mer] 39 class=94 view=0 res=1
[mer] 40 class=42 view=0 res=1
[mer] 41 class=94 view=0 res=1
[mer] 42 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=24269
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 43 class=94 view=0 res=1
[mer] 44 class=94 view=0 res=1
[mer] 45 class=94 view=0 res=1
[mer] 46 class=94 view=0 res=1
[mer] 47 class=94 view=0 res=1
[mer] 48 class=94 view=0 res=1
[mer] 49 class=42 view=0 res=1
[mer] 50 class=42 view=0 res=1
[mer] 51 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=25380
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 52 class=42 view=0 res=1
[mer] 53 class=42 view=0 res=1
[mer] 54 class=94 view=0 res=1
[mer] 55 class=94 view=0 res=1
[mer] 56 class=94 view=0 res=1
[mer] 57 class=94 view=0 res=1
[mer] 58 class=42 view=0 res=1
[mer] 59 class=42 view=0 res=1
[mer] 60 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=26489
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 61 class=42 view=0 res=1
[mer] 62 class=94 view=0 res=1
[mer] 63 class=94 view=0 res=1
[mer] 64 class=94 view=0 res=1
[mer] 65 class=94 view=0 res=1
[mer] 66 class=94 view=0 res=1
[mer] 67 class=94 view=0 res=1
[mer] 68 class=42 view=0 res=1
[mer] 69 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=27598
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 70 class=94 view=0 res=1
[mer] 71 class=94 view=0 res=1
[mer] 72 class=94 view=0 res=1
[mer] 73 class=94 view=0 res=1
[stack] frame at 0x12dee7 drift=0 over 1001 frames ticks=28077 pump=352/1499
[mer] 74 class=94 view=0 res=1
[mer] 75 class=94 view=0 res=1
[mer] 76 class=42 view=0 res=1
[mer] 77 class=94 view=0 res=1
[mer] 78 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=28710
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 79 class=94 view=0 res=1
[mer] 80 class=94 view=0 res=1
[mer] 81 class=94 view=0 res=1
[mer] 82 class=94 view=0 res=1
[mer] 83 class=94 view=0 res=1
[mer] 84 class=94 view=0 res=1
[mer] 85 class=42 view=0 res=1
[mer] 86 class=94 view=0 res=1
[mer] 87 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=29819
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 88 class=42 view=0 res=1
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =40
[mer] 89 class=42 view=0 res=1
[mer] 90 class=42 view=0 res=1
[mer] 91 class=94 view=0 res=1
[mer] 92 class=94 view=0 res=1
[mer] 93 class=42 view=0 res=1
[mer] 94 class=94 view=0 res=1
[mer] 95 class=94 view=0 res=1
[mer] 96 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=30929
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 97 class=94 view=0 res=1
[mer] 98 class=94 view=0 res=1
[mer] 99 class=42 view=0 res=1
[mer] 100 class=42 view=0 res=1
[mer] 101 class=42 view=0 res=1
[mer] 102 class=94 view=0 res=1
[mer] 103 class=42 view=0 res=1
[mer] 104 class=42 view=0 res=1
[mer] 105 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=32040
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 106 class=42 view=0 res=1
[mer] 107 class=42 view=0 res=1
[mer] 108 class=42 view=0 res=1
[mer] 109 class=42 view=0 res=1
[mer] 110 class=42 view=0 res=1
[mer] 111 class=42 view=0 res=1
[mer] 112 class=42 view=0 res=1
[mer] 113 class=42 view=0 res=1
[mer] 114 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=33149
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 115 class=42 view=0 res=1
[mer] 116 class=42 view=0 res=1
[mer] 117 class=42 view=0 res=1
[mer] 118 class=42 view=0 res=1
[mer] 119 class=42 view=0 res=1
[mer] 120 class=94 view=0 res=1
[mer] 121 class=42 view=0 res=1
[mer] 122 class=42 view=0 res=1
[mer] 123 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=34258
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 124 class=42 view=0 res=1
[mer] 125 class=42 view=0 res=1
[mer] 126 class=42 view=0 res=1
[mer] 127 class=42 view=0 res=1
[mer] 128 class=42 view=0 res=1
[mer] 129 class=42 view=0 res=1
[mer] 130 class=42 view=0 res=1
[mer] 131 class=42 view=0 res=1
[mer] 132 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=35369
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 133 class=42 view=0 res=1
[mer] 134 class=42 view=0 res=1
[mer] 135 class=42 view=0 res=1
[mer] 136 class=42 view=0 res=1
[mer] 137 class=42 view=0 res=1
[mer] 138 class=42 view=0 res=1
[mer] 139 class=42 view=0 res=1
[mer] 140 class=42 view=0 res=1
[mer] 141 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=36478
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 142 class=42 view=0 res=1
[mer] 143 class=94 view=0 res=1
[mer] 144 class=94 view=0 res=1
[mer] 145 class=94 view=0 res=1
[mer] 146 class=42 view=0 res=1
[mer] 147 class=94 view=0 res=1
[mer] 148 class=42 view=0 res=1
[mer] 149 class=94 view=0 res=1
[mer] 150 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=37587
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 151 class=94 view=0 res=1
[mer] 152 class=42 view=0 res=1
[mer] 153 class=42 view=0 res=1
[mer] 154 class=42 view=0 res=1
[mer] 155 class=94 view=0 res=1
[mer] 156 class=42 view=0 res=1
[mer] 157 class=42 view=0 res=1
[mer] 158 class=94 view=0 res=1
[mer] 159 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=38700
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 160 class=42 view=0 res=1
[mer] 161 class=42 view=0 res=1
[mer] 162 class=42 view=0 res=1
[mer] 163 class=42 view=0 res=1
[mer] 164 class=94 view=0 res=1
[mer] 165 class=94 view=0 res=1
[mer] 166 class=42 view=0 res=1
[mer] 167 class=94 view=0 res=1
[mer] 168 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=39809
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 169 class=94 view=0 res=1
[mer] 170 class=94 view=0 res=1
[mer] 171 class=42 view=0 res=1
[mer] 172 class=42 view=0 res=1
[mer] 173 class=42 view=0 res=1
[mer] 174 class=94 view=0 res=1
[mer] 175 class=42 view=0 res=1
[mer] 176 class=42 view=0 res=1
[mer] 177 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=40918
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 178 class=94 view=0 res=1
[mer] 179 class=94 view=0 res=1
[mer] 180 class=42 view=0 res=1
[mer] 181 class=42 view=0 res=1
[mer] 182 class=42 view=0 res=1
[mer] 183 class=94 view=0 res=1
[mer] 184 class=94 view=0 res=1
[mer] 185 class=42 view=0 res=1
[mer] 186 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=42029
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 187 class=94 view=0 res=1
[mer] 188 class=94 view=0 res=1
[mer] 189 class=42 view=0 res=1
[mer] 190 class=42 view=0 res=1
[mer] 191 class=94 view=0 res=1
[mer] 192 class=94 view=0 res=1
[mer] 193 class=42 view=0 res=1
[mer] 194 class=42 view=0 res=1
[mer] 195 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=43138
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 196 class=42 view=0 res=1
[mer] 197 class=94 view=0 res=1
[mer] 198 class=94 view=0 res=1
[mer] 199 class=94 view=0 res=1
[mer] 200 class=94 view=0 res=1
[mer] 201 class=94 view=0 res=1
[mer] 202 class=94 view=0 res=1
[stack] frame at 0x12dee7 drift=0 over 2002 frames ticks=43949 pump=495/2643
[mer] 203 class=94 view=0 res=1
[mer] 204 class=42 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=44248
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 205 class=94 view=0 res=1
[mer] 206 class=94 view=0 res=1
[mer] 207 class=48 view=0 res=0
[mer] 208 class=3001 view=1 res=1
[vid] type=1 file='mad.skl'
[skl] video\mad.skl -> 26 nodes, 19 objects
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =41
[launch] state=2 minPriorityEmpty=0 ticks=45360
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=46469
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=47578
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=48689
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=49798
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=50907
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=52018
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=53127
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=54236
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=55349
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=56458
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=57567
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=58678
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=59787
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[stack] frame at 0x12dee7 drift=0 over 3003 frames ticks=59824 pump=638/3787
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =42
[launch] state=2 minPriorityEmpty=0 ticks=60898
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=62009
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=63118
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=64227
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=65338
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=66447
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=67556
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=68667
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[launch] state=2 minPriorityEmpty=0 ticks=69776
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 209 class=48 view=0 res=0
[mer] 210 class=48 view=0 res=0
[launch] state=2 minPriorityEmpty=0 ticks=70885
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 211 class=48 view=0 res=0
[mer] 212 class=48 view=0 res=0
[mer] 213 class=48 view=0 res=0
[mer] 214 class=48 view=0 res=0
[mer] 215 class=48 view=0 res=0
[launch] state=2 minPriorityEmpty=0 ticks=71996
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 216 class=48 view=0 res=0
[mer] 217 class=94 view=0 res=1
[mer] 218 class=94 view=0 res=1
[mer] 219 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=73107
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 220 class=94 view=0 res=1
[mer] 221 class=94 view=0 res=1
[mer] 222 class=94 view=0 res=1
[mer] 223 class=94 view=0 res=1
[mer] 224 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=74216
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 225 class=94 view=0 res=1
[mer] 226 class=94 view=0 res=1
[mer] 227 class=94 view=0 res=1
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =43
[mer] 228 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=75328
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 229 class=94 view=0 res=1
[mer] 230 class=94 view=0 res=1
[stack] frame at 0x12dee7 drift=0 over 4004 frames ticks=75695 pump=781/4931
[mer] 231 class=94 view=0 res=1
[mer] 232 class=94 view=0 res=1
[mer] 233 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=76438
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 234 class=94 view=0 res=1
[mer] 235 class=94 view=0 res=1
[mer] 236 class=94 view=0 res=1
[mer] 237 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=77547
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 238 class=94 view=0 res=1
[mer] 239 class=94 view=0 res=1
[mer] 240 class=94 view=0 res=1
[mer] 241 class=94 view=0 res=1
[mer] 242 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=78658
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 243 class=94 view=0 res=1
[mer] 244 class=94 view=0 res=1
[mer] 245 class=94 view=0 res=1
[mer] 246 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=79767
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 247 class=94 view=0 res=1
[mer] 248 class=94 view=0 res=1
[mer] 249 class=94 view=0 res=1
MapDisplay: operating=1 static=7 moving=0
[mer] 250 class=94 view=0 res=1
[mer] 251 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=80876
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 252 class=94 view=0 res=1
[mer] 253 class=94 view=0 res=1
[mer] 254 class=94 view=0 res=1
[mer] 255 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=81987
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 256 class=94 view=0 res=1
[mer] 257 class=94 view=0 res=1
[mer] 258 class=94 view=0 res=1
[mer] 259 class=94 view=0 res=1
[mer] 260 class=94 view=0 res=1
[launch] state=2 minPriorityEmpty=0 ticks=83096
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 261 class=94 view=0 res=1
[mer] 262 class=48 view=0 res=0
[mer] 263 class=48 view=0 res=0
[mer] 264 class=48 view=0 res=0
[launch] state=2 minPriorityEmpty=0 ticks=84205
[queues] p0=BUSY p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
[mer] 265 class=48 view=0 res=0
[launch] state=2 minPriorityEmpty=1 ticks=85316
[queues] p0=- p1=- p2=BUSY p3=- p4=- nextReady=1
[posts] id3=530
BTL4Application::RunMissionMessageHandler
Turning Plasma Score Display On
BTL4Application::RunMissionMessageHandler
Turning Plasma Score Display On
[tick] roster live (first Sensor frame), radarPercent=1 voltState=4
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-170.962,0,251.562) yaw=0.0735925 spd=14.4 eyePitch=0 eyeYaw=0
[fire] 'ERSLaser_1' LOADED (level=7941.22 T=76.8855)
[fire] 'ERSLaser_2' LOADED (level=7925.96 T=76.8462)
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =48
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-172.512,0,237.234) yaw=0.140928 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-175.027,0,223.028) yaw=0.20833 spd=14.4 eyePitch=0 eyeYaw=0
[stack] frame at 0x12dee7 drift=0 over 5005 frames ticks=91705 pump=863/6075
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-178.488,0,209.039) yaw=0.275666 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-182.966,0,195.083) yaw=0.344145 spd=14.4 eyePitch=0 eyeYaw=0
[fire] 'ERLLaser' LOADED (level=7928.31 T=76.0943)
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-188.376,0,181.493) yaw=0.41249 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-194.702,0,168.304) yaw=0.480834 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-201.929,0,155.553) yaw=0.549314 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-209.995,0,143.35) yaw=0.617659 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-218.875,0,131.727) yaw=0.686004 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-228.548,0,120.716) yaw=0.754483 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-238.931,0,110.412) yaw=0.822829 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-249.993,0,100.842) yaw=0.891174 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-261.706,0,92.0324) yaw=0.959654 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-273.97,0,84.0602) yaw=1.028 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-286.75,0,76.9441) yaw=1.09635 spd=14.4 eyePitch=0 eyeYaw=0
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =49
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-299.788,0,70.8027) yaw=1.16368 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-313.44,0,65.4711) yaw=1.23216 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-327.397,0,61.0939) yaw=1.30051 spd=14.4 eyePitch=0 eyeYaw=0
[stack] frame at 0x12dee7 drift=0 over 6006 frames ticks=108393 pump=863/7219
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-341.438,0,57.7177) yaw=1.36798 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-355.859,0,55.2706) yaw=1.43633 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-370.443,0,53.8123) yaw=1.50481 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-385.063,0,53.3551) yaw=1.5708 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-399.681,0,53.8975) yaw=1.5001 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-414.256,0,55.441) yaw=1.43162 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-428.662,0,57.9722) yaw=1.36327 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-442.863,0,61.4814) yaw=1.29492 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-456.817,0,65.9619) yaw=1.22644 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-470.406,0,71.3753) yaw=1.15809 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-483.594,0,77.704) yaw=1.08974 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-496.343,0,84.9337) yaw=1.02126 spd=14.4 eyePitch=0 eyeYaw=0
@@ -0,0 +1,80 @@
LOG: Early LOG Init complete
LOG: CONFIG: Loaded config file: C:/VWE/TeslaRel410/emulator/render-bridge/pod_render_norio.conf
LOG: DOSBox-X's working directory: C:\VWE\TeslaRel410\emulator\src\src
LOG: Logging init: beginning logging proper. This is the end of the early init logging
LOG: Logging: No logfile was given. All further logging will be discarded.
LOG: DOSBox-X version 2026.06.02 Commit d75a57c (MinGW SDL2 64-bit)
LOG: Prevent capture: 0
LOG: SDL: version 2.32.10, Video windows, Audio directsound
LOG: EXPERIMENTAL: Debugger enabled for MinGW build, DOSBox-X crashes depending on the terminal software you use. Launching from command prompt (cmd.exe) is recommended.
LOG: Windows keyboard layout ID is 0x0409
LOG: Host keyboard layout is now us (US English)
LOG: Mapper keyboard layout is now us (US English)
LOG: SDL2 reports desktop display mode 3440 x 1440
LOG: OpenGL Version : 4.6.0 NVIDIA 610.47
LOG: Configured windowposition: -
LOG: SDL: Current window pixel format: SDL_PIXELFORMAT_RGB888
LOG: SDL: You are running in 24 bpp mode, this will slow down things!
LOG: Releasing keyboard
LOG: SDL: Windows 11 round corners will be disabled.
LOG: Screen report: Method 'Win98base' (3440.000 x 1440.000 pixels) at (0.000 x 0.000) (910.167 x 381.000 mm) (35.833 x 15.000 in) (96.000 x 96.000 DPI)
LOG: ISA BCLK: 8333333.333Hz (25000000/3)
LOG: monopal: green,
LOG: Active save slot: 1 [Empty]
LOG: USING AVI+ZMBV
LOG: Pentium CMPXCHG8B emulation is enabled
LOG: Max 1073741824 sz 32768
LOG: Final 32768
LOG: Final arrangement: Below 4GB = 32768KB, Above 4GB = 0KB
LOG: VPXLOG: fifosock listening on 127.0.0.1:8621
LOG: VPXLOG: live render backend started
LOG: VPXLOG: base 0x150 respond=1 handshakes=3 log='C:\Users\cyd\AppData\Local/Temp/vwe-pod/vpxresp.txt'
LOG: MIDI:Opened device:win32
LOG: mic_input: Selected microphone device: Microphone (Steam Streaming Microphone)
LOG: One joystick reported, initializing with 4axis
LOG: Using joystick Xbox One Controller with 6 axes, 16 buttons and 1 hat(s)
LOG: VOODOO LFB now at d0000000
LOG: Serial2: BASE 2f8h
LOG: Serial2: namedpipe client of \\.\pipe\vplasma (poll 1.00ms burst x1)
LOG: Serial2: namedpipe connected to \\.\pipe\vplasma
LOG: Serial3: BASE 3e8h
LOG: Serial: port 3 will write to file C:\VWE\TeslaRel410\emulator\render-bridge\podlog.txt
LOG: Parallel1: BASE 378h
LOG: MPU-401 Registering I/O ports as if IBM PC MPU-401 at base 330h
LOG: Memory I/O complexity optimization enabled aka option 'memory io optimization 1'. If the game or demo is unable to draw to the screen properly, set the option to false.
LOG: The 'scanline render on demand' option is available and may provide a modest boost in video render performance if set to true.
LOG: Allocated APM BIOS pm entry point at f000:ce40
LOG: Writing code to fce40
LOG: Writing code to fce60
LOG: Windows: IID_ITaskbarList3 is available
LOG: ISA Plug & Play BIOS enabled
LOG: VGA ROM BIOS init callback
LOG: pixratio 1.000, dw false, dh false
LOG: Aspect ratio: 640 x 480 xToY=1.333 yToX=0.750
LOG: WARNING: No translation support (to host) for code page 0
LOG: pixratio 1.350, dw false, dh false
LOG: Aspect ratio: 720 x 540 xToY=1.333 yToX=0.750
LOG: DOS keyboard layout loaded with main language code US for layout us
LOG: XMS: 50 handles allocated for use by the DOS environment
LOG: EMS page frame at 0xe000-0xefff
LOG: COMMAND.COM env size: 720 bytes
LOG: COMMAND.COM environment block: 0x0701 sz=0x002d
LOG: COMMAND.COM main body (PSP): 0x072f sz=0x009a
LOG: COMMAND.COM stack: 0x0749
LOG: SHELL:Redirect output to COM3
LOG: VPXLOG: fifosock client connected
VPX lights@f1: type6=0 typeE=0 decoded=0 dir=0 amb(0.00,0.00,0.00)
LOG: 173614606 ERROR MOUSE:Unhandled videomode 79 on reset
LOG: pixratio 1.000, dw false, dh false
LOG: Aspect ratio: 640 x 480 xToY=1.333 yToX=0.750
VPX lightnode t=6 nb=52: [8]00000000/0 [12]00000000/0 [16]00000001/1.4013e-45 [20]3f800000/1 [24]3f800000/1 [28]3f800000/1 [32]64078678/1e+22 [36]64078678/1e+22 [40]3e888894/0.266667 [44]3eeeeefa/0.466667 [48]ffffffff/nan
VPX lights@f121: type6=2 typeE=6 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
VPX lights@f241: type6=2 typeE=6 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
VPX lights@f361: type6=2 typeE=9 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
VPX lights@f481: type6=2 typeE=10 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
VPX lights@f601: type6=2 typeE=10 decoded=2 dir=1 amb(0.55,0.50,0.65)
L0 dir(0.11,0.77,0.63) col(1.10,0.90,1.00)
@@ -4,7 +4,7 @@ RIO never came back from check request!
GaugeInterpreter: undefined label 'Initialization'
[exp] master player experience=2 simLive=1 heatModelOn=1 advDamage=1
[role] 'Role::Default' lives=1000 killBonus=500 dmgMod=1
[torso] horizJoint 'jointtorso' -> 0x00a3d170 type=1 enabled=1
[torso] horizJoint 'jointtorso' -> 0x00a559b4 type=1 enabled=1
[weap] 'AFC100' seg=13 mount=sitelgunport rear=0
[proj] 'AFC100' ammoBinIndex=21 -> AmmoBinAFC100 (rounds=20)
[weap] 'ERLLaser' seg=7 mount=siterugunport rear=0
@@ -15,7 +15,7 @@ GaugeInterpreter: undefined label 'Initialization'
[weap] 'LRM15_2' seg=19 mount=sitermissleport rear=0
[proj] 'LRM15_2' ammoBinIndex=28 -> AmmoBinLRM15_2 (rounds=16)
[mech] segment walk done: subsystemCount=32 weaponCount=6
[skel] jointSubsystem=0x009e6d84 jointCount=25
[skel] jointSubsystem=0x009eb3c4 jointCount=25
[mech] model params: walkTR=65 runTR=40 maxAcc=20 throttleAdj=0.8 (deg,deg,u/s^2,scale)
[mech] look angles: L=50 R=-50 F=-15 B=0 (deg)
[mech] damage zones streamed: 22 [dz_dtorso,dz_hip,dz_larm,dz_ldleg,dz_ldoor,dz_lfoot,dz_lgun,dz_ltorso,dz_luleg,dz_rarm,dz_rdleg,dz_rdoor,dz_reardtorso,dz_rearltorso,dz_rearrtorso,dz_rearutorso,dz_rfoot,dz_rgun,dz_rtorso,dz_ruleg,dz_searchlight,dz_utorso]
@@ -26,7 +26,7 @@ GaugeInterpreter: undefined label 'Initialization'
[valve] 'Condenser4' valve=1 flow=0.166667
[valve] 'Condenser5' valve=1 flow=0.166667
[valve] 'Condenser6' valve=1 flow=0.166667
[mapper] ctor id=0 throttleAttr=0x009f4320 controlModeAttr=0x009f435c
[mapper] ctor id=0 throttleAttr=0x0096b248 controlModeAttr=0x0096b284
[gau2] cluster slot=14 classID=3011 auxScreen=5 name=Avionics
[gau2] cluster slot=15 classID=3014 auxScreen=6 name=Myomers
[gau2] cluster slot=22 classID=3021 auxScreen=1 name=AFC100
@@ -41,7 +41,7 @@ ColorMapperArmor warning: damage zone dz_lmissle not found
ColorMapperArmor warning: damage zone dz_rmissle not found
ColorMapperArmor warning: damage zone dz_ftorso not found
ColorMapperArmor warning: damage zone dz_btorso not found
[link] InitializePlayerLink -> vehicle playerLink=0x00ac513c
[link] InitializePlayerLink -> vehicle playerLink=0x00adc2c0
[launch] state=11 minPriorityEmpty=0 ticks=14713
[queues] p0=BUSY p1=BUSY p2=BUSY p3=BUSY p4=- nextReady=1
[posts] id3=416
@@ -340,8 +340,6 @@ iThinkIRQIsOn =1, actual state =1, characters sent =40
[mer] 208 class=3001 view=1 res=1
[vid] type=1 file='mad.skl'
[skl] video\mad.skl -> 26 nodes, 19 objects
[chain] into DPLRenderer, skeleton=yes, stack at 0x12dde7
L4VIDEO.cpp wrong video resource type for object mad.skl
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =41
[launch] state=2 minPriorityEmpty=0 ticks=45360
@@ -524,3 +522,35 @@ Turning Plasma Score Display On
BTL4Application::RunMissionMessageHandler
Turning Plasma Score Display On
[tick] roster live (first Sensor frame), radarPercent=1 voltState=4
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-631.704,0,-244.183) yaw=-1.49721 spd=14.4 eyePitch=0 eyeYaw=0
[fire] 'ERSLaser_1' LOADED (level=7941.22 T=76.8855)
[fire] 'ERSLaser_2' LOADED (level=7925.96 T=76.8462)
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =48
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-617.376,0,-245.734) yaw=-1.42987 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-603.171,0,-248.248) yaw=-1.36247 spd=14.4 eyePitch=0 eyeYaw=0
[stack] frame at 0x12dee7 drift=0 over 5005 frames ticks=91705 pump=863/6075
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-589.181,0,-251.71) yaw=-1.29514 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-575.225,0,-256.187) yaw=-1.22666 spd=14.4 eyePitch=0 eyeYaw=0
[fire] 'ERLLaser' LOADED (level=7928.31 T=76.0943)
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-561.635,0,-261.598) yaw=-1.15832 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-548.446,0,-267.923) yaw=-1.08997 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-535.695,0,-275.15) yaw=-1.0215 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-523.492,0,-283.216) yaw=-0.953153 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-511.868,0,-292.096) yaw=-0.88481 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-500.857,0,-301.769) yaw=-0.816333 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-490.553,0,-312.151) yaw=-0.747989 spd=14.4 eyePitch=0 eyeYaw=0
[mppr] thr=0.6 rev=0 stickX=0.25 stickY=0 mode=0 -> speedDemand=14.4 turnDemand=0.0625 torsoElev=0
[sim] pos=(-480.983,0,-323.213) yaw=-0.679646 spd=14.4 eyePitch=0 eyeYaw=0
@@ -76,6 +76,7 @@ rem arena1 city mission (TESTARN.EGG: map=arena1, time=day) with the RIO
rem attached; stdout redirected so mission-load progress survives kills.
set BT_MECH_LOG=1
set BT_MER_LOG=1
set BT_VID_LOG=1
set BT_MECH_CHAIN=1
set BT_LAUNCH_LOG=1
set BT_STACK_LOG=1
@@ -66,6 +66,7 @@ rem arena1 city mission (TESTARN.EGG: map=arena1, time=day) with the RIO
rem attached; stdout redirected so mission-load progress survives kills.
set BT_MECH_LOG=1
set BT_MER_LOG=1
set BT_VID_LOG=1
set BT_LAUNCH_LOG=1
set BT_STACK_LOG=1
set BT_FORCE_THROTTLE=0.6
-77
View File
@@ -1,78 +1 @@
BattleTech v4.10
BTL4Application::BTL4Application
GaugeInterpreter: undefined label 'Initialization'
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =49
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =53
MakeVehicleSystems hud=0x01158f94
Warning: damage zone 'dz_missle' not found!
Warning: damage zone 'dz_missle' not found!
Warning: damage zone 'dz_lmissle' not found!
Warning: damage zone 'dz_rmissle' not found!
Warning: damage zone 'dz_ftorso' not found!
Warning: damage zone 'dz_btorso' not found!
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =112
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =1426
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =1821
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =2998
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =3130
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =5534
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =7017
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =7177
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =7181
BTL4Application::RunMissionMessageHandler
Turning Plasma Score Display On
BTL4Application::RunMissionMessageHandler
Turning Plasma Score Display On
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =9786
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =10036
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =11117
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =13401
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =13894
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =14886
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =16513
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =16517
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =16631
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =16986
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =16990
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =17198
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =18111
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =18200
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =18204
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =18340
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =18344
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =18848
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =21370
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =21408
LBE4ControlsManager::Execute, lost RIO analog request
iThinkIRQIsOn =1, actual state =1, characters sent =21412
+16 -1
View File
@@ -666,7 +666,22 @@ static void vpx_write(Bitu port, Bitu val, Bitu iolen) {
note("board reset");
} else if (off == 1) {
saw_write = true; /* outputData: a download/response byte */
empty_polls = 0; /* a write means the game isn't blocking-reading */
/* A write means the game isn't blocking-reading -- UNLESS a draw is
* outstanding. Once vr_draw_scene has been sent, the only receive
* the game performs next is the frame ack, but it keeps WRITING in
* the meantime: every frame flushes a vr_flush_dcs_artic batch (the
* per-frame vehicle articulation). Resetting the poll counter on
* those writes starves the ack forever: one 0x1f burst per frame,
* one or two polls per frame, the counter never reaches
* POLL_THRESHOLD, dpl_DrawSceneComplete never returns true, and the
* game stops drawing while everything else runs on. That deadlock
* appeared the FIRST time a game of ours produced per-frame
* articulation (2026-07-29); the shipped binary had simply never
* been run against this device in a state that both articulated
* and drew. The iserver-drain guard this reset protects is a boot-
* time concern, when no frame is ever outstanding, so gating on
* frame_outstanding preserves it. */
if (!frame_outstanding) empty_polls = 0;
fifo_flush_record(); /* outputData write = FIFO burst boundary */
if (parse_frames) { parse_out_byte((unsigned char)val); fifo_arm_action(); }
} else if (off == 4 || off == 5) {
+82 -35
View File
@@ -116,6 +116,7 @@ BTL4VideoRenderer::~BTL4VideoRenderer()
dpl_DCS *
BTL4VideoRenderer::ReadSKLFile(
Entity *entity,
dpl_DCS *parent_dcs,
const char *skeleton_filename,
ViewFrom view_type)
{
@@ -150,9 +151,15 @@ dpl_DCS *
node_count = 0,
object_count = 0;
//
// The ROOT page's DCS attaches under the caller's parent (the mech's
// RootRenderable DCS, so the model rides the entity's localToWorld) or,
// with no parent, straight to the scene -- the old bring-up behaviour,
// which parks the model at the world origin.
//
dpl_DCS
*root = RecurseSKLFile(
entity, NULL, skeleton, "ROOT", 0, view_type,
entity, parent_dcs, skeleton, "ROOT", 0, view_type,
zone, &node_count, &object_count);
DEBUG_STREAM << "[skl] " << path
@@ -438,13 +445,6 @@ void
const L4VideoObject
*video_object = video_wrapper->GetVideoObject();
//
// The inside view produced NO [skl] line, so this chain
// evidently holds no Skeleton entry and we fall through to
// the engine -- straight into the eyepoint construction that
// faults. Print what is actually in the chain rather than
// assuming.
//
if (getenv("BT_MER_LOG"))
{
DEBUG_STREAM << " [vid] type="
@@ -456,43 +456,89 @@ void
if (video_object->GetResourceType()
== L4VideoObject::Skeleton)
{
ReadSKLFile(entity,
//
// THE ENGINE COMPOSITION, mirrored from the Mover branch
// of DPLRenderer::MakeEntityRenderables
// (L4VIDEO.CPP:4795-4860), which the base cannot apply
// here because it only accepts Object/Rubble resources --
// chaining it with a Skeleton just prints "wrong video
// resource type" and builds NOTHING (measured: zero
// vr_flush_dcs_artic records on the wire, camera frozen
// at the world origin, and the mech statue parked there
// with the eye inside it).
//
// 1. A DYNAMIC RootRenderable. Its ctor adds its DCS to
// the scene and seeds it from entity->localToWorld;
// its Execute re-flushes whenever the entity moves.
// That per-frame flush is the ONLY source of wire
// articulation (0x1f) for the vehicle -- without it
// nothing on the board ever moves. NULL graphical
// object exactly like the CameraShip inside-view case
// (L4VIDEO.CPP:4548): the skeleton supplies the
// geometry.
//
RootRenderable
*this_root = new RootRenderable(
entity,
RootRenderable::Dynamic,
NULL,
dplMainZone,
dpl_isect_mode_obj,
NULL);
Register_Object(this_root);
dpl_DCS
*root_DCS = this_root->GetDCS();
//
// 2. The skeleton hangs UNDER the root DCS -- so the whole
// model rides the entity's localToWorld instead of
// being parked at the world origin.
//
ReadSKLFile(entity, root_DCS,
video_object->GetObjectFilename(), view_type);
//
// 3. Inside view: the eyepoint, driven off the same root
// DCS plus the mech's published EyepointRotation --
// this is what the camera follows.
//
if (view_type == insideEntity)
{
EulerAngles
*eyepoint_rotation =
(EulerAngles *)entity->GetAttributePointer(
"EyepointRotation");
DPLEyeRenderable
*this_eye = new DPLEyeRenderable(
entity,
dplMainZone,
LinearMatrix::Identity,
root_DCS,
dplMainView,
eyepoint_rotation);
Register_Object(this_eye);
}
handled = True;
}
}
Entity_Being_Created = NULL;
//
// The mech needs BOTH: our skeleton AND the engine's renderables.
// Only chain the base when NO skeleton was found -- for a
// skeleton it contributes nothing but the complaint, and the
// root/eye it would otherwise build were built above.
//
// Stopping here once the skeleton was built -- which is what
// setting `handled` used to do -- left the mech with geometry but
// no RootRenderable and no DPLEyeRenderable. The eye is what the
// camera follows, so the view stayed frozen at the world origin
// while [sim] reported the mech travelling hundreds of units;
// two frames captured six seconds apart differed by zero pixels.
//
// Chaining unconditionally was verified over two runs: the mission
// launches, the skeleton still reports its 26 nodes / 19 objects,
// and the engine's eyepoint construction runs without faulting.
// (That construction was the prime suspect for the pod's page
// fault for most of a session -- wrongly; the fault turned out to
// need a live RIO stream and to live at a fixed address in the
// DPMI host, not in our code at all.)
//
if (getenv("BT_MER_LOG"))
if (!handled)
{
char
here;
DEBUG_STREAM << " [chain] into DPLRenderer, skeleton="
<< (handled ? "yes" : "no")
<< ", stack at 0x" << hex << (int)&here << dec
<< endl << flush;
if (getenv("BT_MER_LOG"))
{
DEBUG_STREAM << " [chain] no skeleton -> DPLRenderer"
<< endl << flush;
}
DPLRenderer::MakeEntityRenderables(
entity, model_resource, view_type);
}
DPLRenderer::MakeEntityRenderables(
entity, model_resource, view_type);
}
break;
@@ -533,3 +579,4 @@ void
//
DPLRenderer::LoadMissionImplementation(mission);
}
+12
View File
@@ -43,6 +43,17 @@
void
LoadMissionImplementation(Mission *mission);
//
// (A diagnostic ExecuteImplementation wrapper briefly lived here to
// count dynamic renderables per frame; it cannot exist, because
// DPLRenderer::ExecuteImplementation is PRIVATE -- virtual dispatch
// reaches it, but a subclass cannot chain it by name. The question
// it was built to answer got answered by the wire instead: zero
// vr_flush_dcs_artic records because NO dynamic renderable existed
// -- the engine rejects Skeleton resources, so chaining the base for
// the mech built nothing. See MakeEntityRenderables.)
//
//
// The bottom of this virtual chain is
// VideoRenderer::MakeEntityRenderables (VIDREND.CPP:231), whose own
@@ -65,6 +76,7 @@
dpl_DCS *
ReadSKLFile(
Entity *entity,
dpl_DCS *parent_dcs,
const char *skeleton_filename,
ViewFrom view_type);
@@ -1217,3 +1217,60 @@ default eye height (FP_UPOFF) never being displaced by a view from the game,
which points at the eyepoint compose in live_bridge rather than at the
reconstruction. That is its own sub-project -- see COCKPIT-CAGE-NOTES.md,
where the eyepoint/glance compose is already documented territory.
--------------------------------------------------------------------------------
THE CAMERA GAP, ROOT-CAUSED END TO END (three layers deep)
--------------------------------------------------------------------------------
LAYER 1 -- our code. "Chain the engine after the skeleton" was a non-fix: the
engine's MakeEntityRenderables only accepts Object/Rubble resources, so
chaining it with a Skeleton printed "wrong video resource type" (it was there
in the log, line 344, both chain runs) and built NOTHING. No RootRenderable,
no eye, no articulation -- and the fifodump proved it: ZERO vr_flush_dcs_artic
(0x1f) records against 6667 one-shot flushes. The bridge decoder was fine;
the game genuinely never articulated anything.
The real fix mirrors the engine's own Mover composition (L4VIDEO.CPP:
4795-4860) inside OUR mech case, because the base cannot do it for skeletons:
RootRenderable(entity, Dynamic, NULL, dplMainZone, ...) <- per-frame flush
ReadSKLFile(entity, this_root->GetDCS(), ...) <- skeleton UNDER it
if inside: DPLEyeRenderable(..., root_DCS, dplMainView,
GetAttributePointer("EyepointRotation")) <- the camera
ReadSKLFile grew a parent_dcs parameter for this. NULL keeps the old
add-to-scene behaviour. Also explains the mystery monolith in the first
frame: the skeleton was parked AT THE WORLD ORIGIN with the camera at
origin+eye-height -- we were looking at our own mech from inside its shins.
RESULT: anim_abs went 0 -> 1 on the bridge (first articulation our build has
ever put on the wire), the bridge camera left the origin -- cam (54.2, 20.0,
-662.5), tracking the mech's neighbourhood at its correct Y -- and the bridge
even flagged all 19 own-mech geometry instances as drawn around the eye.
LAYER 2 -- the 1995 library, read from our own linked binary (the map is
trustworthy here because these are real linked symbols, not a stray fault
address): dpl_DrawSceneComplete = velocirender_frameack(0). frameack keeps a
"frame acked" flag; when a reply arrives whose action is NOT 9 it prints
"dpl error - unsolicited input during frame ack", adds a puzzled
"flush artic??" when that stray action is 0x1f -- the 1995 authors' own
annotation -- and calls exit(9). Worth knowing before it ever fires.
LAYER 3 -- the EMULATOR, where the actual deadlock lived. With per-frame
articulation flowing for the first time, the game stopped drawing at frame 232:
one 0x1f burst per frame forever after, no receives, no draws, no error, sim
fine. The VPX device feeds the frame ack only after POLL_THRESHOLD=6
CONSECUTIVE empty inputStatus polls, and vpxlog.cpp:669 reset that counter on
EVERY outputData write ("a write means the game isn't blocking-reading").
Every frame now writes an articulation burst, the game polls once or twice a
frame, the counter never reaches 6, dpl_DrawSceneComplete never goes true.
The heuristic was calibrated on traffic that had no per-frame writes; ours is
the first game state that both articulates and draws through this device.
Fix (vpx-device/vpxlog.cpp, synced to src/src/hardware): the reset is now
gated on !frame_outstanding -- once a draw_scene is outstanding, the only
receive the game will do next is the frame ack, so intervening writes must not
cancel the poll accumulation. The iserver-drain concern the reset guarded is
a boot-time state where no frame is ever outstanding.
STATUS: emulator rebuilding; verification = the same norio run drawing PAST
frame 232 with the camera tracking, then two agreeing runs before belief.