Skip to content

Commit

Permalink
Merge branch 'multitheftauto:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
bum8hj authored Jun 13, 2024
2 parents 2d04277 + 68581e1 commit 8f2b6d4
Show file tree
Hide file tree
Showing 82 changed files with 952 additions and 309 deletions.
1 change: 1 addition & 0 deletions Client/game_sa/CBuildingsPoolSA.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,7 @@ void CBuildingsPoolSA::RemovePedsContactEnityLinks()
CPedSAInterface* ped = pedLinks->pEntity->GetPedInterface();
ped->m_pCollidedEntity = nullptr;
ped->pContactEntity = nullptr;
ped->pLastContactEntity = nullptr;
ped->pLastContactedEntity[0] = nullptr;
ped->pLastContactedEntity[1] = nullptr;
ped->pLastContactedEntity[2] = nullptr;
Expand Down
90 changes: 90 additions & 0 deletions Client/game_sa/CFxSA.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -239,3 +239,93 @@ void CFxSA::TriggerFootSplash(CVector& vecPosition)
call dwFunc
}
}

void CFxSA::AddParticle(eFxParticleSystems eFxParticle, const CVector& vecPosition, const CVector& vecDirection, float fR, float fG, float fB, float fA, bool bRandomizeColors, std::uint32_t iCount, float fBrightness, float fSize, bool bRandomizeSizes, float fLife)
{
// Init our own FxPrtMult struct
FxPrtMult_c fxPrt{{fR,fG,fB,fA}, fSize, 0, fLife};
CVector newDirection;

FxSystem_c* fxParticleSystem;

switch (eFxParticle)
{
case eFxParticleSystems::PRT_BLOOD:
fxParticleSystem = m_pInterface->m_fxSysBlood;
break;
case eFxParticleSystems::PRT_BOATSPLASH:
fxParticleSystem = m_pInterface->m_fxSysBoatSplash;
break;
case eFxParticleSystems::PRT_BUBBLE:
fxParticleSystem = m_pInterface->m_fxSysBubble;
break;
case eFxParticleSystems::PRT_DEBRIS:
fxParticleSystem = m_pInterface->m_fxSysDebris;
break;
case eFxParticleSystems::PRT_GUNSHELL:
fxParticleSystem = m_pInterface->m_fxSysGunshell;
break;
case eFxParticleSystems::PRT_SAND:
fxParticleSystem = m_pInterface->m_fxSysSand;
break;
case eFxParticleSystems::PRT_SAND2:
fxParticleSystem = m_pInterface->m_fxSysSand2;
break;
case eFxParticleSystems::PRT_SMOKE:
fxParticleSystem = m_pInterface->m_fxSysSmoke;
break;
case eFxParticleSystems::PRT_SMOKEHUGE:
fxParticleSystem = m_pInterface->m_fxSysSmokeHuge;
break;
case eFxParticleSystems::PRT_SMOKE2:
fxParticleSystem = m_pInterface->m_fxSysSmoke2;
break;
case eFxParticleSystems::PRT_SPARK:
fxParticleSystem = m_pInterface->m_fxSysSpark;
break;
case eFxParticleSystems::PRT_SPARK2:
fxParticleSystem = m_pInterface->m_fxSysSpark2;
break;
case eFxParticleSystems::PRT_SPLASH:
fxParticleSystem = m_pInterface->m_fxSysSplash;
break;
case eFxParticleSystems::PRT_WAKE:
fxParticleSystem = m_pInterface->m_fxSysWake;
break;
case eFxParticleSystems::PRT_WATERSPLASH:
fxParticleSystem = m_pInterface->m_fxSysWaterSplash;
break;
case eFxParticleSystems::PRT_WHEELDIRT:
fxParticleSystem = m_pInterface->m_fxSysWheelDirt;
break;
case eFxParticleSystems::PRT_GLASS:
fxParticleSystem = m_pInterface->m_fxSysGlass;
break;
default:
fxParticleSystem = m_pInterface->m_fxSysBlood;
}

for (size_t i = 0; i < iCount; i++)
{
if (bRandomizeColors)
{
// 0x49EECB
fxPrt.m_color.red = (rand() % 10000) * 0.0001f * fR + 0.13f;
fxPrt.m_color.green = (rand() % 10000) * 0.0001f * fG + 0.12f;
fxPrt.m_color.blue = (rand() % 10000) * 0.0001f * fB + 0.04f;
}

if (bRandomizeSizes)
// 0x49EF21 - Calculate random size for each particle
fxPrt.m_fSize = (rand() % 10000) * 0.0001f * fSize + 0.3f;

// 0x49EF4C - Calculate random direction for each particle
newDirection = CVector(vecDirection.fX * 4, vecDirection.fY * 4, vecDirection.fZ * 4);
newDirection.fX = (rand() % 10000) * 0.0001f * 4 - 2 + newDirection.fX;
newDirection.fY = (rand() % 10000) * 0.0001f * 4 - 2 + newDirection.fY;
newDirection.fZ = (rand() % 10000) * 0.0001f * 4 - 2 + newDirection.fZ;

// Call FxSystem_c::AddParticle
((int(__thiscall*)(FxSystem_c*, const CVector*, const CVector*, float, FxPrtMult_c*, float, float, float, int))FUNC_FXSystem_c_AddParticle)(fxParticleSystem, &vecPosition, &newDirection, 0, &fxPrt, -1.0f, fBrightness, 0, 0);
}
}
37 changes: 37 additions & 0 deletions Client/game_sa/CFxSA.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <game/CFx.h>

