diff --git a/qbsp/test_qbsp.cc b/qbsp/test_qbsp.cc index f252fada..c4ef52e6 100644 --- a/qbsp/test_qbsp.cc +++ b/qbsp/test_qbsp.cc @@ -1246,6 +1246,24 @@ TEST_CASE("q2_liquids", "[testmaps_q2][!mayfail]") } +/** + * Empty rooms are sealed to solid in Q2 + **/ +TEST_CASE("qbsp_q2_seal_empty_rooms", "[testmaps_q2]") { + const mbsp_t bsp = LoadTestmapQ2("qbsp_q2_seal_empty_rooms.map"); + + CHECK(GAME_QUAKE_II == bsp.loadversion->game->id); + + const qvec3d in_start_room {-240, 80, 56}; + const qvec3d in_empty_room {-244, 476, 68}; + + // check leaf contents + CHECK(Q2_CONTENTS_EMPTY == BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[0], in_start_room)->contents); + CHECK(Q2_CONTENTS_SOLID == BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[0], in_empty_room)->contents); + + CHECK(8 == bsp.dleafs.size()); +} + TEST_CASE("winding", "[benchmark]") { ankerl::nanobench::Bench bench; diff --git a/testmaps/qbsp_q2_seal_empty_rooms.map b/testmaps/qbsp_q2_seal_empty_rooms.map new file mode 100644 index 00000000..6f4ffd6b --- /dev/null +++ b/testmaps/qbsp_q2_seal_empty_rooms.map @@ -0,0 +1,121 @@ +// Game: Quake 2 +// Format: Quake2 +// entity 0 +{ +"classname" "worldspawn" +"_tb_textures" "textures/e1u1" +"message" "Water brush has SKIP flag on the top face, makign it extend up to the ceiling" +// brush 0 +{ +( -64 256 192 ) ( -64 32 192 ) ( -64 256 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -48 32 16 ) ( -64 32 16 ) ( -48 32 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -48 256 16 ) ( -64 256 16 ) ( -48 32 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -48 32 192 ) ( -64 32 192 ) ( -48 256 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -48 256 192 ) ( -64 256 192 ) ( -48 256 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -48 32 192 ) ( -48 256 192 ) ( -48 32 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +} +// brush 1 +{ +( -304 32 16 ) ( -304 256 16 ) ( -304 32 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -304 32 192 ) ( -288 32 192 ) ( -304 32 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -304 32 16 ) ( -288 32 16 ) ( -304 256 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -304 256 192 ) ( -288 256 192 ) ( -304 32 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -304 256 16 ) ( -288 256 16 ) ( -304 256 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 32 16 ) ( -288 32 192 ) ( -288 256 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +} +// brush 2 +{ +( -288 256 192 ) ( -288 240 192 ) ( -288 256 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 240 192 ) ( -64 240 16 ) ( -288 240 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 256 16 ) ( -288 240 16 ) ( -64 256 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 256 192 ) ( -64 240 192 ) ( -288 256 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 256 192 ) ( -288 256 192 ) ( -64 256 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 256 16 ) ( -64 240 16 ) ( -64 256 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +} +// brush 3 +{ +( -288 32 16 ) ( -288 48 16 ) ( -288 32 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 32 16 ) ( -288 32 16 ) ( -64 32 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 32 16 ) ( -64 48 16 ) ( -288 32 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 32 192 ) ( -288 48 192 ) ( -64 32 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 48 16 ) ( -64 48 16 ) ( -288 48 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 32 192 ) ( -64 48 192 ) ( -64 32 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +} +// brush 4 +{ +( -288 48 192 ) ( -288 48 176 ) ( -288 240 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 48 192 ) ( -64 48 176 ) ( -288 48 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 240 176 ) ( -288 240 176 ) ( -64 48 176 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 240 192 ) ( -64 48 192 ) ( -288 240 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 240 192 ) ( -288 240 176 ) ( -64 240 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 240 192 ) ( -64 240 176 ) ( -64 48 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +} +// brush 5 +{ +( -288 240 16 ) ( -288 240 32 ) ( -288 48 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 48 16 ) ( -288 48 32 ) ( -64 48 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 240 16 ) ( -288 48 16 ) ( -64 240 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 48 32 ) ( -288 240 32 ) ( -64 48 32 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 240 16 ) ( -64 240 32 ) ( -288 240 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 48 16 ) ( -64 48 32 ) ( -64 240 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +} +// brush 6 +{ +( -64 656 192 ) ( -64 432 192 ) ( -64 656 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -48 432 16 ) ( -64 432 16 ) ( -48 432 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -48 656 16 ) ( -64 656 16 ) ( -48 432 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -48 432 192 ) ( -64 432 192 ) ( -48 656 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -48 656 192 ) ( -64 656 192 ) ( -48 656 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -48 432 192 ) ( -48 656 192 ) ( -48 432 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +} +// brush 7 +{ +( -304 432 16 ) ( -304 656 16 ) ( -304 432 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -304 432 192 ) ( -288 432 192 ) ( -304 432 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -304 432 16 ) ( -288 432 16 ) ( -304 656 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -304 656 192 ) ( -288 656 192 ) ( -304 432 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -304 656 16 ) ( -288 656 16 ) ( -304 656 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 432 16 ) ( -288 432 192 ) ( -288 656 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +} +// brush 8 +{ +( -288 656 192 ) ( -288 640 192 ) ( -288 656 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 640 192 ) ( -64 640 16 ) ( -288 640 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 656 16 ) ( -288 640 16 ) ( -64 656 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 656 192 ) ( -64 640 192 ) ( -288 656 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 656 192 ) ( -288 656 192 ) ( -64 656 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 656 16 ) ( -64 640 16 ) ( -64 656 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +} +// brush 9 +{ +( -288 432 16 ) ( -288 448 16 ) ( -288 432 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 432 16 ) ( -288 432 16 ) ( -64 432 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 432 16 ) ( -64 448 16 ) ( -288 432 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 432 192 ) ( -288 448 192 ) ( -64 432 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 448 16 ) ( -64 448 16 ) ( -288 448 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 432 192 ) ( -64 448 192 ) ( -64 432 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +} +// brush 10 +{ +( -288 448 192 ) ( -288 448 176 ) ( -288 640 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 448 192 ) ( -64 448 176 ) ( -288 448 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 640 176 ) ( -288 640 176 ) ( -64 448 176 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 640 192 ) ( -64 448 192 ) ( -288 640 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 640 192 ) ( -288 640 176 ) ( -64 640 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 640 192 ) ( -64 640 176 ) ( -64 448 192 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +} +// brush 11 +{ +( -288 640 16 ) ( -288 640 32 ) ( -288 448 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 448 16 ) ( -288 448 32 ) ( -64 448 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 640 16 ) ( -288 448 16 ) ( -64 640 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -288 448 32 ) ( -288 640 32 ) ( -64 448 32 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 640 16 ) ( -64 640 32 ) ( -288 640 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +( -64 448 16 ) ( -64 448 32 ) ( -64 640 16 ) e1u1/color1_6 0 0 0 1 1 0 0 0 +} +} +// entity 1 +{ +"classname" "info_player_start" +"origin" "-240 80 56" +}