diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwbase/world.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwbase/world.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwbase/world.hpp 2026-06-26 23:05:20.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwbase/world.hpp 2026-06-26 15:41:29.000000000 +0000 @@ -315,5 +315,5 @@ virtual bool castRenderingRay(MWPhysics::RayCastingResult& res, const osg::Vec3f& from, const osg::Vec3f& to, - bool ignorePlayer, bool ignoreActors, bool ignoreTerrain, std::span ignoreList = {}) + bool ignorePlayer, bool ignoreActors, std::span ignoreList = {}) = 0; diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwlua/nearbybindings.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwlua/nearbybindings.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwlua/nearbybindings.cpp 2026-06-26 23:05:20.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwlua/nearbybindings.cpp 2026-06-26 15:41:29.000000000 +0000 @@ -167,5 +167,5 @@ MWPhysics::RayCastingResult res; - MWBase::Environment::get().getWorld()->castRenderingRay(res, from, to, false, false, false, ignore); + MWBase::Environment::get().getWorld()->castRenderingRay(res, from, to, false, false, ignore); return res; }; @@ -181,5 +181,5 @@ [context, ignore = std::move(ignore), callback = LuaUtil::Callback::fromLua(callback), from, to] { MWPhysics::RayCastingResult res; - MWBase::Environment::get().getWorld()->castRenderingRay(res, from, to, false, false, false, ignore); + MWBase::Environment::get().getWorld()->castRenderingRay(res, from, to, false, false, ignore); context.mLuaManager->queueCallback( callback, sol::main_object(context.mLua->unsafeState(), sol::in_place, res)); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/renderingmanager.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/renderingmanager.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/renderingmanager.cpp 2026-06-26 23:05:20.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/renderingmanager.cpp 2026-06-26 15:41:29.000000000 +0000 @@ -973,5 +973,5 @@ osg::ref_ptr RenderingManager::getIntersectionVisitor( - osgUtil::Intersector* intersector, bool ignorePlayer, bool ignoreActors, bool ignoreTerrain, + osgUtil::Intersector* intersector, bool ignorePlayer, bool ignoreActors, std::span ignoreList) { @@ -1004,6 +1004,4 @@ if (ignoreActors) mask &= ~(Mask_Actor | Mask_Player); - if (ignoreTerrain) - mask &= ~(Mask_Terrain); mIntersectionVisitor->setTraversalMask(mask); @@ -1012,5 +1010,5 @@ RenderingManager::RayResult RenderingManager::castRay(const osg::Vec3f& origin, const osg::Vec3f& dest, - bool ignorePlayer, bool ignoreActors, bool ignoreTerrain, std::span ignoreList) + bool ignorePlayer, bool ignoreActors, std::span ignoreList) { osg::ref_ptr intersector( @@ -1018,5 +1016,5 @@ intersector->setIntersectionLimit(osgUtil::LineSegmentIntersector::LIMIT_NEAREST); - mRootNode->accept(*getIntersectionVisitor(intersector, ignorePlayer, ignoreActors, ignoreTerrain, ignoreList)); + mRootNode->accept(*getIntersectionVisitor(intersector, ignorePlayer, ignoreActors, ignoreList)); return getIntersectionResult(intersector, mIntersectionVisitor, ignoreList); @@ -1024,5 +1022,5 @@ RenderingManager::RayResult RenderingManager::castCameraToViewportRay( - const float nX, const float nY, float maxDistance, bool ignorePlayer, bool ignoreActors, bool ignoreTerrain) + const float nX, const float nY, float maxDistance, bool ignorePlayer, bool ignoreActors) { osg::ref_ptr intersector(new osgUtil::LineSegmentIntersector( @@ -1038,5 +1036,5 @@ intersector->setIntersectionLimit(osgUtil::LineSegmentIntersector::LIMIT_NEAREST); - mViewer->getCamera()->accept(*getIntersectionVisitor(intersector, ignorePlayer, ignoreActors, ignoreTerrain)); + mViewer->getCamera()->accept(*getIntersectionVisitor(intersector, ignorePlayer, ignoreActors)); return getIntersectionResult(intersector, mIntersectionVisitor); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/renderingmanager.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/renderingmanager.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/renderingmanager.hpp 2026-06-26 23:05:20.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/renderingmanager.hpp 2026-06-26 15:41:29.000000000 +0000 @@ -180,10 +180,10 @@ RayResult castRay(const osg::Vec3f& origin, const osg::Vec3f& dest, bool ignorePlayer, - bool ignoreActors = false, bool ignoreTerrain = false, std::span ignoreList = {}); + bool ignoreActors = false, std::span ignoreList = {}); /// Return the object under the mouse cursor / crosshair position, given by nX and nY normalized screen /// coordinates, where (0,0) is the top left corner. - RayResult castCameraToViewportRay(const float nX, const float nY, float maxDistance, bool ignorePlayer, - bool ignoreActors = false, bool ignoreTerrain = false); + RayResult castCameraToViewportRay( + const float nX, const float nY, float maxDistance, bool ignorePlayer, bool ignoreActors = false); /// Get normalized screen coordinates of the bounding box's summit, where (0,0) is the top left corner @@ -310,5 +310,5 @@ osg::ref_ptr getIntersectionVisitor(osgUtil::Intersector* intersector, - bool ignorePlayer, bool ignoreActors, bool ignoreTerrain, std::span ignoreList = {}); + bool ignorePlayer, bool ignoreActors, std::span ignoreList = {}); osg::ref_ptr mIntersectionVisitor; diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwworld/worldimp.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwworld/worldimp.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwworld/worldimp.cpp 2026-06-26 23:05:20.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwworld/worldimp.cpp 2026-06-26 15:41:29.000000000 +0000 @@ -1708,15 +1708,12 @@ MWRender::RenderingManager::RayResult rayToObject; - const bool ignoreTerrain = !Settings::game().mTerrainObstructsFocus; - if (MWBase::Environment::get().getWindowManager()->isGuiMode()) { float x, y; MWBase::Environment::get().getWindowManager()->getMousePosition(x, y); - rayToObject = mRendering->castCameraToViewportRay(x, y, maxDistance, ignorePlayer, false, ignoreTerrain); + rayToObject = mRendering->castCameraToViewportRay(x, y, maxDistance, ignorePlayer); } else - rayToObject - = mRendering->castCameraToViewportRay(0.5f, 0.5f, maxDistance, ignorePlayer, false, ignoreTerrain); + rayToObject = mRendering->castCameraToViewportRay(0.5f, 0.5f, maxDistance, ignorePlayer); focusObject = rayToObject.mHitObject; @@ -1731,8 +1728,8 @@ bool World::castRenderingRay(MWPhysics::RayCastingResult& res, const osg::Vec3f& from, const osg::Vec3f& to, - bool ignorePlayer, bool ignoreActors, bool ignoreTerrain, std::span ignoreList) + bool ignorePlayer, bool ignoreActors, std::span ignoreList) { MWRender::RenderingManager::RayResult rayRes - = mRendering->castRay(from, to, ignorePlayer, ignoreActors, ignoreTerrain, ignoreList); + = mRendering->castRay(from, to, ignorePlayer, ignoreActors, ignoreList); res.mHit = rayRes.mHit; res.mHitPos = rayRes.mHitPointWorld; @@ -1909,5 +1906,5 @@ MWRender::RenderingManager::RayResult result - = mRendering->castCameraToViewportRay(cursorX, cursorY, maxDist, true, true, false); + = mRendering->castCameraToViewportRay(cursorX, cursorY, maxDist, true, true); CellStore* cell = getPlayerPtr().getCell(); @@ -1938,5 +1935,5 @@ const float maxDist = 200.f; MWRender::RenderingManager::RayResult result - = mRendering->castCameraToViewportRay(cursorX, cursorY, maxDist, true, true, false); + = mRendering->castCameraToViewportRay(cursorX, cursorY, maxDist, true, true); if (result.mHit) @@ -2042,5 +2039,5 @@ float len = 1000000.0; - MWRender::RenderingManager::RayResult result = mRendering->castRay(orig, orig + dir * len, true, true, false); + MWRender::RenderingManager::RayResult result = mRendering->castRay(orig, orig + dir * len, true, true); if (result.mHit) pos.pos[2] = result.mHitPointWorld.z(); @@ -2924,6 +2921,5 @@ const osg::Vec3f direction = orient * osg::Vec3f(0, 1, 0); const osg::Vec3f dest = origin + direction * getMaxActivationDistance(); - const MWRender::RenderingManager::RayResult result - = mRendering->castRay(origin, dest, true, true, false); + const MWRender::RenderingManager::RayResult result = mRendering->castRay(origin, dest, true, true); if (result.mHit) target = result.mHitObject; diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwworld/worldimp.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwworld/worldimp.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwworld/worldimp.hpp 2026-06-26 23:05:20.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwworld/worldimp.hpp 2026-06-26 15:41:29.000000000 +0000 @@ -399,6 +399,5 @@ bool castRenderingRay(MWPhysics::RayCastingResult& res, const osg::Vec3f& from, const osg::Vec3f& to, - bool ignorePlayer, bool ignoreActors, bool ignoreTerrain, - std::span ignoreList) override; + bool ignorePlayer, bool ignoreActors, std::span ignoreList) override; void setActorCollisionMode(const Ptr& ptr, bool internal, bool external) override; diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/settings/categories/game.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/settings/categories/game.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/settings/categories/game.hpp 2026-06-26 23:05:20.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/settings/categories/game.hpp 2026-06-26 15:41:29.000000000 +0000 @@ -75,5 +75,4 @@ "actor collision shape type" }; SettingValue mPlayerMovementIgnoresAnimation{ mIndex, "Game", "player movement ignores animation" }; - SettingValue mTerrainObstructsFocus{ mIndex, "Game", "terrain obstructs focus" }; }; } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/docs/source/reference/modding/settings/game.rst /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/docs/source/reference/modding/settings/game.rst --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/docs/source/reference/modding/settings/game.rst 2026-06-26 23:05:20.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/docs/source/reference/modding/settings/game.rst 2026-06-26 15:41:29.000000000 +0000 @@ -503,11 +503,2 @@ \text{new value} = 0.0001 \cdot (\text{soul magnitude})^3 + 2 \cdot (\text{soul magnitude}) - -.. omw-setting:: - :title: terrain obstructs focus - :type: boolean - :range: true, false - :default: false - - If enabled, focused object selection will account for terrain. - The default behavior matches Morrowind, allowing objects partially or totally submerged in terrain to gain focus. diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/settings-default.cfg /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/settings-default.cfg --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/settings-default.cfg 2026-06-26 23:05:20.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/settings-default.cfg 2026-06-26 15:41:29.000000000 +0000 @@ -391,7 +391,4 @@ player movement ignores animation = false -# Makes focused object selection account for terrain. -terrain obstructs focus = false - [General]