qbsp: allow _litwater/_splitturb as a bmodel key

supports both opt-in and opt-out
This commit is contained in:
Eric Wasylishen 2023-05-28 23:44:57 -06:00
parent f6d5e6e24d
commit d38ef2d8af
4 changed files with 309 additions and 3 deletions

View File

@ -551,9 +551,13 @@ static bool IsNoExpandName(const char *name)
return false;
}
static bool IsSpecialName(const char *name)
/**
* "Special" refers to TEX_SPECIAL, which means "non-lightmapped" and
* therefore non-subdivided.
*/
static bool IsSpecialName(const char *name, bool allow_litwater)
{
if (name[0] == '*' && !qbsp_options.splitturb.value())
if (name[0] == '*' && !allow_litwater)
return true;
if (!Q_strncasecmp(name, "sky", 3) && !qbsp_options.splitsky.value())
return true;
@ -626,6 +630,18 @@ static surfflags_t SurfFlagsForEntity(
const int shadow = entity.epairs.get_int("_shadow");
bool is_translucent = false;
// lit water: use worldspawn key by default, but allow overriding with bmodel keys
// TODO: use a setting_container for these things, rather than custom parsing
// TODO: support lit water opt-out in Q2 mode
bool allow_litwater = false;
if (entity.epairs.has("_litwater")) {
allow_litwater = (entity.epairs.get_int("_litwater") > 0);
} else if (entity.epairs.has("_splitturb")) {
allow_litwater = (entity.epairs.get_int("_splitturb") > 0);
} else {
allow_litwater = qbsp_options.splitturb.value();
}
// These flags are pulled from surf flags in Q2.
// TODO: the Q1 version of this block can now be moved into texinfo
// loading by shoving them inside of texinfo.flags like
@ -640,7 +656,7 @@ static surfflags_t SurfFlagsForEntity(
flags.is_nodraw = true;
if (IsHintName(texname))
flags.is_hint = true;
if (IsSpecialName(texname))
if (IsSpecialName(texname, allow_litwater))
flags.native |= TEX_SPECIAL;
} else {
flags.native = texinfo.flags.native;

139
testmaps/q1_litwater.map Normal file
View File

@ -0,0 +1,139 @@
// Game: Quake
// Format: Valve
// entity 0
{
"classname" "worldspawn"
"wad" "deprecated/free_wad.wad"
"_tb_def" "builtin:Quake.fgd"
"_litwater" "1"
// brush 0
{
( -416 -128 32 ) ( -416 -127 32 ) ( -416 -128 33 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
( -416 -208 32 ) ( -416 -208 33 ) ( -415 -208 32 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -416 -128 32 ) ( -415 -128 32 ) ( -416 -127 32 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 128 272 48 ) ( 128 273 48 ) ( 129 272 48 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 128 272 48 ) ( 129 272 48 ) ( 128 272 49 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 272 48 ) ( 128 272 49 ) ( 128 273 48 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 1
{
( -416 -128 288 ) ( -416 -127 288 ) ( -416 -128 289 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
( -416 -208 288 ) ( -416 -208 289 ) ( -415 -208 288 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -416 -128 288 ) ( -415 -128 288 ) ( -416 -127 288 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 128 272 304 ) ( 128 273 304 ) ( 129 272 304 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 128 272 304 ) ( 129 272 304 ) ( 128 272 305 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 272 304 ) ( 128 272 305 ) ( 128 273 304 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 2
{
( -432 -128 272 ) ( -432 -127 272 ) ( -432 -128 273 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
( -432 -208 272 ) ( -432 -208 273 ) ( -431 -208 272 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -432 -128 48 ) ( -431 -128 48 ) ( -432 -127 48 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 112 272 288 ) ( 112 273 288 ) ( 113 272 288 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 112 272 288 ) ( 113 272 288 ) ( 112 272 289 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -416 272 288 ) ( -416 272 289 ) ( -416 273 288 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 3
{
( 128 -128 272 ) ( 128 -127 272 ) ( 128 -128 273 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
( 128 -208 272 ) ( 128 -208 273 ) ( 129 -208 272 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 -128 48 ) ( 129 -128 48 ) ( 128 -127 48 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 672 272 288 ) ( 672 273 288 ) ( 673 272 288 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 672 272 288 ) ( 673 272 288 ) ( 672 272 289 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 144 272 288 ) ( 144 272 289 ) ( 144 273 288 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 4
{
( -416 -144 272 ) ( -416 -143 272 ) ( -416 -144 273 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
( 96 -224 272 ) ( 96 -224 273 ) ( 97 -224 272 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 96 -144 48 ) ( 97 -144 48 ) ( 96 -143 48 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 640 256 288 ) ( 640 257 288 ) ( 641 256 288 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 640 -208 288 ) ( 641 -208 288 ) ( 640 -208 289 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 256 288 ) ( 128 256 289 ) ( 128 257 288 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 5
{
( -416 256 48 ) ( -416 257 48 ) ( -416 256 49 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
( -432 256 48 ) ( -432 256 49 ) ( -431 256 48 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -432 256 48 ) ( -431 256 48 ) ( -432 257 48 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 128 272 288 ) ( 128 273 288 ) ( 129 272 288 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 128 272 64 ) ( 129 272 64 ) ( 128 272 65 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 272 64 ) ( 128 272 65 ) ( 128 273 64 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 6
{
( -320 96 52 ) ( -320 97 52 ) ( -320 96 53 ) *lava_s2 [ 0 0 -1.0000000000000002 0 ] [ 0 -1.0000000000000002 0 -32 ] 0 1 1
( -320 96 52 ) ( -320 96 53 ) ( -319 96 52 ) *lava_s2 [ 1.0000000000000002 0 0 0 ] [ 0 0 1.0000000000000002 0 ] 0 1 1
( -320 96 48 ) ( -319 96 48 ) ( -320 97 48 ) *lava_s2 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( -256 156 128 ) ( -256 157 128 ) ( -255 156 128 ) *lava_s2 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( -256 160 56 ) ( -255 160 56 ) ( -256 160 57 ) *lava_s2 [ 1.0000000000000002 0 0 0 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1
( -256 156 56 ) ( -256 156 57 ) ( -256 157 56 ) *lava_s2 [ 0 0 1.0000000000000002 0 ] [ 0 -1.0000000000000002 0 -32 ] 0 1 1
}
// brush 7
{
( -320 -28 128 ) ( -320 -27 128 ) ( -320 -28 129 ) bolt3 [ 0 0 -1.0000000000000002 60 ] [ 0 -1.0000000000000002 0 -28 ] 0 1 1
( -320 -32 128 ) ( -320 -32 129 ) ( -319 -32 128 ) bolt3 [ 1.0000000000000002 0 0 60 ] [ 0 0 1.0000000000000002 0 ] 0 1 1
( -320 -28 128 ) ( -319 -28 128 ) ( -320 -27 128 ) bolt3 [ 1 0 0 60 ] [ 0 -1 0 -28 ] 0 1 1
( -256 32 132 ) ( -256 33 132 ) ( -255 32 132 ) bolt3 [ 1 0 0 60 ] [ 0 -1 0 -28 ] 0 1 1
( -256 32 132 ) ( -255 32 132 ) ( -256 32 133 ) bolt3 [ 1.0000000000000002 0 0 60 ] [ 0 0 -1.0000000000000002 4 ] 0 1 1
( 16 32 132 ) ( 16 32 133 ) ( 16 33 132 ) bolt3 [ 0 0 1.0000000000000002 -4 ] [ 0 -1.0000000000000002 0 -28 ] 0 1 1
}
}
// entity 1
{
"classname" "info_player_start"
"origin" "-292 0 156"
}
// entity 2
{
"classname" "light"
"origin" "-284 124 212"
"_color" "0 0 1"
}
// entity 3
{
"classname" "light"
"origin" "-156 124 212"
"_color" "0 0 1"
}
// entity 4
{
"classname" "light"
"origin" "-28 124 212"
"_color" "0 0 1"
}
// entity 5
{
"classname" "light"
"origin" "-28 124 84"
"_color" "0 1 0"
}
// entity 6
{
"classname" "func_group"
"_splitturb" "0"
// brush 0
{
( -192 96 52 ) ( -192 97 52 ) ( -192 96 53 ) *lava_s2 [ 0 -1 0 -32 ] [ 0 0 -1 4 ] 0 1 1
( -192 96 52 ) ( -192 96 53 ) ( -191 96 52 ) *lava_s2 [ 1 0 0 0 ] [ 0 0 -1 4 ] 0 1 1
( -192 96 48 ) ( -191 96 48 ) ( -192 97 48 ) *lava_s2 [ -1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( -128 156 128 ) ( -128 157 128 ) ( -127 156 128 ) *lava_s2 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( -128 160 56 ) ( -127 160 56 ) ( -128 160 57 ) *lava_s2 [ -1 0 0 0 ] [ 0 0 -1 4 ] 0 1 1
( -128 156 56 ) ( -128 156 57 ) ( -128 157 56 ) *lava_s2 [ 0 1 0 32 ] [ 0 0 -1 4 ] 0 1 1
}
}
// entity 7
{
"classname" "func_group"
"_lightignore" "1"
"_minlight" "100"
// brush 0
{
( -64 96 52 ) ( -64 97 52 ) ( -64 96 53 ) *zwater1 [ 0 -1 0 -32 ] [ 0 0 -1 4 ] 0 1 1
( -64 96 52 ) ( -64 96 53 ) ( -63 96 52 ) *zwater1 [ 1 0 0 0 ] [ 0 0 -1 4 ] 0 1 1
( -64 96 48 ) ( -63 96 48 ) ( -64 97 48 ) *zwater1 [ -1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 0 156 128 ) ( 0 157 128 ) ( 1 156 128 ) *zwater1 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 0 160 56 ) ( 1 160 56 ) ( 0 160 57 ) *zwater1 [ -1 0 0 0 ] [ 0 0 -1 4 ] 0 1 1
( 0 156 56 ) ( 0 156 57 ) ( 0 157 56 ) *zwater1 [ 0 1 0 32 ] [ 0 0 -1 4 ] 0 1 1
}
}

View File

@ -0,0 +1,112 @@
// Game: Quake
// Format: Valve
// entity 0
{
"classname" "worldspawn"
"wad" "deprecated/free_wad.wad"
"_tb_def" "builtin:Quake.fgd"
"_litwater" "0"
// brush 0
{
( -416 -128 32 ) ( -416 -127 32 ) ( -416 -128 33 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
( -416 -208 32 ) ( -416 -208 33 ) ( -415 -208 32 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -416 -128 32 ) ( -415 -128 32 ) ( -416 -127 32 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 128 272 48 ) ( 128 273 48 ) ( 129 272 48 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 128 272 48 ) ( 129 272 48 ) ( 128 272 49 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 272 48 ) ( 128 272 49 ) ( 128 273 48 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 1
{
( -416 -128 288 ) ( -416 -127 288 ) ( -416 -128 289 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
( -416 -208 288 ) ( -416 -208 289 ) ( -415 -208 288 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -416 -128 288 ) ( -415 -128 288 ) ( -416 -127 288 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 128 272 304 ) ( 128 273 304 ) ( 129 272 304 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 128 272 304 ) ( 129 272 304 ) ( 128 272 305 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 272 304 ) ( 128 272 305 ) ( 128 273 304 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 2
{
( -432 -128 272 ) ( -432 -127 272 ) ( -432 -128 273 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
( -432 -208 272 ) ( -432 -208 273 ) ( -431 -208 272 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -432 -128 48 ) ( -431 -128 48 ) ( -432 -127 48 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 112 272 288 ) ( 112 273 288 ) ( 113 272 288 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 112 272 288 ) ( 113 272 288 ) ( 112 272 289 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -416 272 288 ) ( -416 272 289 ) ( -416 273 288 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 3
{
( 128 -128 272 ) ( 128 -127 272 ) ( 128 -128 273 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
( 128 -208 272 ) ( 128 -208 273 ) ( 129 -208 272 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 -128 48 ) ( 129 -128 48 ) ( 128 -127 48 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 672 272 288 ) ( 672 273 288 ) ( 673 272 288 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 672 272 288 ) ( 673 272 288 ) ( 672 272 289 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 144 272 288 ) ( 144 272 289 ) ( 144 273 288 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 4
{
( -416 -144 272 ) ( -416 -143 272 ) ( -416 -144 273 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
( 96 -224 272 ) ( 96 -224 273 ) ( 97 -224 272 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 96 -144 48 ) ( 97 -144 48 ) ( 96 -143 48 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 640 256 288 ) ( 640 257 288 ) ( 641 256 288 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 640 -208 288 ) ( 641 -208 288 ) ( 640 -208 289 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 256 288 ) ( 128 256 289 ) ( 128 257 288 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 5
{
( -416 256 48 ) ( -416 257 48 ) ( -416 256 49 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
( -432 256 48 ) ( -432 256 49 ) ( -431 256 48 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( -432 256 48 ) ( -431 256 48 ) ( -432 257 48 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 128 272 288 ) ( 128 273 288 ) ( 129 272 288 ) bolt3 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( 128 272 64 ) ( 129 272 64 ) ( 128 272 65 ) bolt3 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 128 272 64 ) ( 128 272 65 ) ( 128 273 64 ) bolt3 [ 0 1 0 32 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 6
{
( -320 -28 128 ) ( -320 -27 128 ) ( -320 -28 129 ) bolt3 [ 0 0 -1.0000000000000002 60 ] [ 0 -1.0000000000000002 0 -28 ] 0 1 1
( -320 -32 128 ) ( -320 -32 129 ) ( -319 -32 128 ) bolt3 [ 1.0000000000000002 0 0 60 ] [ 0 0 1.0000000000000002 0 ] 0 1 1
( -320 -28 128 ) ( -319 -28 128 ) ( -320 -27 128 ) bolt3 [ 1 0 0 60 ] [ 0 -1 0 -28 ] 0 1 1
( -256 32 132 ) ( -256 33 132 ) ( -255 32 132 ) bolt3 [ 1 0 0 60 ] [ 0 -1 0 -28 ] 0 1 1
( -256 32 132 ) ( -255 32 132 ) ( -256 32 133 ) bolt3 [ 1.0000000000000002 0 0 60 ] [ 0 0 -1.0000000000000002 4 ] 0 1 1
( 16 32 132 ) ( 16 32 133 ) ( 16 33 132 ) bolt3 [ 0 0 1.0000000000000002 -4 ] [ 0 -1.0000000000000002 0 -28 ] 0 1 1
}
// brush 7
{
( -192 96 52 ) ( -192 97 52 ) ( -192 96 53 ) *lava_s2 [ 0 -1 0 -32 ] [ 0 0 -1 4 ] 0 1 1
( -192 96 52 ) ( -192 96 53 ) ( -191 96 52 ) *lava_s2 [ 1 0 0 0 ] [ 0 0 -1 4 ] 0 1 1
( -192 96 48 ) ( -191 96 48 ) ( -192 97 48 ) *lava_s2 [ -1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( -128 156 128 ) ( -128 157 128 ) ( -127 156 128 ) *lava_s2 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( -128 160 56 ) ( -127 160 56 ) ( -128 160 57 ) *lava_s2 [ -1 0 0 0 ] [ 0 0 -1 4 ] 0 1 1
( -128 156 56 ) ( -128 156 57 ) ( -128 157 56 ) *lava_s2 [ 0 1 0 32 ] [ 0 0 -1 4 ] 0 1 1
}
}
// entity 1
{
"classname" "info_player_start"
"origin" "-292 0 156"
}
// entity 2
{
"classname" "light"
"origin" "-284 124 212"
"_color" "0 0 1"
}
// entity 3
{
"classname" "light"
"origin" "-156 124 212"
"_color" "0 0 1"
}
// entity 4
{
"classname" "func_group"
"_litwater" "1"
// brush 0
{
( -320 96 52 ) ( -320 97 52 ) ( -320 96 53 ) *lava_s2 [ 0 0 -1.0000000000000002 0 ] [ 0 -1.0000000000000002 0 -32 ] 0 1 1
( -320 96 52 ) ( -320 96 53 ) ( -319 96 52 ) *lava_s2 [ 1.0000000000000002 0 0 0 ] [ 0 0 1.0000000000000002 0 ] 0 1 1
( -320 96 48 ) ( -319 96 48 ) ( -320 97 48 ) *lava_s2 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( -256 156 128 ) ( -256 157 128 ) ( -255 156 128 ) *lava_s2 [ 1 0 0 0 ] [ 0 -1 0 -32 ] 0 1 1
( -256 160 56 ) ( -255 160 56 ) ( -256 160 57 ) *lava_s2 [ 1.0000000000000002 0 0 0 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1
( -256 156 56 ) ( -256 156 57 ) ( -256 157 56 ) *lava_s2 [ 0 0 1.0000000000000002 0 ] [ 0 -1.0000000000000002 0 -32 ] 0 1 1
}
}

View File

@ -739,4 +739,43 @@ TEST_CASE("q2_minlight_inherited + -noextendedsurfflags")
INFO("check that func_wall can override worldspawn minlight color");
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[3], {0, 64, 0}, {208, -248, 16}, {0, 0, 1}, nullptr, &bspx);
}
}
TEST_CASE("lit water")
{
auto [bsp, bspx, lit] = QbspVisLight_Q1("q1_litwater.map", {});
{
INFO("cube 1: lava has blue lightmap");
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {0, 10, 171}, {-288, 120, 128}, {0, 0, 1}, &lit);
}
{
INFO("cube 2: non-lightmapped via _splitturb 0 func_group key");
auto *f = BSP_FindFaceAtPoint(&bsp, &bsp.dmodels[0], {-160, 120, 128}, {0, 0, 1});
auto *ti = Face_Texinfo(&bsp, f);
CHECK(ti->flags.native == TEX_SPECIAL);
}
{
INFO("cube 3: lightmapped, but using minlight only via _lightignore and _minlight func_group keys");
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {50, 50, 50}, {-32, 120, 128}, {0, 0, 1}, &lit);
}
}
TEST_CASE("lit water opt-in")
{
auto [bsp, bspx, lit] = QbspVisLight_Q1("q1_litwater_opt_in.map", {});
{
INFO("cube 1: lava has blue lightmap (opt-in via _litwater 1)");
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {0, 0, 162}, {-288, 120, 128}, {0, 0, 1}, &lit);
}
{
INFO("cube 2: non-lightmapped");
auto *f = BSP_FindFaceAtPoint(&bsp, &bsp.dmodels[0], {-160, 120, 128}, {0, 0, 1});
auto *ti = Face_Texinfo(&bsp, f);
CHECK(ti->flags.native == TEX_SPECIAL);
}
}