From eaa82ba5c6f677ce1bcfebeb0e13ba9c0ed2c283 Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Fri, 22 Sep 2023 02:19:32 +0300 Subject: [PATCH] Read BSStripPSysData --- components/nif/data.cpp | 14 +++++++++++++- components/nif/niffile.cpp | 3 ++- components/nif/particle.cpp | 10 ++++++++++ components/nif/particle.hpp | 10 ++++++++++ components/nif/record.hpp | 2 ++ 5 files changed, 37 insertions(+), 2 deletions(-) diff --git a/components/nif/data.cpp b/components/nif/data.cpp index 34ec3b2831..9aa61b4db7 100644 --- a/components/nif/data.cpp +++ b/components/nif/data.cpp @@ -14,7 +14,19 @@ namespace Nif nif->read(mGroupId); nif->read(mNumVertices); - bool hasData = recType != RC_NiPSysData || nif->getBethVersion() < NIFFile::BethVersion::BETHVER_FO3; + + bool isPSysData = false; + switch (recType) + { + case RC_NiPSysData: + // case RC_NiMeshPSysData: + case RC_BSStripPSysData: + isPSysData = true; + break; + default: + break; + } + bool hasData = !isPSysData || nif->getBethVersion() < NIFFile::BethVersion::BETHVER_FO3; if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 0)) { diff --git a/components/nif/niffile.cpp b/components/nif/niffile.cpp index f3a03b097f..196fe780cc 100644 --- a/components/nif/niffile.cpp +++ b/components/nif/niffile.cpp @@ -283,7 +283,8 @@ namespace Nif { "NiPSysData", &construct }, // Geometry, Bethesda - { "BSStripParticleSystem", &construct }, + { "BSStripParticleSystem", &construct }, + { "BSStripPSysData", &construct }, // Modifiers, 4.0.0.2 { "NiGravity", &construct }, diff --git a/components/nif/particle.cpp b/components/nif/particle.cpp index 8dee873c0b..bd3b4dcddb 100644 --- a/components/nif/particle.cpp +++ b/components/nif/particle.cpp @@ -215,6 +215,16 @@ namespace Nif } } + void BSStripPSysData::read(NIFStream* nif) + { + NiPSysData::read(nif); + + nif->read(mMaxPointCount); + nif->read(mStartCapSize); + nif->read(mEndCapSize); + nif->read(mDoZPrepass); + } + void NiPSysModifier::read(NIFStream* nif) { nif->read(mName); diff --git a/components/nif/particle.hpp b/components/nif/particle.hpp index f800ddefb7..4428347105 100644 --- a/components/nif/particle.hpp +++ b/components/nif/particle.hpp @@ -138,6 +138,16 @@ namespace Nif void read(NIFStream* nif) override; }; + struct BSStripPSysData : NiPSysData + { + uint16_t mMaxPointCount; + float mStartCapSize; + float mEndCapSize; + bool mDoZPrepass; + + void read(NIFStream* nif) override; + }; + // Abstract struct NiPSysModifier : Record { diff --git a/components/nif/record.hpp b/components/nif/record.hpp index a4598ebe3c..2073723ece 100644 --- a/components/nif/record.hpp +++ b/components/nif/record.hpp @@ -94,6 +94,8 @@ namespace Nif RC_BSMultiBoundSphere, RC_BSNiAlphaPropertyTestRefController, RC_BSPackedAdditionalGeometryData, + RC_BSStripParticleSystem, + RC_BSStripPSysData, RC_BSRefractionFirePeriodController, RC_BSRefractionStrengthController, RC_BSShaderNoLightingProperty,