struct RwColor;
class FxSystem_c;

#define FUNC_CFx_AddBlood 0x49eb00
#define FUNC_CFx_AddWood 0x49ee10
Expand All @@ -29,10 +30,30 @@ struct RwColor;
#define FUNC_CFx_TriggerWaterSplash 0x4a1070
#define FUNC_CFx_TriggerBulletSplash 0x4a10e0
#define FUNC_CFx_TriggerFootSplash 0x4a1150
#define FUNC_FXSystem_c_AddParticle 0x4AA440

class CFxSAInterface
{
public:
FxSystem_c* m_fxSysBlood;
FxSystem_c* m_fxSysBoatSplash;
FxSystem_c* m_fxSysBubble;
FxSystem_c* m_fxSysDebris;
FxSystem_c* m_fxSysSmoke;
FxSystem_c* m_fxSysGunshell;
FxSystem_c* m_fxSysSand;
FxSystem_c* m_fxSysSand2;
FxSystem_c* m_fxSysSmokeHuge;
FxSystem_c* m_fxSysSmoke2;
FxSystem_c* m_fxSysSpark;
FxSystem_c* m_fxSysSpark2;
FxSystem_c* m_fxSysSplash;
FxSystem_c* m_fxSysWake;
FxSystem_c* m_fxSysWaterSplash;
FxSystem_c* m_fxSysWheelDirt;
FxSystem_c* m_fxSysGlass;

private:
};

class CFxSA : public CFx
Expand All @@ -55,7 +76,23 @@ class CFxSA : public CFx
void TriggerWaterSplash(CVector& vecPosition);
void TriggerBulletSplash(CVector& vecPosition);
void TriggerFootSplash(CVector& vecPosition);
void AddParticle(eFxParticleSystems eFxParticle, const CVector& vecPosition, const CVector& vecDirection, float fR, float fG, float fB, float fA, bool bRandomizeColors, std::uint32_t iCount, float fBrightness, float fSize, bool bRandomizeSizes, float fLife);

private:
CFxSAInterface* m_pInterface;

