diff --git a/docs/Whats-New.md b/docs/Whats-New.md index 0169f87e34..a6d6080dc7 100644 --- a/docs/Whats-New.md +++ b/docs/Whats-New.md @@ -697,6 +697,7 @@ Phobos fixes: - Fixed a bug causing transfering AttachEffects (e.g on `DeploysInto`/`UndeploysInto`) not to immediately recalculate stats or tint (by Starkku) - Fixed a bug where updating the `OpenTopped` attribute during convert did not update the coordinates of passengers (by NetsuNegi) - Fixed `Shrapnel.AffectsBuildings=true` shrapnel weapons being able to hit the building itself, potentially multiple times, if it had foundation larger than 1x1 (by Starkku) +- Fixed the bug where the `.SubjectToGround` of the Trajectory type did not consider bridges (by Noble_Fish) Fixes / interactions with other extensions: diff --git a/src/Ext/Bullet/Trajectories/BombardTrajectory.cpp b/src/Ext/Bullet/Trajectories/BombardTrajectory.cpp index 7b713c8431..a78e91a527 100644 --- a/src/Ext/Bullet/Trajectories/BombardTrajectory.cpp +++ b/src/Ext/Bullet/Trajectories/BombardTrajectory.cpp @@ -610,3 +610,8 @@ void BombardTrajectory::RefreshBulletLineTrail(BulletClass* pBullet) pLineTrailer->Owner = pBullet; } } + +bool BombardTrajectory::ShouldSkipBridgeCheck() const +{ + return !this->Type->SubjectToGround; +} diff --git a/src/Ext/Bullet/Trajectories/BombardTrajectory.h b/src/Ext/Bullet/Trajectories/BombardTrajectory.h index 0486a1aac8..3ba5da97b2 100644 --- a/src/Ext/Bullet/Trajectories/BombardTrajectory.h +++ b/src/Ext/Bullet/Trajectories/BombardTrajectory.h @@ -92,6 +92,7 @@ class BombardTrajectory final : public PhobosTrajectory virtual void OnAIVelocity(BulletClass* pBullet, BulletVelocity* pSpeed, BulletVelocity* pPosition) override; virtual TrajectoryCheckReturnType OnAITargetCoordCheck(BulletClass* pBullet) override; virtual TrajectoryCheckReturnType OnAITechnoCheck(BulletClass* pBullet, TechnoClass* pTechno) override; + virtual bool ShouldSkipBridgeCheck() const override; const BombardTrajectoryType* Type; double Height; diff --git a/src/Ext/Bullet/Trajectories/PhobosTrajectory.cpp b/src/Ext/Bullet/Trajectories/PhobosTrajectory.cpp index 794de60dbc..b3aeacb4b9 100644 --- a/src/Ext/Bullet/Trajectories/PhobosTrajectory.cpp +++ b/src/Ext/Bullet/Trajectories/PhobosTrajectory.cpp @@ -451,6 +451,26 @@ DEFINE_HOOK(0x4666F7, BulletClass_AI_Trajectories, 0x6) return 0; } +/* ROT > 0. We temporarily do not need to make changes to the Bridge interaction for this scenario, but we will leave it here for now, as it may be used later. +DEFINE_HOOK(0x46703E, BulletClass_AI_SkipBridgeCheck1, 0x6) +{ + GET(BulletClass*, pThis, EBP); + auto const pExt = BulletExt::ExtMap.Find(pThis); + if (pExt && pExt->Trajectory) + return 0x467B7A; + return 0; +} +*/ + +DEFINE_HOOK(0x4674D4, BulletClass_AI_SkipBridgeCheck2, 0x6) +{ + GET(BulletClass*, pThis, EBP); + auto const pExt = BulletExt::ExtMap.Find(pThis); + if (pExt && pExt->Trajectory && pExt->Trajectory->ShouldSkipBridgeCheck()) + return 0x467519; + return 0; +} + DEFINE_HOOK(0x467E53, BulletClass_AI_PreDetonation_Trajectories, 0x6) { GET(BulletClass*, pThis, EBP); diff --git a/src/Ext/Bullet/Trajectories/PhobosTrajectory.h b/src/Ext/Bullet/Trajectories/PhobosTrajectory.h index 2ce55bcb5a..1c22618c54 100644 --- a/src/Ext/Bullet/Trajectories/PhobosTrajectory.h +++ b/src/Ext/Bullet/Trajectories/PhobosTrajectory.h @@ -51,6 +51,7 @@ class PhobosTrajectory virtual void OnAIVelocity(BulletClass* pBullet, BulletVelocity* pSpeed, BulletVelocity* pPosition) = 0; virtual TrajectoryCheckReturnType OnAITargetCoordCheck(BulletClass* pBullet) = 0; virtual TrajectoryCheckReturnType OnAITechnoCheck(BulletClass* pBullet, TechnoClass* pTechno) = 0; + virtual bool ShouldSkipBridgeCheck() const { return false; } }; /* diff --git a/src/Ext/Bullet/Trajectories/StraightTrajectory.cpp b/src/Ext/Bullet/Trajectories/StraightTrajectory.cpp index 7818e0c991..f577cd9457 100644 --- a/src/Ext/Bullet/Trajectories/StraightTrajectory.cpp +++ b/src/Ext/Bullet/Trajectories/StraightTrajectory.cpp @@ -1054,3 +1054,8 @@ bool StraightTrajectory::PassAndConfineAtHeight(BulletClass* pBullet) return false; } + +bool StraightTrajectory::ShouldSkipBridgeCheck() const +{ + return !this->Type->SubjectToGround; +} diff --git a/src/Ext/Bullet/Trajectories/StraightTrajectory.h b/src/Ext/Bullet/Trajectories/StraightTrajectory.h index ca6c58bc8d..e1a25d4121 100644 --- a/src/Ext/Bullet/Trajectories/StraightTrajectory.h +++ b/src/Ext/Bullet/Trajectories/StraightTrajectory.h @@ -113,6 +113,7 @@ class StraightTrajectory final : public PhobosTrajectory virtual void OnAIVelocity(BulletClass* pBullet, BulletVelocity* pSpeed, BulletVelocity* pPosition) override; virtual TrajectoryCheckReturnType OnAITargetCoordCheck(BulletClass* pBullet) override; virtual TrajectoryCheckReturnType OnAITechnoCheck(BulletClass* pBullet, TechnoClass* pTechno) override; + virtual bool ShouldSkipBridgeCheck() const override; const StraightTrajectoryType* Type; Leptons DetonationDistance;