testqbsp: add testmap for q2 lava intersecting clip (fails currently)

This commit is contained in:
Eric Wasylishen 2022-06-03 20:13:06 -06:00
parent b6c421d30e
commit e3892617ed
2 changed files with 70 additions and 0 deletions

View File

@ -1119,6 +1119,41 @@ TEST_CASE("base1leak", "[testmaps_q2]")
CHECK(3 == plus_y_wall_leaf->numleafbrushes);
}
/**
* e1u1/brlava brush intersecting e1u1/clip
**/
TEST_CASE("lavaclip", "[testmaps_q2]") {
const mbsp_t bsp = LoadTestmap("qbsp_q2_lavaclip.map", {"-q2bsp"});
CHECK(GAME_QUAKE_II == bsp.loadversion->game->id);
// not touching the lava, but inside the clip
const qvec3d playerclip_outside1 { -88, -32, 8};
const qvec3d playerclip_outside2 { 88, -32, 8};
// inside both clip and lava
const qvec3d playerclip_inside_lava { 0, -32, 8};
const qvec3d in_lava_only {0, 32, 8};
// near the player start's feet. There should be a lava face here
const qvec3d lava_top_face_in_playerclip { 0, -32, 16};
// check leaf contents
CHECK((Q2_CONTENTS_PLAYERCLIP | Q2_CONTENTS_MONSTERCLIP | Q2_CONTENTS_DETAIL) == BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[0], playerclip_outside1)->contents);
CHECK((Q2_CONTENTS_PLAYERCLIP | Q2_CONTENTS_MONSTERCLIP | Q2_CONTENTS_DETAIL) == BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[0], playerclip_outside2)->contents);
CHECK((Q2_CONTENTS_PLAYERCLIP | Q2_CONTENTS_MONSTERCLIP | Q2_CONTENTS_DETAIL | Q2_CONTENTS_LAVA) == BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[0], playerclip_inside_lava)->contents);
CHECK(Q2_CONTENTS_LAVA == BSP_FindLeafAtPoint(&bsp, &bsp.dmodels[0], in_lava_only)->contents);
// search for face
auto *topface = BSP_FindFaceAtPoint(&bsp, &bsp.dmodels[0], lava_top_face_in_playerclip, {0, 0, 1});
REQUIRE(nullptr != topface);
auto *texinfo = Face_Texinfo(&bsp, topface);
CHECK(std::string(texinfo->texture.data()) == "e1u1/brlava");
CHECK(texinfo->flags.native == (Q2_SURF_LIGHT | Q2_SURF_WARP));
}
TEST_CASE("winding", "[benchmark]") {
ankerl::nanobench::Bench bench;

View File

@ -0,0 +1,35 @@
// Game: Quake 2
// Format: Quake2
// entity 0
{
"classname" "worldspawn"
"_tb_textures" "textures/e1u1"
// brush 0
{
( -64 -64 -16 ) ( -64 -63 -16 ) ( -64 -64 -15 ) e1u1/brlava 0 0 0 1 1 8 9 700
( -64 -64 -16 ) ( -64 -64 -15 ) ( -63 -64 -16 ) e1u1/brlava 0 0 0 1 1 8 9 700
( -64 -64 -16 ) ( -63 -64 -16 ) ( -64 -63 -16 ) e1u1/brlava 0 0 0 1 1 8 9 700
( 64 64 16 ) ( 64 65 16 ) ( 65 64 16 ) e1u1/brlava 0 0 0 1 1 8 9 700
( 64 64 16 ) ( 65 64 16 ) ( 64 64 17 ) e1u1/brlava 0 0 0 1 1 8 9 700
( 64 64 16 ) ( 64 64 17 ) ( 64 65 16 ) e1u1/brlava 0 0 0 1 1 8 9 700
}
// brush 1
{
( -112 -64 0 ) ( -112 -63 0 ) ( -112 -64 1 ) e1u1/clip 0 0 0 1 1 196608 128 0
( -112 -64 0 ) ( -112 -64 1 ) ( -111 -64 0 ) e1u1/clip 0 0 0 1 1 196608 128 0
( -112 -64 0 ) ( -111 -64 0 ) ( -112 -63 0 ) e1u1/clip 0 0 0 1 1 196608 128 0
( 112 0 16 ) ( 112 1 16 ) ( 113 0 16 ) e1u1/clip 0 0 0 1 1 196608 128 0
( 112 0 16 ) ( 113 0 16 ) ( 112 0 17 ) e1u1/clip 0 0 0 1 1 196608 128 0
( 112 0 16 ) ( 112 0 17 ) ( 112 1 16 ) e1u1/clip 0 0 0 1 1 196608 128 0
}
}
// entity 1
{
"classname" "info_player_start"
"origin" "-16 -32 40"
}
// entity 2
{
"classname" "info_notnull"
"origin" "0 32 8"
}