struct FxPrtMult_c
{
struct
{
float red;
float green;
float blue;
float alpha;
} m_color;

float m_fSize;
float unk;
float m_fLife;
};
};
4 changes: 2 additions & 2 deletions Client/game_sa/CPedSA.h
Original file line number Diff line number Diff line change
Expand Up @@ -242,11 +242,11 @@ class CPedSAInterface : public CPhysicalSAInterface // +1420 = curre
float fTargetRotation;
float fRotationSpeed;
float fMoveAnim;
CPedSAInterface* unkPed;
CEntitySAInterface* pContactEntity;
CVector unk_56C;
CVector unk_578;

CEntitySAInterface* pContactEntity;
CEntitySAInterface* pLastContactEntity;
CVehicleSAInterface* pLastVehicle;
CVehicleSAInterface* pVehicle;

Expand Down
3 changes: 3 additions & 0 deletions Client/loader/Install.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -765,6 +765,9 @@ static int RunInstall()
// If the first attempt didn't work, check if any process is locking one of the files.
TerminateFileLockingProcesses(file.targetFile.absolutePath, file.relativePath);
TerminateFileLockingProcesses(file.sourceFile.absolutePath, file.relativePath);

// Ensure the checksum of the source file is correct (in case the archive reported checksum is invalid).
file.sourceFile.ComputeChecksum();
}

Sleep(OPERATION_RETRY_DELAY_IN_MS);
Expand Down
12 changes: 3 additions & 9 deletions Client/mods/deathmatch/logic/CClientGame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2041,13 +2041,11 @@ void CClientGame::UpdateStunts()
// Did we finish a stunt?
else if (ulLastCarTwoWheelCounter != 0 && ulTemp == 0)
{
float fDistance = g_pGame->GetPlayerInfo()->GetCarTwoWheelDist();

// Call our stunt event
CLuaArguments Arguments;
Arguments.PushString("2wheeler");
Arguments.PushNumber(ulLastCarTwoWheelCounter);
Arguments.PushNumber(fDistance);
Arguments.PushNumber(fLastCarTwoWheelDist);
m_pLocalPlayer->CallEvent("onClientPlayerStuntFinish", Arguments, true);
}
ulLastCarTwoWheelCounter = ulTemp;
Expand All @@ -2068,13 +2066,11 @@ void CClientGame::UpdateStunts()
// Did we finish a stunt?
else if (ulLastBikeRearWheelCounter != 0 && ulTemp == 0)
{
float fDistance = g_pGame->GetPlayerInfo()->GetBikeRearWheelDist();

// Call our stunt event
CLuaArguments Arguments;
Arguments.PushString("wheelie");
Arguments.PushNumber(ulLastBikeRearWheelCounter);
Arguments.PushNumber(fDistance);
Arguments.PushNumber(fLastBikeRearWheelDist);
m_pLocalPlayer->CallEvent("onClientPlayerStuntFinish", Arguments, true);
}
ulLastBikeRearWheelCounter = ulTemp;
Expand All @@ -2095,13 +2091,11 @@ void CClientGame::UpdateStunts()
// Did we finish a stunt?
else if (ulLastBikeFrontWheelCounter != 0 && ulTemp == 0)
{
float fDistance = g_pGame->GetPlayerInfo()->GetBikeFrontWheelDist();

// Call our stunt event
CLuaArguments Arguments;
Arguments.PushString("stoppie");
Arguments.PushNumber(ulLastBikeFrontWheelCounter);
Arguments.PushNumber(fDistance);
Arguments.PushNumber(fLastBikeFrontWheelDist);
m_pLocalPlayer->CallEvent("onClientPlayerStuntFinish", Arguments, true);
}
ulLastBikeFrontWheelCounter = ulTemp;
Expand Down
4 changes: 4 additions & 0 deletions Client/mods/deathmatch/logic/CClientSound.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,10 @@ bool CClientSound::Create()
m_pAudio->SetPanEnabled(m_bPan);
m_pAudio->SetPan(m_fPan);

// Also check and transfer if paused
if (m_bPaused)
m_pAudio->SetPaused(m_bPaused);

