From 68a6103f305b9c2bd4f84185126cd556caba7e78 Mon Sep 17 00:00:00 2001 From: LAGonauta Date: Mon, 11 Dec 2023 22:06:16 -0500 Subject: [PATCH] Fix SteamAudio mesh loader on HL25 --- src/Loaders/SteamAudioMapMeshLoader.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/Loaders/SteamAudioMapMeshLoader.cpp b/src/Loaders/SteamAudioMapMeshLoader.cpp index 3523abd..f6b97e8 100644 --- a/src/Loaders/SteamAudioMapMeshLoader.cpp +++ b/src/Loaders/SteamAudioMapMeshLoader.cpp @@ -4,6 +4,8 @@ #include "Utilities/VectorUtils.hpp" #include "Loaders/SteamAudioMapMeshLoader.hpp" +extern int g_iEngineType; + namespace MetaAudio { constexpr const float EPSILON = 0.000001f; @@ -67,13 +69,26 @@ namespace MetaAudio for (int i = 0; i < mapModel->nummodelsurfaces; ++i) { - auto surface = mapModel->surfaces[mapModel->firstmodelsurface + i]; - glpoly_t* poly = surface.polys; + glpoly_t* firstPoly = nullptr; + if (g_iEngineType == ENGINE_GOLDSRC_HL25) + { + msurface_hl25_t* surfaces = reinterpret_cast(mapModel->surfaces); + msurface_hl25_t* surface = &surfaces[mapModel->firstmodelsurface + i]; + firstPoly = surface->polys; + } + else + { + msurface_t* surface = &mapModel->surfaces[mapModel->firstmodelsurface + i]; + firstPoly = surface->polys; + } std::vector surfaceVerts; + glpoly_t* poly = firstPoly; while (poly) { if (poly->numverts <= 0) + { continue; + } for (int j = 0; j < poly->numverts; ++j) { @@ -83,8 +98,10 @@ namespace MetaAudio poly = poly->next; // escape rings - if (poly == surface.polys) + if (poly == firstPoly) + { break; + } } // triangulation