Skip to content

Commit 490efa5

Browse files
Merge branch 'master' into issue-9608
2 parents 7793c2d + 3924406 commit 490efa5

15 files changed

+176
-52
lines changed

Client/game_sa/CSettingsSA.cpp

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ void HOOK_GetFxQuality();
3535
DWORD RETURN_StoreShadowForVehicle = 0x70BDA9;
3636
void HOOK_StoreShadowForVehicle();
3737

38-
float ms_fVehicleLODDistance, ms_fTrainPlaneLODDistance;
38+
float ms_fVehicleLODDistance, ms_fTrainPlaneLODDistance, ms_fPedsLODDistance;
3939

4040
CSettingsSA::CSettingsSA(void)
4141
{
@@ -52,6 +52,7 @@ CSettingsSA::CSettingsSA(void)
5252

5353
MemPut(0x732926, &ms_fVehicleLODDistance);
5454
MemPut(0x732940, &ms_fTrainPlaneLODDistance);
55+
MemPut(0x73295E, &ms_fPedsLODDistance);
5556

5657
// Set "radar map and radar" as default radar mode
5758
SetRadarMode(RADAR_MODE_ALL);
@@ -590,6 +591,36 @@ void CSettingsSA::GetVehiclesLODDistance(float& fVehiclesLODDistance, float& fTr
590591
fTrainsPlanesLODDistance = ms_fTrainPlaneLODDistance;
591592
}
592593

594+
////////////////////////////////////////////////
595+
//
596+
// Peds LOD draw distance
597+
//
598+
////////////////////////////////////////////////
599+
600+
void CSettingsSA::SetPedsLODDistance(float fPedsLODDistance)
601+
{
602+
ms_fPedsLODDistance = fPedsLODDistance;
603+
}
604+
605+
float CSettingsSA::GetPedsLODDistance()
606+
{
607+
return ms_fPedsLODDistance;
608+
}
609+
610+
void CSettingsSA::ResetPedsLODDistance()
611+
{
612+
bool bHighDetailPeds;
613+
g_pCore->GetCVars()->Get("high_detail_peds", bHighDetailPeds);
614+
if (bHighDetailPeds)
615+
{
616+
ms_fPedsLODDistance = MAX_PEDS_LOD_DISTANCE;
617+
}
618+
else
619+
{
620+
ms_fPedsLODDistance = DEFAULT_PEDS_LOD_DISTANCE;
621+
}
622+
}
623+
593624
////////////////////////////////////////////////
594625
//
595626
// CSettingsSA::HasUnsafeResolutions

Client/game_sa/CSettingsSA.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,11 @@
3535
#define FUNC_SetAntiAliasing 0x7F8A90
3636

3737
#define DEFAULT_VEHICLE_LOD_DISTANCE ( 70.0f )
38+
#define DEFAULT_PEDS_LOD_DISTANCE ( 60.0f )
3839
// Default train distance is 150, so make it relative to default vehicle distance
3940
#define TRAIN_LOD_DISTANCE_MULTIPLIER ( 2.14f )
4041
#define MAX_VEHICLE_LOD_DISTANCE ( 500.0f )
42+
#define MAX_PEDS_LOD_DISTANCE ( 500.0f )
4143

4244
struct CSettingsSAInterface // see code around 0x57CE9A for where these are
4345
{
@@ -163,6 +165,10 @@ class CSettingsSA : public CGameSettings
163165

164166
void Save(void);
165167

168+
void SetPedsLODDistance(float fPedsLODDistance);
169+
void ResetPedsLODDistance(void);
170+
float GetPedsLODDistance(void);
171+
166172
static void StaticSetHooks(void);
167173

168174
uint FindVideoMode(int iResX, int iResY, int iColorBits);

Client/mods/deathmatch/logic/CClientGame.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5574,6 +5574,9 @@ void CClientGame::ResetMapInfo(void)
55745574
// Vehicles LOD distance
55755575
g_pGame->GetSettings()->ResetVehiclesLODDistance();
55765576

5577+
// Peds LOD distance
5578+
g_pGame->GetSettings()->ResetPedsLODDistance();
5579+
55775580
// Sun color
55785581
g_pMultiplayer->ResetSunColor();
55795582

Client/mods/deathmatch/logic/CClientVehicle.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4724,22 +4724,6 @@ bool CClientVehicle::DoesSupportUpgrade(const SString& strFrameName)
47244724
return true;
47254725
}
47264726

4727-
void CClientVehicle::SetModelExhaustFumesPosition(unsigned short modelID, const CVector& position)
4728-
{
4729-
auto pModelInfo = g_pGame->GetModelInfo(modelID);
4730-
if (pModelInfo)
4731-
pModelInfo->SetVehicleExhaustFumesPosition(position);
4732-
}
4733-
4734-
CVector CClientVehicle::GetModelExhaustFumesPosition(unsigned short modelID)
4735-
{
4736-
auto pModelInfo = g_pGame->GetModelInfo(modelID);
4737-
if (pModelInfo)
4738-
return pModelInfo->GetVehicleExhaustFumesPosition();
4739-
4740-
return CVector();
4741-
}
4742-
47434727
bool CClientVehicle::OnVehicleFallThroughMap()
47444728
{
47454729
// if we have fallen through the map a small number of times

Client/mods/deathmatch/logic/CClientVehicle.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -484,9 +484,6 @@ class CClientVehicle : public CClientStreamElement
484484

485485
void SetHeliBladeCollisionsEnabled(bool bEnable) { m_bEnableHeliBladeCollisions = bEnable; }
486486

487-
static void SetModelExhaustFumesPosition(unsigned short modelID, const CVector& position);
488-
static CVector GetModelExhaustFumesPosition(unsigned short modelID);
489-
490487
bool OnVehicleFallThroughMap();
491488

492489
protected:

Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3414,6 +3414,34 @@ bool CStaticFunctionDefinitions::IsVehicleWindowOpen(CClientVehicle& Vehicle, uc
34143414
return Vehicle.IsWindowOpen(ucWindow);
34153415
}
34163416

3417+
bool CStaticFunctionDefinitions::SetVehicleModelExhaustFumesPosition(unsigned short usModel, CVector& vecPosition)
3418+
{
3419+
if (CClientVehicleManager::IsValidModel(usModel))
3420+
{
3421+
auto pModelInfo = g_pGame->GetModelInfo(usModel);
3422+
if (pModelInfo)
3423+
{
3424+
pModelInfo->SetVehicleExhaustFumesPosition(vecPosition);
3425+
return true;
3426+
}
3427+
}
3428+
return false;
3429+
}
3430+
3431+
bool CStaticFunctionDefinitions::GetVehicleModelExhaustFumesPosition(unsigned short usModel, CVector& vecPosition)
3432+
{
3433+
if (CClientVehicleManager::IsValidModel(usModel))
3434+
{
3435+
auto pModelInfo = g_pGame->GetModelInfo(usModel);
3436+
if (pModelInfo)
3437+
{
3438+
vecPosition = pModelInfo->GetVehicleExhaustFumesPosition();
3439+
return true;
3440+
}
3441+
}
3442+
return false;
3443+
}
3444+
34173445
bool CStaticFunctionDefinitions::SetElementCollisionsEnabled(CClientEntity& Entity, bool bEnabled)
34183446
{
34193447
switch (Entity.GetType())

Client/mods/deathmatch/logic/CStaticFunctionDefinitions.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,8 @@ class CStaticFunctionDefinitions
218218
static bool GetVehicleNitroLevel(CClientVehicle& Vehicle, float& fLevel);
219219
static bool GetHeliBladeCollisionsEnabled(CClientVehicle& Vehicle);
220220
static bool IsVehicleWindowOpen(CClientVehicle& Vehicle, uchar ucWindow);
221+
static bool SetVehicleModelExhaustFumesPosition(unsigned short usModel, CVector& vecPosition);
222+
static bool GetVehicleModelExhaustFumesPosition(unsigned short usModel, CVector& vecPosition);
221223

222224
// Vehicle set functions
223225
static bool FixVehicle(CClientEntity& Entity);

Client/mods/deathmatch/logic/lua/CLuaFunctionDefs.World.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1548,6 +1548,40 @@ int CLuaFunctionDefs::ResetVehiclesLODDistance(lua_State* luaVM)
15481548
return 1;
15491549
}
15501550

1551+
int CLuaFunctionDefs::GetPedsLODDistance(lua_State* luaVM)
1552+
{
1553+
lua_pushnumber(luaVM, g_pGame->GetSettings()->GetPedsLODDistance());
1554+
return 1;
1555+
}
1556+
1557+
int CLuaFunctionDefs::SetPedsLODDistance(lua_State* luaVM)
1558+
{
1559+
float fPedsDistance;
1560+
1561+
CScriptArgReader argStream(luaVM);
1562+
argStream.ReadNumber(fPedsDistance);
1563+
1564+
if (!argStream.HasErrors())
1565+
{
1566+
fPedsDistance = Clamp(0.0f, fPedsDistance, 500.0f);
1567+
g_pGame->GetSettings()->SetPedsLODDistance(fPedsDistance);
1568+
lua_pushnumber(luaVM, fPedsDistance);
1569+
return 1;
1570+
}
1571+
else
1572+
m_pScriptDebugging->LogCustom(luaVM, argStream.GetFullErrorMessage());
1573+
1574+
lua_pushboolean(luaVM, false);
1575+
return 1;
1576+
}
1577+
1578+
int CLuaFunctionDefs::ResetPedsLODDistance(lua_State* luaVM)
1579+
{
1580+
g_pGame->GetSettings()->ResetPedsLODDistance();
1581+
lua_pushboolean(luaVM, true);
1582+
return 1;
1583+
}
1584+
15511585
int CLuaFunctionDefs::GetFogDistance(lua_State* luaVM)
15521586
{
15531587
lua_pushnumber(luaVM, g_pMultiplayer->GetFogDistance());

Client/mods/deathmatch/logic/lua/CLuaFunctionDefs.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ class CLuaFunctionDefs
150150
LUA_DECLARE(GetVehiclesLODDistance);
151151
LUA_DECLARE(SetVehiclesLODDistance);
152152
LUA_DECLARE(ResetVehiclesLODDistance);
153+
LUA_DECLARE(GetPedsLODDistance);
154+
LUA_DECLARE(SetPedsLODDistance);
155+
LUA_DECLARE(ResetPedsLODDistance);
153156
LUA_DECLARE(GetFogDistance);
154157
LUA_DECLARE(SetFogDistance);
155158
LUA_DECLARE(ResetFogDistance);

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ void CLuaManager::LoadCFunctions(void)
287287
CLuaCFunctions::AddFunction("getFarClipDistance", CLuaFunctionDefs::GetFarClipDistance);
288288
CLuaCFunctions::AddFunction("getNearClipDistance", CLuaFunctionDefs::GetNearClipDistance);
289289
CLuaCFunctions::AddFunction("getVehiclesLODDistance", CLuaFunctionDefs::GetVehiclesLODDistance);
290+
CLuaCFunctions::AddFunction("getPedsLODDistance", CLuaFunctionDefs::GetPedsLODDistance);
290291
CLuaCFunctions::AddFunction("getFogDistance", CLuaFunctionDefs::GetFogDistance);
291292
CLuaCFunctions::AddFunction("getSunColor", CLuaFunctionDefs::GetSunColor);
292293
CLuaCFunctions::AddFunction("getSunSize", CLuaFunctionDefs::GetSunSize);
@@ -333,6 +334,8 @@ void CLuaManager::LoadCFunctions(void)
333334
CLuaCFunctions::AddFunction("resetNearClipDistance", CLuaFunctionDefs::ResetNearClipDistance);
334335
CLuaCFunctions::AddFunction("setVehiclesLODDistance", CLuaFunctionDefs::SetVehiclesLODDistance);
335336
CLuaCFunctions::AddFunction("resetVehiclesLODDistance", CLuaFunctionDefs::ResetVehiclesLODDistance);
337+
CLuaCFunctions::AddFunction("setPedsLODDistance", CLuaFunctionDefs::SetPedsLODDistance);
338+
CLuaCFunctions::AddFunction("resetPedsLODDistance", CLuaFunctionDefs::ResetPedsLODDistance);
336339
CLuaCFunctions::AddFunction("setFogDistance", CLuaFunctionDefs::SetFogDistance);
337340
CLuaCFunctions::AddFunction("resetFogDistance", CLuaFunctionDefs::ResetFogDistance);
338341
CLuaCFunctions::AddFunction("setSunColor", CLuaFunctionDefs::SetSunColor);

0 commit comments

Comments
 (0)