From aa37cd7f4e059afcbfdbad76be09c8dc7047b819 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Ko=C5=82odziejski?= Date: Sun, 26 Jun 2022 00:22:19 +0200 Subject: [PATCH] WINTERMUTE: WME3D: Restore missing check, matching original --- engines/wintermute/ad/ad_actor_3dx.cpp | 7 +++++-- engines/wintermute/base/gfx/x/meshx.cpp | 3 +++ engines/wintermute/base/gfx/x/modelx.cpp | 4 ++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/engines/wintermute/ad/ad_actor_3dx.cpp b/engines/wintermute/ad/ad_actor_3dx.cpp index 63e2a01825e..6ac1864cfa8 100644 --- a/engines/wintermute/ad/ad_actor_3dx.cpp +++ b/engines/wintermute/ad/ad_actor_3dx.cpp @@ -1908,8 +1908,11 @@ bool AdActor3DX::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta stack->pop(); warning("AdActor3DX::scCallMethod D3DX effects are not supported"); - - stack->pushBool(false); + if (_modelX) { + stack->pushBool(true); + } else { + stack->pushBool(false); + } return true; } diff --git a/engines/wintermute/base/gfx/x/meshx.cpp b/engines/wintermute/base/gfx/x/meshx.cpp index 634510b628f..1be7aae029b 100644 --- a/engines/wintermute/base/gfx/x/meshx.cpp +++ b/engines/wintermute/base/gfx/x/meshx.cpp @@ -411,6 +411,9 @@ bool MeshX::pickPoly(Math::Vector3d *pickRayOrig, Math::Vector3d *pickRayDir) { Math::Vector3d v2; v2.setData(&_vertexData[index3 * kVertexComponentCount + kPositionOffset]); + if (isnan(v0.x())) + continue; + Math::Vector3d intersection; if (lineIntersectsTriangle(*pickRayOrig, *pickRayDir, v0, v1, v2, intersection.x(), intersection.y(), intersection.z())) { res = true; diff --git a/engines/wintermute/base/gfx/x/modelx.cpp b/engines/wintermute/base/gfx/x/modelx.cpp index e320423aa6d..3afb61105f4 100644 --- a/engines/wintermute/base/gfx/x/modelx.cpp +++ b/engines/wintermute/base/gfx/x/modelx.cpp @@ -246,6 +246,10 @@ bool ModelX::loadFromFile(const Common::String &filename, ModelX *parentModel) { } bool ModelX::mergeFromFile(const Common::String &filename) { + if (!_rootFrame) { + return false; + } + uint32 fileSize = 0; byte *buffer = BaseFileManager::getEngineInstance()->getEngineInstance()->readWholeFile(filename, &fileSize); XFileLexer lexer = createXFileLexer(buffer, fileSize);