From aaa44beef28497e9d09837c81f73c16c2bdd7826 Mon Sep 17 00:00:00 2001 From: Birk Magnussen <6238428+BMagnu@users.noreply.github.com> Date: Fri, 19 Jun 2026 05:22:16 +0900 Subject: [PATCH 1/2] Fix possibly negative pspew value init --- code/weapon/weapons.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/weapon/weapons.cpp b/code/weapon/weapons.cpp index 10d51ae322c..06380f61a03 100644 --- a/code/weapon/weapons.cpp +++ b/code/weapon/weapons.cpp @@ -699,7 +699,11 @@ static particle::ParticleEffectHandle convertLegacyPspewBuffer(const pspew_legac auto vel_vol_temp = std::make_unique(); vel_vol_temp->posOffset = vec3d {{{pspew_buffer.particle_spew_scale, 0.f, 0.f}}}; - vel_vol_temp->m_modular_curves.add_curve("Time Running", particle::PointVolume::VolumeModularCurveOutput::OFFSET_ROT, modular_curves_entry{curve_id, ::util::UniformFloatRange(1.f), ::util::UniformFloatRange(0.f, 1.f / pspew_buffer.particle_spew_rotation_rate), true}); + float rot_rnd_min = 0.f; + float rot_rnd_max = pspew_buffer.particle_spew_rotation_rate; + if (rot_rnd_max < rot_rnd_min) + std::swap(rot_rnd_min, rot_rnd_max); + vel_vol_temp->m_modular_curves.add_curve("Time Running", particle::PointVolume::VolumeModularCurveOutput::OFFSET_ROT, modular_curves_entry{curve_id, ::util::UniformFloatRange(1.f), ::util::UniformFloatRange(rot_rnd_min, 1.f / rot_rnd_max), true}); velocity_vol = std::move(vel_vol_temp); } break; From 2cb95bcb917b9fa98a3e4c3aadfeff97236f2abd Mon Sep 17 00:00:00 2001 From: Birk Magnussen <6238428+BMagnu@users.noreply.github.com> Date: Sat, 20 Jun 2026 19:17:12 +0900 Subject: [PATCH 2/2] fix math --- code/weapon/weapons.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/weapon/weapons.cpp b/code/weapon/weapons.cpp index 06380f61a03..450ca52a604 100644 --- a/code/weapon/weapons.cpp +++ b/code/weapon/weapons.cpp @@ -700,10 +700,10 @@ static particle::ParticleEffectHandle convertLegacyPspewBuffer(const pspew_legac auto vel_vol_temp = std::make_unique(); vel_vol_temp->posOffset = vec3d {{{pspew_buffer.particle_spew_scale, 0.f, 0.f}}}; float rot_rnd_min = 0.f; - float rot_rnd_max = pspew_buffer.particle_spew_rotation_rate; + float rot_rnd_max = 1.0f / pspew_buffer.particle_spew_rotation_rate; if (rot_rnd_max < rot_rnd_min) std::swap(rot_rnd_min, rot_rnd_max); - vel_vol_temp->m_modular_curves.add_curve("Time Running", particle::PointVolume::VolumeModularCurveOutput::OFFSET_ROT, modular_curves_entry{curve_id, ::util::UniformFloatRange(1.f), ::util::UniformFloatRange(rot_rnd_min, 1.f / rot_rnd_max), true}); + vel_vol_temp->m_modular_curves.add_curve("Time Running", particle::PointVolume::VolumeModularCurveOutput::OFFSET_ROT, modular_curves_entry{curve_id, ::util::UniformFloatRange(1.f), ::util::UniformFloatRange(rot_rnd_min, rot_rnd_max), true}); velocity_vol = std::move(vel_vol_temp); } break;