diff --git a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/TerrainTex.cpp b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/TerrainTex.cpp index 76de020a9ef..a30871e5475 100644 --- a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/TerrainTex.cpp +++ b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/TerrainTex.cpp @@ -129,6 +129,8 @@ int TerrainTextureClass::update(WorldHeightMap *htMap) Int i,j; for (j=0; jgetRGBDataForWidth(tilePixelExtent); + // Check if getRGBDataForWidth returned NULL (e.g., corrupted tile data) + if (!pBGR) continue; pBGR += (tilePixelExtent-1-j)*TILE_BYTES_PER_PIXEL*tilePixelExtent; // invert to match. Int row = position.y+j; UnsignedByte *pBGRX = ((UnsignedByte*)locked_rect.pBits) + @@ -414,6 +416,8 @@ int TerrainTextureClass::update256(WorldHeightMap *htMap) Int i,j; for (j=0; jgetSourceTile(tileNdx)->getRGBDataForWidth(tilePixelExtent); + // Check if getRGBDataForWidth returned NULL (e.g., corrupted tile data) + if (!pBGR) continue; pBGR += (tilePixelExtent-1-j)*TILE_BYTES_PER_PIXEL*tilePixelExtent; // invert to match. Int row = cellY*tilePixelExtent+j; row += tileOffset/2; @@ -880,6 +884,8 @@ int AlphaEdgeTextureClass::update(WorldHeightMap *htMap) for (j=0; jgetEdgeTile(tileNdx)->getRGBDataForWidth(tilePixelExtent); + // Check if getRGBDataForWidth returned NULL (e.g., corrupted tile data) + if (!pBGR) continue; pBGR += (tilePixelExtent-1-j)*TILE_BYTES_PER_PIXEL*tilePixelExtent; // invert to match. UnsignedByte *pBGRX = ((UnsignedByte*)locked_rect.pBits) + (row)*surface_desc.Width*pixelBytes; diff --git a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/WorldHeightMap.cpp b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/WorldHeightMap.cpp index 212cac6adba..88022720011 100644 --- a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/WorldHeightMap.cpp +++ b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/WorldHeightMap.cpp @@ -873,6 +873,14 @@ void WorldHeightMap::readTexClass(TXTextureClass *texClass, TileData **tileData) WorldHeightMap::readTiles(pStr, tileData+texClass->firstTile, width); } theFile->close(); + } else { + // Failed to open texture file - ensure all tiles for this class are NULL + // to prevent crashes when rendering tries to use uninitialized data + for (Int i = 0; i < texClass->numTiles; i++) { + if (tileData[texClass->firstTile + i] == NULL) { + tileData[texClass->firstTile + i] = NULL; // Explicitly set to NULL + } + } } }