diff --git a/components/nif/niffile.cpp b/components/nif/niffile.cpp index 7f0d630be1..b0dde04d32 100644 --- a/components/nif/niffile.cpp +++ b/components/nif/niffile.cpp @@ -294,6 +294,7 @@ namespace Nif // Modifiers, Gamebryo { "NiPSysAgeDeathModifier", &construct }, + { "NiPSysBombModifier", &construct }, { "NiPSysBoundUpdateModifier", &construct }, { "NiPSysDragModifier", &construct }, { "NiPSysGravityModifier", &construct }, @@ -310,6 +311,7 @@ namespace Nif { "BSPSysSimpleColorModifier", &construct }, { "BSPSysStripUpdateModifier", &construct }, { "BSPSysSubTexModifier", &construct }, + { "BSWindModifier", &construct }, // Emitters { "NiPSysBoxEmitter", &construct }, diff --git a/components/nif/particle.cpp b/components/nif/particle.cpp index 289210662e..4a7603ca77 100644 --- a/components/nif/particle.cpp +++ b/components/nif/particle.cpp @@ -253,6 +253,25 @@ namespace Nif mSpawnModifier.post(nif); } + void NiPSysBombModifier::read(NIFStream* nif) + { + NiPSysModifier::read(nif); + + mBombObject.read(nif); + nif->read(mBombAxis); + nif->read(mDecay); + nif->read(mDeltaV); + nif->read(mDecayType); + nif->read(mSymmetryType); + } + + void NiPSysBombModifier::post(Reader& nif) + { + NiPSysModifier::post(nif); + + mBombObject.post(nif); + } + void NiPSysBoundUpdateModifier::read(NIFStream* nif) { NiPSysModifier::read(nif); @@ -422,6 +441,13 @@ namespace Nif nif->read(mFrameCountFudge); } + void BSWindModifier::read(NIFStream* nif) + { + NiPSysModifier::read(nif); + + nif->read(mStrength); + } + void NiPSysEmitter::read(NIFStream* nif) { NiPSysModifier::read(nif); diff --git a/components/nif/particle.hpp b/components/nif/particle.hpp index 876c1c6a75..6c6306701b 100644 --- a/components/nif/particle.hpp +++ b/components/nif/particle.hpp @@ -186,6 +186,19 @@ namespace Nif void post(Reader& nif) override; }; + struct NiPSysBombModifier : NiPSysModifier + { + NiAVObjectPtr mBombObject; + osg::Vec3f mBombAxis; + float mDecay; + float mDeltaV; + uint32_t mDecayType; + uint32_t mSymmetryType; + + void read(NIFStream* nif) override; + void post(Reader& nif) override; + }; + struct NiPSysBoundUpdateModifier : public NiPSysModifier { uint16_t mUpdateSkip; @@ -318,6 +331,13 @@ namespace Nif void read(NIFStream* nif) override; }; + struct BSWindModifier : NiPSysModifier + { + float mStrength; + + void read(NIFStream* nif) override; + }; + // Abstract struct NiPSysEmitter : public NiPSysModifier { diff --git a/components/nif/record.hpp b/components/nif/record.hpp index 6b59465a14..ed497323a9 100644 --- a/components/nif/record.hpp +++ b/components/nif/record.hpp @@ -113,6 +113,7 @@ namespace Nif RC_BSTriShape, RC_BSWArray, RC_BSWaterShaderProperty, + RC_BSWindModifier, RC_BSXFlags, RC_DistantLODShaderProperty, RC_HairShaderProperty, @@ -193,8 +194,9 @@ namespace Nif RC_NiPSysAirFieldAirFrictionCtlr, RC_NiPSysAirFieldInheritVelocityCtlr, RC_NiPSysAirFieldSpreadCtlr, - RC_NiPSysBoxEmitter, + RC_NiPSysBombModifier, RC_NiPSysBoundUpdateModifier, + RC_NiPSysBoxEmitter, RC_NiPSysColliderManager, RC_NiPSysCylinderEmitter, RC_NiPSysData,