From c5303c2ea4f5bb13d5a3800a5135c7fd27e6b9f6 Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 26 Feb 2021 20:31:26 +0200 Subject: [PATCH 1/9] Fix muzzleflash rotation --- src/weapons/Weapon.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/weapons/Weapon.cpp b/src/weapons/Weapon.cpp index 7a54941f..8e2f02f9 100644 --- a/src/weapons/Weapon.cpp +++ b/src/weapons/Weapon.cpp @@ -1066,7 +1066,11 @@ CWeapon::FireInstantHit(CEntity *shooter, CVector *fireSource) if ( info->m_nFiringRate >= 50 || !(++counter & 1) ) { +#ifdef FIX_BUGS + AddGunFlashBigGuns(*fireSource, target); +#else AddGunFlashBigGuns(*fireSource, *fireSource + target); +#endif CVector gunshellPos = *fireSource; gunshellPos -= CVector(0.65f*ahead.x, 0.65f*ahead.y, 0.0f); From a311f643f9a0a7377e27f49b18739fe5de5a6291 Mon Sep 17 00:00:00 2001 From: erorcun Date: Sun, 28 Feb 2021 15:50:51 +0300 Subject: [PATCH 2/9] Fixes --- src/collision/Collision.cpp | 3 +-- src/core/Pools.cpp | 2 +- src/core/Streaming.cpp | 6 ++++++ src/objects/Stinger.cpp | 3 +++ src/peds/Population.cpp | 7 +++---- src/vehicles/Automobile.cpp | 2 +- src/vehicles/Bike.cpp | 2 +- 7 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/collision/Collision.cpp b/src/collision/Collision.cpp index 50c22e32..0ffcd09a 100644 --- a/src/collision/Collision.cpp +++ b/src/collision/Collision.cpp @@ -144,11 +144,10 @@ CCollision::SortOutCollisionAfterLoad(void) void CCollision::LoadCollisionScreen(eLevelName level) { - static Const char *levelNames[4] = { + static Const char *levelNames[] = { "", "IND_ZON", "COM_ZON", - "SUB_ZON" }; // Why twice? diff --git a/src/core/Pools.cpp b/src/core/Pools.cpp index bf35f8ef..d824d498 100644 --- a/src/core/Pools.cpp +++ b/src/core/Pools.cpp @@ -105,7 +105,7 @@ CPools::CheckPoolsEmpty() printf("pools have been cleared\n"); } - +// Thankfully unused, it would break the game! void CPools::MakeSureSlotInObjectPoolIsEmpty(int32 slot) { diff --git a/src/core/Streaming.cpp b/src/core/Streaming.cpp index b28a99fc..ee286278 100644 --- a/src/core/Streaming.cpp +++ b/src/core/Streaming.cpp @@ -1724,7 +1724,13 @@ CStreaming::StreamVehiclesAndPeds(void) for(i = 0; i < CCarCtrl::TOTAL_CUSTOM_CLASSES; i++){ if(CCarCtrl::NumRequestsOfCarRating[i] > maxReq && ((i == 0 && zone.carThreshold[0] != 0) || +#ifdef FIX_BUGS + (i < CCarCtrl::NUM_CAR_CLASSES && zone.carThreshold[i] != zone.carThreshold[i-1]) || + (i == CCarCtrl::NUM_CAR_CLASSES && zone.boatThreshold[i - CCarCtrl::NUM_CAR_CLASSES] != 0) || + (i > CCarCtrl::NUM_CAR_CLASSES && i < CCarCtrl::TOTAL_CUSTOM_CLASSES && zone.boatThreshold[i - CCarCtrl::NUM_CAR_CLASSES] != zone.boatThreshold[i - CCarCtrl::NUM_CAR_CLASSES - 1]))) { +#else (i != 0 && zone.carThreshold[i] != zone.carThreshold[i-1]))) { +#endif maxReq = CCarCtrl::NumRequestsOfCarRating[i]; mostRequestedRating = i; } diff --git a/src/objects/Stinger.cpp b/src/objects/Stinger.cpp index 848a7cf7..41040d4a 100644 --- a/src/objects/Stinger.cpp +++ b/src/objects/Stinger.cpp @@ -234,5 +234,8 @@ CStinger::Process() Remove(); break; } +#ifdef FIX_BUGS + if (bIsDeployed) +#endif CheckForBurstTyres(); } \ No newline at end of file diff --git a/src/peds/Population.cpp b/src/peds/Population.cpp index 5603e2c6..d7a545d8 100644 --- a/src/peds/Population.cpp +++ b/src/peds/Population.cpp @@ -911,10 +911,9 @@ CPopulation::MoveCarsAndPedsOutOfAbandonedZones() void CPopulation::ConvertAllObjectsToDummyObjects() { - int poolSize = CPools::GetObjectPool()->GetSize(); - for (int poolIndex = poolSize - 1; poolIndex >= 0; poolIndex--) { - - CObject *obj = CPools::GetObjectPool()->GetSlot(poolIndex); + uint32 i = CPools::GetObjectPool()->GetSize(); + while(i--) { + CObject *obj = CPools::GetObjectPool()->GetSlot(i); if (obj) { if (obj->CanBeDeleted()) ConvertToDummyObject(obj); diff --git a/src/vehicles/Automobile.cpp b/src/vehicles/Automobile.cpp index 06dc1b54..041db625 100644 --- a/src/vehicles/Automobile.cpp +++ b/src/vehicles/Automobile.cpp @@ -4980,7 +4980,7 @@ CAutomobile::GetHeightAboveRoad(void) void CAutomobile::PlayCarHorn(void) { - int r; + uint32 r; if (IsAlarmOn() || m_nCarHornTimer != 0) return; diff --git a/src/vehicles/Bike.cpp b/src/vehicles/Bike.cpp index 3e4c3a31..0b6d4e3a 100644 --- a/src/vehicles/Bike.cpp +++ b/src/vehicles/Bike.cpp @@ -2546,7 +2546,7 @@ CBike::GetHeightAboveRoad(void) void CBike::PlayCarHorn(void) { - int r; + uint32 r; if (IsAlarmOn() || m_nCarHornTimer != 0) return; From d2b5a422e464a202c58d330976fecddf1ee0f7f4 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 28 Feb 2021 14:17:14 +0100 Subject: [PATCH 3/9] update librw --- src/core/Game.cpp | 10 ++++++++-- src/core/re3.cpp | 5 +++++ vendor/librw | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/core/Game.cpp b/src/core/Game.cpp index 43bd3d11..bffc620c 100644 --- a/src/core/Game.cpp +++ b/src/core/Game.cpp @@ -245,10 +245,16 @@ CGame::InitialiseRenderWare(void) #ifdef LIBRW #ifdef PS2_MATFX - rw::MatFX::modulateEnvMap = true; + rw::MatFX::envMapApplyLight = true; + rw::MatFX::envMapUseMatColor = true; + rw::MatFX::envMapFlipU = true; #else - rw::MatFX::modulateEnvMap = false; + rw::MatFX::envMapApplyLight = false; + rw::MatFX::envMapUseMatColor = false; + rw::MatFX::envMapFlipU = false; #endif + rw::RGBA envcol = { 64, 64, 64, 255 }; + rw::MatFX::envMapColor = envcol; #else #ifdef PS2_MATFX ReplaceMatFxCallback(); diff --git a/src/core/re3.cpp b/src/core/re3.cpp index 0ce7f834..e2220467 100644 --- a/src/core/re3.cpp +++ b/src/core/re3.cpp @@ -1037,6 +1037,11 @@ extern bool gbRenderWorld2; #ifndef MASTER DebugMenuAddVarBool8("Render", "Occlusion debug", &bDispayOccDebugStuff, nil); #endif +#ifdef LIBRW + DebugMenuAddVarBool32("Render", "MatFX env map apply light", &rw::MatFX::envMapApplyLight, nil); + DebugMenuAddVarBool32("Render", "MatFX env map flip U", &rw::MatFX::envMapFlipU, nil); + DebugMenuAddVarBool32("Render", "MatFX env map use matcolor", &rw::MatFX::envMapUseMatColor, nil); +#endif #ifdef EXTENDED_PIPELINES static const char *vehpipenames[] = { "MatFX", "Neo" }; e = DebugMenuAddVar("Render", "Vehicle Pipeline", &CustomPipes::VehiclePipeSwitch, nil, diff --git a/vendor/librw b/vendor/librw index 8b2caf8f..0102f883 160000 --- a/vendor/librw +++ b/vendor/librw @@ -1 +1 @@ -Subproject commit 8b2caf8f86b4f793d07fbc6b7d0bd4aafd22162f +Subproject commit 0102f8836754c82b0ac35015bd1e6058904bc334 From 82245789ed0d10c4cd99bb10606963806d62ca74 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 28 Feb 2021 14:55:14 +0100 Subject: [PATCH 4/9] proper radar clipping --- src/core/Radar.cpp | 181 ++++++++++++++++++++++++++++----------------- 1 file changed, 113 insertions(+), 68 deletions(-) diff --git a/src/core/Radar.cpp b/src/core/Radar.cpp index 4bb9c966..473f4dae 100644 --- a/src/core/Radar.cpp +++ b/src/core/Radar.cpp @@ -184,6 +184,75 @@ void GetTextureCorners(int32 x, int32 y, CVector2D *out) out[3].y = RADAR_TILE_SIZE * (y); } +uint8 CRadar::CalculateBlipAlpha(float dist) +{ + if (FrontEndMenuManager.m_bMenuMapActive) + return 255; + + if (dist <= 1.0f) + return 255; + + if (dist <= 10.0f) + return (128.0f * ((dist - 1.0f) / 9.0f)) + ((1.0f - (dist - 1.0f) / 9.0f) * 255.0f); + + return 128; +} + +void CRadar::ChangeBlipBrightness(int32 i, int32 bright) +{ + int index = GetActualBlipArrayIndex(i); + if (index != -1) + ms_RadarTrace[index].m_bDim = bright != 1; +} + +void CRadar::ChangeBlipColour(int32 i, int32 color) +{ + int index = GetActualBlipArrayIndex(i); + if (index != -1) + ms_RadarTrace[index].m_nColor = color; +} + +void CRadar::ChangeBlipDisplay(int32 i, eBlipDisplay display) +{ + int index = GetActualBlipArrayIndex(i); + if (index != -1) + ms_RadarTrace[index].m_eBlipDisplay = display; +} + +void CRadar::ChangeBlipScale(int32 i, int32 scale) +{ + int index = GetActualBlipArrayIndex(i); + if (index != -1) + ms_RadarTrace[index].m_wScale = scale; +} + +void CRadar::ClearBlip(int32 i) +{ + int index = GetActualBlipArrayIndex(i); + if (index != -1) { + SetRadarMarkerState(index, false); + ms_RadarTrace[index].m_bInUse = false; + ms_RadarTrace[index].m_eBlipType = BLIP_NONE; + ms_RadarTrace[index].m_eBlipDisplay = BLIP_DISPLAY_NEITHER; + ms_RadarTrace[index].m_eRadarSprite = RADAR_SPRITE_NONE; + } +} + +void CRadar::ClearBlipForEntity(eBlipType type, int32 id) +{ + for (int i = 0; i < NUMRADARBLIPS; i++) { + if (type == ms_RadarTrace[i].m_eBlipType && id == ms_RadarTrace[i].m_nEntityHandle) { + SetRadarMarkerState(i, false); + ms_RadarTrace[i].m_bInUse = false; + ms_RadarTrace[i].m_eBlipType = BLIP_NONE; + ms_RadarTrace[i].m_eBlipDisplay = BLIP_DISPLAY_NEITHER; + ms_RadarTrace[i].m_eRadarSprite = RADAR_SPRITE_NONE; + } + }; +} + +// Why not a proper clipping algorithm? +#ifdef THIS_IS_STUPID bool IsPointInsideRadar(const CVector2D &point) { @@ -264,74 +333,6 @@ int LineRadarBoxCollision(CVector2D &out, const CVector2D &p1, const CVector2D & return edge; } -uint8 CRadar::CalculateBlipAlpha(float dist) -{ - if (FrontEndMenuManager.m_bMenuMapActive) - return 255; - - if (dist <= 1.0f) - return 255; - - if (dist <= 10.0f) - return (128.0f * ((dist - 1.0f) / 9.0f)) + ((1.0f - (dist - 1.0f) / 9.0f) * 255.0f); - - return 128; -} - -void CRadar::ChangeBlipBrightness(int32 i, int32 bright) -{ - int index = GetActualBlipArrayIndex(i); - if (index != -1) - ms_RadarTrace[index].m_bDim = bright != 1; -} - -void CRadar::ChangeBlipColour(int32 i, int32 color) -{ - int index = GetActualBlipArrayIndex(i); - if (index != -1) - ms_RadarTrace[index].m_nColor = color; -} - -void CRadar::ChangeBlipDisplay(int32 i, eBlipDisplay display) -{ - int index = GetActualBlipArrayIndex(i); - if (index != -1) - ms_RadarTrace[index].m_eBlipDisplay = display; -} - -void CRadar::ChangeBlipScale(int32 i, int32 scale) -{ - int index = GetActualBlipArrayIndex(i); - if (index != -1) - ms_RadarTrace[index].m_wScale = scale; -} - -void CRadar::ClearBlip(int32 i) -{ - int index = GetActualBlipArrayIndex(i); - if (index != -1) { - SetRadarMarkerState(index, false); - ms_RadarTrace[index].m_bInUse = false; - ms_RadarTrace[index].m_eBlipType = BLIP_NONE; - ms_RadarTrace[index].m_eBlipDisplay = BLIP_DISPLAY_NEITHER; - ms_RadarTrace[index].m_eRadarSprite = RADAR_SPRITE_NONE; - } -} - -void CRadar::ClearBlipForEntity(eBlipType type, int32 id) -{ - for (int i = 0; i < NUMRADARBLIPS; i++) { - if (type == ms_RadarTrace[i].m_eBlipType && id == ms_RadarTrace[i].m_nEntityHandle) { - SetRadarMarkerState(i, false); - ms_RadarTrace[i].m_bInUse = false; - ms_RadarTrace[i].m_eBlipType = BLIP_NONE; - ms_RadarTrace[i].m_eBlipDisplay = BLIP_DISPLAY_NEITHER; - ms_RadarTrace[i].m_eRadarSprite = RADAR_SPRITE_NONE; - } - }; -} - -// Why not a proper clipping algorithm? int CRadar::ClipRadarPoly(CVector2D *poly, const CVector2D *rect) { CVector2D corners[4] = { @@ -410,6 +411,50 @@ int CRadar::ClipRadarPoly(CVector2D *poly, const CVector2D *rect) return n; } +#else + +int +ClipPolyPlane(const CVector2D *in, int nin, CVector2D *out, CVector *plane) +{ + int j; + int nout; + int x1, x2; + float d1, d2, t; + + nout = 0; + for(j = 0; j < nin; j++){ + x1 = j; + x2 = (j+1) % nin; + + d1 = plane->x*in[x1].x + plane->y*in[x1].y + plane->z; + d2 = plane->x*in[x2].x + plane->y*in[x2].y + plane->z; + if(d1*d2 < 0.0f){ + t = d1/(d1 - d2); + out[nout++] = in[x1]*(1.0f-t) + in[x2]*t; + } + if(d2 >= 0.0f) + out[nout++] = in[x2]; + } + return nout; +} + +int CRadar::ClipRadarPoly(CVector2D *poly, const CVector2D *rect) +{ + CVector planes[4] = { + CVector(-1.0f, 0.0f, 1.0f), + CVector( 1.0f, 0.0f, 1.0f), + CVector(0.0f, -1.0f, 1.0f), + CVector(0.0f, 1.0f, 1.0f) + }; + CVector2D tmp[8]; + int n; + if(n = ClipPolyPlane(rect, 4, tmp, &planes[0]), n == 0) return 0; + if(n = ClipPolyPlane(tmp, n, poly, &planes[1]), n == 0) return 0; + if(n = ClipPolyPlane(poly, n, tmp, &planes[2]), n == 0) return 0; + if(n = ClipPolyPlane(tmp, n, poly, &planes[3]), n == 0) return 0; + return n; +} +#endif bool CRadar::DisplayThisBlip(int32 counter) { From ce604c77bade850b7e02673b25d21c5f001548ca Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 28 Feb 2021 15:30:13 +0100 Subject: [PATCH 5/9] fix postfx --- src/extras/postfx.cpp | 3 +++ src/rw/RwHelper.cpp | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/src/extras/postfx.cpp b/src/extras/postfx.cpp index f698bd52..ee6c3964 100644 --- a/src/extras/postfx.cpp +++ b/src/extras/postfx.cpp @@ -49,6 +49,9 @@ CPostFX::InitOnce(void) void CPostFX::Open(RwCamera *cam) { + if(pFrontBuffer) + Close(); + uint32 width = Pow(2.0f, int32(log2(RwRasterGetWidth (RwCameraGetRaster(cam))))+1); uint32 height = Pow(2.0f, int32(log2(RwRasterGetHeight(RwCameraGetRaster(cam))))+1); uint32 depth = RwRasterGetDepth(RwCameraGetRaster(cam)); diff --git a/src/rw/RwHelper.cpp b/src/rw/RwHelper.cpp index 9b0ba137..1a2ba057 100644 --- a/src/rw/RwHelper.cpp +++ b/src/rw/RwHelper.cpp @@ -4,6 +4,7 @@ #include "Timecycle.h" #include "skeleton.h" #include "Debug.h" +#include "MBlur.h" #if !defined(FINAL) || defined(DEBUGMENU) #include "rtcharse.h" #endif @@ -608,6 +609,13 @@ CameraSize(RwCamera * camera, RwRect * rect, RsGlobal.width = rect->w; RsGlobal.height = rect->h; + +#ifdef FIX_BUGS + if(CMBlur::BlurOn){ + CMBlur::MotionBlurClose(); + CMBlur::MotionBlurOpen(camera); + } +#endif } return; From 7c42ed6edb06bdd26ef34341c83666e329c908b8 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 28 Feb 2021 19:04:15 +0100 Subject: [PATCH 6/9] fix postfx fix --- src/rw/RwHelper.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/rw/RwHelper.cpp b/src/rw/RwHelper.cpp index 1a2ba057..69f57933 100644 --- a/src/rw/RwHelper.cpp +++ b/src/rw/RwHelper.cpp @@ -580,6 +580,12 @@ CameraSize(RwCamera * camera, RwRect * rect, raster->width = zRaster->width = rect->w; raster->height = zRaster->height = rect->h; +#endif +#ifdef FIX_BUGS + if(CMBlur::BlurOn){ + CMBlur::MotionBlurClose(); + CMBlur::MotionBlurOpen(camera); + } #endif } @@ -609,13 +615,6 @@ CameraSize(RwCamera * camera, RwRect * rect, RsGlobal.width = rect->w; RsGlobal.height = rect->h; - -#ifdef FIX_BUGS - if(CMBlur::BlurOn){ - CMBlur::MotionBlurClose(); - CMBlur::MotionBlurOpen(camera); - } -#endif } return; From 6122f6980b056cc3f777606e75c7db62531369db Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 28 Feb 2021 19:07:46 +0100 Subject: [PATCH 7/9] fix new renderer --- src/core/main.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/core/main.cpp b/src/core/main.cpp index a38fe72a..2221b691 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -1281,11 +1281,13 @@ void RenderEffects_new(void) { PUSH_RENDERGROUP("RenderEffects_new"); +/* // stupid to do this before the whole world is drawn! CShadows::RenderStaticShadows(); // CRenderer::GenerateEnvironmentMap CShadows::RenderStoredShadows(); CSkidmarks::Render(); CRubbish::Render(); +*/ // these aren't really effects DefinedState(); @@ -1308,6 +1310,13 @@ if(gbRenderFadingInEntities) CRenderer::RenderFadingInEntities(); // actual effects here + + // from above + CShadows::RenderStaticShadows(); + CShadows::RenderStoredShadows(); + CSkidmarks::Render(); + CRubbish::Render(); + CGlass::Render(); // CMattRenderer::ResetRenderStates DefinedState(); From 97008905b6f51ce73121ebd99d0e34cf9489593b Mon Sep 17 00:00:00 2001 From: erorcun Date: Tue, 2 Mar 2021 03:38:41 +0300 Subject: [PATCH 8/9] Fix FPEs --- src/modelinfo/PedModelInfo.cpp | 6 ++++++ src/peds/Population.cpp | 33 +++++++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/modelinfo/PedModelInfo.cpp b/src/modelinfo/PedModelInfo.cpp index 28de2507..25b260d3 100644 --- a/src/modelinfo/PedModelInfo.cpp +++ b/src/modelinfo/PedModelInfo.cpp @@ -86,6 +86,11 @@ CPedModelInfo::CreateHitColModelSkinned(RpClump *clump) for(int i = 0; i < NUMPEDINFONODES; i++){ *mat = *invmat; + + // From LCS. Otherwise gives FPE +#ifdef FIX_BUGS + spheres[i].center = CVector(0.0f, 0.0f, 0.0f); +#else int id = ConvertPedNode2BoneTag(m_pColNodeInfos[i].pedNode); // this is wrong, wtf R* ??? int idx = RpHAnimIDGetIndex(hier, id); @@ -95,6 +100,7 @@ CPedModelInfo::CreateHitColModelSkinned(RpClump *clump) RwV3dTransformPoints(&pos, &pos, 1, mat); spheres[i].center = pos + CVector(m_pColNodeInfos[i].x, 0.0f, m_pColNodeInfos[i].z); +#endif spheres[i].radius = m_pColNodeInfos[i].radius; spheres[i].surface = SURFACE_PED; spheres[i].piece = m_pColNodeInfos[i].pieceType; diff --git a/src/peds/Population.cpp b/src/peds/Population.cpp index d7a545d8..13ae95d2 100644 --- a/src/peds/Population.cpp +++ b/src/peds/Population.cpp @@ -1517,8 +1517,11 @@ CPopulation::PlaceGangMembersInCircle(ePedType pedType, int pedAmount, CVector c if (CPedPlacement::IsPositionClearForPed(coors, circleR, -1, 0)) { int pedIdx = 0; CVector leaderPos; +#ifdef FIX_BUGS + bool createLeader = true; +#endif - for (int i = 0; i < pedAmount; i++) { + for (int i = 0; i < pedAmount; i++) { float angleMult = i + CGeneral::GetRandomNumberInRange(-0.2f, 0.2f); float randomR = circleR + CGeneral::GetRandomNumberInRange(-0.2f, 0.2f) * circleR; float xOffset = randomR * Cos(angleMult * circleSector); @@ -1527,8 +1530,10 @@ CPopulation::PlaceGangMembersInCircle(ePedType pedType, int pedAmount, CVector c float groundZ = CWorld::FindGroundZFor3DCoord(xOffset + coors.x, yOffset + coors.y, coors.z + 1.0, &foundGround) + 1.0f; if (foundGround) { CVector finalPos(coors.x + xOffset, coors.y + yOffset, coors.z > groundZ ? coors.z : groundZ); - - if (i == 0) +#ifndef FIX_BUGS + const bool createLeader = i == 0; +#endif + if (createLeader) leaderPos = finalPos; int gangModel = ChooseGangOccupation(pedType - PEDTYPE_GANG1); @@ -1551,9 +1556,9 @@ CPopulation::PlaceGangMembersInCircle(ePedType pedType, int pedAmount, CVector c } } } - bool memberCanSeeLeader = i == 0 ? true : CWorld::GetIsLineOfSightClear(finalPos, leaderPos, true, false, false, false, false, false, false); + bool memberCanSeeLeader = createLeader ? true : CWorld::GetIsLineOfSightClear(finalPos, leaderPos, true, false, false, false, false, false, false); - bool notTooCloseToLeader = i == 0 ? true : !(Abs(finalPos.z - leaderPos.z) < 1.0f); + bool notTooCloseToLeader = createLeader ? true : !(Abs(finalPos.z - leaderPos.z) < 1.0f); if (!foundObstacle && memberCanSeeLeader && notTooCloseToLeader) { CPed* newPed = AddPed(pedType, gangModel, finalPos); @@ -1576,6 +1581,9 @@ CPopulation::PlaceGangMembersInCircle(ePedType pedType, int pedAmount, CVector c #endif } } +#ifdef FIX_BUGS + createLeader = false; +#endif } } if (pedIdx >= 3) { @@ -1700,6 +1708,9 @@ CPopulation::PlaceMallPedsAsStationaryGroup(CVector const& coors, int32 group) if (CPedPlacement::IsPositionClearForPed(coors, circleR, -1, 0)) { int pedIdx = 0; CVector leaderPos; +#ifdef FIX_BUGS + bool createLeader = true; +#endif for (int i = 0; i < pedAmount; i++) { float angleMult = i + CGeneral::GetRandomNumberInRange(-0.2f, 0.2f); @@ -1711,7 +1722,10 @@ CPopulation::PlaceMallPedsAsStationaryGroup(CVector const& coors, int32 group) if (foundGround) { CVector finalPos(coors.x + xOffset, coors.y + yOffset, coors.z > groundZ ? coors.z : groundZ); - if (i == 0) +#ifndef FIX_BUGS + const bool createLeader = i == 0; +#endif + if (createLeader) leaderPos = finalPos; int pedModel = ChooseCivilianOccupation(group); @@ -1735,9 +1749,9 @@ CPopulation::PlaceMallPedsAsStationaryGroup(CVector const& coors, int32 group) } } } - bool memberCanSeeLeader = i == 0 ? true : CWorld::GetIsLineOfSightClear(finalPos, leaderPos, true, false, false, false, false, false, false); + bool memberCanSeeLeader = createLeader ? true : CWorld::GetIsLineOfSightClear(finalPos, leaderPos, true, false, false, false, false, false, false); - bool notTooCloseToLeader = i == 0 ? true : !(Abs(finalPos.z - leaderPos.z) < 1.0f); + bool notTooCloseToLeader = createLeader ? true : !(Abs(finalPos.z - leaderPos.z) < 1.0f); if (!foundObstacle && memberCanSeeLeader && notTooCloseToLeader) { CPed *newPed = AddPed(pedModelInfo->m_pedType, pedModel, finalPos); @@ -1758,6 +1772,9 @@ CPopulation::PlaceMallPedsAsStationaryGroup(CVector const& coors, int32 group) #endif } } +#ifdef FIX_BUGS + createLeader = false; +#endif } } if (pedIdx >= 3) { From ceb22d71dd3243e80144b3a956ae371409dda90d Mon Sep 17 00:00:00 2001 From: aap Date: Tue, 2 Mar 2021 22:22:35 +0100 Subject: [PATCH 9/9] update librw --- src/extras/custompipes_gl.cpp | 6 +++--- vendor/librw | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/extras/custompipes_gl.cpp b/src/extras/custompipes_gl.cpp index fd68c743..d74e40db 100644 --- a/src/extras/custompipes_gl.cpp +++ b/src/extras/custompipes_gl.cpp @@ -155,7 +155,7 @@ CreateVehiclePipe(void) { #include "shaders/obj/neoVehicle_frag.inc" #include "shaders/obj/neoVehicle_vert.inc" - const char *vs[] = { shaderDecl, header_vert_src, neoVehicle_vert_src, nil }; + const char *vs[] = { shaderDecl, "#define DIRECTIONALS\n", header_vert_src, neoVehicle_vert_src, nil }; const char *fs[] = { shaderDecl, header_frag_src, neoVehicle_frag_src, nil }; neoVehicleShader = Shader::create(vs, fs); assert(neoVehicleShader); @@ -516,7 +516,7 @@ CreateRimLightPipes(void) { #include "shaders/obj/simple_frag.inc" #include "shaders/obj/neoRimSkin_vert.inc" - const char *vs[] = { shaderDecl, header_vert_src, neoRimSkin_vert_src, nil }; + const char *vs[] = { shaderDecl, "#define DIRECTIONALS\n", header_vert_src, neoRimSkin_vert_src, nil }; const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil }; neoRimSkinShader = Shader::create(vs, fs); assert(neoRimSkinShader); @@ -525,7 +525,7 @@ CreateRimLightPipes(void) { #include "shaders/obj/simple_frag.inc" #include "shaders/obj/neoRim_vert.inc" - const char *vs[] = { shaderDecl, header_vert_src, neoRim_vert_src, nil }; + const char *vs[] = { shaderDecl, "#define DIRECTIONALS\n", header_vert_src, neoRim_vert_src, nil }; const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil }; neoRimShader = Shader::create(vs, fs); assert(neoRimShader); diff --git a/vendor/librw b/vendor/librw index 0102f883..af20de45 160000 --- a/vendor/librw +++ b/vendor/librw @@ -1 +1 @@ -Subproject commit 0102f8836754c82b0ac35015bd1e6058904bc334 +Subproject commit af20de45226f5152a035866da32517466e81142d