diff --git a/TombEditor/EditorActions.cs b/TombEditor/EditorActions.cs index a595f46c8..e784f078f 100644 --- a/TombEditor/EditorActions.cs +++ b/TombEditor/EditorActions.cs @@ -193,10 +193,25 @@ void smoothEdit(RoomSectorPair pair, SectorEdge edge) case ArrowType.CornerNW: origin = SectorEdge.XnZp; break; case ArrowType.CornerSE: origin = SectorEdge.XpZn; break; } + var originSector = room.GetSectorTryThroughPortal(startCoord); - var originHeight = originSector.Sector.GetHeight(vertical, origin) + originSector.Room.Position.Y; - for (int i = 0; i < 4; i++) - corners[i] = originHeight == cornerSectors[i].Sector.GetHeight(vertical, (SectorEdge)i) + cornerSectors[i].Room.Position.Y; + if (originSector.Sector == null || originSector.Room == null) + Array.Fill(corners, false); + else + { + var originHeight = originSector.Sector.GetHeight(vertical, origin) + originSector.Room.Position.Y; + + bool IsCornerValidAndAtSameHeight(RoomSectorPair cornerSector, SectorEdge edge, SectorVerticalPart cornerVertical, int referenceHeight) + { + if (cornerSector.Sector == null || cornerSector.Room == null) + return false; + + return referenceHeight == cornerSector.Sector.GetHeight(cornerVertical, edge) + cornerSector.Room.Position.Y; + } + + for (int i = 0; i < 4; i++) + corners[i] = IsCornerValidAndAtSameHeight(cornerSectors[i], (SectorEdge)i, vertical, originHeight); + } } // Smoothly change sectors on the corners