Files
firestorm/Gameleap/code/mw4/Code/MW4/WeaponMover_Tool.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

229 lines
6.1 KiB
C++

//===========================================================================//
// File: WeaponMover_Tool.cpp
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 09/09/98 JSE Inital base class based off of Shadowrun/Adept
// 09/25/98 BDB Inital WeaponMover class based off of Vehicle_Tool
//---------------------------------------------------------------------------//
// Copyright (C) 1998, Fasa Interactive //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#include "MW4Headers.hpp"
#include "WeaponMover.hpp"
#include "MWObject.hpp"
#include "MWTool.hpp"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
WeaponMover__GameModel::ConstructGameModel(Script *script)
{
Check_Object(script);
//
//--------------
// Set up stream
//--------------
//
MemoryStream *model_stream = script->modelStream;
Check_Object(model_stream);
model_stream->AllocateBytes(sizeof(WeaponMover__GameModel));
Mover__GameModel::ConstructGameModel(script);
WeaponMover__GameModel *model =
Cast_Pointer(WeaponMover__GameModel*, model_stream->GetPointer());
//
//------------------------------
// Set up the model file pointer
//------------------------------
//
NotationFile *model_file = script->modelFile;
Check_Object(model_file);
model->hitEffectMaterialTable = ResourceID::Null;
Page *page = model_file->GetPage("GameData");
Check_Object(page);
NotationFile effects_file;
if (page->GetEntry("HitEffectsFile", &effects_file))
{
FileDependencies *old_deps = Resource::ParentFileDependencies;
FileDependencies effect_deps(*effects_file.GetFileDependencies());
Resource::ParentFileDependencies = &effect_deps;
model->hitEffectMaterialTable = MWObject__GameModel::CreateEffectTableResource(&effects_file, MaterialCount);
Resource::ParentFileDependencies = old_deps;
old_deps->AddDependencies(&effect_deps);
}
model->secondaryHitEffectMaterialTable = ResourceID::Null;
if (page->GetEntry("SecondaryHitEffectsFile", &effects_file))
{
FileDependencies *old_deps = Resource::ParentFileDependencies;
FileDependencies effect_deps(*effects_file.GetFileDependencies());
Resource::ParentFileDependencies = &effect_deps;
model->secondaryHitEffectMaterialTable = MWObject__GameModel::CreateEffectTableResource(&effects_file, MaterialCount);
Resource::ParentFileDependencies = old_deps;
old_deps->AddDependencies(&effect_deps);
}
model->m_craterID = -1;
const char *crater_string;
if(page->GetEntry("CraterName", &crater_string))
{
MString crater_mstring = crater_string;
model->m_craterID = crater_mstring.GetHashValue();
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
bool
WeaponMover__GameModel::ReadAndVerify(
WeaponMover__GameModel *model,
ModelAttributeEntry *attribute_entry,
const char *data,
char **error,
int error_buffer
)
{
Check_Object(attribute_entry);
bool result = false;
bool valid_data = (*data != '\0');
//
//----------------------------------------
//Read in the values from the data entered
//----------------------------------------
//
result =
Mover__GameModel::ReadAndVerify(
model,
attribute_entry,
data,
error,
error_buffer
);
//
//---------------------------
//Verify all the model values
//---------------------------
//
switch(attribute_entry->attributeID)
{
case MaxDistanceAttributeID:
{
if(!valid_data)
{
Scalar value = 500.0f;
attribute_entry->SetValue(model, &value);
result = true;
}
if(model->maxDistance <= 0.0f)
{
_snprintf(
*error,
error_buffer,
"{[GameData]MaxDistance=%f}: value must be > 0!",
model->maxDistance
);
result = false;
}
break;
}
// MSL 5.03 Min Distance
// case MinDistanceAttributeID:
// {
// if(!valid_data)
// {
// Scalar value = 0.0f;
// attribute_entry->SetValue(model, &value);
// result = true;
// }
// if(model->minDistance < 0.0f)
// {
// _snprintf(
// *error,
// error_buffer,
// "{[GameData]MinDistance=%f}: value must be >= 0!",
// model->minDistance
// );
// result = false;
// }
// break;
// }
case TrailResourceAttributeID:
{
if(!valid_data)
{
ResourceID value = ResourceID::Null;
attribute_entry->SetValue(model, (void *)&value);
result = true;
}
break;
}
case DoesPlaceCraterAttributeID:
{
if(!valid_data)
{
bool value = false;
attribute_entry->SetValue(model,&value);
result = true;
}
break;
}
case HitEffectResourceAttributeID:
{
if(!valid_data)
{
ResourceID value = ResourceID::Null;
attribute_entry->SetValue(model, (void *)&value);
result = true;
}
break;
}
case SecondaryHitEffectResourceAttributeID:
{
if(!valid_data)
{
ResourceID value = ResourceID::Null;
attribute_entry->SetValue(model, (void *)&value);
result = true;
}
break;
}
case DamageDecalResourceAttributeID:
{
if(!valid_data)
{
ResourceID value = ResourceID::Null;
attribute_entry->SetValue(model, (void *)&value);
result = true;
}
break;
}
case LightAmpFlareOutAttributeID:
{
if(!valid_data)
{
Scalar value = 0.0f;
attribute_entry->SetValue(model, &value);
result = true;
}
if(model->m_lightAmpFlareOut < 0.0f)
{
_snprintf(
*error,
error_buffer,
"{[GameData]LightAmpFlareOut=%f}: value must be >= 0!",
model->m_lightAmpFlareOut
);
result = false;
}
break;
}
}
return result;
}