diff --git a/qbsp/merge.cc b/qbsp/merge.cc index 1c6f298c..af1a8f4d 100644 --- a/qbsp/merge.cc +++ b/qbsp/merge.cc @@ -69,7 +69,7 @@ static face_t *TryMerge(face_t *f1, face_t *f2) bool keep1, keep2; if (!f1->w.size() || !f2->w.size() || f1->planeside != f2->planeside || f1->texinfo != f2->texinfo || - /*!f1->contents[0].equals(options.target_game, f2->contents[0]) ||*/ !f1->contents[1].equals(options.target_game, f2->contents[1]) || + /*!f1->contents[0].equals(options.target_game, f2->contents[0]) || !f1->contents[1].equals(options.target_game, f2->contents[1]) || */ f1->lmshift[0] != f2->lmshift[0] || f1->lmshift[1] != f2->lmshift[1]) return NULL; diff --git a/qbsp/surfaces.cc b/qbsp/surfaces.cc index 008b5301..2f102567 100644 --- a/qbsp/surfaces.cc +++ b/qbsp/surfaces.cc @@ -765,6 +765,17 @@ static face_t *FaceFromPortal(portal_t *p, int pside) return nullptr; } + if (!p->nodes[pside]->contents.is_empty(options.target_game)) { + bool our_contents_mirrorinside = options.target_game->contents_are_mirrored(p->nodes[pside]->contents); + if (!our_contents_mirrorinside) { + if (side->planeside != pside) { + + return nullptr; + } + } + } + + if (pside) { f->w = p->winding->flip();