diff --git a/testmaps/qbsp_leaf_contents_bug.map b/testmaps/qbsp_leaf_contents_bug.map new file mode 100644 index 00000000..e3f3cffb --- /dev/null +++ b/testmaps/qbsp_leaf_contents_bug.map @@ -0,0 +1,143 @@ +// Game: Quake +// Format: Valve + +// Noclip forward from the start position, and turn around +// Fire the rocket launcher. +// +// Expected: it explodes immediately +// Bug: you're in an empty leaf, so it flies into the wall +// (also, the fact that there's a face facing the void) +// +// Explanation: +// There's a "wedge" shaped brush sealing the map, +// which forms a T-junction with another brush sealing the map. +// This second brush isn't split by the wedge, and +// the code in MarkFacesTouchingOccupiedLeafs prefers to keep +// this non-split face (which breaks leaf content assignment +// and causes some empty faces in the void) rather than delete it +// (which would create HOMs). + +// entity 0 +{ +"classname" "worldspawn" +"wad" "deprecated/free_wad.wad" +"_tb_def" "builtin:Quake.fgd" +// brush 0 +{ +( 1952 -960 2432 ) ( 1952 -960 2400 ) ( 1952 -832 2400 ) bolt18 [ -1.1102230246251565e-16 -1 0 169.92432 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 +( 1760 -960 2464 ) ( 1920 -960 2592 ) ( 1920 -960 2464 ) bolt18 [ 1 -1.1102230246251565e-16 0 -54.075684 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 +( 1984 -928 2304 ) ( 1824 -768 2304 ) ( 1664 -928 2304 ) bolt18 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 1984 -928 2400 ) ( 1664 -928 2400 ) ( 1824 -768 2400 ) bolt18 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 1856 -928 2464 ) ( 1920 -928 2464 ) ( 1920 -928 2592 ) bolt18 [ -1 1.1102230246251565e-16 0 105.92456 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 +( 1984 -928 2304 ) ( 1984 -1216 2240 ) ( 1984 -1216 2304 ) bolt18 [ 1.1102230246251565e-16 1 0 -182.07556 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 1 +{ +( 2112 -928 1984 ) ( 2112 -928 2464 ) ( 1984 -960 2464 ) bolt18 [ -0.9701425001453319 -0.24253562503633297 0 0 ] [ -0 0 -1 0 ] 0 1 1 +( 2112 -960 1984 ) ( 1984 -960 1984 ) ( 1984 -960 2464 ) bolt18 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 2112 -960 1984 ) ( 2112 -928 1984 ) ( 1984 -960 1984 ) bolt18 [ -1 0 0 0 ] [ 1.3877787807814457e-17 -1 0 0 ] 357.6386 1 1 +( 1984 -960 2464 ) ( 2112 -928 2464 ) ( 2112 -960 2464 ) bolt18 [ 1 0 0 0 ] [ 1.3877787807814457e-17 -1 0 0 ] 2.3613892 1 1 +( 2112 -960 2464 ) ( 2112 -928 2464 ) ( 2112 -928 1984 ) bolt18 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 2 +{ +( 1920 -960 2368 ) ( 1920 -960 2336 ) ( 1920 -832 2336 ) bolt18 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1760 -992 2464 ) ( 1920 -992 2592 ) ( 1920 -992 2464 ) bolt18 [ 1 -1.1102230246251565e-16 0 -54.075684 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 +( 1984 -928 2304 ) ( 1824 -768 2304 ) ( 1664 -928 2304 ) bolt18 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 1984 -928 2400 ) ( 1664 -928 2400 ) ( 1824 -768 2400 ) bolt18 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 1760 -960 2464 ) ( 1920 -960 2464 ) ( 1920 -960 2592 ) bolt18 [ 1 -1.1102230246251565e-16 0 -54.075684 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 +( 1984 -928 2304 ) ( 1984 -1216 2240 ) ( 1984 -1216 2304 ) bolt18 [ 1.1102230246251565e-16 1 0 -182.07556 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 3 +{ +( 1664 -960 2304 ) ( 1664 -959 2304 ) ( 1664 -960 2305 ) bolt18 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1888 -960 2304 ) ( 1888 -960 2305 ) ( 1889 -960 2304 ) bolt18 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1888 -960 2304 ) ( 1889 -960 2304 ) ( 1888 -959 2304 ) bolt18 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 1920 -944 2400 ) ( 1920 -943 2400 ) ( 1921 -944 2400 ) bolt18 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 1920 -944 2320 ) ( 1921 -944 2320 ) ( 1920 -944 2321 ) bolt18 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1920 -944 2320 ) ( 1920 -944 2321 ) ( 1920 -943 2320 ) bolt18 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 4 +{ +( 1632 -960 2448 ) ( 1632 -959 2448 ) ( 1632 -960 2449 ) bolt18 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1632 -960 2448 ) ( 1632 -960 2449 ) ( 1633 -960 2448 ) bolt18 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1984 -672 1984 ) ( 1664 -960 1984 ) ( 1984 -960 1984 ) bolt18 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 1664 -928 2464 ) ( 1664 -927 2464 ) ( 1665 -928 2464 ) bolt18 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 1664 -384 2464 ) ( 1665 -384 2464 ) ( 1664 -384 2465 ) bolt18 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1664 -928 2464 ) ( 1664 -928 2465 ) ( 1664 -927 2464 ) bolt18 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 5 +{ +( 1632 -960 1968 ) ( 1632 -959 1968 ) ( 1632 -960 1969 ) bolt18 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1632 -960 1968 ) ( 1632 -960 1969 ) ( 1633 -960 1968 ) bolt18 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1632 -960 1968 ) ( 1633 -960 1968 ) ( 1632 -959 1968 ) bolt18 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 2256 -320 1984 ) ( 2256 -319 1984 ) ( 2257 -320 1984 ) bolt18 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 2256 -384 1984 ) ( 2257 -384 1984 ) ( 2256 -384 1985 ) bolt18 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 2256 -320 1984 ) ( 2256 -320 1985 ) ( 2256 -319 1984 ) bolt18 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 6 +{ +( 1632 -960 2464 ) ( 1632 -959 2464 ) ( 1632 -960 2465 ) bolt18 [ 0 -1 0 0 ] [ 0 0 -1 -16 ] 0 1 1 +( 1632 -960 2464 ) ( 1632 -960 2465 ) ( 1633 -960 2464 ) bolt18 [ 1 0 0 0 ] [ 0 0 -1 -16 ] 0 1 1 +( 1632 -960 2464 ) ( 1633 -960 2464 ) ( 1632 -959 2464 ) bolt18 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 2256 -320 2480 ) ( 2256 -319 2480 ) ( 2257 -320 2480 ) bolt18 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 2256 -384 2480 ) ( 2257 -384 2480 ) ( 2256 -384 2481 ) bolt18 [ -1 0 0 0 ] [ 0 0 -1 -16 ] 0 1 1 +( 2256 -320 2480 ) ( 2256 -320 2481 ) ( 2256 -319 2480 ) bolt18 [ 0 1 0 0 ] [ 0 0 -1 -16 ] 0 1 1 +} +// brush 7 +{ +( 1664 -400 1984 ) ( 1664 -399 1984 ) ( 1664 -400 1985 ) bolt18 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1696 -400 1984 ) ( 1696 -400 1985 ) ( 1697 -400 1984 ) bolt18 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1696 -400 1984 ) ( 1697 -400 1984 ) ( 1696 -399 1984 ) bolt18 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 2256 -384 2464 ) ( 2256 -383 2464 ) ( 2257 -384 2464 ) bolt18 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 2256 -384 2000 ) ( 2257 -384 2000 ) ( 2256 -384 2001 ) bolt18 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 2256 -384 2000 ) ( 2256 -384 2001 ) ( 2256 -383 2000 ) bolt18 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 8 +{ +( 2112 -944 1984 ) ( 2112 -943 1984 ) ( 2112 -944 1985 ) bolt18 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 2112 -944 1984 ) ( 2112 -944 1985 ) ( 2113 -944 1984 ) bolt18 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 2112 -944 1984 ) ( 2113 -944 1984 ) ( 2112 -943 1984 ) bolt18 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 2128 -384 2464 ) ( 2128 -383 2464 ) ( 2129 -384 2464 ) bolt18 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 2128 -400 2000 ) ( 2129 -400 2000 ) ( 2128 -400 2001 ) bolt18 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 2128 -384 2000 ) ( 2128 -384 2001 ) ( 2128 -383 2000 ) bolt18 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 9 +{ +( 1664 -960 2304 ) ( 1664 -672 2240 ) ( 1664 -672 2304 ) bolt18 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1984 -960 2304 ) ( 1664 -960 2240 ) ( 1664 -960 2304 ) bolt18 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1984 -672 1984 ) ( 1664 -960 1984 ) ( 1984 -960 1984 ) bolt18 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 1984 -672 2304 ) ( 1664 -672 2304 ) ( 1824 -512 2304 ) bolt18 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 1984 -928 2400 ) ( 2112 -928 2416 ) ( 1984 -928 2416 ) bolt18 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1984 -672 2304 ) ( 1984 -960 2240 ) ( 1984 -960 2304 ) bolt18 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 10 +{ +( 1664 -960 2464 ) ( 1664 -672 2400 ) ( 1664 -672 2464 ) bolt18 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1984 -960 2464 ) ( 1664 -960 2400 ) ( 1664 -960 2464 ) bolt18 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1984 -672 2400 ) ( 1664 -960 2400 ) ( 1984 -960 2400 ) bolt18 [ -1.0000000000000002 0 0 0 ] [ 0 -1.0000000000000002 0 -96 ] 0 1 1 +( 1984 -672 2464 ) ( 1664 -672 2464 ) ( 1824 -512 2464 ) bolt18 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 1984 -928 2400 ) ( 2112 -928 2416 ) ( 1984 -928 2416 ) bolt18 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1984 -672 2464 ) ( 1984 -960 2400 ) ( 1984 -960 2464 ) bolt18 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +// brush 11 +{ +( 2000 -928 2288 ) ( 2000 -927 2288 ) ( 2000 -928 2289 ) bolt18 [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1968 -912 2288 ) ( 1968 -912 2289 ) ( 1969 -912 2288 ) bolt18 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 1968 -928 2288 ) ( 1969 -928 2288 ) ( 1968 -927 2288 ) bolt18 [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 2080 -816 2304 ) ( 2080 -815 2304 ) ( 2081 -816 2304 ) bolt18 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 +( 2080 -816 2304 ) ( 2081 -816 2304 ) ( 2080 -816 2305 ) bolt18 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 2080 -816 2304 ) ( 2080 -816 2305 ) ( 2080 -815 2304 ) bolt18 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 +} +} +// entity 1 +{ +"classname" "info_player_start" +"origin" "2048 -864 2360" +"angle" "270" +} +// entity 2 +{ +"classname" "light" +"origin" "1992 -520 2312" +}