BT410 5.3.51: THE 3-D WORLD RENDERS -- reconstruction to emulated board to a picture
emulator/render-bridge/first-3d-frame.png: the arena from the pod -- sky, horizon, ground, the arena structures along the skyline -- at ~31fps on the VelociRender bridge. The whole chain now works in our build: MakeVideoRenderer -> BTL4VideoRenderer over DPLRenderer -> board boot -> Renderer::LoadMission -> DPLReadEnvironment for the art paths -> 40/40 arena objects loaded -> mission launch -> per-frame submission over the wire. The mistake worth remembering: the run was never stalled after InitializePlayerLink. I called that from a 150-second sample and it was just too short. CheckLoadMessageHandler reposts every second and will not advance until the min-priority event queue drains, and with the video renderer in the mission that takes minutes. A BT_LAUNCH_LOG trace showed the queue draining and then both RunMissionMessageHandler calls, the plasma display, and the first sensor tick -- matching the shipped binary line for line. The renderer deliberately holds a blank screen until RunningMission (L4VIDEO.CPP:5100), so 'black' was the app still loading, not a rendering bug. Zero unbuildable entities, zero geometry failures. The frame is static only because the mech is parked with no input, and the camera in the bridge title is the bridge's own viewer, not the game's eyepoint. Also banked the launch-gate trace (BT_LAUNCH_LOG) behind an env var. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -54,6 +54,8 @@ set BLASTER=A220 I5 D1 H5 P330 T6
|
||||
set BLASTER=A220 I5 D1 H5 P330 T6
|
||||
c:\sb16\diagnose /s
|
||||
set BLASTER=A240 I7 D3 H6 P300 T6
|
||||
c:\sb16\diagnose /s
|
||||
set BLASTER=A220 I5 D1 H5 P330 T6
|
||||
set TEMP=c:\
|
||||
rem arena1 city mission (TESTARN.EGG: map=arena1, time=day) with the RIO
|
||||
rem attached; stdout redirected so mission-load progress survives kills.
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
[sdl]
|
||||
output=opengl
|
||||
# higher,higher not highest: HIGH_PRIORITY_CLASS starved the host desktop;
|
||||
# with the retry patches a rare dropout self-recovers (see gauge_rio.conf).
|
||||
priority=higher,higher
|
||||
[dosbox]
|
||||
memsize=32
|
||||
machine=svga_s3
|
||||
[cpu]
|
||||
core=dynamic
|
||||
cputype=pentium
|
||||
cycles=max
|
||||
[sblaster]
|
||||
sbtype=sb16
|
||||
sbbase=220
|
||||
irq=5
|
||||
dma=1
|
||||
hdma=5
|
||||
[mixer]
|
||||
# match the EMU8000s' native rate (no resample) and buffer ~60ms so brief
|
||||
# emulation-thread stalls (RIO retry recovery) don't audibly chop
|
||||
rate=44100
|
||||
blocksize=1024
|
||||
prebuffer=60
|
||||
[serial]
|
||||
# RIO on COM1 with the low-latency options (rxpollus/rxburst) so the board's
|
||||
# few-ms ACK deadline is met; plasma display on COM2 (real pod has both).
|
||||
# VWE fork namedpipe backend (com0com/realport retired -- COM1/COM2 gone):
|
||||
# DOSBox = pipe client (retry), vRIO/vPLASMA apps = servers; an unconnected
|
||||
# pipe behaves as an unplugged cable so the mission still runs. serialnamedpipe.h
|
||||
serial1=namedpipe pipe:vrio rxpollus:100 rxburst:16
|
||||
serial2=namedpipe pipe:vplasma
|
||||
|
||||
# live UNBUFFERED game output: DOS char devices are not buffered, so
|
||||
|
||||
# redirecting stdout to COM3 lands every line immediately. A normal
|
||||
|
||||
# '> file' redirect stays 0 bytes until the process exits, which hides
|
||||
|
||||
# all progress on a run that does NOT crash.
|
||||
|
||||
serial3=file file:C:\VWE\TeslaRel410\emulator\render-bridge\podlog_test.txt
|
||||
[autoexec]
|
||||
mount c "C:\VWE\TeslaRel410\ALPHA_1"
|
||||
c:
|
||||
cd \REL410\BT
|
||||
set VIDEOFORMAT=svga
|
||||
rem production pod card init (PARAMETR.BAT:181-186): DIAGNOSE + AWEUTIL per
|
||||
rem card -- AWEUTIL /S does the EMU8000 bring-up and DRAM detect the HMI SOS
|
||||
rem driver relies on; skipping it left the cards uninitialized (silent).
|
||||
rem aweutil /s SKIPPED for now: it verifies the AWE32 GM ROM, which the
|
||||
rem emulated cards lack (hangs in a retry loop) -- restore once the ROM is
|
||||
rem dumped from a real card. diagnose /s kept (passes, sets mixer config).
|
||||
set BLASTER=A220 I5 D1 H5 P330 T6
|
||||
c:\sb16\diagnose /s
|
||||
set BLASTER=A240 I7 D3 H6 P300 T6
|
||||
c:\sb16\diagnose /s
|
||||
set BLASTER=A220 I5 D1 H5 P330 T6
|
||||
set TEMP=c:\
|
||||
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 HEAPSIZE=15000000
|
||||
set L4GAUGE=640x480x16
|
||||
call setenv.bat r s n p
|
||||
32rtm.exe -x
|
||||
BTL4REC.EXE -egg test.egg > COM3
|
||||
|
||||
echo GAME-RC=%errorlevel% >> RC.TXT
|
||||
32rtm.exe -u
|
||||
echo ALPHA1-RUN-DONE
|
||||
pause
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,18 @@
|
||||
BattleTech v4.10
|
||||
BTL4Application::BTL4Application
|
||||
GaugeInterpreter: undefined label 'Initialization'
|
||||
MakeVehicleSystems hud=0x01150bfc
|
||||
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 =416
|
||||
LBE4ControlsManager::Execute, lost RIO analog request
|
||||
iThinkIRQIsOn =1, actual state =1, characters sent =641
|
||||
BTL4Application::RunMissionMessageHandler
|
||||
Turning Plasma Score Display On
|
||||
BTL4Application::RunMissionMessageHandler
|
||||
Turning Plasma Score Display On
|
||||
@@ -0,0 +1,50 @@
|
||||
BattleTech v4.10
|
||||
BTL4Application::BTL4Application
|
||||
GaugeInterpreter: undefined label 'Initialization'
|
||||
[exp] master player experience=3 simLive=1 heatModelOn=1 advDamage=1
|
||||
[role] 'Role::Default' lives=1000 killBonus=500 dmgMod=1
|
||||
[torso] horizJoint '' -> 0x00000000 enabled=0
|
||||
[weap] 'PPC_1' seg=5 mount=sitelugunport rear=0
|
||||
[weap] 'PPC_2' seg=14 mount=siterugunport rear=0
|
||||
[weap] 'ERMLaser_1' seg=40 mount=siteltorsoport rear=0
|
||||
[weap] 'ERMLaser_2' seg=16 mount=siterbgunport rear=1
|
||||
[weap] 'ERMLaser_3' seg=7 mount=sitelbgunport rear=1
|
||||
[weap] 'SRM6_1' seg=40 mount=siteltorsoport rear=0
|
||||
[proj] 'SRM6_1' ammoBinIndex=27 -> AmmoBinSRM6_1 (rounds=24)
|
||||
[weap] 'SRM6_2' seg=39 mount=sitertorsoport rear=0
|
||||
[proj] 'SRM6_2' ammoBinIndex=29 -> AmmoBinSRM6_2 (rounds=24)
|
||||
[mech] segment walk done: subsystemCount=33 weaponCount=7
|
||||
[skel] jointSubsystem=0x00c24634 jointCount=19
|
||||
[mech] model params: walkTR=75 runTR=50 maxAcc=30 throttleAdj=1 (deg,deg,u/s^2,scale)
|
||||
[mech] look angles: L=60 R=-60 F=-10 B=0 (deg)
|
||||
[mech] damage zones streamed: 20 [dz_dtorso,dz_larm,dz_ldleg,dz_lfoot,dz_lgun,dz_lsearchlight,dz_ltorso,dz_luleg,dz_rarm,dz_rdleg,dz_reardtorso,dz_rearltorso,dz_rearrtorso,dz_rearutorso,dz_rfoot,dz_rgun,dz_rsearchlight,dz_rtorso,dz_ruleg,dz_utorso]
|
||||
[cyl] table 'bhk1' 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=0x00c25dd4 controlModeAttr=0x00c25e10
|
||||
[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=3028 auxScreen=1 name=PPC_1
|
||||
[gau2] cluster slot=23 classID=3028 auxScreen=10 name=PPC_2
|
||||
[gau2] cluster slot=24 classID=3016 auxScreen=4 name=ERMLaser_1
|
||||
[gau2] cluster slot=25 classID=3016 auxScreen=8 name=ERMLaser_2
|
||||
[gau2] cluster slot=26 classID=3016 auxScreen=7 name=ERMLaser_3
|
||||
[gau2] cluster slot=28 classID=3024 auxScreen=2 name=SRM6_1
|
||||
[gau2] cluster slot=30 classID=3024 auxScreen=9 name=SRM6_2
|
||||
ColorMapperArmor warning: damage zone dz_missle not found
|
||||
ColorMapperArmor warning: damage zone dz_hip not found
|
||||
ColorMapperArmor warning: damage zone dz_missle not found
|
||||
ColorMapperArmor warning: damage zone dz_searchlight 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=0x00a9c368
|
||||
Entity -1:63 class42 couldn't figure out how to MakeEntityRenderables
|
||||
Reference to a page you don't own
|
||||
PF cr2= 7000 FA64 at 00FF 0000 66D9
|
||||
Unhandled exception 000E at 00FF 66D9 ErrCode 0004
|
||||
@@ -1379,6 +1379,19 @@ void
|
||||
case CreatingMission:
|
||||
case LoadingMission:
|
||||
case WaitingForLaunch:
|
||||
//
|
||||
// LAUNCH-GATE TRACE (env BT_LAUNCH_LOG): this handler reposts
|
||||
// itself every second and will not advance until the low-priority
|
||||
// event queue drains, so a queue that never empties parks the
|
||||
// application at WaitingForLaunch forever -- no RunMissionMessage,
|
||||
// no RunningMission, and the video renderer deliberately holds a
|
||||
// BLANK SCREEN until then (L4VIDEO.CPP:5100).
|
||||
//
|
||||
if (getenv("BT_LAUNCH_LOG"))
|
||||
DEBUG_STREAM << "[launch] state=" << (int)applicationState.GetState()
|
||||
<< " minPriorityEmpty="
|
||||
<< (eventQueue->IsPriorityEmpty(MinEventPriority) ? 1 : 0)
|
||||
<< "\n" << flush;
|
||||
if (eventQueue->IsPriorityEmpty(MinEventPriority))
|
||||
{
|
||||
Host *console_host;
|
||||
|
||||
@@ -531,3 +531,50 @@ emulator/render-bridge/pod_render_rec.conf + `launch_pod.ps1 -NoSound`
|
||||
the process exits normally -- which is why every readable log before this
|
||||
came from a run that crashed.
|
||||
* pod_render_shp.conf is the same conf running the SHIPPED exe, for the A/B.
|
||||
|
||||
================================================================================
|
||||
THE 3-D WORLD RENDERS. Reconstruction -> emulated Division card -> a picture.
|
||||
================================================================================
|
||||
emulator/render-bridge/first-3d-frame.png -- the arena from the pod: sky,
|
||||
horizon, ground, the arena structures along the skyline with their markings,
|
||||
running at ~31fps on the VelociRender bridge.
|
||||
|
||||
The full chain now works end to end in OUR build: MakeVideoRenderer ->
|
||||
BTL4VideoRenderer over DPLRenderer -> board boot (transputer + i860 firmware)
|
||||
-> Renderer::LoadMission -> DPLReadEnvironment (art paths) -> 40/40 arena
|
||||
objects loaded -> mission launch -> per-frame submission over the wire.
|
||||
|
||||
WHAT ACTUALLY UNBLOCKED IT, and the mistake worth remembering:
|
||||
the run was NOT stalled after InitializePlayerLink. I concluded that from a
|
||||
150-second sample and it was simply too short. Application::
|
||||
CheckLoadMessageHandler (APP.CPP) reposts itself every second and refuses to
|
||||
advance until the MIN-priority event queue drains; with the video renderer in
|
||||
the mission that load takes minutes, not seconds. Traced with BT_LAUNCH_LOG:
|
||||
|
||||
[launch] state=11 minPriorityEmpty=0 <- loading, queue busy
|
||||
... 60+ ticks ...
|
||||
[launch] state=2 minPriorityEmpty=0
|
||||
[launch] state=2 minPriorityEmpty=1 <- drained
|
||||
BTL4Application::RunMissionMessageHandler (x2 -- the two messages that
|
||||
Turning Plasma Score Display On carry WaitingForLaunch ->
|
||||
BTL4Application::RunMissionMessageHandler LaunchingMission ->
|
||||
Turning Plasma Score Display On RunningMission)
|
||||
[tick] roster live (first Sensor frame), radarPercent=1 voltState=4
|
||||
|
||||
and that matches the SHIPPED binary's sequence line for line. The renderer
|
||||
holds a deliberately blank screen until RunningMission
|
||||
(L4VIDEO.CPP:5100, "Simple HACK to hold us on a blank screen till the mission
|
||||
is actually started") -- so "black" was never a rendering bug, it was the app
|
||||
still loading. WAIT FOR THE LAUNCH MARKERS before diagnosing a black pod.
|
||||
|
||||
STATE OF THE SCENE: no entity is unbuildable any more (zero "couldn't figure
|
||||
out how to MakeEntityRenderables"), zero geometry failures, and the frame is
|
||||
static only because the mech is parked with no pilot input. The camera in
|
||||
the bridge title is the BRIDGE's own viewer (launch_pod: "arrows in the RENDER
|
||||
window tune eye height", FP_UPOFF), not the game's eyepoint -- do not read it
|
||||
as the pilot view without checking.
|
||||
|
||||
NEXT: drive it. With controls fed (vRIO is already running in this rig) the
|
||||
mech should move and the scene should animate; then the mech's own model and
|
||||
the cockpit-interior renderables are what to verify against the shipped
|
||||
binary, which is a cheap A/B now (pod_render_shp.conf).
|
||||
|
||||
Reference in New Issue
Block a user