diff --git a/src/p_checkposition.h b/src/p_checkposition.h index 8898f291cc..7deccc5623 100644 --- a/src/p_checkposition.h +++ b/src/p_checkposition.h @@ -78,7 +78,7 @@ struct FCheckPosition bool DoRipping; TMap LastRipped; - //FPortalGroupTable Groups; + FPortalGroupTable Groups; int PushTime; FCheckPosition(bool rip=false) diff --git a/src/portal.cpp b/src/portal.cpp index aad4e6ad5b..8f7fda6e63 100644 --- a/src/portal.cpp +++ b/src/portal.cpp @@ -973,7 +973,23 @@ void P_CreateLinkedPortals() Printf("Link offset mismatch between sectors %d and %d\n", sec1, sec2); bogus = true; } - // todo: Find sectors that have no group but belong to a portal. + // mark everything that connects to a one-sided line + for (int i = 0; i < numlines; i++) + { + if (lines[i].backsector == NULL && lines[i].frontsector->PortalGroup == 0) + { + CollectSectors(-1, lines[i].frontsector); + } + } + // and now print a message for everything that still wasn't processed. + for (int i = 0; i < numsectors; i++) + { + if (sectors[i].PortalGroup == 0) + { + Printf("Unable to assign sector %d to any group. Possibly self-referencing\n", i); + } + else if (sectors[i].PortalGroup == -1) sectors[i].PortalGroup = 0; + } } } bogus |= ConnectGroups();