mirror of https://github.com/AxioDL/metaforce.git
Particle fixes
This commit is contained in:
parent
2369083b50
commit
3be5b38f82
|
@ -119,8 +119,8 @@ void CElementGenShaders::Shutdown() {
|
|||
CElementGenShaders::EShaderClass CElementGenShaders::GetShaderClass(CElementGen& gen) {
|
||||
CGenDescription* desc = gen.x1c_genDesc.GetObj();
|
||||
|
||||
if (desc->x54_x40_TEXR) {
|
||||
if (desc->x58_x44_TIND)
|
||||
if (desc->x40_TEXR) {
|
||||
if (desc->x44_TIND)
|
||||
return EShaderClass::IndTex;
|
||||
else
|
||||
return EShaderClass::Tex;
|
||||
|
@ -137,9 +137,9 @@ void CElementGenShaders::BuildShaderDataBinding(boo::IGraphicsDataFactory::Conte
|
|||
std::array<boo::ObjToken<boo::IShaderPipeline>, 2>* regPipelinePmus = nullptr;
|
||||
std::array<boo::ObjToken<boo::IShaderPipeline>, 2>* redToAlphaPipelinePmus = nullptr;
|
||||
|
||||
if (desc->x54_x40_TEXR) {
|
||||
if (desc->x58_x44_TIND) {
|
||||
if (desc->x45_30_x32_24_CIND) {
|
||||
if (desc->x40_TEXR) {
|
||||
if (desc->x44_TIND) {
|
||||
if (desc->x32_24_CIND) {
|
||||
if (gen.x26c_26_AAPH)
|
||||
regPipeline = &m_cindTexAdditive;
|
||||
else {
|
||||
|
@ -209,23 +209,23 @@ void CElementGenShaders::BuildShaderDataBinding(boo::IGraphicsDataFactory::Conte
|
|||
}
|
||||
}
|
||||
|
||||
if (desc->x45_24_x31_26_PMUS) {
|
||||
if (desc->x54_x40_TEXR) {
|
||||
if (desc->x31_26_PMUS) {
|
||||
if (desc->x40_TEXR) {
|
||||
redToAlphaPipelinePmus = &m_texRedToAlphaZTest;
|
||||
if (desc->x44_31_x31_25_PMAB)
|
||||
if (desc->x31_25_PMAB)
|
||||
regPipelinePmus = &m_texAdditiveZTest;
|
||||
else
|
||||
regPipelinePmus = &m_texZTestZWrite;
|
||||
} else {
|
||||
if (desc->x44_31_x31_25_PMAB)
|
||||
if (desc->x31_25_PMAB)
|
||||
regPipelinePmus = &m_noTexAdditiveZTest;
|
||||
else
|
||||
regPipelinePmus = &m_noTexZTestZWrite;
|
||||
}
|
||||
}
|
||||
|
||||
const CUVElement* const texr = desc->x54_x40_TEXR.get();
|
||||
const CUVElement* const tind = desc->x58_x44_TIND.get();
|
||||
const CUVElement* const texr = desc->x40_TEXR.get();
|
||||
const CUVElement* const tind = desc->x44_TIND.get();
|
||||
int texCount = 0;
|
||||
std::array<boo::ObjToken<boo::ITexture>, 3> textures;
|
||||
|
||||
|
|
|
@ -61,95 +61,95 @@ CElementGen::CElementGen(TToken<CGenDescription> gen, EModelOrientationType orie
|
|||
CGenDescription* desc = x1c_genDesc.GetObj();
|
||||
x28_loadedGenDesc = desc;
|
||||
|
||||
if (desc->x54_x40_TEXR)
|
||||
desc->x54_x40_TEXR->GetValueTexture(0).GetObj();
|
||||
if (desc->x58_x44_TIND)
|
||||
desc->x58_x44_TIND->GetValueTexture(0).GetObj();
|
||||
if (desc->x40_TEXR)
|
||||
desc->x40_TEXR->GetValueTexture(0).GetObj();
|
||||
if (desc->x44_TIND)
|
||||
desc->x44_TIND->GetValueTexture(0).GetObj();
|
||||
|
||||
CGlobalRandom globRnd(x27c_randState);
|
||||
if (CIntElement* seedElem = desc->x1c_x10_SEED.get()) {
|
||||
if (CIntElement* seedElem = desc->x10_SEED.get()) {
|
||||
int seedVal;
|
||||
seedElem->GetValue(x74_curFrame, seedVal);
|
||||
x94_randomSeed = seedVal;
|
||||
}
|
||||
x27c_randState.SetSeed(x94_randomSeed);
|
||||
++g_ParticleSystemAliveCount;
|
||||
x26c_25_LIT_ = desc->x44_29_x30_29_LIT_;
|
||||
x26c_26_AAPH = desc->x44_26_x30_26_AAPH;
|
||||
x26c_27_ZBUF = desc->x44_27_x30_27_ZBUF;
|
||||
x26c_25_LIT_ = desc->x30_29_LIT_;
|
||||
x26c_26_AAPH = desc->x30_26_AAPH;
|
||||
x26c_27_ZBUF = desc->x30_27_ZBUF;
|
||||
x26c_28_zTest = true;
|
||||
x26c_29_ORNT = desc->x30_30_ORNT;
|
||||
x26c_30_MBLR = x26c_29_ORNT ? false : desc->x44_30_x31_24_MBLR;
|
||||
x26c_30_MBLR = x26c_29_ORNT ? false : desc->x31_24_MBLR;
|
||||
|
||||
if (CIntElement* mbspElem = desc->x48_x34_MBSP.get())
|
||||
if (CIntElement* mbspElem = desc->x34_MBSP.get())
|
||||
mbspElem->GetValue(x74_curFrame, x270_MBSP);
|
||||
|
||||
if (CModVectorElement* elem = desc->x7c_x68_VEL1.get()) {
|
||||
if (CModVectorElement* elem = desc->x68_VEL1.get()) {
|
||||
x280_VELSources[0] = elem;
|
||||
x278_hasVMD[0] = desc->x45_26_x31_28_VMD1;
|
||||
x278_hasVMD[0] = desc->x31_28_VMD1;
|
||||
}
|
||||
|
||||
if (CModVectorElement* elem = desc->x80_x6c_VEL2.get()) {
|
||||
if (CModVectorElement* elem = desc->x6c_VEL2.get()) {
|
||||
x280_VELSources[1] = elem;
|
||||
x278_hasVMD[1] = desc->x45_27_x31_29_VMD2;
|
||||
x278_hasVMD[1] = desc->x31_29_VMD2;
|
||||
}
|
||||
|
||||
if (CModVectorElement* elem = desc->x84_x70_VEL3.get()) {
|
||||
if (CModVectorElement* elem = desc->x70_VEL3.get()) {
|
||||
x280_VELSources[2] = elem;
|
||||
x278_hasVMD[2] = desc->x45_28_x31_30_VMD3;
|
||||
x278_hasVMD[2] = desc->x31_30_VMD3;
|
||||
}
|
||||
|
||||
if (CModVectorElement* elem = desc->x88_x74_VEL4.get()) {
|
||||
if (CModVectorElement* elem = desc->x74_VEL4.get()) {
|
||||
x280_VELSources[3] = elem;
|
||||
x278_hasVMD[3] = desc->x45_29_x31_31_VMD4;
|
||||
x278_hasVMD[3] = desc->x31_31_VMD4;
|
||||
}
|
||||
|
||||
if (desc->x10c_ADV1 || desc->x110_ADV2 || desc->x114_ADV3 || desc->x118_ADV4 || desc->x11c_ADV5 || desc->x120_ADV6 ||
|
||||
desc->x124_ADV7 || desc->x128_ADV8)
|
||||
x26d_28_enableADV = true;
|
||||
|
||||
if (CIntElement* cssdElem = desc->xa0_x8c_CSSD.get())
|
||||
if (CIntElement* cssdElem = desc->x8c_CSSD.get())
|
||||
cssdElem->GetValue(0, x2a0_CSSD);
|
||||
|
||||
if (CIntElement* pisyElem = desc->xc8_xb4_PISY.get()) {
|
||||
if (CIntElement* pisyElem = desc->xb4_PISY.get()) {
|
||||
pisyElem->GetValue(0, x2a8_PISY);
|
||||
if (x2a8_PISY <= 0)
|
||||
x2a8_PISY = 1;
|
||||
}
|
||||
|
||||
if (CIntElement* sisyElem = desc->xcc_xb8_SISY.get())
|
||||
if (CIntElement* sisyElem = desc->xb8_SISY.get())
|
||||
sisyElem->GetValue(0, x2a4_SISY);
|
||||
|
||||
if (CIntElement* sssdElem = desc->xe4_xd0_SSSD.get())
|
||||
if (CIntElement* sssdElem = desc->xd0_SSSD.get())
|
||||
sssdElem->GetValue(0, x2ac_SSSD);
|
||||
|
||||
if (CVectorElement* sspoElem = desc->xe8_xd4_SSPO.get()) {
|
||||
if (CVectorElement* sspoElem = desc->xd4_SSPO.get()) {
|
||||
sspoElem->GetValue(0, x2b0_SSPO);
|
||||
if (!sspoElem->IsFastConstant())
|
||||
x26c_24_translationDirty = true;
|
||||
}
|
||||
|
||||
if (CIntElement* sesdElem = desc->xf8_xe4_SESD.get())
|
||||
if (CIntElement* sesdElem = desc->xe4_SESD.get())
|
||||
sesdElem->GetValue(0, x2bc_SESD);
|
||||
|
||||
if (CVectorElement* sepoElem = desc->xfc_xe8_SEPO.get()) {
|
||||
if (CVectorElement* sepoElem = desc->xe8_SEPO.get()) {
|
||||
sepoElem->GetValue(0, x2c0_SEPO);
|
||||
if (!sepoElem->IsFastConstant())
|
||||
x26c_24_translationDirty = true;
|
||||
}
|
||||
|
||||
if (CVectorElement* pofsElem = desc->x18_xc_POFS.get()) {
|
||||
if (CVectorElement* pofsElem = desc->xc_POFS.get()) {
|
||||
pofsElem->GetValue(x74_curFrame, xf4_POFS);
|
||||
if (!pofsElem->IsFastConstant())
|
||||
x26c_24_translationDirty = true;
|
||||
}
|
||||
|
||||
if (CIntElement* psltElem = desc->xc_x0_PSLT.get())
|
||||
if (CIntElement* psltElem = desc->x0_PSLT.get())
|
||||
psltElem->GetValue(0, x268_PSLT);
|
||||
else
|
||||
x268_PSLT = INT_MAX;
|
||||
|
||||
if (CIntElement* maxpElem = desc->x28_x1c_MAXP.get()) {
|
||||
if (CIntElement* maxpElem = desc->x1c_MAXP.get()) {
|
||||
maxpElem->GetValue(x74_curFrame, x90_MAXP);
|
||||
}
|
||||
|
||||
|
@ -161,10 +161,10 @@ CElementGen::CElementGen(TToken<CGenDescription> gen, EModelOrientationType orie
|
|||
if (x2c_orientType == EModelOrientationType::One)
|
||||
x50_parentMatrices.resize(x90_MAXP);
|
||||
|
||||
x26c_31_LINE = desc->x44_24_x30_24_LINE;
|
||||
x26d_24_FXLL = desc->x44_25_x30_25_FXLL;
|
||||
x26c_31_LINE = desc->x30_24_LINE;
|
||||
x26d_24_FXLL = desc->x30_25_FXLL;
|
||||
|
||||
if (CIntElement* ltypElem = desc->x100_xec_LTYP.get()) {
|
||||
if (CIntElement* ltypElem = desc->xec_LTYP.get()) {
|
||||
int ltyp;
|
||||
ltypElem->GetValue(x74_curFrame, ltyp);
|
||||
switch (LightType(ltyp)) {
|
||||
|
@ -184,7 +184,7 @@ CElementGen::CElementGen(TToken<CGenDescription> gen, EModelOrientationType orie
|
|||
}
|
||||
}
|
||||
|
||||
if (CIntElement* lfotElem = desc->x114_x100_LFOT.get()) {
|
||||
if (CIntElement* lfotElem = desc->x100_LFOT.get()) {
|
||||
int lfot;
|
||||
lfotElem->GetValue(x74_curFrame, lfot);
|
||||
switch (EFalloffType(lfot)) {
|
||||
|
@ -202,7 +202,7 @@ CElementGen::CElementGen(TToken<CGenDescription> gen, EModelOrientationType orie
|
|||
}
|
||||
|
||||
if (x26c_31_LINE) {
|
||||
CUVElement* texr = desc->x54_x40_TEXR.get();
|
||||
CUVElement* texr = desc->x40_TEXR.get();
|
||||
boo::ObjToken<boo::ITexture> tex;
|
||||
if (texr)
|
||||
tex = texr->GetValueTexture(0).GetObj()->GetBooTexture();
|
||||
|
@ -232,7 +232,7 @@ bool CElementGen::Update(double t) {
|
|||
CParticleGlobals::SParticleSystem thisSystem{FOURCC('PART'), this};
|
||||
CParticleGlobals::instance()->m_currentParticleSystem = &thisSystem;
|
||||
CGenDescription* desc = x1c_genDesc.GetObj();
|
||||
CIntElement* pswtElem = desc->x10_x4_PSWT.get();
|
||||
CIntElement* pswtElem = desc->x4_PSWT.get();
|
||||
if (pswtElem && !x26d_25_warmedUp) {
|
||||
int pswt = 0;
|
||||
pswtElem->GetValue(x74_curFrame, pswt);
|
||||
|
@ -244,13 +244,13 @@ bool CElementGen::Update(double t) {
|
|||
CParticleGlobals::instance()->m_currentParticleSystem = prevSystem;
|
||||
|
||||
if (oldMax < x90_MAXP || oldMBSP < x270_MBSP) {
|
||||
//_RecreatePipelines();
|
||||
_RecreatePipelines();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void CElementGen::_RecreatePipelines() {
|
||||
size_t maxInsts = x26c_30_MBLR ? 2560 * 2 : 2560; // x26c_30_MBLR ? (x270_MBSP * x90_MAXP) : x90_MAXP;
|
||||
size_t maxInsts = x26c_30_MBLR ? (x270_MBSP * x90_MAXP) : x90_MAXP;
|
||||
maxInsts = (maxInsts == 0 ? 256 : maxInsts);
|
||||
|
||||
CGraphics::CommitResources([&](boo::IGraphicsDataFactory::Context& ctx) {
|
||||
|
@ -258,7 +258,7 @@ void CElementGen::_RecreatePipelines() {
|
|||
m_instBuf = ctx.newDynamicBuffer(boo::BufferUse::Vertex, ShadClsSizes[size_t(m_shaderClass)], maxInsts);
|
||||
m_uniformBuf = ctx.newDynamicBuffer(boo::BufferUse::Uniform, sizeof(SParticleUniforms), 1);
|
||||
}
|
||||
if (x28_loadedGenDesc->x45_24_x31_26_PMUS) {
|
||||
if (x28_loadedGenDesc->x31_26_PMUS) {
|
||||
m_instBufPmus = ctx.newDynamicBuffer(boo::BufferUse::Vertex, ShadClsSizes[size_t(m_shaderClass)], maxInsts);
|
||||
m_uniformBufPmus = ctx.newDynamicBuffer(boo::BufferUse::Uniform, sizeof(SParticleUniforms), 1);
|
||||
}
|
||||
|
@ -276,7 +276,7 @@ bool CElementGen::InternalUpdate(double dt) {
|
|||
double t = x74_curFrame / 60.0;
|
||||
CParticleGlobals::instance()->SetEmitterTime(x74_curFrame);
|
||||
|
||||
if (CRealElement* pstsElem = desc->x14_x8_PSTS.get()) {
|
||||
if (CRealElement* pstsElem = desc->x8_PSTS.get()) {
|
||||
float psts;
|
||||
pstsElem->GetValue(x74_curFrame, psts);
|
||||
double dt1Scaled = psts * dt1;
|
||||
|
@ -286,7 +286,7 @@ bool CElementGen::InternalUpdate(double dt) {
|
|||
x78_curSeconds += dt1;
|
||||
|
||||
if (x26c_30_MBLR && dt > 0.0) {
|
||||
if (CIntElement* mbspElem = desc->x48_x34_MBSP.get())
|
||||
if (CIntElement* mbspElem = desc->x34_MBSP.get())
|
||||
mbspElem->GetValue(x74_curFrame, x270_MBSP);
|
||||
}
|
||||
|
||||
|
@ -301,7 +301,7 @@ bool CElementGen::InternalUpdate(double dt) {
|
|||
|
||||
if (x74_curFrame < x268_PSLT && x88_particleEmission) {
|
||||
float grte = 0.f;
|
||||
if (CRealElement* grteElem = desc->x2c_x20_GRTE.get()) {
|
||||
if (CRealElement* grteElem = desc->x20_GRTE.get()) {
|
||||
if (grteElem->GetValue(x74_curFrame, grte)) {
|
||||
x30_particles.clear();
|
||||
return true;
|
||||
|
@ -313,7 +313,7 @@ bool CElementGen::InternalUpdate(double dt) {
|
|||
int genCount = floorf(x8c_generatorRemainder);
|
||||
x8c_generatorRemainder = x8c_generatorRemainder - genCount;
|
||||
|
||||
if (CIntElement* maxpElem = desc->x28_x1c_MAXP.get())
|
||||
if (CIntElement* maxpElem = desc->x1c_MAXP.get())
|
||||
maxpElem->GetValue(x74_curFrame, x90_MAXP);
|
||||
|
||||
CreateNewParticles(genCount);
|
||||
|
@ -465,18 +465,18 @@ void CElementGen::UpdateExistingParticles() {
|
|||
}
|
||||
|
||||
if (x26c_31_LINE) {
|
||||
if (CRealElement* leng = desc->x20_x14_LENG.get())
|
||||
if (CRealElement* leng = desc->x14_LENG.get())
|
||||
leng->GetValue(particleFrame, particle.x2c_lineLengthOrSize);
|
||||
if (CRealElement* widt = desc->x24_x18_WIDT.get())
|
||||
if (CRealElement* widt = desc->x18_WIDT.get())
|
||||
widt->GetValue(particleFrame, particle.x30_lineWidthOrRota);
|
||||
} else {
|
||||
if (CRealElement* rota = desc->x50_x3c_ROTA.get())
|
||||
if (CRealElement* rota = desc->x3c_ROTA.get())
|
||||
rota->GetValue(particleFrame, particle.x30_lineWidthOrRota);
|
||||
if (CRealElement* size = desc->x4c_x38_SIZE.get())
|
||||
if (CRealElement* size = desc->x38_SIZE.get())
|
||||
size->GetValue(particleFrame, particle.x2c_lineLengthOrSize);
|
||||
}
|
||||
|
||||
if (CColorElement* colr = desc->x30_x24_COLR.get())
|
||||
if (CColorElement* colr = desc->x24_COLR.get())
|
||||
colr->GetValue(particleFrame, particle.x34_color);
|
||||
|
||||
AccumulateBounds(particle.x4_pos, particle.x2c_lineLengthOrSize);
|
||||
|
@ -529,7 +529,7 @@ void CElementGen::CreateNewParticles(int count) {
|
|||
}
|
||||
|
||||
particle.x28_startFrame = x74_curFrame;
|
||||
if (CIntElement* ltme = desc->x34_x28_LTME.get()) {
|
||||
if (CIntElement* ltme = desc->x28_LTME.get()) {
|
||||
ltme->GetValue(0, particle.x0_endFrame);
|
||||
}
|
||||
CParticleGlobals::instance()->SetParticleLifetime(particle.x0_endFrame);
|
||||
|
@ -540,13 +540,13 @@ void CElementGen::CreateNewParticles(int count) {
|
|||
}
|
||||
particle.x0_endFrame += x74_curFrame;
|
||||
|
||||
if (CColorElement* colr = desc->x30_x24_COLR.get()) {
|
||||
if (CColorElement* colr = desc->x24_COLR.get()) {
|
||||
colr->GetValue(0, particle.x34_color);
|
||||
} else {
|
||||
particle.x34_color = zeus::skWhite;
|
||||
}
|
||||
|
||||
if (CEmitterElement* emtr = desc->x40_x2c_EMTR.get()) {
|
||||
if (CEmitterElement* emtr = desc->x2c_EMTR.get()) {
|
||||
emtr->GetValue(x74_curFrame, particle.x4_pos, particle.x1c_vel);
|
||||
zeus::CVector3f compXf1 = (x13c_globalScaleTransformInverse * x1a8_localScaleTransformInverse) * xdc_translation;
|
||||
zeus::CVector3f compXf2 = x1d8_orientation.rotate(particle.x4_pos);
|
||||
|
@ -560,22 +560,22 @@ void CElementGen::CreateNewParticles(int count) {
|
|||
particle.x10_prevPos = particle.x4_pos;
|
||||
|
||||
if (x26c_31_LINE) {
|
||||
if (CRealElement* leng = desc->x20_x14_LENG.get())
|
||||
if (CRealElement* leng = desc->x14_LENG.get())
|
||||
leng->GetValue(0, particle.x2c_lineLengthOrSize);
|
||||
else
|
||||
particle.x2c_lineLengthOrSize = 1.f;
|
||||
|
||||
if (CRealElement* widt = desc->x24_x18_WIDT.get())
|
||||
if (CRealElement* widt = desc->x18_WIDT.get())
|
||||
widt->GetValue(0, particle.x30_lineWidthOrRota);
|
||||
else
|
||||
particle.x30_lineWidthOrRota = 1.f;
|
||||
} else {
|
||||
if (CRealElement* rota = desc->x50_x3c_ROTA.get())
|
||||
if (CRealElement* rota = desc->x3c_ROTA.get())
|
||||
rota->GetValue(0, particle.x30_lineWidthOrRota);
|
||||
else
|
||||
particle.x30_lineWidthOrRota = 0.f;
|
||||
|
||||
if (CRealElement* size = desc->x4c_x38_SIZE.get())
|
||||
if (CRealElement* size = desc->x38_SIZE.get())
|
||||
size->GetValue(0, particle.x2c_lineLengthOrSize);
|
||||
else
|
||||
particle.x2c_lineLengthOrSize = 0.1f;
|
||||
|
@ -592,13 +592,13 @@ void CElementGen::UpdatePSTranslationAndOrientation() {
|
|||
if (x268_PSLT < x74_curFrame)
|
||||
return;
|
||||
|
||||
if (CVectorElement* pofs = desc->x18_xc_POFS.get())
|
||||
if (CVectorElement* pofs = desc->xc_POFS.get())
|
||||
pofs->GetValue(x74_curFrame, xf4_POFS);
|
||||
|
||||
if (CVectorElement* sspo = desc->xe8_xd4_SSPO.get())
|
||||
if (CVectorElement* sspo = desc->xd4_SSPO.get())
|
||||
sspo->GetValue(x74_curFrame, x2b0_SSPO);
|
||||
|
||||
if (CVectorElement* sepo = desc->xfc_xe8_SEPO.get())
|
||||
if (CVectorElement* sepo = desc->xe8_SEPO.get())
|
||||
sepo->GetValue(x74_curFrame, x2c0_SEPO);
|
||||
}
|
||||
|
||||
|
@ -623,14 +623,14 @@ void CElementGen::UpdateChildParticleSystems(double dt) {
|
|||
|
||||
CGlobalRandom gr(x27c_randState);
|
||||
|
||||
SChildGeneratorDesc& icts = desc->x8c_x78_ICTS;
|
||||
SChildGeneratorDesc& icts = desc->x78_ICTS;
|
||||
if (icts.m_found && x84_prevFrame != x74_curFrame && x2a0_CSSD == x74_curFrame) {
|
||||
int ncsyVal = 1;
|
||||
if (CIntElement* ncsy = desc->x9c_x88_NCSY.get())
|
||||
if (CIntElement* ncsy = desc->x88_NCSY.get())
|
||||
ncsy->GetValue(x74_curFrame, ncsyVal);
|
||||
|
||||
CGenDescription* ictsDesc = icts.m_token.GetObj();
|
||||
if (!(x26d_27_enableOPTS && ictsDesc->x45_31_x32_25_OPTS)) {
|
||||
if (!(x26d_27_enableOPTS && ictsDesc->x32_25_OPTS)) {
|
||||
x290_activePartChildren.reserve(ncsyVal + x290_activePartChildren.size());
|
||||
for (int i = 0; i < ncsyVal; ++i) {
|
||||
std::unique_ptr<CParticleGen> chGen = ConstructChildParticleSystem(icts.m_token);
|
||||
|
@ -639,17 +639,17 @@ void CElementGen::UpdateChildParticleSystems(double dt) {
|
|||
}
|
||||
}
|
||||
|
||||
SChildGeneratorDesc& iits = desc->xb8_xa4_IITS;
|
||||
SChildGeneratorDesc& iits = desc->xa4_IITS;
|
||||
if (iits.m_found && x84_prevFrame != x74_curFrame && x74_curFrame < x268_PSLT && x88_particleEmission == 1 &&
|
||||
x74_curFrame >= x2a4_SISY && ((x74_curFrame - x2a4_SISY) % x2a8_PISY) == 0) {
|
||||
CGenDescription* iitsDesc = iits.m_token.GetObj();
|
||||
if (!(x26d_27_enableOPTS && iitsDesc->x45_31_x32_25_OPTS)) {
|
||||
if (!(x26d_27_enableOPTS && iitsDesc->x32_25_OPTS)) {
|
||||
std::unique_ptr<CParticleGen> chGen = ConstructChildParticleSystem(iits.m_token);
|
||||
x290_activePartChildren.emplace_back(std::move(chGen));
|
||||
}
|
||||
}
|
||||
|
||||
CSpawnSystemKeyframeData* kssm = desc->xd0_xbc_KSSM.get();
|
||||
CSpawnSystemKeyframeData* kssm = desc->xbc_KSSM.get();
|
||||
if (kssm && x84_prevFrame != x74_curFrame && x74_curFrame < x268_PSLT) {
|
||||
u16 backupSeed = g_GlobalSeed;
|
||||
u16 incSeed = backupSeed;
|
||||
|
@ -659,7 +659,7 @@ void CElementGen::UpdateChildParticleSystems(double dt) {
|
|||
x290_activePartChildren.reserve(x290_activePartChildren.size() + systems.size());
|
||||
for (CSpawnSystemKeyframeData::CSpawnSystemKeyframeInfo& system : systems) {
|
||||
TLockedToken<CGenDescription>& token = system.GetToken();
|
||||
if (!(x26d_27_enableOPTS && token.GetObj()->x45_31_x32_25_OPTS)) {
|
||||
if (!(x26d_27_enableOPTS && token.GetObj()->x32_25_OPTS)) {
|
||||
g_GlobalSeed = incSeed;
|
||||
std::unique_ptr<CParticleGen> chGen = ConstructChildParticleSystem(token);
|
||||
x290_activePartChildren.emplace_back(std::move(chGen));
|
||||
|
@ -670,14 +670,14 @@ void CElementGen::UpdateChildParticleSystems(double dt) {
|
|||
g_GlobalSeed = backupSeed;
|
||||
}
|
||||
|
||||
SChildGeneratorDesc& idts = desc->xa4_x90_IDTS;
|
||||
SChildGeneratorDesc& idts = desc->x90_IDTS;
|
||||
if (idts.m_found && x74_curFrame == x268_PSLT && x84_prevFrame != x74_curFrame) {
|
||||
int ndsyVal = 1;
|
||||
if (CIntElement* ndsy = desc->xb4_xa0_NDSY.get())
|
||||
if (CIntElement* ndsy = desc->xa0_NDSY.get())
|
||||
ndsy->GetValue(0, ndsyVal);
|
||||
|
||||
CGenDescription* idtsDesc = idts.m_token.GetObj();
|
||||
if (!(x26d_27_enableOPTS && idtsDesc->x45_31_x32_25_OPTS)) {
|
||||
if (!(x26d_27_enableOPTS && idtsDesc->x32_25_OPTS)) {
|
||||
x290_activePartChildren.reserve(ndsyVal + x290_activePartChildren.size());
|
||||
for (int i = 0; i < ndsyVal; ++i) {
|
||||
std::unique_ptr<CParticleGen> chGen = ConstructChildParticleSystem(idts.m_token);
|
||||
|
@ -686,7 +686,7 @@ void CElementGen::UpdateChildParticleSystems(double dt) {
|
|||
}
|
||||
}
|
||||
|
||||
SSwooshGeneratorDesc& sswh = desc->xd4_xc0_SSWH;
|
||||
SSwooshGeneratorDesc& sswh = desc->xc0_SSWH;
|
||||
if (sswh.m_found && x84_prevFrame != x74_curFrame && x74_curFrame == x2ac_SSSD) {
|
||||
std::unique_ptr<CParticleGen> sswhGen = std::make_unique<CParticleSwoosh>(sswh.m_token, 0);
|
||||
sswhGen->SetGlobalTranslation(xe8_globalTranslation);
|
||||
|
@ -698,7 +698,7 @@ void CElementGen::UpdateChildParticleSystems(double dt) {
|
|||
x290_activePartChildren.emplace_back(std::move(sswhGen));
|
||||
}
|
||||
|
||||
SElectricGeneratorDesc& selc = desc->xec_xd8_SELC;
|
||||
SElectricGeneratorDesc& selc = desc->xd8_SELC;
|
||||
if (selc.m_found && x84_prevFrame != x74_curFrame && x74_curFrame == x2bc_SESD) {
|
||||
std::unique_ptr<CParticleGen> selcGen = std::make_unique<CParticleElectric>(selc.m_token);
|
||||
selcGen->SetGlobalTranslation(xe8_globalTranslation);
|
||||
|
@ -728,10 +728,10 @@ void CElementGen::UpdateChildParticleSystems(double dt) {
|
|||
void CElementGen::UpdateLightParameters() {
|
||||
CGenDescription* desc = x1c_genDesc.GetObj();
|
||||
|
||||
if (CColorElement* lclr = desc->x104_xf0_LCLR.get())
|
||||
if (CColorElement* lclr = desc->xf0_LCLR.get())
|
||||
lclr->GetValue(x74_curFrame, x30c_LCLR);
|
||||
|
||||
if (CRealElement* lint = desc->x108_xf4_LINT.get())
|
||||
if (CRealElement* lint = desc->xf4_LINT.get())
|
||||
lint->GetValue(x74_curFrame, x310_LINT);
|
||||
|
||||
switch (x308_lightType) {
|
||||
|
@ -739,21 +739,21 @@ void CElementGen::UpdateLightParameters() {
|
|||
case LightType::None:
|
||||
case LightType::Custom:
|
||||
case LightType::Spot: {
|
||||
if (CVectorElement* loff = desc->x10c_xf8_LOFF.get())
|
||||
if (CVectorElement* loff = desc->xf8_LOFF.get())
|
||||
loff->GetValue(x74_curFrame, x314_LOFF);
|
||||
|
||||
if (CRealElement* lfor = desc->x118_x104_LFOR.get())
|
||||
if (CRealElement* lfor = desc->x104_LFOR.get())
|
||||
lfor->GetValue(x74_curFrame, x330_LFOR);
|
||||
|
||||
if (x308_lightType == LightType::Spot) {
|
||||
if (CRealElement* lsla = desc->x11c_x108_LSLA.get())
|
||||
if (CRealElement* lsla = desc->x108_LSLA.get())
|
||||
lsla->GetValue(x74_curFrame, x334_LSLA);
|
||||
}
|
||||
[[fallthrough]];
|
||||
}
|
||||
case LightType::Directional: {
|
||||
if (x308_lightType != LightType::Custom) {
|
||||
if (CVectorElement* ldir = desc->x110_xfc_LDIR.get())
|
||||
if (CVectorElement* ldir = desc->xfc_LDIR.get())
|
||||
ldir->GetValue(x74_curFrame, x320_LDIR);
|
||||
}
|
||||
}
|
||||
|
@ -834,7 +834,7 @@ void CElementGen::Render(const CActorLights* actorLights) {
|
|||
if (!x26c_31_LINE && (!m_instBuf || !m_uniformBuf)) {
|
||||
return;
|
||||
}
|
||||
if (x28_loadedGenDesc->x45_24_x31_26_PMUS && (!m_instBufPmus || !m_uniformBufPmus)) {
|
||||
if (x28_loadedGenDesc->x31_26_PMUS && (!m_instBufPmus || !m_uniformBufPmus)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -854,8 +854,8 @@ void CElementGen::Render(const CActorLights* actorLights) {
|
|||
CParticleGlobals::instance()->m_currentParticleSystem = &thisSystem;
|
||||
|
||||
if (x30_particles.size()) {
|
||||
SParticleModel& pmdl = desc->x5c_x48_PMDL;
|
||||
if (pmdl.m_found || desc->x45_24_x31_26_PMUS)
|
||||
SParticleModel& pmdl = desc->x48_PMDL;
|
||||
if (pmdl.m_found || desc->x31_26_PMUS)
|
||||
RenderModels(actorLights);
|
||||
|
||||
if (x26c_31_LINE)
|
||||
|
@ -872,7 +872,7 @@ void CElementGen::RenderModels(const CActorLights* actorLights) {
|
|||
if (!x26c_31_LINE && (!m_instBuf || !m_uniformBuf)) {
|
||||
return;
|
||||
}
|
||||
if (x28_loadedGenDesc->x45_24_x31_26_PMUS && (!m_instBufPmus || !m_uniformBufPmus)) {
|
||||
if (x28_loadedGenDesc->x31_26_PMUS && (!m_instBufPmus || !m_uniformBufPmus)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -884,16 +884,16 @@ void CElementGen::RenderModels(const CActorLights* actorLights) {
|
|||
CGenDescription* desc = x1c_genDesc.GetObj();
|
||||
|
||||
SUVElementSet uvs = {0.f, 0.f, 1.f, 1.f};
|
||||
CUVElement* texr = desc->x54_x40_TEXR.get();
|
||||
CUVElement* texr = desc->x40_TEXR.get();
|
||||
CTexture* cachedTex = nullptr;
|
||||
bool texConst = true;
|
||||
bool moveRedToAlphaBuffer = false;
|
||||
|
||||
if (desc->x45_24_x31_26_PMUS) {
|
||||
if (sMoveRedToAlphaBuffer && desc->x44_31_x31_25_PMAB && desc->x54_x40_TEXR)
|
||||
if (desc->x31_26_PMUS) {
|
||||
if (sMoveRedToAlphaBuffer && desc->x31_25_PMAB && desc->x40_TEXR)
|
||||
moveRedToAlphaBuffer = true;
|
||||
|
||||
if (desc->x44_31_x31_25_PMAB) {
|
||||
if (desc->x31_25_PMAB) {
|
||||
CGraphics::SetDepthWriteMode(true, ERglEnum::LEqual, false);
|
||||
if (moveRedToAlphaBuffer)
|
||||
CGraphics::SetBlendMode(ERglBlendMode::Blend, ERglBlendFactor::One, ERglBlendFactor::One, ERglLogicOp::Clear);
|
||||
|
@ -947,11 +947,11 @@ void CElementGen::RenderModels(const CActorLights* actorLights) {
|
|||
}
|
||||
|
||||
zeus::CTransform orient = zeus::CTransform();
|
||||
if (!desc->x45_25_x31_27_PMOO)
|
||||
if (!desc->x31_27_PMOO)
|
||||
orient = x1d8_orientation;
|
||||
orient = orient * x22c_globalOrientation;
|
||||
|
||||
CVectorElement* pmrt = desc->x70_x5c_PMRT.get();
|
||||
CVectorElement* pmrt = desc->x5c_PMRT.get();
|
||||
bool pmrtConst = false;
|
||||
if (pmrt)
|
||||
pmrtConst = pmrt->IsFastConstant();
|
||||
|
@ -989,7 +989,7 @@ void CElementGen::RenderModels(const CActorLights* actorLights) {
|
|||
CParticleGlobals::instance()->m_particleAccessParameters = &x60_advValues[i];
|
||||
}
|
||||
|
||||
CVectorElement* pmop = desc->x6c_x58_PMOP.get();
|
||||
CVectorElement* pmop = desc->x58_PMOP.get();
|
||||
if (pmop)
|
||||
pmop->GetValue(partFrame, pmopVec);
|
||||
|
||||
|
@ -1018,14 +1018,14 @@ void CElementGen::RenderModels(const CActorLights* actorLights) {
|
|||
}
|
||||
}
|
||||
|
||||
CVectorElement* pmsc = desc->x74_x60_PMSC.get();
|
||||
CVectorElement* pmsc = desc->x60_PMSC.get();
|
||||
if (pmsc) {
|
||||
zeus::CVector3f pmscVal;
|
||||
pmsc->GetValue(partFrame, pmscVal);
|
||||
partTrans = partTrans * zeus::CTransform::Scale(pmscVal);
|
||||
}
|
||||
|
||||
CColorElement* pmcl = desc->x78_x64_PMCL.get();
|
||||
CColorElement* pmcl = desc->x64_PMCL.get();
|
||||
if (pmcl) {
|
||||
pmcl->GetValue(partFrame, col);
|
||||
col *= x338_moduColor;
|
||||
|
@ -1033,7 +1033,7 @@ void CElementGen::RenderModels(const CActorLights* actorLights) {
|
|||
|
||||
CGraphics::SetModelMatrix((x10c_globalScaleTransform * partTrans) * x178_localScaleTransform);
|
||||
|
||||
if (desc->x45_24_x31_26_PMUS) {
|
||||
if (desc->x31_26_PMUS) {
|
||||
if (!texConst) {
|
||||
CTexture* tex = texr->GetValueTexture(x74_curFrame - particle.x28_startFrame).GetObj();
|
||||
if (tex != cachedTex) {
|
||||
|
@ -1069,12 +1069,12 @@ void CElementGen::RenderModels(const CActorLights* actorLights) {
|
|||
break;
|
||||
}
|
||||
} else {
|
||||
CModel* model = desc->x5c_x48_PMDL.m_token.GetObj();
|
||||
CModel* model = desc->x48_PMDL.m_token.GetObj();
|
||||
if (actorLights)
|
||||
actorLights->ActivateLights(model->GetInstance());
|
||||
if (g_subtractBlend) {
|
||||
model->Draw({5, 0, 1, zeus::CColor(1.f, 0.5f)});
|
||||
} else if (desc->x44_31_x31_25_PMAB) {
|
||||
} else if (desc->x31_25_PMAB) {
|
||||
CModelFlags flags{7, 0, 1, col};
|
||||
flags.m_extendedShader = EExtendedShader::ForcedAdditiveNoZWrite;
|
||||
model->Draw(flags);
|
||||
|
@ -1089,7 +1089,7 @@ void CElementGen::RenderModels(const CActorLights* actorLights) {
|
|||
++matrixIt;
|
||||
}
|
||||
|
||||
if (desc->x45_24_x31_26_PMUS) {
|
||||
if (desc->x31_26_PMUS) {
|
||||
switch (m_shaderClass) {
|
||||
case CElementGenShaders::EShaderClass::Tex:
|
||||
m_instBufPmus->load(g_instTexData.data(), g_instTexData.size() * sizeof(SParticleInstanceTex));
|
||||
|
@ -1136,12 +1136,12 @@ void CElementGen::RenderLines() {
|
|||
ERglLogicOp::Clear);
|
||||
}
|
||||
|
||||
CRealElement* widt = desc->x24_x18_WIDT.get();
|
||||
CRealElement* widt = desc->x18_WIDT.get();
|
||||
bool widtConst = false;
|
||||
if (widt)
|
||||
widtConst = widt->IsConstant();
|
||||
|
||||
CUVElement* texr = desc->x54_x40_TEXR.get();
|
||||
CUVElement* texr = desc->x40_TEXR.get();
|
||||
SUVElementSet uvs = {0.f, 0.f, 1.f, 1.f};
|
||||
bool constTexr = true;
|
||||
bool constUVs = true;
|
||||
|
@ -1216,14 +1216,14 @@ void CElementGen::RenderParticles() {
|
|||
CGenDescription* desc = x1c_genDesc.GetObj();
|
||||
CGlobalRandom gr(x27c_randState);
|
||||
|
||||
CUVElement* texr = desc->x54_x40_TEXR.get();
|
||||
CUVElement* tind = desc->x58_x44_TIND.get();
|
||||
CUVElement* texr = desc->x40_TEXR.get();
|
||||
CUVElement* tind = desc->x44_TIND.get();
|
||||
if (texr && tind) {
|
||||
RenderParticlesIndirectTexture();
|
||||
return;
|
||||
}
|
||||
|
||||
CRealElement* size = desc->x4c_x38_SIZE.get();
|
||||
CRealElement* size = desc->x38_SIZE.get();
|
||||
if (size && size->IsConstant()) {
|
||||
float sizeVal;
|
||||
size->GetValue(0, sizeVal);
|
||||
|
@ -1272,7 +1272,7 @@ void CElementGen::RenderParticles() {
|
|||
m_uniformBuf->load(&uniformData, sizeof(SParticleUniforms));
|
||||
|
||||
std::vector<CParticleListItem> sortItems;
|
||||
if (desc->x44_28_x30_28_SORT) {
|
||||
if (desc->x30_28_SORT) {
|
||||
sortItems.reserve(x30_particles.size());
|
||||
|
||||
for (size_t i = 0; i < x30_particles.size(); ++i) {
|
||||
|
@ -1294,12 +1294,12 @@ void CElementGen::RenderParticles() {
|
|||
|
||||
if (g_subtractBlend) {
|
||||
// FIXME should there be NoTex specializations for RedToAlpha?
|
||||
if (moveRedToAlphaBuffer && desc->x54_x40_TEXR)
|
||||
if (moveRedToAlphaBuffer && desc->x40_TEXR)
|
||||
CGraphics::SetShaderDataBinding(m_redToAlphaSubDataBind[g_Renderer->IsThermalVisorHotPass()]);
|
||||
else
|
||||
CGraphics::SetShaderDataBinding(m_normalSubDataBind[g_Renderer->IsThermalVisorHotPass()]);
|
||||
} else {
|
||||
if (moveRedToAlphaBuffer && desc->x54_x40_TEXR)
|
||||
if (moveRedToAlphaBuffer && desc->x40_TEXR)
|
||||
CGraphics::SetShaderDataBinding(m_redToAlphaDataBind[g_Renderer->IsThermalVisorHotPass()]);
|
||||
else
|
||||
CGraphics::SetShaderDataBinding(m_normalDataBind[g_Renderer->IsThermalVisorHotPass()]);
|
||||
|
@ -1353,13 +1353,13 @@ void CElementGen::RenderParticles() {
|
|||
|
||||
if (!x26c_29_ORNT) {
|
||||
for (size_t i = 0; i < x30_particles.size(); ++i) {
|
||||
const int partIdx = desc->x44_28_x30_28_SORT ? sortItems[i].x0_partIdx : int(i);
|
||||
const int partIdx = desc->x30_28_SORT ? sortItems[i].x0_partIdx : int(i);
|
||||
CParticle& particle = x30_particles[partIdx];
|
||||
g_currentParticle = &particle;
|
||||
|
||||
const int partFrame = x74_curFrame - particle.x28_startFrame - 1;
|
||||
zeus::CVector3f viewPoint;
|
||||
if (desc->x44_28_x30_28_SORT) {
|
||||
if (desc->x30_28_SORT) {
|
||||
viewPoint = sortItems[i].x4_viewPoint;
|
||||
} else {
|
||||
viewPoint = systemCameraMatrix *
|
||||
|
@ -1439,14 +1439,14 @@ void CElementGen::RenderParticles() {
|
|||
}
|
||||
} else {
|
||||
for (size_t i = 0; i < x30_particles.size(); ++i) {
|
||||
const int partIdx = desc->x44_28_x30_28_SORT ? sortItems[i].x0_partIdx : int(i);
|
||||
const int partIdx = desc->x30_28_SORT ? sortItems[i].x0_partIdx : int(i);
|
||||
CParticle& particle = x30_particles[partIdx];
|
||||
g_currentParticle = &particle;
|
||||
|
||||
const int partFrame = x74_curFrame - particle.x28_startFrame - 1;
|
||||
zeus::CVector3f viewPoint =
|
||||
((particle.x4_pos - particle.x10_prevPos) * x80_timeDeltaScale + particle.x10_prevPos);
|
||||
const float width = !desc->x50_x3c_ROTA ? 1.f : particle.x30_lineWidthOrRota;
|
||||
const float width = !desc->x3c_ROTA ? 1.f : particle.x30_lineWidthOrRota;
|
||||
zeus::CVector3f dir;
|
||||
if (particle.x1c_vel.canBeNormalized()) {
|
||||
dir = particle.x1c_vel.normalized();
|
||||
|
@ -1541,7 +1541,7 @@ void CElementGen::RenderParticles() {
|
|||
}
|
||||
const float mbspFac = 1.f / float(mbspVal);
|
||||
for (size_t i = 0; i < x30_particles.size(); ++i) {
|
||||
const int partIdx = desc->x44_28_x30_28_SORT ? sortItems[i].x0_partIdx : int(i);
|
||||
const int partIdx = desc->x30_28_SORT ? sortItems[i].x0_partIdx : int(i);
|
||||
CParticle& particle = x30_particles[partIdx];
|
||||
g_currentParticle = &particle;
|
||||
|
||||
|
@ -1668,7 +1668,7 @@ void CElementGen::RenderParticlesIndirectTexture() {
|
|||
ERglLogicOp::Clear);
|
||||
}
|
||||
|
||||
CUVElement* texr = desc->x54_x40_TEXR.get();
|
||||
CUVElement* texr = desc->x40_TEXR.get();
|
||||
CParticle& firstParticle = x30_particles[0];
|
||||
int partFrame = x74_curFrame - firstParticle.x28_startFrame;
|
||||
CTexture* cachedTex = texr->GetValueTexture(partFrame).GetObj();
|
||||
|
@ -1679,7 +1679,7 @@ void CElementGen::RenderParticlesIndirectTexture() {
|
|||
texr->GetValueUV(partFrame, uvs);
|
||||
bool constUVs = texr->HasConstantUV();
|
||||
|
||||
CUVElement* tind = desc->x58_x44_TIND.get();
|
||||
CUVElement* tind = desc->x44_TIND.get();
|
||||
CTexture* cachedIndTex = tind->GetValueTexture(partFrame).GetObj();
|
||||
cachedIndTex->Load(2, CTexture::EClampMode::One);
|
||||
|
||||
|
@ -1689,7 +1689,7 @@ void CElementGen::RenderParticlesIndirectTexture() {
|
|||
tind->GetValueUV(partFrame, uvsInd);
|
||||
|
||||
std::vector<CParticleListItem> sortItems;
|
||||
if (desc->x44_28_x30_28_SORT) {
|
||||
if (desc->x30_28_SORT) {
|
||||
sortItems.reserve(x30_particles.size());
|
||||
|
||||
for (size_t i = 0; i < x30_particles.size(); ++i) {
|
||||
|
@ -1712,13 +1712,13 @@ void CElementGen::RenderParticlesIndirectTexture() {
|
|||
CGraphics::SetShaderDataBinding(m_normalDataBind[g_Renderer->IsThermalVisorHotPass()]);
|
||||
|
||||
for (size_t i = 0; i < x30_particles.size(); ++i) {
|
||||
const int partIdx = desc->x44_28_x30_28_SORT ? sortItems[i].x0_partIdx : int(i);
|
||||
const int partIdx = desc->x30_28_SORT ? sortItems[i].x0_partIdx : int(i);
|
||||
CParticle& particle = x30_particles[partIdx];
|
||||
g_currentParticle = &particle;
|
||||
|
||||
const int thisPartFrame = x74_curFrame - particle.x28_startFrame;
|
||||
zeus::CVector3f viewPoint;
|
||||
if (desc->x44_28_x30_28_SORT) {
|
||||
if (desc->x30_28_SORT) {
|
||||
viewPoint = sortItems[i].x4_viewPoint;
|
||||
} else {
|
||||
viewPoint =
|
||||
|
|
|
@ -219,7 +219,7 @@ public:
|
|||
FourCC Get4CharId() const override { return FOURCC('PART'); }
|
||||
size_t GetNumActiveChildParticles() const { return x290_activePartChildren.size(); }
|
||||
CParticleGen& GetActiveChildParticle(size_t idx) const { return *x290_activePartChildren[idx]; }
|
||||
bool IsIndirectTextured() const { return x28_loadedGenDesc->x54_x40_TEXR && x28_loadedGenDesc->x58_x44_TIND; }
|
||||
bool IsIndirectTextured() const { return x28_loadedGenDesc->x40_TEXR && x28_loadedGenDesc->x44_TIND; }
|
||||
void SetModelsUseLights(bool useLights) { x26d_26_modelsUseLights = useLights; }
|
||||
void SetZTest(bool z) { x26c_28_zTest = z; }
|
||||
static void SetMoveRedToAlphaBuffer(bool move);
|
||||
|
|
|
@ -18,83 +18,74 @@ namespace metaforce {
|
|||
|
||||
class CGenDescription {
|
||||
public:
|
||||
/* Naming convention: <demo-offset>_<retail-offset>_<name> */
|
||||
|
||||
/* Removed from demo */
|
||||
// std::unique_ptr<CVectorElement> x0_PSIV;
|
||||
// std::unique_ptr<CModVectorElement> x4_PSVM;
|
||||
// std::unique_ptr<CVectorElement> x8_PSOV;
|
||||
std::unique_ptr<CIntElement> xc_x0_PSLT;
|
||||
std::unique_ptr<CIntElement> x10_x4_PSWT;
|
||||
std::unique_ptr<CRealElement> x14_x8_PSTS;
|
||||
std::unique_ptr<CVectorElement> x18_xc_POFS;
|
||||
std::unique_ptr<CIntElement> x1c_x10_SEED;
|
||||
std::unique_ptr<CRealElement> x20_x14_LENG;
|
||||
std::unique_ptr<CRealElement> x24_x18_WIDT;
|
||||
std::unique_ptr<CIntElement> x28_x1c_MAXP;
|
||||
std::unique_ptr<CRealElement> x2c_x20_GRTE;
|
||||
std::unique_ptr<CColorElement> x30_x24_COLR;
|
||||
std::unique_ptr<CIntElement> x34_x28_LTME;
|
||||
/* Removed from demo (replaced by EMTR) */
|
||||
// std::unique_ptr<CVectorElement> x38_ILOC;
|
||||
// std::unique_ptr<CVectorElement> x3c_IVEC;
|
||||
std::unique_ptr<CEmitterElement> x40_x2c_EMTR;
|
||||
bool x44_28_x30_28_SORT : 1 = false;
|
||||
bool x44_30_x31_24_MBLR : 1 = false;
|
||||
bool x44_24_x30_24_LINE : 1 = false;
|
||||
bool x44_29_x30_29_LIT_ : 1 = false;
|
||||
bool x44_26_x30_26_AAPH : 1 = false;
|
||||
bool x44_27_x30_27_ZBUF : 1 = false;
|
||||
bool x44_25_x30_25_FXLL : 1 = false;
|
||||
bool x44_31_x31_25_PMAB : 1 = false;
|
||||
bool x45_29_x31_31_VMD4 : 1 = false;
|
||||
bool x45_28_x31_30_VMD3 : 1 = false;
|
||||
bool x45_27_x31_29_VMD2 : 1 = false;
|
||||
bool x45_26_x31_28_VMD1 : 1 = false;
|
||||
bool x45_31_x32_25_OPTS : 1 = false;
|
||||
bool x45_24_x31_26_PMUS : 1 = false;
|
||||
bool x45_25_x31_27_PMOO : 1 = true;
|
||||
bool x45_30_x32_24_CIND : 1 = false;
|
||||
/* 0-00 additions */
|
||||
std::unique_ptr<CIntElement> x0_PSLT;
|
||||
std::unique_ptr<CIntElement> x4_PSWT;
|
||||
std::unique_ptr<CRealElement> x8_PSTS;
|
||||
std::unique_ptr<CVectorElement> xc_POFS;
|
||||
std::unique_ptr<CIntElement> x10_SEED;
|
||||
std::unique_ptr<CRealElement> x14_LENG;
|
||||
std::unique_ptr<CRealElement> x18_WIDT;
|
||||
std::unique_ptr<CIntElement> x1c_MAXP;
|
||||
std::unique_ptr<CRealElement> x20_GRTE;
|
||||
std::unique_ptr<CColorElement> x24_COLR;
|
||||
std::unique_ptr<CIntElement> x28_LTME;
|
||||
std::unique_ptr<CEmitterElement> x2c_EMTR;
|
||||
std::unique_ptr<CRealElement> x30_EADY; // Added in MP3
|
||||
bool x30_24_LINE : 1 = false;
|
||||
bool x30_25_FXLL : 1 = false;
|
||||
bool x30_26_AAPH : 1 = false;
|
||||
bool x30_27_ZBUF : 1 = false;
|
||||
bool x30_28_SORT : 1 = false;
|
||||
bool x30_29_LIT_ : 1 = false;
|
||||
bool x30_30_ORNT : 1 = false;
|
||||
bool x30_31_RSOP : 1 = false;
|
||||
std::unique_ptr<CIntElement> x48_x34_MBSP;
|
||||
std::unique_ptr<CRealElement> x4c_x38_SIZE;
|
||||
std::unique_ptr<CRealElement> x50_x3c_ROTA;
|
||||
std::unique_ptr<CUVElement> x54_x40_TEXR;
|
||||
std::unique_ptr<CUVElement> x58_x44_TIND;
|
||||
SParticleModel x5c_x48_PMDL;
|
||||
std::unique_ptr<CVectorElement> x6c_x58_PMOP;
|
||||
std::unique_ptr<CVectorElement> x70_x5c_PMRT;
|
||||
std::unique_ptr<CVectorElement> x74_x60_PMSC;
|
||||
std::unique_ptr<CColorElement> x78_x64_PMCL;
|
||||
std::unique_ptr<CModVectorElement> x7c_x68_VEL1;
|
||||
std::unique_ptr<CModVectorElement> x80_x6c_VEL2;
|
||||
std::unique_ptr<CModVectorElement> x84_x70_VEL3;
|
||||
std::unique_ptr<CModVectorElement> x88_x74_VEL4;
|
||||
SChildGeneratorDesc x8c_x78_ICTS;
|
||||
std::unique_ptr<CIntElement> x9c_x88_NCSY;
|
||||
std::unique_ptr<CIntElement> xa0_x8c_CSSD;
|
||||
SChildGeneratorDesc xa4_x90_IDTS;
|
||||
std::unique_ptr<CIntElement> xb4_xa0_NDSY;
|
||||
SChildGeneratorDesc xb8_xa4_IITS;
|
||||
std::unique_ptr<CIntElement> xc8_xb4_PISY;
|
||||
std::unique_ptr<CIntElement> xcc_xb8_SISY;
|
||||
std::unique_ptr<CSpawnSystemKeyframeData> xd0_xbc_KSSM;
|
||||
SSwooshGeneratorDesc xd4_xc0_SSWH;
|
||||
std::unique_ptr<CIntElement> xe4_xd0_SSSD;
|
||||
std::unique_ptr<CVectorElement> xe8_xd4_SSPO;
|
||||
SElectricGeneratorDesc xec_xd8_SELC;
|
||||
std::unique_ptr<CIntElement> xf8_xe4_SESD;
|
||||
std::unique_ptr<CVectorElement> xfc_xe8_SEPO;
|
||||
std::unique_ptr<CIntElement> x100_xec_LTYP;
|
||||
std::unique_ptr<CColorElement> x104_xf0_LCLR;
|
||||
std::unique_ptr<CRealElement> x108_xf4_LINT;
|
||||
std::unique_ptr<CVectorElement> x10c_xf8_LOFF;
|
||||
std::unique_ptr<CVectorElement> x110_xfc_LDIR;
|
||||
std::unique_ptr<CIntElement> x114_x100_LFOT;
|
||||
std::unique_ptr<CRealElement> x118_x104_LFOR;
|
||||
std::unique_ptr<CRealElement> x11c_x108_LSLA;
|
||||
bool x31_24_MBLR : 1 = false;
|
||||
bool x31_25_PMAB : 1 = false;
|
||||
bool x31_26_PMUS : 1 = false;
|
||||
bool x31_27_PMOO : 1 = true;
|
||||
bool x31_28_VMD1 : 1 = false;
|
||||
bool x31_29_VMD2 : 1 = false;
|
||||
bool x31_30_VMD3 : 1 = false;
|
||||
bool x31_31_VMD4 : 1 = false;
|
||||
bool x32_24_CIND : 1 = false;
|
||||
bool x32_25_OPTS : 1 = false;
|
||||
std::unique_ptr<CIntElement> x34_MBSP;
|
||||
std::unique_ptr<CRealElement> x38_SIZE;
|
||||
std::unique_ptr<CRealElement> x3c_ROTA;
|
||||
std::unique_ptr<CUVElement> x40_TEXR;
|
||||
std::unique_ptr<CUVElement> x44_TIND;
|
||||
SParticleModel x48_PMDL;
|
||||
std::unique_ptr<CVectorElement> x58_PMOP;
|
||||
std::unique_ptr<CVectorElement> x5c_PMRT;
|
||||
std::unique_ptr<CVectorElement> x60_PMSC;
|
||||
std::unique_ptr<CColorElement> x64_PMCL;
|
||||
std::unique_ptr<CModVectorElement> x68_VEL1;
|
||||
std::unique_ptr<CModVectorElement> x6c_VEL2;
|
||||
std::unique_ptr<CModVectorElement> x70_VEL3;
|
||||
std::unique_ptr<CModVectorElement> x74_VEL4;
|
||||
SChildGeneratorDesc x78_ICTS;
|
||||
std::unique_ptr<CIntElement> x88_NCSY;
|
||||
std::unique_ptr<CIntElement> x8c_CSSD;
|
||||
SChildGeneratorDesc x90_IDTS;
|
||||
std::unique_ptr<CIntElement> xa0_NDSY;
|
||||
SChildGeneratorDesc xa4_IITS;
|
||||
std::unique_ptr<CIntElement> xb4_PISY;
|
||||
std::unique_ptr<CIntElement> xb8_SISY;
|
||||
std::unique_ptr<CSpawnSystemKeyframeData> xbc_KSSM;
|
||||
SSwooshGeneratorDesc xc0_SSWH;
|
||||
std::unique_ptr<CIntElement> xd0_SSSD;
|
||||
std::unique_ptr<CVectorElement> xd4_SSPO;
|
||||
SElectricGeneratorDesc xd8_SELC;
|
||||
std::unique_ptr<CIntElement> xe4_SESD;
|
||||
std::unique_ptr<CVectorElement> xe8_SEPO;
|
||||
std::unique_ptr<CIntElement> xec_LTYP;
|
||||
std::unique_ptr<CColorElement> xf0_LCLR;
|
||||
std::unique_ptr<CRealElement> xf4_LINT;
|
||||
std::unique_ptr<CVectorElement> xf8_LOFF;
|
||||
std::unique_ptr<CVectorElement> xfc_LDIR;
|
||||
std::unique_ptr<CIntElement> x100_LFOT;
|
||||
std::unique_ptr<CRealElement> x104_LFOR;
|
||||
std::unique_ptr<CRealElement> x108_LSLA;
|
||||
std::unique_ptr<CRealElement> x10c_ADV1;
|
||||
std::unique_ptr<CRealElement> x110_ADV2;
|
||||
std::unique_ptr<CRealElement> x114_ADV3;
|
||||
|
@ -103,7 +94,9 @@ public:
|
|||
std::unique_ptr<CRealElement> x120_ADV6;
|
||||
std::unique_ptr<CRealElement> x124_ADV7;
|
||||
std::unique_ptr<CRealElement> x128_ADV8;
|
||||
|
||||
s32 x174_DFLG = 0; // Added in MP2
|
||||
s32 x178_ = 0; // In MP3, need to check MP2
|
||||
s32 x17c_ = 0; // In MP3, need to check MP2
|
||||
/* Custom additions */
|
||||
std::unique_ptr<CColorElement> m_bevelGradient; /* FourCC BGCL */
|
||||
|
||||
|
|
|
@ -739,223 +739,223 @@ bool CParticleDataFactory::CreateGPSM(CGenDescription* fillDesc, CInputStream& i
|
|||
while (clsId != SBIG('_END')) {
|
||||
switch (clsId.toUint32()) {
|
||||
case SBIG('PMCL'):
|
||||
fillDesc->x78_x64_PMCL = GetColorElement(in);
|
||||
fillDesc->x64_PMCL = GetColorElement(in);
|
||||
break;
|
||||
case SBIG('LFOR'):
|
||||
fillDesc->x118_x104_LFOR = GetRealElement(in);
|
||||
fillDesc->x104_LFOR = GetRealElement(in);
|
||||
break;
|
||||
case SBIG('IDTS'):
|
||||
fillDesc->xa4_x90_IDTS = GetChildGeneratorDesc(in, resPool, tracker);
|
||||
fillDesc->x90_IDTS = GetChildGeneratorDesc(in, resPool, tracker);
|
||||
break;
|
||||
case SBIG('EMTR'):
|
||||
fillDesc->x40_x2c_EMTR = GetEmitterElement(in);
|
||||
fillDesc->x2c_EMTR = GetEmitterElement(in);
|
||||
break;
|
||||
case SBIG('COLR'):
|
||||
fillDesc->x30_x24_COLR = GetColorElement(in);
|
||||
fillDesc->x24_COLR = GetColorElement(in);
|
||||
break;
|
||||
case SBIG('CIND'):
|
||||
fillDesc->x45_30_x32_24_CIND = GetBool(in);
|
||||
fillDesc->x32_24_CIND = GetBool(in);
|
||||
break;
|
||||
case SBIG('AAPH'):
|
||||
fillDesc->x44_26_x30_26_AAPH = GetBool(in);
|
||||
fillDesc->x30_26_AAPH = GetBool(in);
|
||||
break;
|
||||
case SBIG('CSSD'):
|
||||
fillDesc->xa0_x8c_CSSD = GetIntElement(in);
|
||||
fillDesc->x8c_CSSD = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('GRTE'):
|
||||
fillDesc->x2c_x20_GRTE = GetRealElement(in);
|
||||
fillDesc->x20_GRTE = GetRealElement(in);
|
||||
break;
|
||||
case SBIG('FXLL'):
|
||||
fillDesc->x44_25_x30_25_FXLL = GetBool(in);
|
||||
fillDesc->x30_25_FXLL = GetBool(in);
|
||||
break;
|
||||
case SBIG('ICTS'):
|
||||
fillDesc->x8c_x78_ICTS = GetChildGeneratorDesc(in, resPool, tracker);
|
||||
fillDesc->x78_ICTS = GetChildGeneratorDesc(in, resPool, tracker);
|
||||
break;
|
||||
case SBIG('KSSM'): {
|
||||
fillDesc->xd0_xbc_KSSM.reset();
|
||||
fillDesc->xbc_KSSM.reset();
|
||||
FourCC cid = GetClassID(in);
|
||||
if (cid != SBIG('CNST'))
|
||||
break;
|
||||
fillDesc->xd0_xbc_KSSM = std::make_unique<CSpawnSystemKeyframeData>(in);
|
||||
fillDesc->xd0_xbc_KSSM->LoadAllSpawnedSystemTokens(resPool);
|
||||
fillDesc->xbc_KSSM = std::make_unique<CSpawnSystemKeyframeData>(in);
|
||||
fillDesc->xbc_KSSM->LoadAllSpawnedSystemTokens(resPool);
|
||||
break;
|
||||
}
|
||||
case SBIG('ILOC'):
|
||||
GetVectorElement(in);
|
||||
break;
|
||||
case SBIG('IITS'):
|
||||
fillDesc->xb8_xa4_IITS = GetChildGeneratorDesc(in, resPool, tracker);
|
||||
fillDesc->xa4_IITS = GetChildGeneratorDesc(in, resPool, tracker);
|
||||
break;
|
||||
case SBIG('IVEC'):
|
||||
GetVectorElement(in);
|
||||
break;
|
||||
case SBIG('LDIR'):
|
||||
fillDesc->x110_xfc_LDIR = GetVectorElement(in);
|
||||
fillDesc->xfc_LDIR = GetVectorElement(in);
|
||||
break;
|
||||
case SBIG('LCLR'):
|
||||
fillDesc->x104_xf0_LCLR = GetColorElement(in);
|
||||
fillDesc->xf0_LCLR = GetColorElement(in);
|
||||
break;
|
||||
case SBIG('LENG'):
|
||||
fillDesc->x20_x14_LENG = GetRealElement(in);
|
||||
fillDesc->x14_LENG = GetRealElement(in);
|
||||
break;
|
||||
case SBIG('MAXP'):
|
||||
fillDesc->x28_x1c_MAXP = GetIntElement(in);
|
||||
fillDesc->x1c_MAXP = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('LOFF'):
|
||||
fillDesc->x10c_xf8_LOFF = GetVectorElement(in);
|
||||
fillDesc->xf8_LOFF = GetVectorElement(in);
|
||||
break;
|
||||
case SBIG('LINT'):
|
||||
fillDesc->x108_xf4_LINT = GetRealElement(in);
|
||||
fillDesc->xf4_LINT = GetRealElement(in);
|
||||
break;
|
||||
case SBIG('LINE'):
|
||||
fillDesc->x44_24_x30_24_LINE = GetBool(in);
|
||||
fillDesc->x30_24_LINE = GetBool(in);
|
||||
break;
|
||||
case SBIG('LFOT'):
|
||||
fillDesc->x114_x100_LFOT = GetIntElement(in);
|
||||
fillDesc->x100_LFOT = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('LIT_'):
|
||||
fillDesc->x44_29_x30_29_LIT_ = GetBool(in);
|
||||
fillDesc->x30_29_LIT_ = GetBool(in);
|
||||
break;
|
||||
case SBIG('LTME'):
|
||||
fillDesc->x34_x28_LTME = GetIntElement(in);
|
||||
fillDesc->x28_LTME = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('LSLA'):
|
||||
fillDesc->x11c_x108_LSLA = GetRealElement(in);
|
||||
fillDesc->x108_LSLA = GetRealElement(in);
|
||||
break;
|
||||
case SBIG('LTYP'):
|
||||
fillDesc->x100_xec_LTYP = GetIntElement(in);
|
||||
fillDesc->xec_LTYP = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('NDSY'):
|
||||
fillDesc->xb4_xa0_NDSY = GetIntElement(in);
|
||||
fillDesc->xa0_NDSY = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('MBSP'):
|
||||
fillDesc->x48_x34_MBSP = GetIntElement(in);
|
||||
fillDesc->x34_MBSP = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('MBLR'):
|
||||
fillDesc->x44_30_x31_24_MBLR = GetBool(in);
|
||||
fillDesc->x31_24_MBLR = GetBool(in);
|
||||
break;
|
||||
case SBIG('NCSY'):
|
||||
fillDesc->x9c_x88_NCSY = GetIntElement(in);
|
||||
fillDesc->x88_NCSY = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('PISY'):
|
||||
fillDesc->xc8_xb4_PISY = GetIntElement(in);
|
||||
fillDesc->xb4_PISY = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('OPTS'):
|
||||
fillDesc->x45_31_x32_25_OPTS = GetBool(in);
|
||||
fillDesc->x32_25_OPTS = GetBool(in);
|
||||
break;
|
||||
case SBIG('PMAB'):
|
||||
fillDesc->x44_31_x31_25_PMAB = GetBool(in);
|
||||
fillDesc->x31_25_PMAB = GetBool(in);
|
||||
break;
|
||||
case SBIG('SESD'):
|
||||
fillDesc->xf8_xe4_SESD = GetIntElement(in);
|
||||
fillDesc->xe4_SESD = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('SEPO'):
|
||||
fillDesc->xfc_xe8_SEPO = GetVectorElement(in);
|
||||
fillDesc->xe8_SEPO = GetVectorElement(in);
|
||||
break;
|
||||
case SBIG('PSLT'):
|
||||
fillDesc->xc_x0_PSLT = GetIntElement(in);
|
||||
fillDesc->x0_PSLT = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('PMSC'):
|
||||
fillDesc->x74_x60_PMSC = GetVectorElement(in);
|
||||
fillDesc->x60_PMSC = GetVectorElement(in);
|
||||
break;
|
||||
case SBIG('PMOP'):
|
||||
fillDesc->x6c_x58_PMOP = GetVectorElement(in);
|
||||
fillDesc->x58_PMOP = GetVectorElement(in);
|
||||
break;
|
||||
case SBIG('PMDL'):
|
||||
fillDesc->x5c_x48_PMDL = GetModel(in, resPool);
|
||||
fillDesc->x48_PMDL = GetModel(in, resPool);
|
||||
break;
|
||||
case SBIG('PMRT'):
|
||||
fillDesc->x70_x5c_PMRT = GetVectorElement(in);
|
||||
fillDesc->x5c_PMRT = GetVectorElement(in);
|
||||
break;
|
||||
case SBIG('POFS'):
|
||||
fillDesc->x18_xc_POFS = GetVectorElement(in);
|
||||
fillDesc->xc_POFS = GetVectorElement(in);
|
||||
break;
|
||||
case SBIG('PMUS'):
|
||||
fillDesc->x45_24_x31_26_PMUS = GetBool(in);
|
||||
fillDesc->x31_26_PMUS = GetBool(in);
|
||||
break;
|
||||
case SBIG('PSIV'):
|
||||
GetVectorElement(in);
|
||||
break;
|
||||
case SBIG('ROTA'):
|
||||
fillDesc->x50_x3c_ROTA = GetRealElement(in);
|
||||
fillDesc->x3c_ROTA = GetRealElement(in);
|
||||
break;
|
||||
case SBIG('PSVM'):
|
||||
GetModVectorElement(in);
|
||||
break;
|
||||
case SBIG('PSTS'):
|
||||
fillDesc->x14_x8_PSTS = GetRealElement(in);
|
||||
fillDesc->x8_PSTS = GetRealElement(in);
|
||||
break;
|
||||
case SBIG('PSOV'):
|
||||
GetVectorElement(in);
|
||||
break;
|
||||
case SBIG('PSWT'):
|
||||
fillDesc->x10_x4_PSWT = GetIntElement(in);
|
||||
fillDesc->x4_PSWT = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('SEED'):
|
||||
fillDesc->x1c_x10_SEED = GetIntElement(in);
|
||||
fillDesc->x10_SEED = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('PMOO'):
|
||||
fillDesc->x45_25_x31_27_PMOO = GetBool(in);
|
||||
fillDesc->x31_27_PMOO = GetBool(in);
|
||||
break;
|
||||
case SBIG('SSSD'):
|
||||
fillDesc->xe4_xd0_SSSD = GetIntElement(in);
|
||||
fillDesc->xd0_SSSD = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('SORT'):
|
||||
fillDesc->x44_28_x30_28_SORT = GetBool(in);
|
||||
fillDesc->x30_28_SORT = GetBool(in);
|
||||
break;
|
||||
case SBIG('SIZE'):
|
||||
fillDesc->x4c_x38_SIZE = GetRealElement(in);
|
||||
fillDesc->x38_SIZE = GetRealElement(in);
|
||||
break;
|
||||
case SBIG('SISY'):
|
||||
fillDesc->xcc_xb8_SISY = GetIntElement(in);
|
||||
fillDesc->xb8_SISY = GetIntElement(in);
|
||||
break;
|
||||
case SBIG('SSPO'):
|
||||
fillDesc->xe8_xd4_SSPO = GetVectorElement(in);
|
||||
fillDesc->xd4_SSPO = GetVectorElement(in);
|
||||
break;
|
||||
case SBIG('TEXR'): {
|
||||
std::unique_ptr<CUVElement> tex(GetTextureElement(in, resPool));
|
||||
if (tex->GetValueTexture(0))
|
||||
fillDesc->x54_x40_TEXR = std::move(tex);
|
||||
fillDesc->x40_TEXR = std::move(tex);
|
||||
break;
|
||||
}
|
||||
case SBIG('SSWH'):
|
||||
fillDesc->xd4_xc0_SSWH = GetSwooshGeneratorDesc(in, resPool);
|
||||
fillDesc->xc0_SSWH = GetSwooshGeneratorDesc(in, resPool);
|
||||
break;
|
||||
case SBIG('TIND'): {
|
||||
std::unique_ptr<CUVElement> tex(GetTextureElement(in, resPool));
|
||||
if (tex->GetValueTexture(0))
|
||||
fillDesc->x58_x44_TIND = std::move(tex);
|
||||
fillDesc->x44_TIND = std::move(tex);
|
||||
break;
|
||||
}
|
||||
case SBIG('VMD4'):
|
||||
fillDesc->x45_29_x31_31_VMD4 = GetBool(in);
|
||||
fillDesc->x31_31_VMD4 = GetBool(in);
|
||||
break;
|
||||
case SBIG('VMD3'):
|
||||
fillDesc->x45_28_x31_30_VMD3 = GetBool(in);
|
||||
fillDesc->x31_30_VMD3 = GetBool(in);
|
||||
break;
|
||||
case SBIG('VMD2'):
|
||||
fillDesc->x45_27_x31_29_VMD2 = GetBool(in);
|
||||
fillDesc->x31_29_VMD2 = GetBool(in);
|
||||
break;
|
||||
case SBIG('VMD1'):
|
||||
fillDesc->x45_26_x31_28_VMD1 = GetBool(in);
|
||||
fillDesc->x31_28_VMD1 = GetBool(in);
|
||||
break;
|
||||
case SBIG('VEL4'):
|
||||
fillDesc->x88_x74_VEL4 = GetModVectorElement(in);
|
||||
fillDesc->x74_VEL4 = GetModVectorElement(in);
|
||||
break;
|
||||
case SBIG('VEL3'):
|
||||
fillDesc->x84_x70_VEL3 = GetModVectorElement(in);
|
||||
fillDesc->x70_VEL3 = GetModVectorElement(in);
|
||||
break;
|
||||
case SBIG('VEL2'):
|
||||
fillDesc->x80_x6c_VEL2 = GetModVectorElement(in);
|
||||
fillDesc->x6c_VEL2 = GetModVectorElement(in);
|
||||
break;
|
||||
case SBIG('VEL1'):
|
||||
fillDesc->x7c_x68_VEL1 = GetModVectorElement(in);
|
||||
fillDesc->x68_VEL1 = GetModVectorElement(in);
|
||||
break;
|
||||
case SBIG('ZBUF'):
|
||||
fillDesc->x44_27_x30_27_ZBUF = GetBool(in);
|
||||
fillDesc->x30_27_ZBUF = GetBool(in);
|
||||
break;
|
||||
case SBIG('WIDT'):
|
||||
fillDesc->x24_x18_WIDT = GetRealElement(in);
|
||||
fillDesc->x18_WIDT = GetRealElement(in);
|
||||
break;
|
||||
case SBIG('ORNT'):
|
||||
fillDesc->x30_30_ORNT = GetBool(in);
|
||||
|
@ -988,7 +988,7 @@ bool CParticleDataFactory::CreateGPSM(CGenDescription* fillDesc, CInputStream& i
|
|||
fillDesc->x128_ADV8 = GetRealElement(in);
|
||||
break;
|
||||
case SBIG('SELC'):
|
||||
fillDesc->xec_xd8_SELC = GetElectricGeneratorDesc(in, resPool);
|
||||
fillDesc->xd8_SELC = GetElectricGeneratorDesc(in, resPool);
|
||||
break;
|
||||
default: {
|
||||
Log.report(logvisor::Fatal, FMT_STRING("Unknown GPSM class {} @{}"), clsId, in.position());
|
||||
|
@ -1019,20 +1019,20 @@ bool CParticleDataFactory::CreateGPSM(CGenDescription* fillDesc, CInputStream& i
|
|||
}
|
||||
|
||||
void CParticleDataFactory::LoadGPSMTokens(CGenDescription* desc) {
|
||||
if (desc->x5c_x48_PMDL.m_found)
|
||||
desc->x5c_x48_PMDL.m_model = desc->x5c_x48_PMDL.m_token.GetObj();
|
||||
if (desc->x48_PMDL.m_found)
|
||||
desc->x48_PMDL.m_model = desc->x48_PMDL.m_token.GetObj();
|
||||
|
||||
if (desc->x8c_x78_ICTS.m_found)
|
||||
desc->x8c_x78_ICTS.m_gen = desc->x8c_x78_ICTS.m_token.GetObj();
|
||||
if (desc->x78_ICTS.m_found)
|
||||
desc->x78_ICTS.m_gen = desc->x78_ICTS.m_token.GetObj();
|
||||
|
||||
if (desc->xa4_x90_IDTS.m_found)
|
||||
desc->xa4_x90_IDTS.m_gen = desc->xa4_x90_IDTS.m_token.GetObj();
|
||||
if (desc->x90_IDTS.m_found)
|
||||
desc->x90_IDTS.m_gen = desc->x90_IDTS.m_token.GetObj();
|
||||
|
||||
if (desc->xb8_xa4_IITS.m_found)
|
||||
desc->xb8_xa4_IITS.m_gen = desc->xb8_xa4_IITS.m_token.GetObj();
|
||||
if (desc->xa4_IITS.m_found)
|
||||
desc->xa4_IITS.m_gen = desc->xa4_IITS.m_token.GetObj();
|
||||
|
||||
if (desc->xd4_xc0_SSWH.m_found)
|
||||
desc->xd4_xc0_SSWH.m_swoosh = desc->xd4_xc0_SSWH.m_token.GetObj();
|
||||
if (desc->xc0_SSWH.m_found)
|
||||
desc->xc0_SSWH.m_swoosh = desc->xc0_SSWH.m_token.GetObj();
|
||||
}
|
||||
|
||||
CFactoryFnReturn FParticleFactory(const SObjectTag& tag, CInputStream& in, const CVParamTransfer& vparms,
|
||||
|
|
|
@ -405,18 +405,18 @@ void CNewFlameThrower::UpdateLights(CStateManager& mgr) {
|
|||
continue;
|
||||
}
|
||||
CLight light_data = x358_mainFireGen->GetLight();
|
||||
if (x304_mainFire.GetObj()->x104_xf0_LCLR.get()) {
|
||||
if (x304_mainFire.GetObj()->xf0_LCLR.get()) {
|
||||
s32 rand_int = x2e8_rand.Range(0, 16);
|
||||
CParticleGlobals::instance()->SetEmitterTime(rand_int);
|
||||
zeus::CColor out_color(0xffff00ff);
|
||||
x304_mainFire.GetObj()->x104_xf0_LCLR->GetValue(rand_int, out_color);
|
||||
x304_mainFire.GetObj()->xf0_LCLR->GetValue(rand_int, out_color);
|
||||
light_data.SetColor(out_color);
|
||||
}
|
||||
if (x304_mainFire.GetObj()->x108_xf4_LINT.get()) {
|
||||
if (x304_mainFire.GetObj()->xf4_LINT.get()) {
|
||||
s32 rand_int = x2e8_rand.Range(0, 16);
|
||||
CParticleGlobals::instance()->SetEmitterTime(rand_int);
|
||||
float out_const_attenuation = 1.f;
|
||||
x304_mainFire.GetObj()->x108_xf4_LINT->GetValue(rand_int, out_const_attenuation);
|
||||
x304_mainFire.GetObj()->xf4_LINT->GetValue(rand_int, out_const_attenuation);
|
||||
light_data.SetAngleAttenuation(out_const_attenuation, 0.f, 0.f);
|
||||
}
|
||||
light->SetLight(light_data);
|
||||
|
|
Loading…
Reference in New Issue