diff --git a/common/bspfile.cc b/common/bspfile.cc index 4c8e02ef..9864290b 100644 --- a/common/bspfile.cc +++ b/common/bspfile.cc @@ -325,6 +325,12 @@ public: return (flags.native & ~TEX_SPECIAL) == 0; } + bool surfflags_may_phong(const surfflags_t &a, const surfflags_t &b) const override + { + return (a.native & TEX_SPECIAL) + == (b.native & TEX_SPECIAL); + } + int32_t surfflags_from_string(const std::string_view &str) const override { if (string_iequals(str, "special")) { @@ -924,6 +930,17 @@ struct gamedef_q2_t : public gamedef_t return true; } + bool surfflags_may_phong(const surfflags_t &a, const surfflags_t &b) const override + { + // these are the bits we'll require to match in order to allow phonging `a` and `b` + auto mask = [](const surfflags_t &flags) { + return flags.native & (Q2_SURF_SKY | Q2_SURF_WARP | Q2_SURF_TRANS33 | + Q2_SURF_TRANS66 | Q2_SURF_FLOWING | Q2_SURF_NODRAW); + }; + + return mask(a) == mask(b); + } + static constexpr const char *surf_bitflag_names[] = { "LIGHT", "SLICK", "SKY", "WARP", "TRANS33", "TRANS66", "FLOWING", "NODRAW", "HINT", "512", "1024", "2048", "4096", "8192", "16384", "32768", "65536", diff --git a/include/common/bspfile.hh b/include/common/bspfile.hh index 5e458ef2..dc0f915c 100644 --- a/include/common/bspfile.hh +++ b/include/common/bspfile.hh @@ -264,6 +264,11 @@ struct gamedef_t virtual bool surf_is_lightmapped(const surfflags_t &flags) const = 0; virtual bool surf_is_subdivided(const surfflags_t &flags) const = 0; virtual bool surfflags_are_valid(const surfflags_t &flags) const = 0; + /** + * We block certain surface flag combinations from ever smoothing together + * e.g. warping and non-warping + */ + virtual bool surfflags_may_phong(const surfflags_t &a, const surfflags_t &b) const = 0; virtual int32_t surfflags_from_string(const std::string_view &str) const = 0; // FIXME: fix so that we don't have to pass a name here virtual bool texinfo_is_hintskip(const surfflags_t &flags, const std::string &name) const = 0; diff --git a/light/phong.cc b/light/phong.cc index e9d793ef..dbb0b7c4 100644 --- a/light/phong.cc +++ b/light/phong.cc @@ -473,6 +473,7 @@ void CalculateVertexNormals(const mbsp_t *bsp) } // Q1 phong angle stuff + auto *f_texinfo = Face_Texinfo(bsp, &f); const auto f_points = GLM_FacePoints(bsp, &f); const qvec3d f_norm = Face_Normal(bsp, &f); const qplane3d f_plane = Face_Plane(bsp, &f); @@ -506,6 +507,14 @@ void CalculateVertexNormals(const mbsp_t *bsp) if (!f2_wants_phong) continue; + auto *f2_texinfo = Face_Texinfo(bsp, f2); + if (f2_texinfo != nullptr && f_texinfo != nullptr) { + if (!bsp->loadversion->game->surfflags_may_phong(f_texinfo->flags, f2_texinfo->flags)) { + // phong may be blocked by the gamedef, e.g. warping and non-warping never phong + continue; + } + } + const auto f2_points = GLM_FacePoints(bsp, f2); const qvec3f f2_centroid = qv::PolyCentroid(f2_points.begin(), f2_points.end()); const qvec3d f2_norm = Face_Normal(bsp, f2); diff --git a/testmaps/q2_phong_doesnt_cross_contents.map b/testmaps/q2_phong_doesnt_cross_contents.map new file mode 100644 index 00000000..756d5ab3 --- /dev/null +++ b/testmaps/q2_phong_doesnt_cross_contents.map @@ -0,0 +1,173 @@ +// Game: Quake 2 +// Format: Quake2 (Valve) +// entity 0 +{ +"mapversion" "220" +"classname" "worldspawn" +"_tb_textures" "textures/e1u1" +"_phong" "1" +// brush 0 +{ +( 368 64 112 ) ( 368 -64 112 ) ( 368 64 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 384 -64 -16 ) ( 368 -64 -16 ) ( 384 -64 112 ) e1u1/c_met11_2 [ 1 0 0 -64 ] [ 0 0 -1 0 ] 0 1 1 +( 384 64 -16 ) ( 368 64 -16 ) ( 384 -64 -16 ) e1u1/c_met11_2 [ 1 0 0 -64 ] [ 0 -1 0 0 ] 0 1 1 +( 384 -64 272 ) ( 368 -64 272 ) ( 384 64 272 ) e1u1/c_met11_2 [ 1 0 0 -64 ] [ 0 -1 0 0 ] 0 1 1 +( 384 224 112 ) ( 368 224 112 ) ( 384 224 -16 ) e1u1/c_met11_2 [ 1 0 0 -64 ] [ 0 0 -1 0 ] 0 1 1 +( 384 -64 112 ) ( 384 64 112 ) ( 384 -64 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 1 +{ +( -496 112 -16 ) ( -496 240 -16 ) ( -496 112 112 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -496 -48 112 ) ( -480 -48 112 ) ( -496 -48 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -496 112 -16 ) ( -480 112 -16 ) ( -496 240 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -496 240 272 ) ( -480 240 272 ) ( -496 112 272 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -496 240 -16 ) ( -480 240 -16 ) ( -496 240 112 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -480 112 -16 ) ( -480 112 112 ) ( -480 240 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 2 +{ +( -480 240 112 ) ( -480 224 112 ) ( -480 240 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -384 224 112 ) ( -384 224 -16 ) ( -480 224 112 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -480 240 -16 ) ( -480 224 -16 ) ( -384 240 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -384 240 272 ) ( -384 224 272 ) ( -480 240 272 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -384 240 112 ) ( -480 240 112 ) ( -384 240 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 384 240 -16 ) ( 384 224 -16 ) ( 384 240 112 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 3 +{ +( -480 -64 -16 ) ( -480 -48 -16 ) ( -480 -64 112 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 48 -64 -16 ) ( -48 -64 -16 ) ( 48 -64 112 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 48 -64 -16 ) ( 48 -48 -16 ) ( -48 -64 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -48 -64 272 ) ( -48 -48 272 ) ( 48 -64 272 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -48 -48 -16 ) ( 48 -48 -16 ) ( -48 -48 112 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 384 -64 112 ) ( 384 -48 112 ) ( 384 -64 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 4 +{ +( -480 -48 288 ) ( -480 -48 272 ) ( -480 48 288 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 48 -48 288 ) ( 48 -48 272 ) ( -48 -48 288 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 48 48 272 ) ( -48 48 272 ) ( 48 -48 272 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 48 48 288 ) ( 48 -48 288 ) ( -48 48 288 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -48 224 288 ) ( -48 224 272 ) ( 48 224 288 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 384 48 288 ) ( 384 48 272 ) ( 384 -48 288 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 5 +{ +( -480 48 -16 ) ( -480 48 0 ) ( -480 -48 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -48 -48 -16 ) ( -48 -48 0 ) ( 48 -48 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -48 48 -16 ) ( -48 -48 -16 ) ( 48 48 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -48 -48 0 ) ( -48 48 0 ) ( 48 -48 0 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 48 224 -16 ) ( 48 224 0 ) ( -48 224 -16 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 384 -48 -16 ) ( 384 -48 0 ) ( 384 48 -16 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 6 +{ +( -368 0 -144 ) ( -368 1 -144 ) ( -368 0 -140 ) e1u1/brwater [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 32 24 0 +( -336 -48 -144 ) ( -336 -48 -140 ) ( -335 -48 -144 ) e1u1/brwater [ 1 0 0 16 ] [ 0 0 -1 0 ] 0 1 1 32 24 0 +( -336 0 0 ) ( -335 0 0 ) ( -336 1 0 ) e1u1/brwater [ -1 0 0 -16 ] [ 0 -1 0 0 ] 0 1 1 32 24 0 +( -144 192 48 ) ( -144 193 48 ) ( -143 192 48 ) e1u1/brwater [ 1 0 0 16 ] [ 0 -1 0 0 ] 0 1 1 32 24 0 +( -144 220 -80 ) ( -143 220 -80 ) ( -144 220 -76 ) e1u1/brwater [ -1 0 0 -16 ] [ 0 0 -1 0 ] 0 1 1 32 24 0 +( -256 192 -80 ) ( -256 192 -76 ) ( -256 193 -80 ) e1u1/brwater [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 32 24 0 +} +// brush 7 +{ +( -368 220 128 ) ( -368 144 36.36363636364695 ) ( -368 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -368 144 36.36363636364695 ) ( -144 144 36.36363636364695 ) ( -144 144 0 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 0 -1 0 ] 0 1 1 +( -368 220 128 ) ( -144 220 128 ) ( -144 144 36.36363636364695 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 0 -1 0 ] 0 1 1 +( -144 144 0 ) ( -144 220 0 ) ( -368 220 0 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 -1 0 0 ] 0 1 1 +( -144 220 0 ) ( -144 220 128 ) ( -368 220 128 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 0 -1 0 ] 0 1 1 +( -256 144 36.36363636364695 ) ( -256 220 128 ) ( -256 220 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 8 +{ +( -368 144 0 ) ( -368 144 36.36363636364695 ) ( -368 77.33333333330674 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -144 77.33333333330684 0 ) ( -144 144 0 ) ( -368 144 0 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 -1 0 0 ] 0 1 1 +( -144 144 0 ) ( -144 144 36.36363636364689 ) ( -368 144 36.36363636364695 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 0 -1 0 ] 0 1 1 +( -144 77.33333333330684 0 ) ( -368 77.33333333330674 0 ) ( -368 144 36.36363636364695 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 -1 0 0 ] 0 1 1 +( -256 77.33333333330684 0 ) ( -256 144 36.36363636364689 ) ( -256 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 9 +{ +( -240 220 128 ) ( -240 144 36.36363636364695 ) ( -240 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -240 144 36.36363636364695 ) ( -16 144 36.36363636364695 ) ( -16 144 0 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 0 -1 0 ] 0 1 1 +( -240 220 128 ) ( -16 220 128 ) ( -16 144 36.36363636364695 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 0 -1 0 ] 0 1 1 +( -16 144 0 ) ( -16 220 0 ) ( -240 220 0 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 -1 0 0 ] 0 1 1 +( -16 220 0 ) ( -16 220 128 ) ( -240 220 128 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 0 -1 0 ] 0 1 1 +( -128 144 36.36363636364695 ) ( -128 220 128 ) ( -128 220 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 10 +{ +( -240 144 0 ) ( -240 144 36.36363636364695 ) ( -240 77.33333333330674 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -16 77.33333333330684 0 ) ( -16 144 0 ) ( -240 144 0 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 -1 0 0 ] 0 1 1 +( -16 144 0 ) ( -16 144 36.36363636364689 ) ( -240 144 36.36363636364695 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 0 -1 0 ] 0 1 1 +( -16 77.33333333330684 0 ) ( -240 77.33333333330674 0 ) ( -240 144 36.36363636364695 ) e1u1/c_met11_2 [ 1 0 0 16 ] [ 0 -1 0 0 ] 0 1 1 +( -128 77.33333333330684 0 ) ( -128 144 36.36363636364689 ) ( -128 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 11 +{ +( -112 220 128 ) ( -112 144 36.36363636364695 ) ( -112 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -112 144 36.36363636364695 ) ( 112 144 36.36363636364695 ) ( 112 144 0 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 0 -1 0 ] 0 1 1 +( -112 220 128 ) ( 112 220 128 ) ( 112 144 36.36363636364695 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 0 -1 0 ] 0 1 1 +( 112 144 0 ) ( 112 220 0 ) ( -112 220 0 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 -1 0 0 ] 0 1 1 +( 112 220 0 ) ( 112 220 128 ) ( -112 220 128 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 0 -1 0 ] 0 1 1 +( 0 144 36.36363636364695 ) ( 0 220 128 ) ( 0 220 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 12 +{ +( -112 144 0 ) ( -112 144 36.36363636364695 ) ( -112 77.33333333330674 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 112 77.33333333330684 0 ) ( 112 144 0 ) ( -112 144 0 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 -1 0 0 ] 0 1 1 +( 112 144 0 ) ( 112 144 36.36363636364689 ) ( -112 144 36.36363636364695 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 0 -1 0 ] 0 1 1 +( 112 77.33333333330684 0 ) ( -112 77.33333333330674 0 ) ( -112 144 36.36363636364695 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 -1 0 0 ] 0 1 1 +( 0 77.33333333330684 0 ) ( 0 144 36.36363636364689 ) ( 0 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 13 +{ +( -112 0 -144 ) ( -112 1 -144 ) ( -112 0 -140 ) e1u1/brwater [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 32 0 0 +( -80 -48 -144 ) ( -80 -48 -140 ) ( -79 -48 -144 ) e1u1/brwater [ 1 0 0 -48 ] [ 0 0 -1 0 ] 0 1 1 32 0 0 +( -80 0 0 ) ( -79 0 0 ) ( -80 1 0 ) e1u1/brwater [ -1 0 0 48 ] [ 0 -1 0 0 ] 0 1 1 32 0 0 +( 112 192 48 ) ( 112 193 48 ) ( 113 192 48 ) e1u1/brwater [ 1 0 0 -48 ] [ 0 -1 0 0 ] 0 1 1 32 0 0 +( 112 220 -80 ) ( 113 220 -80 ) ( 112 220 -76 ) e1u1/brwater [ -1 0 0 48 ] [ 0 0 -1 0 ] 0 1 1 32 0 0 +( 0 192 -80 ) ( 0 192 -76 ) ( 0 193 -80 ) e1u1/brwater [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 32 0 0 +} +// brush 14 +{ +( 16 144 0 ) ( 16 144 36.36363636364695 ) ( 16 77.33333333330674 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 240 77.33333333330684 0 ) ( 240 144 0 ) ( 16 144 0 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 -1 0 0 ] 0 1 1 +( 240 144 0 ) ( 240 144 36.36363636364689 ) ( 16 144 36.36363636364695 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 0 -1 0 ] 0 1 1 +( 240 77.33333333330684 0 ) ( 16 77.33333333330674 0 ) ( 16 144 36.36363636364695 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 -1 0 0 ] 0 1 1 +( 128 77.33333333330684 0 ) ( 128 144 36.36363636364689 ) ( 128 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 15 +{ +( 16 220 128 ) ( 16 144 36.36363636364695 ) ( 16 144 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 16 144 36.36363636364695 ) ( 240 144 36.36363636364695 ) ( 240 144 0 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 0 -1 0 ] 0 1 1 +( 16 220 128 ) ( 240 220 128 ) ( 240 144 36.36363636364695 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 0 -1 0 ] 0 1 1 +( 240 144 0 ) ( 240 220 0 ) ( 16 220 0 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 -1 0 0 ] 0 1 1 +( 240 220 0 ) ( 240 220 128 ) ( 16 220 128 ) e1u1/c_met11_2 [ 1 0 0 -112 ] [ 0 0 -1 0 ] 0 1 1 +( 128 144 36.36363636364695 ) ( 128 220 128 ) ( 128 220 0 ) e1u1/c_met11_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 16 +{ +( 16 0 -144 ) ( 16 1 -144 ) ( 16 0 -140 ) e1u1/brwater [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 32 0 100 +( 48 -48 -144 ) ( 48 -48 -140 ) ( 49 -48 -144 ) e1u1/brwater [ 1 0 0 -48 ] [ 0 0 -1 0 ] 0 1 1 32 0 100 +( 48 0 0 ) ( 49 0 0 ) ( 48 1 0 ) e1u1/brwater [ -1 0 0 48 ] [ 0 -1 0 0 ] 0 1 1 32 0 100 +( 240 192 48 ) ( 240 193 48 ) ( 241 192 48 ) e1u1/brwater [ 1 0 0 -48 ] [ 0 -1 0 0 ] 0 1 1 32 0 100 +( 240 220 -80 ) ( 241 220 -80 ) ( 240 220 -76 ) e1u1/brwater [ -1 0 0 48 ] [ 0 0 -1 0 ] 0 1 1 32 0 100 +( 128 192 -80 ) ( 128 192 -76 ) ( 128 193 -80 ) e1u1/brwater [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 32 0 100 +} +// brush 17 +{ +( -480 -64 64 ) ( -480 -63 64 ) ( -480 -64 65 ) e1u1/c_met11_2 [ 0 1.0000000000000002 0 -80 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 +( -1024 -48 64 ) ( -1024 -48 65 ) ( -1023 -48 64 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1024 -64 92 ) ( -1023 -64 92 ) ( -1024 -63 92 ) e1u1/c_met11_2 [ 1.0000000000000002 0 0 0 ] [ 0 -1.0000000000000002 0 -112 ] 0 1 1 +( 224 -32 96 ) ( 224 -31 96 ) ( 225 -32 96 ) e1u1/c_met11_2 [ 1.0000000000000002 0 0 0 ] [ 0 1.0000000000000002 0 -48 ] 0 1 1 +( 224 -8 96 ) ( 225 -8 96 ) ( 224 -8 97 ) e1u1/c_met11_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 224 -32 96 ) ( 224 -32 97 ) ( 224 -31 96 ) e1u1/c_met11_2 [ 0 -1.0000000000000002 0 48 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 +} +} +// entity 1 +{ +"classname" "info_player_start" +"origin" "188.686 -28.4041 120" +"angle" "165" +} diff --git a/tests/test_ltface.cc b/tests/test_ltface.cc index e32b3b83..ffa482a0 100644 --- a/tests/test_ltface.cc +++ b/tests/test_ltface.cc @@ -169,3 +169,7 @@ TEST_CASE("emissive lights") { } } } + +TEST_CASE("q2_phong_doesnt_cross_contents") { + auto [bsp, bspx] = LoadTestmap("q2_phong_doesnt_cross_contents.map", {"-wrnormals"}); +}