diff --git a/common/bspfile.cc b/common/bspfile.cc index a2d72f0f..dadb7a62 100644 --- a/common/bspfile.cc +++ b/common/bspfile.cc @@ -1254,12 +1254,16 @@ struct gamedef_q2_t : public gamedef_t } if (brushside_side == SIDE_BACK) { + // explicit override? + if (brushcontents.mirror_inside) { + return *brushcontents.mirror_inside; + } if (portal_visible_contents.native & Q2_CONTENTS_WINDOW) { // windows don't generate inside faces return false; } - // other types get mirrored by default, unless we override it with mirror_inside - return brushcontents.mirror_inside.value_or(true); + // other types get mirrored by default + return true; } return true; } diff --git a/testmaps/qbsp_q2_mirrorinside.map b/testmaps/qbsp_q2_mirrorinside.map index 632abd23..bd11d59c 100644 --- a/testmaps/qbsp_q2_mirrorinside.map +++ b/testmaps/qbsp_q2_mirrorinside.map @@ -88,3 +88,17 @@ ( 112 -160 128 ) ( 112 -160 129 ) ( 112 -159 128 ) e1u1/brwater [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 64 0 100 } } +// entity 3 +{ +"classname" "func_detail_fence" +"_mirrorinside" "1" +// brush 0 +{ +( 32 -428 112 ) ( 32 -427 112 ) ( 32 -428 113 ) e1u1/alphamask [ 0 1.0000000000000002 0 28 ] [ 0 0 -1.0000000000000002 -32 ] 0 1 1 1 33554432 0 +( 32 -380 112 ) ( 32 -380 113 ) ( 33 -380 112 ) e1u1/skip [ 1.0000000000000002 0 0 -16 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 1 128 0 +( 32 -428 112 ) ( 33 -428 112 ) ( 32 -427 112 ) e1u1/skip [ 1.0000000000000002 0 0 -16 ] [ 0 -1.0000000000000002 0 -28 ] 0 1 1 1 128 0 +( 112 -316 192 ) ( 112 -315 192 ) ( 113 -316 192 ) e1u1/skip [ 1.0000000000000002 0 0 -16 ] [ 0 1.0000000000000002 0 12 ] 0 1 1 1 128 0 +( 112 -316 128 ) ( 113 -316 128 ) ( 112 -316 129 ) e1u1/skip [ 1.0000000000000002 0 0 -16 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 1 128 0 +( 40 -316 128 ) ( 40 -316 129 ) ( 40 -315 128 ) e1u1/skip [ 0 -1.0000000000000002 0 -12 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 1 128 0 +} +} diff --git a/tests/test_qbsp_q2.cc b/tests/test_qbsp_q2.cc index 3c42d194..0a7080f5 100644 --- a/tests/test_qbsp_q2.cc +++ b/tests/test_qbsp_q2.cc @@ -549,4 +549,10 @@ TEST_CASE("q2_mirrorinside" * doctest::test_suite("testmaps_q2")) CHECK_VECTORS_UNOREDERED_EQUAL(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], mist_mirrorinside0_pos)), std::vector({"e1u1/brwater"})); } + + { + INFO("_mirrorinside 1 works on func_detail_fence"); + CHECK_VECTORS_UNOREDERED_EQUAL(TexNames(bsp, BSP_FindFacesAtPoint(&bsp, &bsp.dmodels[0], {32, -348, 156})), + std::vector({"e1u1/alphamask", "e1u1/alphamask"})); + } }