Skip to content

Commit 428561f

Browse files
authored
Allow allocating clump models (PR #3131)
1 parent d460d93 commit 428561f

File tree

7 files changed

+47
-0
lines changed

7 files changed

+47
-0
lines changed

Client/game_sa/CModelInfoSA.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1710,6 +1710,22 @@ void CModelInfoSA::MakeTimedObjectModel(ushort usBaseID)
17101710
CopyStreamingInfoFromModel(usBaseID);
17111711
}
17121712

1713+
void CModelInfoSA::MakeClumpModel(ushort usBaseID)
1714+
{
1715+
CClumpModelInfoSAInterface* pNewInterface = new CClumpModelInfoSAInterface();
1716+
CBaseModelInfoSAInterface* pBaseObjectInfo = ppModelInfo[usBaseID];
1717+
MemCpyFast(pNewInterface, pBaseObjectInfo, sizeof(CClumpModelInfoSAInterface));
1718+
pNewInterface->usNumberOfRefs = 0;
1719+
pNewInterface->pRwObject = nullptr;
1720+
pNewInterface->usUnknown = 65535;
1721+
pNewInterface->usDynamicIndex = 65535;
1722+
1723+
ppModelInfo[m_dwModelID] = pNewInterface;
1724+
1725+
m_dwParentID = usBaseID;
1726+
CopyStreamingInfoFromModel(usBaseID);
1727+
}
1728+
17131729
void CModelInfoSA::MakeVehicleAutomobile(ushort usBaseID)
17141730
{
17151731
CVehicleModelInfoSAInterface* m_pInterface = new CVehicleModelInfoSAInterface();
@@ -1743,6 +1759,9 @@ void CModelInfoSA::DeallocateModel(void)
17431759
case eModelInfoType::ATOMIC:
17441760
delete reinterpret_cast<CBaseModelInfoSAInterface*>(ppModelInfo[m_dwModelID]);
17451761
break;
1762+
case eModelInfoType::CLUMP:
1763+
delete reinterpret_cast<CClumpModelInfoSAInterface*>(ppModelInfo[m_dwModelID]);
1764+
break;
17461765
case eModelInfoType::TIME:
17471766
delete reinterpret_cast<CTimeModelInfoSAInterface*>(ppModelInfo[m_dwModelID]);
17481767
break;

Client/game_sa/CModelInfoSA.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,16 @@ struct CTimeInfoSAInterface
243243
short m_wOtherTimeModel;
244244
};
245245

246+
class CClumpModelInfoSAInterface : public CBaseModelInfoSAInterface
247+
{
248+
public:
249+
union
250+
{
251+
char* m_animFileName;
252+
uint32_t m_nAnimFileIndex;
253+
};
254+
};
255+
246256
class CTimeModelInfoSAInterface : public CBaseModelInfoSAInterface
247257
{
248258
public:
@@ -435,6 +445,7 @@ class CModelInfoSA : public CModelInfo
435445
void MakeObjectModel(ushort usBaseModelID);
436446
void MakeVehicleAutomobile(ushort usBaseModelID);
437447
void MakeTimedObjectModel(ushort usBaseModelID);
448+
void MakeClumpModel(ushort usBaseModelID);
438449
void DeallocateModel(void);
439450
unsigned int GetParentID() { return m_dwParentID; };
440451

Client/mods/deathmatch/logic/CClientModel.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ bool CClientModel::Allocate(ushort usParentID)
5050
return true;
5151
}
5252
break;
53+
case eClientModelType::CLUMP:
54+
if (g_pClientGame->GetObjectManager()->IsValidModel(usParentID))
55+
{
56+
pModelInfo->MakeClumpModel(usParentID);
57+
return true;
58+
}
59+
break;
5360
case eClientModelType::TIMED_OBJECT:
5461
if (g_pClientGame->GetObjectManager()->IsValidModel(usParentID))
5562
{
@@ -114,6 +121,7 @@ void CClientModel::RestoreEntitiesUsingThisModel()
114121
unloadModelsAndCallEvents(pPedManager->IterBegin(), pPedManager->IterEnd(), 0, [](auto& element) { element.SetModel(0); });
115122
break;
116123
}
124+
case eClientModelType::CLUMP:
117125
case eClientModelType::OBJECT:
118126
case eClientModelType::TIMED_OBJECT:
119127
{

Client/mods/deathmatch/logic/CClientModel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ enum class eClientModelType
2020
OBJECT,
2121
VEHICLE,
2222
TIMED_OBJECT,
23+
CLUMP,
2324
};
2425

2526
class CResource;

Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,7 @@ ADD_ENUM(eClientModelType::PED, "ped")
674674
ADD_ENUM(eClientModelType::OBJECT, "object")
675675
ADD_ENUM(eClientModelType::VEHICLE, "vehicle")
676676
ADD_ENUM(eClientModelType::TIMED_OBJECT, "timed-object")
677+
ADD_ENUM(eClientModelType::CLUMP, "clump")
677678
IMPLEMENT_ENUM_CLASS_END("client-model-type")
678679

679680
// Sound effects

Client/mods/deathmatch/logic/luadefs/CLuaEngineDefs.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -852,6 +852,12 @@ int CLuaEngineDefs::EngineRequestModel(lua_State* luaVM)
852852
case eClientModelType::PED:
853853
usParentID = 7; // male01
854854
break;
855+
case eClientModelType::TIMED_OBJECT:
856+
usParentID = 4715; // LTSLAsky1_LAn2
857+
break;
858+
case eClientModelType::CLUMP:
859+
usParentID = 3425; // nt_windmill (windmill)
860+
break;
855861
case eClientModelType::OBJECT:
856862
usParentID = 1337; // BinNt07_LA (trash can)
857863
break;

Client/sdk/game/CModelInfo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ class CModelInfo
231231
virtual void MakeObjectModel(unsigned short usBaseID) = 0;
232232
virtual void MakeVehicleAutomobile(unsigned short usBaseID) = 0;
233233
virtual void MakeTimedObjectModel(unsigned short usBaseID) = 0;
234+
virtual void MakeClumpModel(unsigned short usBaseID) = 0;
234235

235236
virtual SVehicleSupportedUpgrades GetVehicleSupportedUpgrades() = 0;
236237
virtual void ResetSupportedUpgrades() = 0;

0 commit comments

Comments
 (0)