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.
1140 lines
31 KiB
C++
1140 lines
31 KiB
C++
#include "BuildCurves.hpp"
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
gosFX::PointCloud::Specification*
|
|
CreatePointCloud(
|
|
gosFX::EffectLibrary *library,
|
|
unsigned index,
|
|
unsigned child
|
|
)
|
|
{
|
|
//
|
|
//-----------------------------------------
|
|
// Stick a new specification in the library
|
|
//-----------------------------------------
|
|
//
|
|
Check_Object(library);
|
|
Verify(!library->m_effects[index]);
|
|
gosFX::PointCloud::Specification* spec =
|
|
new gosFX::PointCloud::Specification(gosFX::PointCloudClassID);
|
|
Check_Object(spec);
|
|
library->m_effects[index] = spec;
|
|
spec->m_name = "PointCloud";
|
|
|
|
//
|
|
//------------------
|
|
// Set up the events
|
|
//------------------
|
|
//
|
|
if (child < EFFECT_COUNT)
|
|
{
|
|
gosFX::Event *event = new gosFX::Event;
|
|
Check_Object(event);
|
|
event->m_time = 0.0f;
|
|
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
|
|
event->m_effectID = child;
|
|
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
|
|
event->m_localToParent(3,1) = -0.2f;
|
|
spec->AdoptEvent(event);
|
|
}
|
|
|
|
//
|
|
//--------------------------
|
|
// Set up the default curves
|
|
//--------------------------
|
|
//
|
|
spec->BuildDefaults();
|
|
|
|
//
|
|
//----------------------
|
|
// Override given curves
|
|
//----------------------
|
|
//
|
|
spec->m_minimumChildSeed.SetCurve(0.5f, 0.0f);
|
|
spec->m_maximumChildSeed.SetCurve(1.0f, 0.5f);
|
|
|
|
spec->m_maxParticleCount = 150;
|
|
|
|
spec->m_startingPopulation.SetCurve(3.0f);
|
|
spec->m_particlesPerSecond.SetCurve(50.0f);
|
|
|
|
spec->m_maximumDeviation.SetCurve(Stuff::Pi_Over_6);
|
|
|
|
spec->m_startingSpeed.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_startingSpeed.m_seeded = true;
|
|
spec->m_startingSpeed.m_seedCurve.SetCurve(1.0f, 3.0f);
|
|
|
|
spec->m_pLifeSpan.m_ageCurve.SetCurve(2.0f);
|
|
spec->m_pLifeSpan.m_seeded = false;
|
|
spec->m_pLifeSpan.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAccelerationY.m_ageCurve.SetCurve(3.0f);
|
|
spec->m_pAccelerationY.m_seeded = false;
|
|
spec->m_pAccelerationY.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pEtherVelocityX.m_ageCurve.SetCurve(7.0f);
|
|
spec->m_pEtherVelocityX.m_seeded = false;
|
|
spec->m_pEtherVelocityX.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pDrag.m_ageCurve.SetCurve(0.3f);
|
|
spec->m_pDrag.m_seeded = false;
|
|
spec->m_pDrag.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pRed.m_ageCurve.SetCurve(1.0f, 0.0f);
|
|
spec->m_pRed.m_seeded = true;
|
|
spec->m_pRed.m_seedCurve.SetCurve(0.5f, 1.0f);
|
|
|
|
spec->m_pGreen.m_ageCurve.SetCurve(1.0f, 0.0f);
|
|
spec->m_pGreen.m_seeded = true;
|
|
spec->m_pGreen.m_seedCurve.SetCurve(1.0f, 0.5f);
|
|
|
|
spec->m_pBlue.m_ageCurve.SetCurve(0.25f);
|
|
spec->m_pBlue.m_seeded = true;
|
|
spec->m_pBlue.m_seedCurve.SetCurve(0.0f, 2.0f);
|
|
|
|
return spec;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
gosFX::ShardCloud::Specification*
|
|
CreateShardCloud(
|
|
gosFX::EffectLibrary *library,
|
|
unsigned index,
|
|
unsigned child
|
|
)
|
|
{
|
|
//
|
|
//-----------------------------------------
|
|
// Stick a new specification in the library
|
|
//-----------------------------------------
|
|
//
|
|
Check_Object(library);
|
|
Verify(!library->m_effects[index]);
|
|
gosFX::ShardCloud::Specification* spec = new gosFX::ShardCloud::Specification;
|
|
Check_Object(spec);
|
|
library->m_effects[index] = spec;
|
|
|
|
//
|
|
//-------------------------
|
|
// Build a simple FX holder
|
|
//-------------------------
|
|
//
|
|
spec->m_name = "ShardCloud";
|
|
|
|
//
|
|
//------------------
|
|
// Set up the events
|
|
//------------------
|
|
//
|
|
if (child < EFFECT_COUNT)
|
|
{
|
|
gosFX::Event *event = new gosFX::Event;
|
|
Check_Object(event);
|
|
event->m_time = 0.0f;
|
|
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
|
|
event->m_effectID = child;
|
|
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
|
|
spec->AdoptEvent(event);
|
|
}
|
|
|
|
//
|
|
//--------------------------
|
|
// Set up the default curves
|
|
//--------------------------
|
|
//
|
|
spec->BuildDefaults();
|
|
|
|
//
|
|
//-------------------------
|
|
// Set up the effect curves
|
|
//-------------------------
|
|
//
|
|
spec->m_lifeSpan.SetCurve(10.0f);
|
|
|
|
spec->m_minimumChildSeed.SetCurve(0.0f);
|
|
spec->m_maximumChildSeed.SetCurve(1.0f);
|
|
|
|
//
|
|
//---------------------------------
|
|
// Set up the particle cloud curves
|
|
//---------------------------------
|
|
//
|
|
spec->m_maxParticleCount = 200;
|
|
|
|
spec->m_startingPopulation.SetCurve(0.0f);
|
|
spec->m_particlesPerSecond.SetCurve(50.0f);
|
|
|
|
spec->m_emitterSizeX.SetCurve(0.0f);
|
|
spec->m_emitterSizeY.SetCurve(0.0f);
|
|
spec->m_emitterSizeZ.SetCurve(0.0f);
|
|
|
|
spec->m_minimumDeviation.SetCurve(0.0f);
|
|
spec->m_maximumDeviation.SetCurve(Stuff::Pi_Over_6);
|
|
|
|
spec->m_startingSpeed.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_startingSpeed.m_seeded = true;
|
|
spec->m_startingSpeed.m_seedCurve.SetCurve(1.0f, 3.0f);
|
|
|
|
spec->m_pLifeSpan.m_ageCurve.SetCurve(4.0f);
|
|
spec->m_pLifeSpan.m_seeded = false;
|
|
spec->m_pLifeSpan.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAccelerationX.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pAccelerationX.m_seeded = false;
|
|
spec->m_pAccelerationX.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAccelerationY.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pAccelerationY.m_seeded = false;
|
|
spec->m_pAccelerationY.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAccelerationZ.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pAccelerationZ.m_seeded = false;
|
|
spec->m_pAccelerationZ.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pEtherVelocityX.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pEtherVelocityX.m_seeded = false;
|
|
spec->m_pEtherVelocityX.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pEtherVelocityY.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pEtherVelocityY.m_seeded = false;
|
|
spec->m_pEtherVelocityY.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pEtherVelocityZ.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pEtherVelocityZ.m_seeded = false;
|
|
spec->m_pEtherVelocityZ.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pDrag.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pDrag.m_seeded = false;
|
|
spec->m_pDrag.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pRed.m_ageCurve.SetCurve(1.0f, 0.0f);
|
|
spec->m_pRed.m_seeded = false;
|
|
spec->m_pRed.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pGreen.m_ageCurve.SetCurve(1.0f, 0.0f);
|
|
spec->m_pGreen.m_seeded = false;
|
|
spec->m_pGreen.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pBlue.m_ageCurve.SetCurve(0.25f);
|
|
spec->m_pBlue.m_seeded = false;
|
|
spec->m_pBlue.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAlpha.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pAlpha.m_seeded = false;
|
|
spec->m_pAlpha.m_seedCurve.SetCurve(1.0f);
|
|
|
|
//
|
|
//----------------------------------
|
|
// Fill in the Spinning cloud curves
|
|
//----------------------------------
|
|
//
|
|
spec->m_randomStartingRotation = true;
|
|
spec->m_alignZUsingX = false;
|
|
spec->m_alignZUsingY = true;
|
|
|
|
spec->m_pSpin.m_ageCurve.SetCurve(Stuff::Pi_Over_2);
|
|
spec->m_pSpin.m_seeded = true;
|
|
spec->m_pSpin.m_seedCurve.SetCurve(-1.0f, 1.0f);
|
|
|
|
spec->m_pScale.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pScale.m_seeded = false;
|
|
spec->m_pScale.m_seedCurve.SetCurve(1.0f);
|
|
|
|
//
|
|
//-------------------------------
|
|
// Fill in the Shard cloud curves
|
|
//-------------------------------
|
|
//
|
|
spec->m_size.m_ageCurve.SetCurve(1.0f, 2.0f);
|
|
spec->m_size.m_seeded = false;
|
|
spec->m_size.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_angularity.m_ageCurve.SetCurve(Stuff::Pi_Over_2);
|
|
spec->m_angularity.m_seeded = true;
|
|
spec->m_angularity.m_seedCurve.SetCurve(-0.9f, 0.9f);
|
|
|
|
return spec;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
gosFX::PertCloud::Specification*
|
|
CreatePertCloud(
|
|
gosFX::EffectLibrary *library,
|
|
unsigned index,
|
|
unsigned child
|
|
)
|
|
{
|
|
//
|
|
//-----------------------------------------
|
|
// Stick a new specification in the library
|
|
//-----------------------------------------
|
|
//
|
|
Check_Object(library);
|
|
Verify(!library->m_effects[index]);
|
|
gosFX::PertCloud::Specification* spec = new gosFX::PertCloud::Specification(5);
|
|
Check_Object(spec);
|
|
library->m_effects[index] = spec;
|
|
|
|
//
|
|
//-------------------------
|
|
// Build a simple FX holder
|
|
//-------------------------
|
|
//
|
|
spec->m_name = "PertCloud";
|
|
spec->m_state.SetAlphaMode(MidLevelRenderer::MLRState::AlphaInvAlphaMode);
|
|
spec->m_state.SetPriority(MidLevelRenderer::MLRState::AlphaPriority);
|
|
|
|
//
|
|
//------------------
|
|
// Set up the events
|
|
//------------------
|
|
//
|
|
if (child < EFFECT_COUNT)
|
|
{
|
|
gosFX::Event *event = new gosFX::Event;
|
|
Check_Object(event);
|
|
event->m_time = 0.0f;
|
|
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
|
|
event->m_effectID = child;
|
|
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
|
|
// event->m_localToParent(3,1) = -1.5f;
|
|
spec->AdoptEvent(event);
|
|
}
|
|
|
|
//
|
|
//--------------------------
|
|
// Set up the default curves
|
|
//--------------------------
|
|
//
|
|
spec->BuildDefaults();
|
|
|
|
//
|
|
//-------------------------
|
|
// Set up the effect curves
|
|
//-------------------------
|
|
//
|
|
spec->m_lifeSpan.SetCurve(10.0f);
|
|
|
|
spec->m_minimumChildSeed.SetCurve(0.0f);
|
|
spec->m_maximumChildSeed.SetCurve(1.0f);
|
|
|
|
//
|
|
//---------------------------------
|
|
// Set up the particle cloud curves
|
|
//---------------------------------
|
|
//
|
|
spec->m_maxParticleCount = 140;
|
|
|
|
spec->m_startingPopulation.SetCurve(0.0f);
|
|
spec->m_particlesPerSecond.SetCurve(50.0f);
|
|
|
|
spec->m_emitterSizeX.SetCurve(1.0f);
|
|
spec->m_emitterSizeY.SetCurve(1.0f);
|
|
spec->m_emitterSizeZ.SetCurve(1.0f);
|
|
|
|
spec->m_minimumDeviation.SetCurve(0.0f);
|
|
spec->m_maximumDeviation.SetCurve(Stuff::Pi_Over_6);
|
|
|
|
spec->m_startingSpeed.m_ageCurve.SetCurve(2.0f);
|
|
spec->m_startingSpeed.m_seeded = true;
|
|
spec->m_startingSpeed.m_seedCurve.SetCurve(1.0f, 2.0f);
|
|
|
|
spec->m_pLifeSpan.m_ageCurve.SetCurve(2.0f);
|
|
spec->m_pLifeSpan.m_seeded = false;
|
|
spec->m_pLifeSpan.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAccelerationX.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pAccelerationX.m_seeded = false;
|
|
spec->m_pAccelerationX.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAccelerationY.m_ageCurve.SetCurve(-3.0f);
|
|
spec->m_pAccelerationY.m_seeded = false;
|
|
spec->m_pAccelerationY.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAccelerationZ.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pAccelerationZ.m_seeded = false;
|
|
spec->m_pAccelerationZ.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pEtherVelocityX.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pEtherVelocityX.m_seeded = false;
|
|
spec->m_pEtherVelocityX.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pEtherVelocityY.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pEtherVelocityY.m_seeded = false;
|
|
spec->m_pEtherVelocityY.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pEtherVelocityZ.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pEtherVelocityZ.m_seeded = false;
|
|
spec->m_pEtherVelocityZ.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pDrag.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pDrag.m_seeded = false;
|
|
spec->m_pDrag.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pRed.m_ageCurve.SetCurve(1.0f, 0.0f);
|
|
spec->m_pRed.m_seeded = false;
|
|
spec->m_pRed.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pGreen.m_ageCurve.SetCurve(1.0f, 0.0f);
|
|
spec->m_pGreen.m_seeded = false;
|
|
spec->m_pGreen.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pBlue.m_ageCurve.SetCurve(0.25f);
|
|
spec->m_pBlue.m_seeded = false;
|
|
spec->m_pBlue.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAlpha.m_ageCurve.SetCurve(1.0f, 0.0f);
|
|
spec->m_pAlpha.m_seeded = false;
|
|
spec->m_pAlpha.m_seedCurve.SetCurve(1.0f);
|
|
|
|
//
|
|
//----------------------------------
|
|
// Fill in the Spinning cloud curves
|
|
//----------------------------------
|
|
//
|
|
spec->m_randomStartingRotation = true;
|
|
spec->m_alignZUsingX = true;
|
|
spec->m_alignZUsingY = false;
|
|
|
|
spec->m_pSpin.m_ageCurve.SetCurve(Stuff::Pi_Over_2);
|
|
spec->m_pSpin.m_seeded = true;
|
|
spec->m_pSpin.m_seedCurve.SetCurve(-1.0f, 1.0f);
|
|
|
|
spec->m_pScale.m_ageCurve.SetCurve(4.0, 1.0f);
|
|
spec->m_pScale.m_seeded = false;
|
|
spec->m_pScale.m_seedCurve.SetCurve(1.0f);
|
|
|
|
//
|
|
//-------------------------------
|
|
// Fill in the pert cloud curves
|
|
//-------------------------------
|
|
//
|
|
spec->m_pCenterRed.m_ageCurve.SetCurve(1.0, 1.0f);
|
|
spec->m_pCenterRed.m_seeded = false;
|
|
spec->m_pCenterRed.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pCenterGreen.m_ageCurve.SetCurve(1.0f, 0.0f);
|
|
spec->m_pCenterGreen.m_seeded = false;
|
|
spec->m_pCenterGreen.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pCenterBlue.m_ageCurve.SetCurve(0.25f);
|
|
spec->m_pCenterBlue.m_seeded = false;
|
|
spec->m_pCenterBlue.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pCenterAlpha.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pCenterAlpha.m_seeded = false;
|
|
spec->m_pCenterAlpha.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_size.m_ageCurve.SetCurve(0.2f);
|
|
spec->m_size.m_seeded = false;
|
|
spec->m_size.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_perturbation.m_ageCurve.SetCurve(0.25f);
|
|
spec->m_perturbation.m_seeded = true;
|
|
spec->m_perturbation.m_seedCurve.SetCurve(-1.0f, 1.0f);
|
|
|
|
return spec;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
gosFX::CardCloud::Specification*
|
|
CreateCardCloud(
|
|
gosFX::EffectLibrary *library,
|
|
unsigned index,
|
|
MidLevelRenderer::MLRTexture *texture,
|
|
unsigned child
|
|
)
|
|
{
|
|
//
|
|
//-----------------------------------------
|
|
// Stick a new specification in the library
|
|
//-----------------------------------------
|
|
//
|
|
Check_Object(library);
|
|
Verify(!library->m_effects[index]);
|
|
gosFX::CardCloud::Specification* spec = new gosFX::CardCloud::Specification;
|
|
Check_Object(spec);
|
|
library->m_effects[index] = spec;
|
|
|
|
//
|
|
//-------------------------
|
|
// Build a simple FX holder
|
|
//-------------------------
|
|
//
|
|
spec->m_name = "CardCloud";
|
|
spec->m_state.SetAlphaMode(MidLevelRenderer::MLRState::AlphaInvAlphaMode);
|
|
spec->m_state.SetPriority(MidLevelRenderer::MLRState::AlphaPriority);
|
|
Check_Object(texture);
|
|
spec->m_state.SetTextureHandle(texture->GetTextureHandle());
|
|
|
|
//
|
|
//------------------
|
|
// Set up the events
|
|
//------------------
|
|
//
|
|
if (child < EFFECT_COUNT)
|
|
{
|
|
gosFX::Event *event = new gosFX::Event;
|
|
Check_Object(event);
|
|
event->m_time = 0.0f;
|
|
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
|
|
event->m_effectID = child;
|
|
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
|
|
// event->m_localToParent(3,1) = -1.5f;
|
|
spec->AdoptEvent(event);
|
|
}
|
|
|
|
//
|
|
//--------------------------
|
|
// Set up the default curves
|
|
//--------------------------
|
|
//
|
|
spec->BuildDefaults();
|
|
|
|
//
|
|
//-------------------------
|
|
// Set up the effect curves
|
|
//-------------------------
|
|
//
|
|
spec->m_lifeSpan.SetCurve(1.0f);
|
|
|
|
spec->m_minimumChildSeed.SetCurve(0.0f);
|
|
spec->m_maximumChildSeed.SetCurve(1.0f);
|
|
|
|
//
|
|
//---------------------------------
|
|
// Set up the particle cloud curves
|
|
//---------------------------------
|
|
//
|
|
spec->m_maxParticleCount = 20;
|
|
|
|
spec->m_startingPopulation.SetCurve(0.0f);
|
|
spec->m_particlesPerSecond.SetCurve(5.0f);
|
|
|
|
spec->m_emitterSizeX.SetCurve(1.0f);
|
|
spec->m_emitterSizeY.SetCurve(1.0f);
|
|
spec->m_emitterSizeZ.SetCurve(1.0f);
|
|
|
|
spec->m_minimumDeviation.SetCurve(0.0f);
|
|
spec->m_maximumDeviation.SetCurve(Stuff::Pi_Over_6);
|
|
|
|
spec->m_startingSpeed.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_startingSpeed.m_seeded = true;
|
|
spec->m_startingSpeed.m_seedCurve.SetCurve(-1.0f, 1.0f);
|
|
|
|
spec->m_pLifeSpan.m_ageCurve.SetCurve(3.0f);
|
|
spec->m_pLifeSpan.m_seeded = false;
|
|
spec->m_pLifeSpan.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAccelerationX.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pAccelerationX.m_seeded = false;
|
|
spec->m_pAccelerationX.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAccelerationY.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pAccelerationY.m_seeded = false;
|
|
spec->m_pAccelerationY.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAccelerationZ.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pAccelerationZ.m_seeded = false;
|
|
spec->m_pAccelerationZ.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pEtherVelocityX.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pEtherVelocityX.m_seeded = false;
|
|
spec->m_pEtherVelocityX.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pEtherVelocityY.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pEtherVelocityY.m_seeded = false;
|
|
spec->m_pEtherVelocityY.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pEtherVelocityZ.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pEtherVelocityZ.m_seeded = false;
|
|
spec->m_pEtherVelocityZ.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pDrag.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pDrag.m_seeded = false;
|
|
spec->m_pDrag.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pRed.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pRed.m_seeded = false;
|
|
spec->m_pRed.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pGreen.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pGreen.m_seeded = false;
|
|
spec->m_pGreen.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pBlue.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pBlue.m_seeded = false;
|
|
spec->m_pBlue.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAlpha.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pAlpha.m_seeded = false;
|
|
spec->m_pAlpha.m_seedCurve.SetCurve(1.0f);
|
|
|
|
//
|
|
//----------------------------------
|
|
// Fill in the Spinning cloud curves
|
|
//----------------------------------
|
|
//
|
|
spec->m_randomStartingRotation = false;
|
|
spec->m_alignZUsingX = true;
|
|
spec->m_alignZUsingY = true;
|
|
|
|
spec->m_pSpin.m_ageCurve.SetCurve(Stuff::Pi_Over_2);
|
|
spec->m_pSpin.m_seeded = true;
|
|
spec->m_pSpin.m_seedCurve.SetCurve(-1.0f, 1.0f);
|
|
|
|
spec->m_pScale.m_ageCurve.SetCurve(0.2f);
|
|
spec->m_pScale.m_seeded = false;
|
|
spec->m_pScale.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pIndex.m_ageCurve.SetCurve(0.0f, 3.999f);
|
|
spec->m_pIndex.m_seeded = false;
|
|
spec->m_pIndex.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_USize.SetCurve(0.5f);
|
|
spec->m_VSize.SetCurve(0.5f);
|
|
|
|
spec->m_animated = true;
|
|
spec->m_width = 2;
|
|
return spec;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
gosFX::EffectCloud::Specification*
|
|
CreateEffectCloud(
|
|
gosFX::EffectLibrary *library,
|
|
unsigned index,
|
|
unsigned effect,
|
|
unsigned child
|
|
)
|
|
{
|
|
//
|
|
//-----------------------------------------
|
|
// Stick a new specification in the library
|
|
//-----------------------------------------
|
|
//
|
|
Check_Object(library);
|
|
Verify(!library->m_effects[index]);
|
|
gosFX::EffectCloud::Specification* spec = new gosFX::EffectCloud::Specification;
|
|
Check_Object(spec);
|
|
library->m_effects[index] = spec;
|
|
|
|
//
|
|
//-------------------------
|
|
// Build a simple FX holder
|
|
//-------------------------
|
|
//
|
|
spec->m_name = "EffectCloud";
|
|
spec->m_effectID = index;
|
|
|
|
//
|
|
//------------------
|
|
// Set up the events
|
|
//------------------
|
|
//
|
|
if (child < EFFECT_COUNT)
|
|
{
|
|
gosFX::Event *event = new gosFX::Event;
|
|
Check_Object(event);
|
|
event->m_time = 0.0f;
|
|
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
|
|
event->m_effectID = child;
|
|
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
|
|
// event->m_localToParent(3,1) = -1.5f;
|
|
spec->AdoptEvent(event);
|
|
}
|
|
|
|
//
|
|
//--------------------------
|
|
// Set up the default curves
|
|
//--------------------------
|
|
//
|
|
spec->BuildDefaults();
|
|
|
|
//
|
|
//-------------------------
|
|
// Set up the effect curves
|
|
//-------------------------
|
|
//
|
|
spec->m_lifeSpan.SetCurve(10.0f);
|
|
|
|
spec->m_minimumChildSeed.SetCurve(0.0f);
|
|
spec->m_maximumChildSeed.SetCurve(1.0f);
|
|
|
|
//
|
|
//---------------------------------
|
|
// Set up the particle cloud curves
|
|
//---------------------------------
|
|
//
|
|
spec->m_maxParticleCount = 12;
|
|
|
|
spec->m_startingPopulation.SetCurve(3.0f);
|
|
spec->m_particlesPerSecond.SetCurve(2.0f);
|
|
|
|
spec->m_emitterSizeX.SetCurve(1.0f);
|
|
spec->m_emitterSizeY.SetCurve(1.0f);
|
|
spec->m_emitterSizeZ.SetCurve(1.0f);
|
|
|
|
spec->m_minimumDeviation.SetCurve(0.0f);
|
|
spec->m_maximumDeviation.SetCurve(Stuff::Pi_Over_6);
|
|
|
|
spec->m_startingSpeed.m_ageCurve.SetCurve(2.0f);
|
|
spec->m_startingSpeed.m_seeded = true;
|
|
spec->m_startingSpeed.m_seedCurve.SetCurve(1.0f, 2.0f);
|
|
|
|
spec->m_pLifeSpan.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pLifeSpan.m_seeded = false;
|
|
spec->m_pLifeSpan.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAccelerationX.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pAccelerationX.m_seeded = false;
|
|
spec->m_pAccelerationX.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAccelerationY.m_ageCurve.SetCurve(-2.0f);
|
|
spec->m_pAccelerationY.m_seeded = false;
|
|
spec->m_pAccelerationY.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAccelerationZ.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pAccelerationZ.m_seeded = false;
|
|
spec->m_pAccelerationZ.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pEtherVelocityX.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pEtherVelocityX.m_seeded = false;
|
|
spec->m_pEtherVelocityX.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pEtherVelocityY.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pEtherVelocityY.m_seeded = false;
|
|
spec->m_pEtherVelocityY.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pEtherVelocityZ.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pEtherVelocityZ.m_seeded = false;
|
|
spec->m_pEtherVelocityZ.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pDrag.m_ageCurve.SetCurve(0.0f);
|
|
spec->m_pDrag.m_seeded = false;
|
|
spec->m_pDrag.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pRed.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pRed.m_seeded = false;
|
|
spec->m_pRed.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pGreen.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pGreen.m_seeded = false;
|
|
spec->m_pGreen.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pBlue.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pBlue.m_seeded = false;
|
|
spec->m_pBlue.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_pAlpha.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pAlpha.m_seeded = false;
|
|
spec->m_pAlpha.m_seedCurve.SetCurve(1.0f);
|
|
|
|
//
|
|
//----------------------------------
|
|
// Fill in the Spinning cloud curves
|
|
//----------------------------------
|
|
//
|
|
spec->m_particleEffectID = effect;
|
|
spec->m_randomStartingRotation = false;
|
|
spec->m_alignZUsingX = false;
|
|
spec->m_alignZUsingY = false;
|
|
|
|
spec->m_pSpin.m_ageCurve.SetCurve(Stuff::Pi_Over_2);
|
|
spec->m_pSpin.m_seeded = true;
|
|
spec->m_pSpin.m_seedCurve.SetCurve(-1.0f, 1.0f);
|
|
|
|
spec->m_pScale.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_pScale.m_seeded = false;
|
|
spec->m_pScale.m_seedCurve.SetCurve(1.0f);
|
|
|
|
return spec;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
gosFX::Card::Specification*
|
|
CreateCard(
|
|
gosFX::EffectLibrary *library,
|
|
unsigned index,
|
|
MidLevelRenderer::MLRTexture *texture,
|
|
unsigned child
|
|
)
|
|
{
|
|
//
|
|
//-----------------------------------------
|
|
// Stick a new specification in the library
|
|
//-----------------------------------------
|
|
//
|
|
Check_Object(library);
|
|
Verify(!library->m_effects[index]);
|
|
gosFX::Card::Specification* spec =
|
|
new gosFX::Card::Specification(gosFX::CardClassID);
|
|
Check_Object(spec);
|
|
library->m_effects[index] = spec;
|
|
|
|
//
|
|
//-------------------------
|
|
// Build a simple FX holder
|
|
//-------------------------
|
|
//
|
|
spec->m_name = "Card";
|
|
spec->m_state.SetAlphaMode(MidLevelRenderer::MLRState::AlphaInvAlphaMode);
|
|
spec->m_state.SetPriority(MidLevelRenderer::MLRState::AlphaPriority);
|
|
Check_Object(texture);
|
|
spec->m_state.SetTextureHandle(texture->GetTextureHandle());
|
|
|
|
//
|
|
//------------------
|
|
// Set up the events
|
|
//------------------
|
|
//
|
|
if (child < EFFECT_COUNT)
|
|
{
|
|
gosFX::Event *event = new gosFX::Event;
|
|
Check_Object(event);
|
|
event->m_time = 0.0f;
|
|
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
|
|
event->m_effectID = child;
|
|
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
|
|
spec->AdoptEvent(event);
|
|
}
|
|
|
|
//
|
|
//--------------------------
|
|
// Set up the default curves
|
|
//--------------------------
|
|
//
|
|
spec->BuildDefaults();
|
|
|
|
//
|
|
//-------------------------
|
|
// Set up the effect curves
|
|
//-------------------------
|
|
//
|
|
spec->m_lifeSpan.SetCurve(1.0f);
|
|
|
|
spec->m_minimumChildSeed.SetCurve(0.0f);
|
|
spec->m_maximumChildSeed.SetCurve(1.0f);
|
|
|
|
//
|
|
//----------------------------
|
|
// Set up the singleton curves
|
|
//----------------------------
|
|
//
|
|
spec->m_red.m_ageCurve.SetCurve(1.0f, 0.0f);
|
|
spec->m_red.m_seeded = false;
|
|
spec->m_red.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_green.m_ageCurve.SetCurve(1.0f, 0.0f);
|
|
spec->m_green.m_seeded = false;
|
|
spec->m_green.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_blue.m_ageCurve.SetCurve(0.25f);
|
|
spec->m_blue.m_seeded = false;
|
|
spec->m_blue.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_alpha.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_alpha.m_seeded = false;
|
|
spec->m_alpha.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_spin.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_spin.m_seeded = false;
|
|
spec->m_spin.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_scale.m_ageCurve.SetCurve(0.2f);
|
|
spec->m_scale.m_seeded = false;
|
|
spec->m_scale.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_randomStartingRotation = true;
|
|
spec->m_alignZUsingX = false;
|
|
spec->m_alignZUsingY = false;
|
|
|
|
//
|
|
//-------------------------------
|
|
// Fill in the Card cloud curves
|
|
//-------------------------------
|
|
//
|
|
spec->m_halfHeight.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_halfHeight.m_seeded = false;
|
|
spec->m_halfHeight.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_aspectRatio.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_aspectRatio.m_seeded = false;
|
|
spec->m_aspectRatio.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_index.m_ageCurve.SetCurve(0.0f, 3.999f);
|
|
spec->m_index.m_seeded = false;
|
|
spec->m_index.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_USize.SetCurve(0.5f);
|
|
spec->m_VSize.SetCurve(0.5f);
|
|
|
|
spec->m_animated = true;
|
|
spec->SetWidth();
|
|
// spec->m_width = 2;
|
|
|
|
return spec;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
gosFX::Tube::Specification*
|
|
CreateTube(
|
|
gosFX::EffectLibrary *library,
|
|
unsigned index,
|
|
MidLevelRenderer::MLRTexture *texture,
|
|
unsigned child
|
|
)
|
|
{
|
|
//
|
|
//-----------------------------------------
|
|
// Stick a new specification in the library
|
|
//-----------------------------------------
|
|
//
|
|
Check_Object(library);
|
|
Verify(!library->m_effects[index]);
|
|
gosFX::Tube::Specification* spec = new gosFX::Tube::Specification;
|
|
Check_Object(spec);
|
|
library->m_effects[index] = spec;
|
|
|
|
//
|
|
//-------------------------
|
|
// Build a simple FX holder
|
|
//-------------------------
|
|
//
|
|
spec->m_name = "Tube";
|
|
spec->m_state.SetAlphaMode(MidLevelRenderer::MLRState::OneOneMode);
|
|
spec->m_state.SetPriority(MidLevelRenderer::MLRState::AlphaPriority);
|
|
Check_Object(texture);
|
|
spec->m_state.SetTextureHandle(texture->GetTextureHandle());
|
|
|
|
//
|
|
//------------------
|
|
// Set up the events
|
|
//------------------
|
|
//
|
|
if (child < EFFECT_COUNT)
|
|
{
|
|
gosFX::Event *event = new gosFX::Event;
|
|
Check_Object(event);
|
|
event->m_time = 0.0f;
|
|
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
|
|
event->m_effectID = child;
|
|
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
|
|
spec->AdoptEvent(event);
|
|
}
|
|
|
|
//
|
|
//--------------------------
|
|
// Set up the default curves
|
|
//--------------------------
|
|
//
|
|
spec->BuildDefaults();
|
|
spec->m_lifeSpan.SetCurve(4.0f);
|
|
|
|
#if 0
|
|
spec->m_minimumDeviation.SetCurve(0.0);
|
|
spec->m_maximumDeviation.SetCurve(1.0f);
|
|
|
|
spec->m_pDisplacement.m_ageCurve.SetCurve(0.0f, 2.0f);
|
|
spec->m_pDisplacement.m_seeded = false;
|
|
spec->m_pDisplacement.m_seedCurve.SetCurve(1.0f);
|
|
#endif
|
|
|
|
//
|
|
//---------------------------------
|
|
// Set up the particle cloud curves
|
|
//---------------------------------
|
|
//
|
|
spec->m_maxProfileCount = 21;
|
|
spec->m_profileType = gosFX::Tube::Specification::e_Pentagon;
|
|
spec->m_insideOut = false;
|
|
spec->BuildTemplate();
|
|
|
|
spec->m_profilesPerSecond.SetCurve(10.0f);
|
|
spec->m_pLifeSpan.SetCurve(2.0f);
|
|
|
|
return spec;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
gosFX::Beam::Specification*
|
|
CreateBeam(
|
|
gosFX::EffectLibrary *library,
|
|
unsigned index,
|
|
MidLevelRenderer::MLRTexture *texture,
|
|
unsigned child
|
|
)
|
|
{
|
|
//
|
|
//-----------------------------------------
|
|
// Stick a new specification in the library
|
|
//-----------------------------------------
|
|
//
|
|
Check_Object(library);
|
|
Verify(!library->m_effects[index]);
|
|
gosFX::Beam::Specification* spec = new gosFX::Beam::Specification;
|
|
Check_Object(spec);
|
|
library->m_effects[index] = spec;
|
|
|
|
//
|
|
//-------------------------
|
|
// Build a simple FX holder
|
|
//-------------------------
|
|
//
|
|
spec->m_name = "Beam";
|
|
spec->m_state.SetAlphaMode(MidLevelRenderer::MLRState::OneOneMode);
|
|
spec->m_state.SetPriority(MidLevelRenderer::MLRState::AlphaPriority);
|
|
Check_Object(texture);
|
|
spec->m_state.SetTextureHandle(texture->GetTextureHandle());
|
|
|
|
//
|
|
//------------------
|
|
// Set up the events
|
|
//------------------
|
|
//
|
|
if (child < EFFECT_COUNT)
|
|
{
|
|
gosFX::Event *event = new gosFX::Event;
|
|
Check_Object(event);
|
|
event->m_time = 0.0f;
|
|
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
|
|
event->m_effectID = child;
|
|
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
|
|
spec->AdoptEvent(event);
|
|
}
|
|
|
|
//
|
|
//--------------------------
|
|
// Set up the default curves
|
|
//--------------------------
|
|
//
|
|
spec->BuildDefaults();
|
|
spec->m_lifeSpan.SetCurve(4.0f);
|
|
|
|
#if 0
|
|
spec->m_minimumDeviation.SetCurve(0.0);
|
|
spec->m_maximumDeviation.SetCurve(1.0f);
|
|
|
|
spec->m_pDisplacement.m_ageCurve.SetCurve(0.0f, 2.0f);
|
|
spec->m_pDisplacement.m_seeded = false;
|
|
spec->m_pDisplacement.m_seedCurve.SetCurve(1.0f);
|
|
#endif
|
|
|
|
//
|
|
//---------------------------------
|
|
// Set up the particle cloud curves
|
|
//---------------------------------
|
|
//
|
|
spec->m_maxProfileCount = 21;
|
|
spec->m_profileType = gosFX::Beam::Specification::e_Pentagon;
|
|
spec->m_insideOut = false;
|
|
spec->BuildTemplate();
|
|
|
|
spec->m_profilesPerMeter.SetCurve(2.43f);
|
|
|
|
return spec;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
gosFX::Flare::Specification*
|
|
CreateFlare(
|
|
gosFX::EffectLibrary *library,
|
|
unsigned index,
|
|
MidLevelRenderer::MLRTexture *texture,
|
|
unsigned child
|
|
)
|
|
{
|
|
//
|
|
//-----------------------------------------
|
|
// Stick a new specification in the library
|
|
//-----------------------------------------
|
|
//
|
|
Check_Object(library);
|
|
Verify(!library->m_effects[index]);
|
|
gosFX::Flare::Specification* spec =
|
|
new gosFX::Flare::Specification;
|
|
Check_Object(spec);
|
|
library->m_effects[index] = spec;
|
|
|
|
//
|
|
//-------------------------
|
|
// Build a simple FX holder
|
|
//-------------------------
|
|
//
|
|
spec->m_name = "Flare";
|
|
spec->m_state.SetAlphaMode(MidLevelRenderer::MLRState::AlphaInvAlphaMode);
|
|
spec->m_state.SetPriority(MidLevelRenderer::MLRState::AlphaPriority);
|
|
Check_Object(texture);
|
|
spec->m_state.SetTextureHandle(texture->GetTextureHandle());
|
|
|
|
//
|
|
//------------------
|
|
// Set up the events
|
|
//------------------
|
|
//
|
|
if (child < EFFECT_COUNT)
|
|
{
|
|
gosFX::Event *event = new gosFX::Event;
|
|
Check_Object(event);
|
|
event->m_time = 0.0f;
|
|
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
|
|
event->m_effectID = child;
|
|
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
|
|
spec->AdoptEvent(event);
|
|
}
|
|
|
|
//
|
|
//--------------------------
|
|
// Set up the default curves
|
|
//--------------------------
|
|
//
|
|
spec->BuildDefaults();
|
|
|
|
//
|
|
//-------------------------
|
|
// Set up the effect curves
|
|
//-------------------------
|
|
//
|
|
spec->m_lifeSpan.SetCurve(1.0f);
|
|
|
|
spec->m_minimumChildSeed.SetCurve(0.0f);
|
|
spec->m_maximumChildSeed.SetCurve(1.0f);
|
|
|
|
//
|
|
//----------------------------
|
|
// Set up the singleton curves
|
|
//----------------------------
|
|
//
|
|
spec->m_red.m_ageCurve.SetCurve(1.0f, 0.0f);
|
|
spec->m_red.m_seeded = false;
|
|
spec->m_red.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_green.m_ageCurve.SetCurve(1.0f, 0.0f);
|
|
spec->m_green.m_seeded = false;
|
|
spec->m_green.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_blue.m_ageCurve.SetCurve(0.25f);
|
|
spec->m_blue.m_seeded = false;
|
|
spec->m_blue.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_alpha.m_ageCurve.SetCurve(1.0f);
|
|
spec->m_alpha.m_seeded = false;
|
|
spec->m_alpha.m_seedCurve.SetCurve(1.0f);
|
|
|
|
spec->m_scale.m_ageCurve.SetCurve(0.2f);
|
|
spec->m_scale.m_seeded = false;
|
|
spec->m_scale.m_seedCurve.SetCurve(1.0f);
|
|
|
|
return spec;
|
|
}
|
|
|