Files
TeslaRel410/restoration/source410/BT_L4/BTL4VID.HPP
T
CydandClaude Fable 5 d4f105f42d BT410 5.3.69: the cockpit eye sits in the canopy -- site handling in the walk
RecurseSKLFile now walks "site=" children.  Sites get no draw component --
which is why the walk's 26 nodes matched the real capture all along: sites
were never DCS nodes -- and siteeyepoint spawns the cockpit camera with the
donor's exact construction (bt411 btl4vid.cpp:462, decomp FUN_004579a8):
offset = the site's own local rest transform, parent = the site's PARENT
joint's DCS, not the hull root.  World orientation, torso twist and gait all
arrive through chain composition.  The root-DCS eye remains only as the
zero-construction fallback for skeletons with no siteeyepoint.

Measured on the live pod with the RIO streaming: [eye] cockpit eye on
'jointeye', 26 nodes / 19 objects / 1 eye, and the bridge camera sits at
Y = hull + 7.7 -- the exact chain sum jointlocal 5.29 + hip 0.37 + torso 0.31
+ jointeye 1.69.  canopy_eye1.png is the pilot's view, the mech's own nose
wedge visible below the sightline.  Own-mech cage handling is the next layer.

Also: eye_count threading through ReadSKLFile/RecurseSKLFile, and the [skl]
summary now reports it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 15:18:27 -05:00

102 lines
3.5 KiB
C++

//===========================================================================//
// File: btl4vid.hpp //
// Project: BattleTech //
// Contents: Implementation details for the BT video renderer //
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// //
//---------------------------------------------------------------------------//
// Copyright (C) 1995, Virtual World Entertainment, Inc. //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#if !defined(BTL4VID_HPP)
# define BTL4VID_HPP
# if !defined(L4VIDEO_HPP)
# include <l4video.hpp>
# endif
# include <dpl.h>
# include <dplutils.h>
//###########################################################################
//####################### BTL4VideoRenderer #############################
//###########################################################################
class BTL4VideoRenderer:
public DPLRenderer
{
public:
BTL4VideoRenderer(
RendererRate calibration_rate,
RendererComplexity calibration_complexity,
RendererPriority calibration_priority,
InterestType interest_type,
InterestDepth depth_calibration
);
~BTL4VideoRenderer();
protected:
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
// comment says it is only reached when nobody above could figure out
// what to build -- and it just complains. The engine's DPLRenderer
// layer knows the ENGINE classes; the game's own classes are ours.
//
void
MakeEntityRenderables(
Entity *entity,
ResourceDescription *model_resource,
ViewFrom view_type);
//
// The mech's model resource is a SKELETON, not an object, and the
// engine rejects it ("wrong video resource type") because building
// one is the GAME renderer's job. Shape taken from the surviving
// sibling header CODE/RP/RP_L4/RPL4VID.HPP.
//
dpl_DCS *
ReadSKLFile(
Entity *entity,
dpl_DCS *parent_dcs,
const char *skeleton_filename,
ViewFrom view_type,
int *eye_count);
dpl_DCS *
RecurseSKLFile(
Entity *entity,
dpl_DCS *parent_dcs,
NotationFile *skeleton,
const char *page_name,
int recursion_depth,
ViewFrom view_type,
dpl_ZONE *zone,
int *node_count,
int *object_count,
int *eye_count);
protected:
int reserved[16];
};
#endif