fix hintskip; when loading a hint brush, mark all other sides as hintskip
This commit is contained in:
parent
d067630bc1
commit
a0e98242a4
|
|
@ -161,12 +161,12 @@ struct surfflags_t
|
||||||
// an invisible surface (Q1 "skip" texture, Q2 SURF_NODRAW)
|
// an invisible surface (Q1 "skip" texture, Q2 SURF_NODRAW)
|
||||||
bool is_nodraw;
|
bool is_nodraw;
|
||||||
|
|
||||||
// completely ignore, allowing non-closed brushes (Q2 SURF_SKIP)
|
|
||||||
bool is_hintskip;
|
|
||||||
|
|
||||||
// hint surface
|
// hint surface
|
||||||
bool is_hint;
|
bool is_hint;
|
||||||
|
|
||||||
|
// is a skip surface from a hint brush
|
||||||
|
bool is_hintskip;
|
||||||
|
|
||||||
// don't receive dirtmapping
|
// don't receive dirtmapping
|
||||||
bool no_dirt;
|
bool no_dirt;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1092,6 +1092,9 @@ static void LoadExtendedTexinfoFlags(const fs::path &sourcefilename, const mbsp_
|
||||||
if (val.contains("is_hint")) {
|
if (val.contains("is_hint")) {
|
||||||
flags.is_hint = val.at("is_hint").get<bool>();
|
flags.is_hint = val.at("is_hint").get<bool>();
|
||||||
}
|
}
|
||||||
|
if (val.contains("is_hintskip")) {
|
||||||
|
flags.is_hintskip = val.at("is_hintskip").get<bool>();
|
||||||
|
}
|
||||||
if (val.contains("no_dirt")) {
|
if (val.contains("no_dirt")) {
|
||||||
flags.no_dirt = val.at("no_dirt").get<bool>();
|
flags.no_dirt = val.at("no_dirt").get<bool>();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
22
qbsp/map.cc
22
qbsp/map.cc
|
|
@ -2409,6 +2409,8 @@ static mapbrush_t ParseBrush(parser_t &parser, mapentity_t &entity, texture_def_
|
||||||
}
|
}
|
||||||
// ericw -- end brush primitives
|
// ericw -- end brush primitives
|
||||||
|
|
||||||
|
bool is_hint = false;
|
||||||
|
|
||||||
while (parser.parse_token()) {
|
while (parser.parse_token()) {
|
||||||
|
|
||||||
// set linenum after first parsed token
|
// set linenum after first parsed token
|
||||||
|
|
@ -2444,10 +2446,30 @@ static mapbrush_t ParseBrush(parser_t &parser, mapentity_t &entity, texture_def_
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (face->get_texinfo().flags.is_hint) {
|
||||||
|
is_hint = true;
|
||||||
|
}
|
||||||
|
|
||||||
/* Save the face, update progress */
|
/* Save the face, update progress */
|
||||||
brush.faces.emplace_back(std::move(face.value()));
|
brush.faces.emplace_back(std::move(face.value()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// mark hintskip faces
|
||||||
|
if (is_hint) {
|
||||||
|
int32_t num_hintskip = 0;
|
||||||
|
|
||||||
|
for (auto &face : brush.faces) {
|
||||||
|
if (qbsp_options.target_game->texinfo_is_hintskip(face.get_texinfo().flags, map.miptexTextureName(face.get_texinfo().miptex))) {
|
||||||
|
auto copy = face.get_texinfo();
|
||||||
|
copy.flags.is_hintskip = true;
|
||||||
|
face.texinfo = FindTexinfo(copy);
|
||||||
|
num_hintskip++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//logging::print("{}: {} hintskip faces\n", parser.location, num_hintskip);
|
||||||
|
}
|
||||||
|
|
||||||
// ericw -- brush primitives - there should be another closing }
|
// ericw -- brush primitives - there should be another closing }
|
||||||
if (brush.format == brushformat_t::BRUSH_PRIMITIVES) {
|
if (brush.format == brushformat_t::BRUSH_PRIMITIVES) {
|
||||||
if (!parser.parse_token())
|
if (!parser.parse_token())
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue