From 09197e421ce0de436b78fd5c3ceaa620e730b692 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 6 May 2026 11:21:33 +0300 Subject: [PATCH] Add a function for finding last matching structure --- TileEngine/structure.cpp | 28 ++++++++++++++++++++++++++++ TileEngine/structure.h | 1 + 2 files changed, 29 insertions(+) diff --git a/TileEngine/structure.cpp b/TileEngine/structure.cpp index a22fa78e..6ef12f02 100644 --- a/TileEngine/structure.cpp +++ b/TileEngine/structure.cpp @@ -1428,6 +1428,7 @@ STRUCTURE * SwapStructureForPartnerForcingGraphicalChange( INT32 sGridNo, STRUCT } #endif +// Finds the first structure with matching flag STRUCTURE * FindStructure( INT32 sGridNo, UINT32 fFlags ) { // finds a structure that matches any of the given flags @@ -1451,6 +1452,33 @@ STRUCTURE * FindStructure( INT32 sGridNo, UINT32 fFlags ) return( NULL ); } +// Finds the last structure with matching flag +STRUCTURE* FindLastStructure(INT32 sGridNo, UINT32 fFlags) +{ + // finds a structure that matches any of the given flags + STRUCTURE* pCurrent; + STRUCTURE* pLastMatch = nullptr; + + //bug fix for win98 crash when traveling between sectors + if ( TileIsOutOfBounds(sGridNo) ) + { + return(NULL); + } + + pCurrent = gpWorldLevelData[sGridNo].pStructureHead; + while ( pCurrent != NULL ) + { + if ( (pCurrent->fFlags & fFlags) != 0 ) + { + pLastMatch = pCurrent; + //return(pCurrent); + } + pCurrent = pCurrent->pNext; + } + + return(pLastMatch); +} + STRUCTURE * FindNextStructure( STRUCTURE * pStructure, UINT32 fFlags ) { STRUCTURE * pCurrent; diff --git a/TileEngine/structure.h b/TileEngine/structure.h index 3c7e4fc4..4f71d7a6 100644 --- a/TileEngine/structure.h +++ b/TileEngine/structure.h @@ -47,6 +47,7 @@ BOOLEAN DeleteStructureFromWorld( STRUCTURE * pStructure ); // functions to find a structure in a location // STRUCTURE * FindStructure( INT32 sGridNo, UINT32 fFlags ); +STRUCTURE* FindLastStructure(INT32 sGridNo, UINT32 fFlags); STRUCTURE * FindNextStructure( STRUCTURE * pStructure, UINT32 fFlags ); STRUCTURE * FindStructureByID( INT32 sGridNo, UINT16 usStructureID ); STRUCTURE * FindBaseStructure( STRUCTURE * pStructure );