From adeb3e81aa6c2092be9f67891371dd6d96eaef59 Mon Sep 17 00:00:00 2001 From: Eric Wasylishen Date: Thu, 25 Jul 2024 22:45:18 -0600 Subject: [PATCH] light: fix _surflight_group --- light/entities.cc | 6 +- testmaps/q1_light_surflight_group.map | 114 ++++++++++++++++++++++++++ tests/test_ltface.cc | 17 +++- 3 files changed, 132 insertions(+), 5 deletions(-) create mode 100644 testmaps/q1_light_surflight_group.map diff --git a/light/entities.cc b/light/entities.cc index 516cea00..19719375 100644 --- a/light/entities.cc +++ b/light/entities.cc @@ -1371,10 +1371,8 @@ bool FaceMatchesSurfaceLightTemplate( const surfflags_t &extended_flags = extended_texinfo_flags[face->texinfo]; - if (extended_flags.surflight_group) { - if (surflight.surflight_group.value() && surflight.surflight_group.value() != extended_flags.surflight_group) { - return false; - } + if (surflight.surflight_group.value() != extended_flags.surflight_group) { + return false; } return !Q_strcasecmp(texname, surflight.epairs->get("_surface")); diff --git a/testmaps/q1_light_surflight_group.map b/testmaps/q1_light_surflight_group.map new file mode 100644 index 00000000..dda16d5b --- /dev/null +++ b/testmaps/q1_light_surflight_group.map @@ -0,0 +1,114 @@ +// Game: Quake +// Format: Standard +// entity 0 +{ +"classname" "worldspawn" +"wad" "deprecated/free_wad.wad" +// brush 0 +{ +( 480 1088 928 ) ( 480 1089 928 ) ( 480 1088 929 ) bolt14 0 32 0 1 1 +( 704 1088 928 ) ( 704 1088 929 ) ( 705 1088 928 ) bolt14 0 32 0 1 1 +( 704 1088 928 ) ( 705 1088 928 ) ( 704 1089 928 ) bolt14 0 0 0 1 1 +( 944 1472 944 ) ( 944 1473 944 ) ( 945 1472 944 ) bolt14 0 0 0 1 1 +( 944 1488 944 ) ( 945 1488 944 ) ( 944 1488 945 ) bolt14 0 32 0 1 1 +( 1056 1472 944 ) ( 1056 1472 945 ) ( 1056 1473 944 ) bolt14 0 32 0 1 1 +} +// brush 1 +{ +( 480 1088 1248 ) ( 480 1089 1248 ) ( 480 1088 1249 ) bolt14 0 96 0 1 1 +( 704 1072 1248 ) ( 704 1072 1249 ) ( 705 1072 1248 ) bolt14 0 96 0 1 1 +( 704 1088 1248 ) ( 705 1088 1248 ) ( 704 1089 1248 ) bolt14 0 0 0 1 1 +( 944 1472 1264 ) ( 944 1473 1264 ) ( 945 1472 1264 ) bolt14 0 0 0 1 1 +( 944 1488 1264 ) ( 945 1488 1264 ) ( 944 1488 1265 ) bolt14 0 96 0 1 1 +( 1056 1472 1264 ) ( 1056 1472 1265 ) ( 1056 1473 1264 ) bolt14 0 96 0 1 1 +} +// brush 2 +{ +( 480 1072 928 ) ( 480 1073 928 ) ( 480 1072 929 ) bolt14 16 32 0 1 1 +( 704 1072 928 ) ( 704 1072 929 ) ( 705 1072 928 ) bolt14 0 32 0 1 1 +( 704 1072 928 ) ( 705 1072 928 ) ( 704 1073 928 ) bolt14 0 -16 0 1 1 +( 944 1456 1248 ) ( 944 1457 1248 ) ( 945 1456 1248 ) bolt14 0 -16 0 1 1 +( 944 1088 944 ) ( 945 1088 944 ) ( 944 1088 945 ) bolt14 0 32 0 1 1 +( 1056 1456 944 ) ( 1056 1456 945 ) ( 1056 1457 944 ) bolt14 16 32 0 1 1 +} +// brush 3 +{ +( 480 1392 928 ) ( 480 1393 928 ) ( 480 1392 929 ) bolt14 -48 32 0 1 1 +( 832 1488 928 ) ( 832 1488 929 ) ( 833 1488 928 ) bolt14 -128 32 0 1 1 +( 832 1392 928 ) ( 833 1392 928 ) ( 832 1393 928 ) bolt14 -128 48 0 1 1 +( 1072 1776 1248 ) ( 1072 1777 1248 ) ( 1073 1776 1248 ) bolt14 -128 48 0 1 1 +( 1072 1504 944 ) ( 1073 1504 944 ) ( 1072 1504 945 ) bolt14 -128 32 0 1 1 +( 1056 1392 928 ) ( 1056 1392 929 ) ( 1056 1393 928 ) bolt14 -48 32 0 1 1 +} +// brush 4 +{ +( 1056 1088 1056 ) ( 1056 1089 1056 ) ( 1056 1088 1057 ) bolt14 0 32 0 1 1 +( 736 1088 1056 ) ( 736 1088 1057 ) ( 737 1088 1056 ) bolt14 -32 32 0 1 1 +( 736 1088 928 ) ( 737 1088 928 ) ( 736 1089 928 ) bolt14 -32 0 0 1 1 +( 976 1472 1248 ) ( 976 1473 1248 ) ( 977 1472 1248 ) bolt14 -32 0 0 1 1 +( 976 1488 1072 ) ( 977 1488 1072 ) ( 976 1488 1073 ) bolt14 -32 32 0 1 1 +( 1072 1472 1072 ) ( 1072 1472 1073 ) ( 1072 1473 1072 ) bolt14 0 32 0 1 1 +} +// brush 5 +{ +( 464 1088 1056 ) ( 464 1089 1056 ) ( 464 1088 1057 ) bolt14 0 32 0 1 1 +( 144 1072 1056 ) ( 144 1072 1057 ) ( 145 1072 1056 ) bolt14 48 32 0 1 1 +( 144 1088 928 ) ( 145 1088 928 ) ( 144 1089 928 ) bolt14 48 0 0 1 1 +( 384 1472 1248 ) ( 384 1473 1248 ) ( 385 1472 1248 ) bolt14 48 0 0 1 1 +( 384 1488 1072 ) ( 385 1488 1072 ) ( 384 1488 1073 ) bolt14 48 32 0 1 1 +( 480 1472 1072 ) ( 480 1472 1073 ) ( 480 1473 1072 ) bolt14 0 32 0 1 1 +} +// brush 6 +{ +( 640 1152 944 ) ( 640 1153 944 ) ( 640 1152 945 ) bolt14 0 0 0 1 1 +( 640 1152 944 ) ( 640 1152 945 ) ( 641 1152 944 ) bolt14 0 0 0 1 1 +( 640 1152 944 ) ( 641 1152 944 ) ( 640 1153 944 ) bolt14 0 0 0 1 1 +( 768 1216 960 ) ( 768 1217 960 ) ( 769 1216 960 ) bolt16 0 0 0 1 1 +( 768 1216 960 ) ( 769 1216 960 ) ( 768 1216 961 ) bolt14 0 0 0 1 1 +( 768 1216 960 ) ( 768 1216 961 ) ( 768 1217 960 ) bolt14 0 0 0 1 1 +} +// brush 7 +{ +( 480 1280 944 ) ( 480 1281 944 ) ( 480 1280 945 ) bolt14 0 0 0 1 1 +( 480 1280 944 ) ( 480 1280 945 ) ( 481 1280 944 ) bolt14 0 0 0 1 1 +( 480 1280 944 ) ( 481 1280 944 ) ( 480 1281 944 ) bolt14 0 0 0 1 1 +( 768 1296 1056 ) ( 768 1297 1056 ) ( 769 1296 1056 ) bolt14 0 0 0 1 1 +( 768 1296 960 ) ( 769 1296 960 ) ( 768 1296 961 ) bolt14 0 0 0 1 1 +( 768 1296 960 ) ( 768 1296 961 ) ( 768 1297 960 ) bolt14 0 0 0 1 1 +} +} +// entity 1 +{ +"classname" "info_player_start" +"origin" "896 1232 968" +"angle" "180" +} +// entity 2 +{ +"classname" "light" +"origin" "808 1176 952" +"_surface" "bolt16" +"_color" "1 0 0" +} +// entity 3 +{ +"classname" "light" +"origin" "808 1368 952" +"_surface" "bolt16" +"_surflight_group" "1" +"_color" "0 0 1" +} +// entity 4 +{ +"classname" "func_detail" +"_surflight_group" "1" +// brush 0 +{ +( 640 1344 944 ) ( 640 1345 944 ) ( 640 1344 945 ) bolt14 0 0 0 1 1 +( 640 1344 944 ) ( 640 1344 945 ) ( 641 1344 944 ) bolt14 0 0 0 1 1 +( 640 1344 944 ) ( 641 1344 944 ) ( 640 1345 944 ) bolt14 0 0 0 1 1 +( 768 1408 960 ) ( 768 1409 960 ) ( 769 1408 960 ) bolt16 0 0 0 1 1 +( 768 1408 960 ) ( 769 1408 960 ) ( 768 1408 961 ) bolt14 0 0 0 1 1 +( 768 1408 960 ) ( 768 1408 961 ) ( 768 1409 960 ) bolt14 0 0 0 1 1 +} +} diff --git a/tests/test_ltface.cc b/tests/test_ltface.cc index a191f2f9..86028e36 100644 --- a/tests/test_ltface.cc +++ b/tests/test_ltface.cc @@ -1176,4 +1176,19 @@ TEST(ltfaceQ1, switchableshadowTarget) // in (switchable) shadow - should be black in style 0, and red in style 32 CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {0, 0, 0}, in_shadow, {0, 0, 1}, &lit, &bspx, 0); CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {68, 0, 0}, in_shadow, {0, 0, 1}, &lit, &bspx, 32); -} \ No newline at end of file +} + +TEST(ltfaceQ1, surflightGroup) +{ + auto [bsp, bspx, lit] = QbspVisLight_Q1("q1_light_surflight_group.map", {}); + + { + SCOPED_TRACE("left brush is just receiving red light"); + CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {75, 0, 0}, {720, 1184, 960}, {0, 0, 1}, &lit, &bspx); + } + + { + SCOPED_TRACE("right brush is just receiving blue light"); + CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {0, 0, 75}, {720, 1376, 960}, {0, 0, 1}, &lit, &bspx); + } +}