From ad8e6a7a754ca116b4326546773a5b74b40ff59f Mon Sep 17 00:00:00 2001 From: Eric Wasylishen Date: Tue, 7 Jun 2022 17:05:03 -0600 Subject: [PATCH] testqbsp: bmodel collision issue where world and bmodel are interfering --- qbsp/test_qbsp.cc | 13 ++++++++++ testmaps/qbsp_q2_bmodel_collision.map | 34 +++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 testmaps/qbsp_q2_bmodel_collision.map diff --git a/qbsp/test_qbsp.cc b/qbsp/test_qbsp.cc index 45ef6ca3..62134650 100644 --- a/qbsp/test_qbsp.cc +++ b/qbsp/test_qbsp.cc @@ -1154,6 +1154,19 @@ TEST_CASE("lavaclip", "[testmaps_q2]") { CHECK(texinfo->flags.native == (Q2_SURF_LIGHT | Q2_SURF_WARP)); } +/** + * Weird mystery issue with a func_wall with broken collision + */ +TEST_CASE("qbsp_q2_bmodel_collision", "[testmaps_q2]") { + const mbsp_t bsp = LoadTestmap("qbsp_q2_bmodel_collision.map", {"-q2bsp"}); + + CHECK(GAME_QUAKE_II == bsp.loadversion->game->id); + + const qvec3d in_bmodel {-544, -312, -258}; + REQUIRE(2 == bsp.dmodels.size()); + CHECK(Q2_CONTENTS_SOLID == BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[1], in_bmodel)->contents); +} + TEST_CASE("winding", "[benchmark]") { ankerl::nanobench::Bench bench; diff --git a/testmaps/qbsp_q2_bmodel_collision.map b/testmaps/qbsp_q2_bmodel_collision.map new file mode 100644 index 00000000..c7166991 --- /dev/null +++ b/testmaps/qbsp_q2_bmodel_collision.map @@ -0,0 +1,34 @@ +// Game: Quake 2 +// Format: Quake2 +// entity 0 +{ +"classname" "worldspawn" +"_tb_textures" "textures/e1u1" +// brush 0 +{ +( -578 -310 -250 ) ( -578 -284 -250 ) ( -570 -284 -214 ) e1u1/+0comp10_1 0 0 0 1 1 +( -570 -299 -215 ) ( -518 -299 -215 ) ( -508 -302 -250 ) e1u1/+0comp10_1 0 0 0 1 1 +( -518 -299 -215 ) ( -570 -299 -215 ) ( -570 -292 -214 ) e1u1/+0comp10_1 0 0 0 1 1 +( -508 -310 -250 ) ( -508 -284 -250 ) ( -578 -284 -250 ) e1u1/+0comp10_1 0 0 0 1 1 +( -516 -292 -214 ) ( -568 -292 -214 ) ( -568 -292 -262 ) e1u1/+0comp10_1 0 0 0 1 1 +( -508 -284 -250 ) ( -508 -310 -250 ) ( -518 -310 -214 ) e1u1/+0comp10_1 0 0 0 1 1 +} +} +// entity 1 +{ +"classname" "info_player_start" +"origin" "-544 -320 -208" +} +// entity 2 +{ +"classname" "func_wall" +// brush 0 +{ +( -568 -270 -212 ) ( -568 -326 -212 ) ( -568 -326 -260 ) e1u1/+0comp10_1 0 0 0 1 1 +( -560 -326 -212 ) ( -504 -326 -212 ) ( -504 -326 -260 ) e1u1/+0comp10_1 0 0 0 1 1 +( -568 -302 -252 ) ( -504 -302 -252 ) ( -504 -326 -256 ) e1u1/+0comp10_1 0 0 0 1 1 +( -560 -326 -304 ) ( -504 -326 -304 ) ( -504 -270 -304 ) e1u1/+0comp10_1 0 0 0 1 1 +( -504 -302 -252 ) ( -568 -302 -252 ) ( -568 -302 -260 ) e1u1/+0comp10_1 0 0 0 1 1 +( -520 -326 -212 ) ( -520 -270 -212 ) ( -520 -270 -260 ) e1u1/+0comp10_1 0 0 0 1 1 +} +}