diff --git a/qbsp/brush.cc b/qbsp/brush.cc index 89088a10..4c7bd676 100644 --- a/qbsp/brush.cc +++ b/qbsp/brush.cc @@ -653,12 +653,6 @@ std::optional LoadBrush(const mapentity_t &src, mapbrush_t &mapbrush static void Brush_LoadEntity(mapentity_t &dst, mapentity_t &src, hull_index_t hullnum, content_stats_base_t &stats, bspbrush_t::container &brushes, logging::percent_clock &clock, size_t &num_clipped) { - // _omitbrushes 1 just discards all brushes in the entity. - // could be useful for geometry guides, selective compilation, etc. - if (src.epairs.get_int("_omitbrushes")) { - return; - } - clock.max += src.mapbrushes.size(); bool all_detail, all_detail_fence, all_detail_illusionary; diff --git a/qbsp/map.cc b/qbsp/map.cc index 3928cc8d..603d9b01 100644 --- a/qbsp/map.cc +++ b/qbsp/map.cc @@ -2207,6 +2207,10 @@ bool ParseEntity(parser_t &parser, mapentity_t &entity) entity.mapbrushes.clear(); + // _omitbrushes 1 just discards all brushes in the entity. + // could be useful for geometry guides, selective compilation, etc. + bool omit = entity.epairs.get_int("_omitbrushes"); + do { if (!parser.parse_token()) FError("Unexpected EOF (no closing brace)"); @@ -2216,7 +2220,16 @@ bool ParseEntity(parser_t &parser, mapentity_t &entity) // once we run into the first brush, set up textures state. EnsureTexturesLoaded(); - entity.mapbrushes.emplace_back(ParseBrush(parser, entity)); + if (omit) { + // skip until a } since we don't care to load brushes on this entity + do { + if (!parser.parse_token()) { + FError("Unexpected EOF (no closing brace)"); + } + } while (parser.token != "}"); + } else { + entity.mapbrushes.emplace_back(ParseBrush(parser, entity)); + } } else { ParseEpair(parser, entity); }