@@ -1761,6 +1761,24 @@ void CModelInfoSA::MakeObjectModel(ushort usBaseID)
17611761 CopyStreamingInfoFromModel (usBaseID);
17621762}
17631763
1764+ void CModelInfoSA::MakeObjectDamageableModel (std::uint16_t baseModel)
1765+ {
1766+ CDamageableModelInfoSAInterface* m_pInterface = new CDamageableModelInfoSAInterface ();
1767+
1768+ CDamageableModelInfoSAInterface* pBaseObjectInfo = static_cast <CDamageableModelInfoSAInterface*>(ppModelInfo[baseModel]);
1769+ MemCpyFast (m_pInterface, pBaseObjectInfo, sizeof (CDamageableModelInfoSAInterface));
1770+ m_pInterface->usNumberOfRefs = 0 ;
1771+ m_pInterface->pRwObject = nullptr ;
1772+ m_pInterface->usUnknown = 65535 ;
1773+ m_pInterface->usDynamicIndex = 65535 ;
1774+ m_pInterface->m_damagedAtomic = nullptr ;
1775+
1776+ ppModelInfo[m_dwModelID] = m_pInterface;
1777+
1778+ m_dwParentID = baseModel;
1779+ CopyStreamingInfoFromModel (baseModel);
1780+ }
1781+
17641782void CModelInfoSA::MakeTimedObjectModel (ushort usBaseID)
17651783{
17661784 CTimeModelInfoSAInterface* m_pInterface = new CTimeModelInfoSAInterface ();
@@ -1826,7 +1844,14 @@ void CModelInfoSA::DeallocateModel(void)
18261844 delete reinterpret_cast <CPedModelInfoSAInterface*>(ppModelInfo[m_dwModelID]);
18271845 break ;
18281846 case eModelInfoType::ATOMIC:
1829- delete reinterpret_cast <CBaseModelInfoSAInterface*>(ppModelInfo[m_dwModelID]);
1847+ if (IsDamageableAtomic ())
1848+ {
1849+ delete reinterpret_cast <CDamageableModelInfoSAInterface*>(ppModelInfo[m_dwModelID]);
1850+ }
1851+ else
1852+ {
1853+ delete reinterpret_cast <CBaseModelInfoSAInterface*>(ppModelInfo[m_dwModelID]);
1854+ }
18301855 break ;
18311856 case eModelInfoType::CLUMP:
18321857 delete reinterpret_cast <CClumpModelInfoSAInterface*>(ppModelInfo[m_dwModelID]);
@@ -2081,6 +2106,12 @@ bool CModelInfoSA::IsTowableBy(CModelInfo* towingModel)
20812106 return isTowable;
20822107}
20832108
2109+ bool CModelInfoSA::IsDamageableAtomic ()
2110+ {
2111+ void * asDamagable = ((void * (*)())m_pInterface->VFTBL ->AsDamageAtomicModelInfoPtr )();
2112+ return asDamagable != nullptr ;
2113+ }
2114+
20842115// ////////////////////////////////////////////////////////////////////////////////////////
20852116//
20862117// CModelInfoSA::ForceUnload
0 commit comments