From 93e0226726ab6f733465d08f1bce2dbebebc39a4 Mon Sep 17 00:00:00 2001 From: Eric Wasylishen Date: Mon, 25 Apr 2022 22:00:58 -0600 Subject: [PATCH] qbsp: add test that detail doesn't clip away worldspawn nodes (just visual faces) --- qbsp/test_qbsp.cc | 10 ++ .../qbsp_detail_doesnt_remove_world_nodes.map | 106 ++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 testmaps/qbsp_detail_doesnt_remove_world_nodes.map diff --git a/qbsp/test_qbsp.cc b/qbsp/test_qbsp.cc index 0fcb18f9..b573413e 100644 --- a/qbsp/test_qbsp.cc +++ b/qbsp/test_qbsp.cc @@ -345,3 +345,13 @@ TEST(qsbsp, detail_doesnt_seal) ASSERT_TRUE(map.leakfile); } + +TEST(qsbsp, detail_doesnt_remove_world_nodes) +{ + const mbsp_t bsp = LoadTestmap("qbsp_detail_doesnt_remove_world_nodes.map"); + + ASSERT_FALSE(map.leakfile); + + // TODO: make sure that the node here wasn't clipped away by the detail + const auto node_locations = std::vector{{72, -88, 144}}; +} diff --git a/testmaps/qbsp_detail_doesnt_remove_world_nodes.map b/testmaps/qbsp_detail_doesnt_remove_world_nodes.map new file mode 100644 index 00000000..db11258e --- /dev/null +++ b/testmaps/qbsp_detail_doesnt_remove_world_nodes.map @@ -0,0 +1,106 @@ +// Game: Quake +// Format: Valve +// entity 0 +{ +"mapversion" "220" +"classname" "worldspawn" +"wad" "deprecated/free_wad.wad;deprecated/fence.wad;deprecated/origin.wad;deprecated/hintskip.wad" +"_wateralpha" "0.5" +"_tb_def" "builtin:Quake.fgd" +// brush 0 +{ +( 96 32 208 ) ( 96 -192 208 ) ( 96 32 48 ) orangestuff8 [ 0 -1 0 -16 ] [ 0 0 -1 48 ] 0 1 1 +( 112 -192 48 ) ( 96 -192 48 ) ( 112 -192 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 0 -1 48 ] 180 1 1 +( 112 32 48 ) ( 96 32 48 ) ( 112 -192 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 1 1 +( 112 -192 208 ) ( 96 -192 208 ) ( 112 32 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 -1 0 -16 ] 180 1 1 +( 112 32 208 ) ( 96 32 208 ) ( 112 32 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 0 -1 48 ] 180 1 1 +( 112 -192 208 ) ( 112 32 208 ) ( 112 -192 48 ) orangestuff8 [ 0 -1 0 -16 ] [ 0 0 -1 48 ] 0 1 1 +} +// brush 1 +{ +( -144 -192 48 ) ( -144 32 48 ) ( -144 -192 208 ) orangestuff8 [ 0 1 0 16 ] [ 0 0 -1 48 ] 0 1 1 +( -144 -192 208 ) ( -128 -192 208 ) ( -144 -192 48 ) orangestuff8 [ -1 0 0 -16 ] [ 0 0 -1 48 ] 180 1 1 +( -144 -192 48 ) ( -128 -192 48 ) ( -144 32 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 1 1 +( -144 32 208 ) ( -128 32 208 ) ( -144 -192 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 -1 0 -16 ] 180 1 1 +( -144 32 48 ) ( -128 32 48 ) ( -144 32 208 ) orangestuff8 [ 1 0 0 16 ] [ 0 0 -1 48 ] 180 1 1 +( -128 -192 48 ) ( -128 -192 208 ) ( -128 32 48 ) orangestuff8 [ 0 1 0 16 ] [ 0 0 -1 48 ] 0 1 1 +} +// brush 2 +{ +( -128 32 208 ) ( -128 16 208 ) ( -128 32 48 ) orangestuff8 [ 0 1 0 16 ] [ 0 0 -1 48 ] 0 1 1 +( 96 16 208 ) ( 96 16 48 ) ( -128 16 208 ) orangestuff8 [ 1 0 0 16 ] [ 0 0 -1 48 ] 180 1 1 +( -128 32 48 ) ( -128 16 48 ) ( 96 32 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 1 1 +( 96 32 208 ) ( 96 16 208 ) ( -128 32 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 -1 0 -16 ] 180 1 1 +( 96 32 208 ) ( -128 32 208 ) ( 96 32 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 0 -1 48 ] 180 1 1 +( 96 32 48 ) ( 96 16 48 ) ( 96 32 208 ) orangestuff8 [ 0 -1 0 -16 ] [ 0 0 -1 48 ] 0 1 1 +} +// brush 3 +{ +( -128 -192 48 ) ( -128 -176 48 ) ( -128 -192 208 ) orangestuff8 [ 0 1 0 16 ] [ 0 0 -1 48 ] 0 1 1 +( 96 -192 48 ) ( -128 -192 48 ) ( 96 -192 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 0 -1 48 ] 180 1 1 +( 96 -192 48 ) ( 96 -176 48 ) ( -128 -192 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 1 1 +( -128 -192 208 ) ( -128 -176 208 ) ( 96 -192 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 -1 0 -16 ] 180 1 1 +( -128 -176 48 ) ( 96 -176 48 ) ( -128 -176 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 0 -1 48 ] 180 1 1 +( 96 -192 208 ) ( 96 -176 208 ) ( 96 -192 48 ) orangestuff8 [ 0 -1 0 -16 ] [ 0 0 -1 48 ] 0 1 1 +} +// brush 4 +{ +( -128 -176 208 ) ( -128 -176 192 ) ( -128 16 208 ) orangestuff8 [ 0 1 0 16 ] [ 0 0 -1 48 ] 0 1 1 +( 96 -176 208 ) ( 96 -176 192 ) ( -128 -176 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 0 -1 48 ] 180 1 1 +( 96 16 192 ) ( -128 16 192 ) ( 96 -176 192 ) orangestuff8 [ -1 0 0 -16 ] [ 0 -1 0 -16 ] 180 1 1 +( 96 16 208 ) ( 96 -176 208 ) ( -128 16 208 ) orangestuff8 [ -1 0 0 -16 ] [ 0 -1 0 -16 ] 180 1 1 +( -128 16 208 ) ( -128 16 192 ) ( 96 16 208 ) orangestuff8 [ 1 0 0 16 ] [ 0 0 -1 48 ] 180 1 1 +( 96 16 208 ) ( 96 16 192 ) ( 96 -176 208 ) orangestuff8 [ 0 -1 0 -16 ] [ 0 0 -1 48 ] 0 1 1 +} +// brush 5 +{ +( -128 16 48 ) ( -128 16 64 ) ( -128 -176 48 ) orangestuff8 [ 0 1 0 16 ] [ 0 0 -1 48 ] 0 1 1 +( -128 -176 48 ) ( -128 -176 64 ) ( 96 -176 48 ) orangestuff8 [ -1 0 0 -16 ] [ 0 0 -1 48 ] 180 1 1 +( -128 16 48 ) ( -128 -176 48 ) ( 96 16 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 1 1 +( -128 -176 64 ) ( -128 16 64 ) ( 96 -176 64 ) orangestuff8 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 1 1 +( 96 16 48 ) ( 96 16 64 ) ( -128 16 48 ) orangestuff8 [ 1 0 0 16 ] [ 0 0 -1 48 ] 180 1 1 +( 96 -176 48 ) ( 96 -176 64 ) ( 96 16 48 ) orangestuff8 [ 0 -1 0 -16 ] [ 0 0 -1 48 ] 0 1 1 +} +// brush 6 +{ +( 48 -144 96 ) ( 48 -143 96 ) ( 48 -144 97 ) orangestuff8 [ 0 0 -1.0000000000000002 0 ] [ 0 -1.0000000000000002 0 -16 ] 180 1 1 +( 48 -144 96 ) ( 48 -144 97 ) ( 49 -144 96 ) orangestuff8 [ 1.0000000000000002 0 0 16 ] [ 0 0 1.0000000000000002 0 ] 180 1 1 +( 48 -144 96 ) ( 49 -144 96 ) ( 48 -143 96 ) orangestuff8 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 1 1 +( 96 -48 144 ) ( 96 -47 144 ) ( 97 -48 144 ) orangestuff8 [ 1 0 0 16 ] [ 0 -1 0 -16 ] 180 1 1 +( 96 -16 112 ) ( 97 -16 112 ) ( 96 -16 113 ) orangestuff8 [ 1.0000000000000002 0 0 16 ] [ 0 0 -1.0000000000000002 32 ] 180 1 1 +( 96 -48 112 ) ( 96 -48 113 ) ( 96 -47 112 ) orangestuff8 [ 0 0 1.0000000000000002 48 ] [ 0 -1.0000000000000002 0 -16 ] 180 1 1 +} +} +// entity 1 +{ +"classname" "info_player_start" +"origin" "-56 -96 120" +} +// entity 2 +{ +"classname" "func_detail" +// brush 0 +{ +( 32 -176 64 ) ( 32 -175 64 ) ( 32 -176 65 ) bolt16 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 80 -176 64 ) ( 80 -176 65 ) ( 81 -176 64 ) bolt16 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 80 -176 64 ) ( 81 -176 64 ) ( 80 -175 64 ) bolt16 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 96 16 192 ) ( 96 17 192 ) ( 97 16 192 ) bolt16 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 96 16 72 ) ( 97 16 72 ) ( 96 16 73 ) bolt16 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 96 16 72 ) ( 96 16 73 ) ( 96 17 72 ) bolt16 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +} +// entity 3 +{ +"classname" "info_null" +"origin" "72 -88 144" +} +// entity 4 +{ +"classname" "info_null" +"origin" "48 -88 128" +} +// entity 5 +{ +"classname" "info_null" +"origin" "72 -144 128" +}