//===========================================================================// // File: mechtech.cpp // // Project: BattleTech Brick: Mech subsystems // // Contents: MechTech -- the on-board technician / repair subsystem // //---------------------------------------------------------------------------// // Copyright (C) 1995, Virtual World Entertainment, Inc. // // All Rights reserved worldwide // //===========================================================================// #include #pragma hdrstop #if !defined(MECHTECH_HPP) # include #endif #if !defined(MECH_HPP) # include #endif Derivation MechTech::ClassDerivations(Subsystem::ClassDerivations, "MechTech"); MechTech::SharedData MechTech::DefaultData( MechTech::ClassDerivations, Subsystem::MessageHandlers, Subsystem::AttributeIndex, Subsystem::StateCount ); MechTech::MechTech( Mech *entity, int subsystem_id, SubsystemResource *model, SharedData &shared_data ): Subsystem(entity, subsystem_id, model, shared_data), subsystemMonitors(NULL) { Check(entity); Check_Pointer(model); Check_Fpu(); } MechTech::~MechTech() { } Logical MechTech::TestInstance() const { return IsDerivedFrom(ClassDerivations); } // //############################################################################# // CreateStreamedSubsystem -- binary @004ad48c. Stamps classID 0x0BDC / size // 0x40 and zeroes the wooHoo trio; "AlarmModel" is OPTIONAL -- absent means // no alarm; present, the named model family must resolve in the resource // file (" couldn't locate .mod" otherwise). The surviving // MECHTECH.HPP signature puts the ResourceFile LAST. //############################################################################# // Logical MechTech::CreateStreamedSubsystem( NotationFile *model_file, const char *model_name, const char *subsystem_name, SubsystemResource *subsystem_resource, NotationFile *subsystem_file, const ResourceDirectories *directories, ResourceFile *resource_file ) { if ( !Subsystem::CreateStreamedSubsystem( model_file, model_name, subsystem_name, subsystem_resource, subsystem_file, directories ) ) { return False; } subsystem_resource->subsystemModelSize = 0x40; subsystem_resource->classID = RegisteredClass::MechTechClassID; subsystem_resource->alarmModel = (ResourceDescription::ResourceID)-1; subsystem_resource->wooHooMinimumDuration = 0.0f; subsystem_resource->wooHooDurationRange = 0.0f; subsystem_resource->wooHooChance = 0.0f; const char *alarm_model_name = NULL; if (!subsystem_file->GetEntry(subsystem_name, "AlarmModel", &alarm_model_name)) { return True; } ResourceDescription *description = resource_file->FindResourceDescription( alarm_model_name, ResourceDescription::ModelListResourceType); if (description == NULL) { DEBUG_STREAM << subsystem_name << " couldn't locate " << alarm_model_name << ".mod" << endl; return False; } subsystem_resource->alarmModel = description->resourceID; Check_Fpu(); return True; }