//===========================================================================// // File: btdirect.hh // // Project: Red Planet // // Contents: Chooses from a Selection of Camerea's and provides information // // to any number of cameraship's as to which player to follow // //---------------------------------------------------------------------------// // Date Who Modification // // -------- --- ---------------------------------------------------------- // // 01/15/95 JM Initial coding. // //---------------------------------------------------------------------------// // Copyright (C) 1995, Virtual World Entertainment, Inc. // // All Rights reserved worldwide // // This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // //===========================================================================// // // SURVIVING HEADER (ground truth -- reproduced verbatim from // 410SRC/Telsa40/Rel410/CODE/BT/BT/BTDIRECT.HPP). // // The block below was added during reconstruction (see btdirect.cpp for the // per-method @ADDR evidence) and is *commentary only* -- the class body is // unchanged from the shipped header. // // vtable @005134c4 (PTR_FUN_005134c4; CLASSMAP listed 5134b8 -- that // is actually mid-string in the "BTCameraDirector" // ClassDerivations name @005134b1; the real vtable // starts 0xC later at 005134c4). 17 slots, only // slot0 (the scalar-deleting dtor @004c1484) is a // BT override; slots 1..16 inherit CameraDirector. // ClassDerivations @00513414 DefaultData @00513444 // object size 0x238 (allocated by Make @004c1454 and by the entity factory // @004c15f0) // // BTCameraDirector adds NO data members of its own -- everything it touches // lives in the engine CameraDirector base (DIRECTOR.HPP; base vtable // @004e6b4c, base ctor @0042eec8). Base offsets observed in the decomp: // this+0x1c activePerformance (Simulation::Performance, 12 bytes) // this+0x28 simulationFlags ((flags & 0xc)==4 => replicant copy) // this+0x1fc cameraShip receiver (base idx 0x7f; setup target) // this+0x20c followedVehicle (embedded target Connection/SlotOf, // base idx 0x83, ctor @0042f121) // this+0x218 switchTimer (Scalar; base idx 0x86; base inits -1.0f, // base BeADirector resets 10.0f, BTCameraDirector // resets 30.0f) // this+0x21c cameraShip* (Receiver*; base idx 0x87; Dispatch target) // #if !defined (BTDIRECT_HPP) # define BTDIRECT_HPP # if !defined (DIRECTOR_HPP) # include # endif # if !defined (BTPLAYER_HPP) && 0 # include # endif class BTCameraDirector : public CameraDirector { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Shared Data support // public: static Derivation ClassDerivations; static SharedData DefaultData; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Simulation Support // public: typedef void (BTCameraDirector::*Performance)(Scalar time_slice); void SetPerformance(Performance performance) { Check(this); activePerformance = (Simulation::Performance)performance; } void CreateBTCameraShip(Scalar); void BeABTDirector(Scalar); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Construction and Destruction Support // BTCameraDirector( MakeMessage *creation_message, SharedData &virtual_data = DefaultData ); static BTCameraDirector* BTCameraDirector::Make(CameraDirector::MakeMessage *creation_message); ~BTCameraDirector(); Logical TestInstance() const; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Player-selection support // // @0042efe4 in the shipped binary documented this as a CameraDirector // base helper that walked the "Players" EntityGroup returning the player // whose display/slot index == i. The modernized engine CameraDirector // exposes only FindPlayerByRank(rank); BTCameraDirector needs the by-slot // variant, so it is declared here (BT-local) and defined in btdirect.cpp. // private: Player* GetPlayerByIndex(int index); }; #endif