diff --git a/testmaps/q1_hull1_fail.map b/testmaps/q1_hull1_fail.map new file mode 100644 index 00000000..cfbd8873 --- /dev/null +++ b/testmaps/q1_hull1_fail.map @@ -0,0 +1,81 @@ +// Game: Quake +// Format: Valve +// entity 0 +{ +"classname" "worldspawn" +"wad" "" +// brush 0 +{ +( -1824 -144 288 ) ( -1824 -144 144 ) ( -1824 48 288 ) 128_blue_3 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1792 -352 288 ) ( -1792 -352 144 ) ( -1824 -352 288 ) 128_blue_3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1824 48 144 ) ( -1824 -144 144 ) ( -1792 48 144 ) 128_grey_3 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -1824 -144 376 ) ( -1824 48 376 ) ( -1792 -144 376 ) 128_blue_3 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -1824 208 288 ) ( -1824 208 144 ) ( -1792 208 288 ) 128_blue_3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1792 48 288 ) ( -1792 48 144 ) ( -1792 -144 288 ) 128_blue_3 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 1 +{ +( -1828.2702719561466 -128 288 ) ( -1828.2702685843988 32 160 ) ( -1828.2702685843988 32 288 ) grey_1 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1823.7632822077753 -128 160 ) ( -1828.2702719561466 -128 288 ) ( -1823.7632822077794 -128 288 ) grey_1 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1823.7632788360274 32 160 ) ( -1828.2702719561466 -128 160 ) ( -1823.7632822077753 -128 160 ) grey_1 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -1823.763278836028 32 288 ) ( -1828.2702719561466 -128 288 ) ( -1828.2702685843988 32 288 ) grey_1 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -1823.7632788360274 32 160 ) ( -1828.2702685843988 32 288 ) ( -1828.2702685843988 32 160 ) grey_1 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1823.7632788360274 32 160 ) ( -1823.7632822077794 -128 288 ) ( -1823.763278836028 32 288 ) grey_1 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 2 +{ +( -2386 -144 288 ) ( -2386 -144 144 ) ( -2386 48 288 ) 128_blue_3 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1792 -352 288 ) ( -1792 -352 144 ) ( -1824 -352 288 ) 128_blue_3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1824 48 374 ) ( -1824 -144 374 ) ( -1792 48 374 ) 128_grey_3 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -1824 -144 376 ) ( -1824 48 376 ) ( -1792 -144 376 ) 128_blue_3 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -1824 208 288 ) ( -1824 208 144 ) ( -1792 208 288 ) 128_blue_3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1824 -144 288 ) ( -1824 48 288 ) ( -1824 -144 144 ) 128_blue_3 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 3 +{ +( -2386 -144 58 ) ( -2386 -144 -86 ) ( -2386 48 58 ) 128_blue_3 [ 0 1 0 0 ] [ 0 0 -1 26 ] 0 1 1 +( -1792 -352 58 ) ( -1792 -352 -86 ) ( -1824 -352 58 ) 128_blue_3 [ 1 0 0 0 ] [ 0 0 -1 26 ] 0 1 1 +( -1824 48 144 ) ( -1824 -144 144 ) ( -1792 48 144 ) 128_grey_3 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -1824 -144 146 ) ( -1824 48 146 ) ( -1792 -144 146 ) 128_blue_3 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -1824 208 58 ) ( -1824 208 -86 ) ( -1792 208 58 ) 128_blue_3 [ 1 0 0 0 ] [ 0 0 -1 26 ] 0 1 1 +( -1824 -144 58 ) ( -1824 48 58 ) ( -1824 -144 -86 ) 128_blue_3 [ 0 1 0 0 ] [ 0 0 -1 26 ] 0 1 1 +} +// brush 4 +{ +( -2386 -144 288 ) ( -2386 -144 144 ) ( -2386 48 288 ) 128_blue_3 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1792 -352 288 ) ( -1792 -352 144 ) ( -1824 -352 288 ) 128_blue_3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1824 48 144 ) ( -1824 -144 144 ) ( -1792 48 144 ) 128_grey_3 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -1824 -144 376 ) ( -1824 48 376 ) ( -1792 -144 376 ) 128_blue_3 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -1824 208 288 ) ( -1824 208 144 ) ( -1792 208 288 ) 128_blue_3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -2376 -144 288 ) ( -2376 48 288 ) ( -2376 -144 144 ) 128_blue_3 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 5 +{ +( -2386 -144 288 ) ( -2386 -144 144 ) ( -2386 48 288 ) 128_blue_3 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1792 204 288 ) ( -1792 204 144 ) ( -1824 204 288 ) 128_blue_3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1824 48 146 ) ( -1824 -144 146 ) ( -1792 48 146 ) 128_grey_3 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -1824 48 374 ) ( -1792 48 374 ) ( -1824 -144 374 ) 128_grey_3 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( -1824 208 288 ) ( -1824 208 144 ) ( -1792 208 288 ) 128_blue_3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1824 -144 288 ) ( -1824 48 288 ) ( -1824 -144 144 ) 128_blue_3 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 6 +{ +( -2386 -704 288 ) ( -2386 -704 144 ) ( -2386 -512 288 ) 128_blue_3 [ 0 1 0 48 ] [ 0 0 -1 0 ] 0 1 1 +( -1792 -356 288 ) ( -1792 -356 144 ) ( -1824 -356 288 ) 128_blue_3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1824 -512 146 ) ( -1824 -704 146 ) ( -1792 -512 146 ) 128_grey_3 [ 1 0 0 0 ] [ 0 -1 0 -48 ] 0 1 1 +( -1824 -512 374 ) ( -1792 -512 374 ) ( -1824 -704 374 ) 128_grey_3 [ 1 0 0 0 ] [ 0 -1 0 -48 ] 0 1 1 +( -1824 -352 288 ) ( -1824 -352 144 ) ( -1792 -352 288 ) 128_blue_3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( -1824 -704 288 ) ( -1824 -512 288 ) ( -1824 -704 144 ) 128_blue_3 [ 0 1 0 48 ] [ 0 0 -1 0 ] 0 1 1 +} +} +// entity 1 +{ +"classname" "info_player_start" +"angles" "0 0 0" +"origin" "-2256 -64 264" +} +// entity 2 +{ +"classname" "air_bubbles" +"origin" "-2164 126 260" +} diff --git a/tests/test_qbsp.cc b/tests/test_qbsp.cc index 1cba063c..5e943cba 100644 --- a/tests/test_qbsp.cc +++ b/tests/test_qbsp.cc @@ -1782,3 +1782,23 @@ TEST_CASE("h2_skip_only") CHECK(bsp.loadversion == &bspver_h2); CHECK(0 == bsp.dfaces.size()); } + +TEST_CASE("q1_hull1_fail" * doctest::may_fail()) +{ + INFO("weird example of a phantom clip brush in hull1"); + const auto [bsp, bspx, prt] = LoadTestmap("q1_hull1_fail.map"); + + { + INFO("contents at info_player_start"); + CHECK(CONTENTS_EMPTY == BSP_FindContentsAtPoint(&bsp, 1, &bsp.dmodels[0], qvec3d{-2256, -64, 264})); + } + { + INFO("contents at air_bubbles"); + CHECK(CONTENTS_EMPTY == BSP_FindContentsAtPoint(&bsp, 1, &bsp.dmodels[0], qvec3d{-2164, 126, 260})); + } + { + INFO("contents in void"); + CHECK(CONTENTS_SOLID == BSP_FindContentsAtPoint(&bsp, 0, &bsp.dmodels[0], qvec3d{0, 0, 0})); + CHECK(CONTENTS_SOLID == BSP_FindContentsAtPoint(&bsp, 1, &bsp.dmodels[0], qvec3d{0, 0, 0})); + } +}