// Transfer play position if it was being simulated
EndSimulationOfPlayPositionAndApply();

Expand Down
2 changes: 2 additions & 0 deletions Client/mods/deathmatch/logic/CNetAPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2262,6 +2262,8 @@ void CNetAPI::ReadBulletsync(CClientPlayer* pPlayer, NetBitStreamInterface& BitS
// Read the bulletsync data
uchar ucWeapon = 0;
BitStream.Read(ucWeapon);
if (!CClientPickupManager::IsValidWeaponID(ucWeapon))
return;
eWeaponType weaponType = (eWeaponType)ucWeapon;

CVector vecStart, vecEnd;
Expand Down
7 changes: 7 additions & 0 deletions Client/mods/deathmatch/logic/CPacketHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2719,6 +2719,7 @@ void CPacketHandler::Packet_EntityAdd(NetBitStreamInterface& bitStream)
// CVector (12) - scale
// bool (1) - static
// SObjectHealthSync (?) - health
// bool (1) - is break

// Pickups:
// CVector (12) - position
Expand Down Expand Up @@ -3079,6 +3080,12 @@ void CPacketHandler::Packet_EntityAdd(NetBitStreamInterface& bitStream)
if (bitStream.Read(&health))
pObject->SetHealth(health.data.fValue);

if (bitStream.Can(eBitStreamVersion::BreakObject_Serverside))
{
if (bitStream.ReadBit())
pObject->Break();
}

pObject->SetCollisionEnabled(bCollisonsEnabled);
if (ucEntityTypeID == CClientGame::WEAPON)
{
Expand Down
6 changes: 6 additions & 0 deletions Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7925,6 +7925,12 @@ bool CStaticFunctionDefinitions::FxAddFootSplash(CVector& vecPosition)
return true;
}

bool CStaticFunctionDefinitions::FxCreateParticle(eFxParticleSystems eFxParticle, CVector& vecPosition, CVector& vecDirection, float fR, float fG, float fB, float fA, bool bRandomizeColors, std::uint32_t iCount, float fBrightness, float fSize, bool bRandomizeSizes, float fLife)
{
g_pGame->GetFx()->AddParticle(eFxParticle, vecPosition, vecDirection, fR, fG, fB, fA, bRandomizeColors, iCount, fBrightness, fSize, bRandomizeSizes, fLife);
return true;
}

CClientEffect* CStaticFunctionDefinitions::CreateEffect(CResource& Resource, const SString& strFxName, const CVector& vecPosition, bool bSoundEnable)
{
CClientEffect* pFx = m_pManager->GetEffectManager()->Create(strFxName, vecPosition, INVALID_ELEMENT_ID, bSoundEnable);
Expand Down
1 change: 1 addition & 0 deletions Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -729,6 +729,7 @@ class CStaticFunctionDefinitions
static bool FxAddWaterSplash(CVector& vecPosition);
static bool FxAddBulletSplash(CVector& vecPosition);
static bool FxAddFootSplash(CVector& vecPosition);
static bool FxCreateParticle(eFxParticleSystems eFxParticle, CVector& vecPosition, CVector& vecDirection, float fR, float fG, float fB, float fA, bool bRandomizeColors, std::uint32_t iCount, float fBrightness, float fSize, bool bRandomizeSizes, float fLife);
static CClientEffect* CreateEffect(CResource& Resource, const SString& strFxName, const CVector& vecPosition, bool bSoundEnable);

// Sound funcs
Expand Down
34 changes: 16 additions & 18 deletions Client/mods/deathmatch/logic/lua/CLuaFunctionDefs.Output.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,25 +127,23 @@ int CLuaFunctionDefs::OutputClientDebugString(lua_State* luaVM)
CLuaMain* pLuaMain = m_pLuaManager->GetVirtualMachine(luaVM);
if (pLuaMain)
{
if (uiLevel == 1)
switch (uiLevel)
{
m_pScriptDebugging->LogError(luaVM, "%s", strText.c_str());
}
else if (uiLevel == 2)
{
m_pScriptDebugging->LogWarning(luaVM, "%s", strText.c_str());
}
else if (uiLevel == 3)
{
m_pScriptDebugging->LogInformation(luaVM, "%s", strText.c_str());
}
else if (uiLevel == 4)
{
m_pScriptDebugging->LogCustom(luaVM, ucRed, ucGreen, ucBlue, "%s", strText.c_str());
}
else if (uiLevel == 0)
{
m_pScriptDebugging->LogDebug(luaVM, ucRed, ucGreen, ucBlue, "%s", strText.c_str());
case 0:
m_pScriptDebugging->LogDebug(luaVM, ucRed, ucGreen, ucBlue, "%s", strText.c_str());
break;
case 1:
m_pScriptDebugging->LogError(luaVM, "%s", strText.c_str());
break;
case 2:
m_pScriptDebugging->LogWarning(luaVM, "%s", strText.c_str());
break;
case 3:
m_pScriptDebugging->LogInformation(luaVM, "%s", strText.c_str());
break;
case 4:
m_pScriptDebugging->LogCustom(luaVM, ucRed, ucGreen, ucBlue, "%s", strText.c_str());
break;
}

// Success
Expand Down
20 changes: 20 additions & 0 deletions Client/mods/deathmatch/logic/lua/CLuaFunctionParseHelpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -853,6 +853,26 @@ ADD_ENUM(ePools::ENV_MAP_ATOMIC_POOL, "env-map-atomic")
ADD_ENUM(ePools::SPEC_MAP_MATERIAL_POOL, "spec-map-material")
IMPLEMENT_ENUM_END("gta-pool")

IMPLEMENT_ENUM_CLASS_BEGIN(eFxParticleSystems)
ADD_ENUM(eFxParticleSystems::PRT_BLOOD, "blood")
ADD_ENUM(eFxParticleSystems::PRT_BOATSPLASH, "boat_splash")
ADD_ENUM(eFxParticleSystems::PRT_BUBBLE, "bubble")
ADD_ENUM(eFxParticleSystems::PRT_DEBRIS, "car_debris")
ADD_ENUM(eFxParticleSystems::PRT_SMOKE, "collision_smoke")
ADD_ENUM(eFxParticleSystems::PRT_GUNSHELL, "gunshell")
ADD_ENUM(eFxParticleSystems::PRT_SAND, "sand")
ADD_ENUM(eFxParticleSystems::PRT_SAND2, "sand2")
ADD_ENUM(eFxParticleSystems::PRT_SMOKEHUGE, "huge_smoke")
ADD_ENUM(eFxParticleSystems::PRT_SMOKE2, "smoke")
ADD_ENUM(eFxParticleSystems::PRT_SPARK, "spark")
ADD_ENUM(eFxParticleSystems::PRT_SPARK2, "spark2")
ADD_ENUM(eFxParticleSystems::PRT_SPLASH, "splash")
ADD_ENUM(eFxParticleSystems::PRT_WAKE, "wake")
ADD_ENUM(eFxParticleSystems::PRT_WATERSPLASH, "water_splash")
ADD_ENUM(eFxParticleSystems::PRT_WHEELDIRT, "wheel_dirt")
ADD_ENUM(eFxParticleSystems::PRT_GLASS, "glass")
IMPLEMENT_ENUM_CLASS_END("particle-system")

//
// CResource from userdata
//
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ DECLARE_ENUM_CLASS(eSoundEffectParams::Reverb);
DECLARE_ENUM_CLASS(eModelIdeFlag);
DECLARE_ENUM_CLASS(_D3DFORMAT);
DECLARE_ENUM_CLASS(eRenderStage);
DECLARE_ENUM_CLASS(eFxParticleSystems);
DECLARE_ENUM(ePools);

class CRemoteCall;
Expand Down
Loading

0 comments on commit 8f2b6d4

Please sign in to comment.