From 3e92b21a0fa065544f6ea8900eb6bff13b19ebb2 Mon Sep 17 00:00:00 2001 From: Jacob Ledbetter Date: Tue, 1 Sep 2026 13:48:40 -0600 Subject: [PATCH 1/2] bugfix(audio): Copy sound scene state safely --- .../Source/WWVegas/WWAudio/SoundSceneObj.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Core/Libraries/Source/WWVegas/WWAudio/SoundSceneObj.cpp b/Core/Libraries/Source/WWVegas/WWAudio/SoundSceneObj.cpp index 7a0bd0ad12a..55c60915849 100644 --- a/Core/Libraries/Source/WWVegas/WWAudio/SoundSceneObj.cpp +++ b/Core/Libraries/Source/WWVegas/WWAudio/SoundSceneObj.cpp @@ -93,6 +93,7 @@ SoundSceneObjClass::SoundSceneObjClass () m_PhysWrapper (nullptr), m_pCallback (nullptr), m_AttachedObject (nullptr), + m_AttachedBone (-1), m_UserData (0), m_UserObj (nullptr), m_ID (SOUND_OBJ_DEFAULT_ID), @@ -110,18 +111,22 @@ SoundSceneObjClass::SoundSceneObjClass () // //////////////////////////////////////////////////////////////////////////////////////////////// SoundSceneObjClass::SoundSceneObjClass (const SoundSceneObjClass &src) - : m_Scene (nullptr), + : m_Scene (src.m_Scene), m_PhysWrapper (nullptr), - m_pCallback (nullptr), + m_pCallback (src.m_pCallback), m_AttachedObject (nullptr), + m_AttachedBone (src.m_AttachedBone), m_UserData (0), m_UserObj (nullptr), m_ID (SOUND_OBJ_DEFAULT_ID), - m_RegisteredEvents (AudioCallbackClass::EVENT_NONE) + m_RegisteredEvents (src.m_RegisteredEvents) { m_ID = m_NextAvailableID ++; - (*this) = src; + // TheSuperHackers @bugfix Cryo 01/09/2026 Copy the attachment without invoking virtual positioning + // before the derived sound object has been constructed. + REF_PTR_SET (m_AttachedObject, src.m_AttachedObject); + PersistClass::operator= ((const PersistClass &)src); Register_Sound_Object (this); } From 9b8ff3f78441bcdbce0f08bfee1ccf4bf52e5e3a Mon Sep 17 00:00:00 2001 From: Jacob Ledbetter Date: Mon, 14 Sep 2026 10:23:42 -0600 Subject: [PATCH 2/2] refactor(audio): Copy persistence state in constructor initializer --- Core/Libraries/Source/WWVegas/WWAudio/SoundSceneObj.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Core/Libraries/Source/WWVegas/WWAudio/SoundSceneObj.cpp b/Core/Libraries/Source/WWVegas/WWAudio/SoundSceneObj.cpp index 55c60915849..edd132300f4 100644 --- a/Core/Libraries/Source/WWVegas/WWAudio/SoundSceneObj.cpp +++ b/Core/Libraries/Source/WWVegas/WWAudio/SoundSceneObj.cpp @@ -111,7 +111,8 @@ SoundSceneObjClass::SoundSceneObjClass () // //////////////////////////////////////////////////////////////////////////////////////////////// SoundSceneObjClass::SoundSceneObjClass (const SoundSceneObjClass &src) - : m_Scene (src.m_Scene), + : PersistClass(static_cast(src)), + m_Scene (src.m_Scene), m_PhysWrapper (nullptr), m_pCallback (src.m_pCallback), m_AttachedObject (nullptr), @@ -123,10 +124,7 @@ SoundSceneObjClass::SoundSceneObjClass (const SoundSceneObjClass &src) { m_ID = m_NextAvailableID ++; - // TheSuperHackers @bugfix Cryo 01/09/2026 Copy the attachment without invoking virtual positioning - // before the derived sound object has been constructed. REF_PTR_SET (m_AttachedObject, src.m_AttachedObject); - PersistClass::operator= ((const PersistClass &)src); Register_Sound_Object (this); }