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.
163 lines
3.2 KiB
C++
163 lines
3.2 KiB
C++
#include "MW4Headers.hpp"
|
|
|
|
#include "JumpJet.hpp"
|
|
#include "MWTool.hpp"
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
void
|
|
JumpJet__GameModel::ConstructGameModel(Script *script)
|
|
{
|
|
Check_Object(script);
|
|
|
|
//
|
|
//--------------
|
|
// Set up stream
|
|
//--------------
|
|
//
|
|
MemoryStream *model_stream = script->modelStream;
|
|
Check_Object(model_stream);
|
|
model_stream->AllocateBytes(sizeof(JumpJet__GameModel));
|
|
BaseClass::ConstructGameModel(script);
|
|
}
|
|
|
|
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
bool
|
|
JumpJet__GameModel::ReadAndVerify(
|
|
JumpJet__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 =
|
|
BaseClass::ReadAndVerify(
|
|
model,
|
|
attribute_entry,
|
|
data,
|
|
error,
|
|
error_buffer
|
|
);
|
|
//
|
|
//---------------------------
|
|
//Verify all the model values
|
|
//---------------------------
|
|
//
|
|
switch(attribute_entry->attributeID)
|
|
{
|
|
case RechargeTimeAttributeID:
|
|
{
|
|
if(!valid_data)
|
|
{
|
|
Scalar value = 10.0f;
|
|
attribute_entry->SetValue(model, &value);
|
|
result = true;
|
|
}
|
|
if (model->m_rechargeTime <= 0)
|
|
{
|
|
_snprintf(
|
|
*error,
|
|
error_buffer,
|
|
"{[GameData]RechargeTime=%f}: value must be > 0!",
|
|
model->m_rechargeTime
|
|
);
|
|
result = false;
|
|
}
|
|
|
|
break;
|
|
}
|
|
case BurnTimeAttributeID:
|
|
{
|
|
if(!valid_data)
|
|
{
|
|
Scalar value = 2.0f;
|
|
attribute_entry->SetValue(model, &value);
|
|
result = true;
|
|
}
|
|
if (model->m_burnTime <= 0)
|
|
{
|
|
_snprintf(
|
|
*error,
|
|
error_buffer,
|
|
"{[GameData]BurnTime=%f}: value must be > 0!",
|
|
model->m_burnTime
|
|
);
|
|
result = false;
|
|
}
|
|
|
|
break;
|
|
}
|
|
case FlightTimeAttributeID:
|
|
{
|
|
if(!valid_data)
|
|
{
|
|
Scalar value = 8.0f;
|
|
attribute_entry->SetValue(model, &value);
|
|
result = true;
|
|
}
|
|
Scalar temp = model->m_flightTime - model->m_burnTime;
|
|
if (temp <= SMALL)
|
|
{
|
|
_snprintf(
|
|
*error,
|
|
error_buffer,
|
|
"{[GameData]FlightTime=%f}: value must be > %f!",
|
|
model->m_flightTime,
|
|
model->m_burnTime
|
|
);
|
|
result = false;
|
|
}
|
|
else
|
|
{
|
|
Scalar acceleration = g_Gravity*temp*temp / (2.0f*model->m_flightTime - model->m_burnTime);
|
|
if (acceleration <= g_Gravity + SMALL)
|
|
{
|
|
_snprintf(
|
|
*error,
|
|
error_buffer,
|
|
"{[GameData]FlightTime=%f}: flight time must be longer!",
|
|
model->m_flightTime
|
|
);
|
|
result = false;
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
case SlipDistanceAttributeID:
|
|
{
|
|
if(!valid_data)
|
|
{
|
|
Scalar value = 30.0f;
|
|
attribute_entry->SetValue(model, &value);
|
|
result = true;
|
|
}
|
|
if (model->m_slipDistance < 0.0f)
|
|
{
|
|
_snprintf(
|
|
*error,
|
|
error_buffer,
|
|
"{[GameData]SlipDistance=%f}: value must be >= 0.0!",
|
|
model->m_slipDistance
|
|
);
|
|
result = false;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
return result;
|
|
}
|