diff --git a/common/bsputils.cc b/common/bsputils.cc index 73e2641a..44b1b8f8 100644 --- a/common/bsputils.cc +++ b/common/bsputils.cc @@ -215,7 +215,7 @@ TextureName_Contents(const char *texname) bool //mxd ContentsOrSurfaceFlags_IsTranslucent(const mbsp_t *bsp, const int contents_or_surf_flags) { - if (bsp->loadversion == &bspver_q2 || bsp->loadversion == &bspver_qbism) + if (bsp->loadversion->game == GAME_QUAKE_II) return (contents_or_surf_flags & Q2_SURF_TRANSLUCENT) && ((contents_or_surf_flags & Q2_SURF_TRANSLUCENT) != Q2_SURF_TRANSLUCENT); // Don't count KMQ2 fence flags combo as translucent else return contents_or_surf_flags == CONTENTS_WATER || contents_or_surf_flags == CONTENTS_LAVA || contents_or_surf_flags == CONTENTS_SLIME; @@ -230,7 +230,7 @@ Face_IsTranslucent(const mbsp_t *bsp, const bsp2_dface_t *face) int //mxd. Returns CONTENTS_ value for Q1, Q2_SURF_ bitflags for Q2... Face_ContentsOrSurfaceFlags(const mbsp_t *bsp, const bsp2_dface_t *face) { - if (bsp->loadversion == &bspver_q2 || bsp->loadversion == &bspver_qbism) { + if (bsp->loadversion->game == GAME_QUAKE_II) { const gtexinfo_t *info = Face_Texinfo(bsp, face); return info->flags.native; } else { @@ -275,7 +275,7 @@ static bool Light_PointInSolid_r(const mbsp_t *bsp, const int nodenum, const vec const mleaf_t *leaf = BSP_GetLeafFromNodeNum(bsp, nodenum); //mxd - if (bsp->loadversion == &bspver_q2 || bsp->loadversion == &bspver_qbism) { + if (bsp->loadversion->game == GAME_QUAKE_II) { return leaf->contents & Q2_CONTENTS_SOLID; } diff --git a/include/qbsp/map.hh b/include/qbsp/map.hh index 98519c63..2fba7049 100644 --- a/include/qbsp/map.hh +++ b/include/qbsp/map.hh @@ -69,18 +69,13 @@ enum class brushformat_t { class mapbrush_t { public: - int firstface; - int numfaces; - brushformat_t format; - int contents; - - mapbrush_t() : - firstface(0), - numfaces(0), - format(brushformat_t::NORMAL), - contents(0) {} + int firstface = 0; + int numfaces = 0; + brushformat_t format = brushformat_t::NORMAL; + int contents = 0; + const mapface_t &face(int i) const; -} ; +}; struct lumpdata { int count; diff --git a/light/entities.cc b/light/entities.cc index 5ee1e76e..fb0dc67f 100644 --- a/light/entities.cc +++ b/light/entities.cc @@ -1579,7 +1579,7 @@ static void MakeSurfaceLights(const mbsp_t *bsp) for (int i = 0; i < bsp->numleafs; i++) { const mleaf_t *leaf = bsp->dleafs + i; - const qboolean underwater = ((bsp->loadversion == &bspver_q2 || bsp->loadversion == &bspver_qbism) ? leaf->contents & Q2_CONTENTS_LIQUID : leaf->contents != CONTENTS_EMPTY); //mxd + const qboolean underwater = ((bsp->loadversion->game == GAME_QUAKE_II) ? (leaf->contents & Q2_CONTENTS_LIQUID) : leaf->contents != CONTENTS_EMPTY); //mxd for (int k = 0; k < leaf->nummarksurfaces; k++) { const int facenum = bsp->dleaffaces[leaf->firstmarksurface + k]; diff --git a/light/imglib.cc b/light/imglib.cc index 37e9abac..a8d468c6 100644 --- a/light/imglib.cc +++ b/light/imglib.cc @@ -44,7 +44,7 @@ void // WHO TOUCHED MY PALET? LoadPalette(bspdata_t *bspdata) { // Load Quake 2 palette - if (bspdata->loadversion == &bspver_q2 || bspdata->loadversion == &bspver_qbism) { + if (bspdata->loadversion->game == GAME_QUAKE_II) { uint8_t *palette; char path[1024]; char colormap[] = "pics/colormap.pcx"; @@ -66,7 +66,7 @@ LoadPalette(bspdata_t *bspdata) for (int i = 0; i < 768; i++) thepalette[i] = palette[i]; - } else if (bspdata->loadversion == &bspver_h2) { + } else if (bspdata->loadversion->game == GAME_HEXEN_II) { // Copy Hexen 2 palette for (int i = 0; i < 768; i++) thepalette[i] = hexen2palette[i]; @@ -721,7 +721,7 @@ void // Expects correct palette and game/mod paths to be set LoadOrConvertTextures(mbsp_t *bsp) { // Load or convert textures... - if (bsp->loadversion == &bspver_q2 || bsp->loadversion == &bspver_qbism) + if (bsp->loadversion->game == GAME_QUAKE_II) LoadTextures(bsp); else if (bsp->texdatasize > 0) ConvertTextures(bsp); diff --git a/light/light.cc b/light/light.cc index 495918cd..45540b78 100644 --- a/light/light.cc +++ b/light/light.cc @@ -537,9 +537,9 @@ LoadExtendedTexinfoFlags(const char *sourcefilename, const mbsp_t *bsp) static const char* //mxd GetBaseDirName(bspdata_t *bspdata) { - if (bspdata->loadversion == &bspver_q2 || bspdata->loadversion == &bspver_qbism) + if (bspdata->loadversion->game == GAME_QUAKE_II) return "BASEQ2"; - if (bspdata->loadversion == &bspver_h2) + if (bspdata->loadversion->game == GAME_HEXEN_II) return "DATA1"; return "ID1"; } @@ -1194,7 +1194,7 @@ light_main(int argc, const char **argv) ConvertBSPFormat(&bspdata, &bspver_generic); //mxd. Use 1.0 rangescale as a default to better match with qrad3/arghrad - if ((loadversion == &bspver_q2 || loadversion == &bspver_qbism) && !cfg.rangescale.isChanged()) + if ((loadversion->game == GAME_QUAKE_II) && !cfg.rangescale.isChanged()) { const auto rs = new lockable_vec_t(cfg.rangescale.primaryName(), 1.0f, 0.0f, 100.0f); cfg.rangescale = *rs; // Gross hacks to avoid displaying this in OptionsSummary... diff --git a/light/ltface.cc b/light/ltface.cc index b9541116..de30cadc 100644 --- a/light/ltface.cc +++ b/light/ltface.cc @@ -3081,7 +3081,7 @@ WriteLightmaps(const mbsp_t *bsp, bsp2_dface_t *face, facesup_t *facesup, const continue; // skip lightmaps where all samples have brightness below 1 - if (bsp->loadversion != &bspver_q2 && bsp->loadversion != &bspver_qbism) { // HACK: don't do this on Q2. seems if all styles are 0xff, the face is drawn fullbright instead of black (Q1) + if (bsp->loadversion->game == GAME_QUAKE_II) { // HACK: don't do this on Q2. seems if all styles are 0xff, the face is drawn fullbright instead of black (Q1) const float maxb = Lightmap_MaxBrightness(&lightmap, lightsurf); if (maxb < 1) continue; diff --git a/light/trace.cc b/light/trace.cc index 70314b5c..38972c82 100644 --- a/light/trace.cc +++ b/light/trace.cc @@ -716,7 +716,7 @@ TraceFaces (traceinfo_t *ti, int node, const vec3_t start, const vec3_t end) // only solid and sky faces stop the trace. bool issolid, issky; //mxd - if(bsp_static->loadversion == &bspver_q2 || bsp_static->loadversion == &bspver_qbism) { + if(bsp_static->loadversion->game == GAME_QUAKE_II) { issolid = !(fi->content_or_surf_flags & Q2_SURF_TRANSLUCENT); issky = (fi->content_or_surf_flags & Q2_SURF_SKY); } else { diff --git a/light/trace_embree.cc b/light/trace_embree.cc index b25ce11b..a15ce166 100644 --- a/light/trace_embree.cc +++ b/light/trace_embree.cc @@ -353,7 +353,7 @@ Embree_FilterFuncN(const struct RTCFilterFunctionNArguments* args) //mxd bool isFence, isGlass; - if(bsp_static->loadversion == &bspver_q2 || bsp_static->loadversion == &bspver_qbism) { + if(bsp_static->loadversion->game == GAME_QUAKE_II) { const int surf_flags = Face_ContentsOrSurfaceFlags(bsp_static, face); isFence = ((surf_flags & Q2_SURF_TRANSLUCENT) == Q2_SURF_TRANSLUCENT); // KMQuake 2-specific. Use texture alpha chanel when both flags are set. isGlass = !isFence && (surf_flags & Q2_SURF_TRANSLUCENT); @@ -558,7 +558,7 @@ MakeFaces_r(const mbsp_t *bsp, const int nodenum, std::vector *planes, const int leafnum = -nodenum - 1; const mleaf_t *leaf = &bsp->dleafs[leafnum]; - if ((bsp->loadversion == &bspver_q2 || bsp->loadversion == &bspver_qbism) ? leaf->contents & Q2_CONTENTS_SOLID : leaf->contents == CONTENTS_SOLID) { + if ((bsp->loadversion->game == GAME_QUAKE_II) ? (leaf->contents & Q2_CONTENTS_SOLID) : leaf->contents == CONTENTS_SOLID) { std::vector leaf_windings = Leaf_MakeFaces(bsp, leaf, *planes); for (winding_t *w : leaf_windings) { result->push_back(w); @@ -630,7 +630,7 @@ Embree_TraceInit(const mbsp_t *bsp) const int contents_or_surf_flags = Face_ContentsOrSurfaceFlags(bsp, face); //mxd const gtexinfo_t *texinfo = Face_Texinfo(bsp, face); - const bool is_q2 = bsp->loadversion == &bspver_q2 || bsp->loadversion == &bspver_qbism; + const bool is_q2 = bsp->loadversion->game == GAME_QUAKE_II; //mxd. Skip NODRAW faces, but not SKY ones (Q2's sky01.wal has both flags set) if(is_q2 && (contents_or_surf_flags & Q2_SURF_NODRAW) && !(contents_or_surf_flags & Q2_SURF_SKY)) diff --git a/qbsp/qbsp.cc b/qbsp/qbsp.cc index 883d7f49..788dba9c 100644 --- a/qbsp/qbsp.cc +++ b/qbsp/qbsp.cc @@ -622,9 +622,9 @@ EnsureTexturesLoaded() static const char* //mxd GetBaseDirName(const bspversion_t *bspver) { - if (bspver == &bspver_q2 || bspver == &bspver_qbism) + if (bspver->game == GAME_QUAKE_II) return "BASEQ2"; - if (bspver == &bspver_h2) + if (bspver->game == GAME_HEXEN_II) return "DATA1"; return "ID1"; } diff --git a/vis/vis.cc b/vis/vis.cc index 84c1813f..7bf5e4fd 100644 --- a/vis/vis.cc +++ b/vis/vis.cc @@ -571,7 +571,7 @@ LeafFlow(int leafnum, mleaf_t *dleaf, const mbsp_t *bsp) /* * flow through all portals, collecting visible bits */ - outbuffer = (bsp->loadversion == &bspver_q2 || bsp->loadversion == &bspver_qbism ? uncompressed_q2 : uncompressed) + leafnum * leafbytes; + outbuffer = (bsp->loadversion->game == GAME_QUAKE_II ? uncompressed_q2 : uncompressed) + leafnum * leafbytes; leaf = &leafs[leafnum]; for (i = 0; i < leaf->numportals; i++) { p = leaf->portals[i]; @@ -653,7 +653,7 @@ ClusterFlow(int clusternum, leafbits_t *buffer, const mbsp_t *bsp) */ numvis = 0; - if (bsp->loadversion == &bspver_q2 || bsp->loadversion == &bspver_qbism) { + if (bsp->loadversion->game == GAME_QUAKE_II) { outbuffer = uncompressed_q2 + clusternum * leafbytes; for (i = 0; i < portalleafs; i++) { if (TestLeafBit(buffer, i)) { @@ -688,7 +688,7 @@ ClusterFlow(int clusternum, leafbits_t *buffer, const mbsp_t *bsp) } /* Allocate for worst case where RLE might grow the data (unlikely) */ - if (bsp->loadversion == &bspver_q2 || bsp->loadversion == &bspver_qbism) { + if (bsp->loadversion->game == GAME_QUAKE_II) { compressed = static_cast(malloc(portalleafs * 2 / 8)); len = CompressRow(outbuffer, (portalleafs + 7) >> 3, compressed); } else { @@ -1061,7 +1061,7 @@ LoadPortals(char *name, mbsp_t *bsp) if (count != 2) Error("%s: unable to parse %s HEADER\n", __func__, PORTALFILE); - if (bsp->loadversion == &bspver_q2 || bsp->loadversion == &bspver_qbism) { + if (bsp->loadversion->game == GAME_QUAKE_II) { portalleafs_real = bsp->numleafs; logprint("%6d leafs\n", portalleafs_real); logprint("%6d clusters\n", portalleafs); @@ -1101,7 +1101,7 @@ LoadPortals(char *name, mbsp_t *bsp) leafs = static_cast(malloc(portalleafs * sizeof(leaf_t))); memset(leafs, 0, portalleafs * sizeof(leaf_t)); - if (bsp->loadversion == &bspver_q2 || bsp->loadversion == &bspver_qbism) { + if (bsp->loadversion->game == GAME_QUAKE_II) { originalvismapsize = portalleafs * ((portalleafs + 7) / 8); } else { originalvismapsize = portalleafs_real * ((portalleafs_real + 7) / 8); @@ -1180,7 +1180,7 @@ LoadPortals(char *name, mbsp_t *bsp) } /* Load the cluster expansion map if needed */ - if (bsp->loadversion == &bspver_q2 || bsp->loadversion == &bspver_qbism) { + if (bsp->loadversion->game == GAME_QUAKE_II) { clustermap = static_cast(malloc(portalleafs_real * sizeof(int))); for (int32_t i = 0; i < bsp->numleafs; i++) { @@ -1333,7 +1333,7 @@ main(int argc, char **argv) StripExtension(statetmpfile); DefaultExtension(statetmpfile, ".vi0"); - if (bsp->loadversion != &bspver_q2 && bsp->loadversion != &bspver_qbism) { + if (bsp->loadversion->game != GAME_QUAKE_II) { uncompressed = static_cast(calloc(portalleafs, leafbytes_real)); } else { uncompressed_q2 = static_cast(calloc(portalleafs, leafbytes)); @@ -1351,7 +1351,7 @@ main(int argc, char **argv) bsp->visdatasize, originalvismapsize); // no ambient sounds for Q2 - if (bsp->loadversion != &bspver_q2 && bsp->loadversion != &bspver_qbism) { + if (bsp->loadversion->game != GAME_QUAKE_II) { CalcAmbientSounds(bsp); }