Initial merge of the new NPC schedule/task system.

This commit is contained in:
Marco Cawthorne 2025-01-13 13:36:48 -08:00
parent ee8428d8b5
commit 8503cad633
45 changed files with 1743 additions and 880 deletions

BIN
base/env/dune_bk.tga vendored Normal file

Binary file not shown.

BIN
base/env/dune_dn.tga vendored Normal file

Binary file not shown.

BIN
base/env/dune_ft.tga vendored Normal file

Binary file not shown.

BIN
base/env/dune_lf.tga vendored Normal file

Binary file not shown.

BIN
base/env/dune_rt.tga vendored Normal file

Binary file not shown.

BIN
base/env/dune_up.tga vendored Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,14 +1,15 @@
// entity 0
{
"skyname" "dune"
"classname" "worldspawn"
// brush 0
{
( -1536 -512 544 ) ( 1824 512 544 ) ( 1824 -512 544 ) skybox/dune 0 0 0 0.250000 0.250000 0 0 0
( -1536 512 544 ) ( 1824 512 512 ) ( 1824 512 544 ) skybox/dune 0 0 0 0.250000 0.250000 0 0 0
( 1824 512 544 ) ( 1824 -512 512 ) ( 1824 -512 544 ) skybox/dune 0 0 0 0.250000 0.250000 0 0 0
( -1536 -512 544 ) ( 1824 -512 544 ) ( 1824 -512 512 ) skybox/dune 0 0 0 0.250000 0.250000 0 0 0
( -1536 512 512 ) ( -1536 -512 544 ) ( -1536 -512 512 ) skybox/dune 0 0 0 0.250000 0.250000 0 0 0
( -1536 -512 512 ) ( 1824 -512 512 ) ( 1824 512 512 ) skybox/dune 0 0 0 0.250000 0.250000 0 0 0
( -1536 -512 544 ) ( 1824 512 544 ) ( 1824 -512 544 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
( -1536 512 544 ) ( 1824 512 512 ) ( 1824 512 544 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
( 1824 512 544 ) ( 1824 -512 512 ) ( 1824 -512 544 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
( -1536 -512 544 ) ( 1824 -512 544 ) ( 1824 -512 512 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
( -1536 512 512 ) ( -1536 -512 544 ) ( -1536 -512 512 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
( -1536 -512 512 ) ( 1824 -512 512 ) ( 1824 512 512 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
}
// brush 1
{
@ -57,78 +58,6 @@
}
// brush 6
{
( -368 320 256 ) ( -368 256 256 ) ( -400 320 256 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -368 288 128 ) ( -400 288 128 ) ( -368 288 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -384 320 128 ) ( -384 320 0 ) ( -384 256 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -400 256 0 ) ( -368 256 0 ) ( -400 320 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 258 0 ) ( -400 258 128 ) ( -368 258 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 256 0 ) ( -400 320 0 ) ( -400 256 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
// brush 7
{
( -368 160 256 ) ( -368 96 256 ) ( -400 160 256 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -368 128 128 ) ( -400 128 128 ) ( -368 128 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -384 160 128 ) ( -384 160 0 ) ( -384 96 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -400 96 0 ) ( -368 96 0 ) ( -400 160 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 98 0 ) ( -400 98 128 ) ( -368 98 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 96 0 ) ( -400 160 0 ) ( -400 96 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
// brush 8
{
( -368 -96 256 ) ( -368 -160 256 ) ( -400 -96 256 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -368 -128 128 ) ( -400 -128 128 ) ( -368 -128 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -384 -96 128 ) ( -384 -96 0 ) ( -384 -160 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -400 -160 0 ) ( -368 -160 0 ) ( -400 -96 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 -158 0 ) ( -400 -158 128 ) ( -368 -158 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 -160 0 ) ( -400 -96 0 ) ( -400 -160 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
// brush 9
{
( -368 -256 256 ) ( -368 -320 256 ) ( -400 -256 256 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -368 -288 128 ) ( -400 -288 128 ) ( -368 -288 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -384 -256 128 ) ( -384 -256 0 ) ( -384 -320 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -400 -320 0 ) ( -368 -320 0 ) ( -400 -256 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 -318 0 ) ( -400 -318 128 ) ( -368 -318 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 -320 0 ) ( -400 -256 0 ) ( -400 -320 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
// brush 10
{
( -448 320 256 ) ( -448 256 256 ) ( -480 320 256 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -448 288 128 ) ( -480 288 128 ) ( -448 288 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -464 320 128 ) ( -464 320 0 ) ( -464 256 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 256 0 ) ( -448 256 0 ) ( -480 320 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 258 0 ) ( -480 258 128 ) ( -448 258 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 256 0 ) ( -480 320 0 ) ( -480 256 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
// brush 11
{
( -448 160 256 ) ( -448 96 256 ) ( -480 160 256 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -448 128 128 ) ( -480 128 128 ) ( -448 128 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -464 160 128 ) ( -464 160 0 ) ( -464 96 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 96 0 ) ( -448 96 0 ) ( -480 160 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 98 0 ) ( -480 98 128 ) ( -448 98 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 96 0 ) ( -480 160 0 ) ( -480 96 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
// brush 12
{
( -448 -96 256 ) ( -448 -160 256 ) ( -480 -96 256 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -448 -128 128 ) ( -480 -128 128 ) ( -448 -128 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -464 -96 128 ) ( -464 -96 0 ) ( -464 -160 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 -160 0 ) ( -448 -160 0 ) ( -480 -96 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 -158 0 ) ( -480 -158 128 ) ( -448 -158 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 -160 0 ) ( -480 -96 0 ) ( -480 -160 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
// brush 13
{
( -448 -256 256 ) ( -448 -320 256 ) ( -480 -256 256 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -448 -288 128 ) ( -480 -288 128 ) ( -448 -288 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -464 -256 128 ) ( -464 -256 0 ) ( -464 -320 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 -320 0 ) ( -448 -320 0 ) ( -480 -256 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 -318 0 ) ( -480 -318 128 ) ( -448 -318 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 -320 0 ) ( -480 -256 0 ) ( -480 -320 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
// brush 14
{
( 1824 512 0 ) ( 1824 -512 512 ) ( 1824 -512 0 ) dev/dev_measurewall01c 0 0 0 -0.250000 0.250000 0 0 0
( 1824 -128 512 ) ( 1856 -128 512 ) ( 1856 -128 0 ) dev/dev_measurewall01c 48 0 0 -0.250000 0.250000 0 0 0
( 1856 512 0 ) ( 1824 -512 0 ) ( 1856 -512 0 ) dev/dev_measurewall01c 32 0 0 -0.250000 0.250000 0 0 0
@ -136,7 +65,7 @@
( 1848 0 512 ) ( 1880 0 0 ) ( 1880 0 512 ) dev/dev_measurewall01c 48 0 0 -0.250000 0.250000 0 0 0
( 1824 512 128 ) ( 1856 -512 128 ) ( 1824 -512 128 ) dev/dev_measurewall01c 0 0 0 -0.250000 0.250000 0 0 0
}
// brush 15
// brush 7
{
( 1824 512 128 ) ( 1856 -512 128 ) ( 1824 -512 128 ) dev/dev_measurewall01b 0 0 0 -0.250000 0.250000 0 0 0
( 1832 128 512 ) ( 1864 128 0 ) ( 1864 128 512 ) dev/dev_measurewall01b 48 0 0 -0.250000 0.250000 0 0 0
@ -145,7 +74,7 @@
( 1824 0 512 ) ( 1856 0 512 ) ( 1856 0 0 ) dev/dev_measurewall01b 48 0 0 -0.250000 0.250000 0 0 0
( 1824 512 0 ) ( 1824 -512 512 ) ( 1824 -512 0 ) dev/dev_measurewall01b 0 0 0 -0.250000 0.250000 0 0 0
}
// brush 16
// brush 8
{
( 1824 640 0 ) ( 1824 -384 512 ) ( 1824 -384 0 ) dev/dev_measurewall01d 0 0 0 -0.250000 0.250000 0 0 0
( 1824 128 512 ) ( 1856 128 512 ) ( 1856 128 0 ) dev/dev_measurewall01d 0 0 0 -0.250000 0.250000 0 0 0
@ -154,7 +83,7 @@
( 1864 512 512 ) ( 1896 512 0 ) ( 1896 512 512 ) dev/dev_measurewall01d 0 0 0 -0.250000 0.250000 0 0 0
( 1824 640 128 ) ( 1856 -384 128 ) ( 1824 -384 128 ) dev/dev_measurewall01d 0 0 0 -0.250000 0.250000 0 0 0
}
// brush 17
// brush 9
{
( 1824 512 128 ) ( 1856 -512 128 ) ( 1824 -512 128 ) dev/dev_measurewall01d 0 0 0 -0.250000 0.250000 0 0 0
( 1864 -128 512 ) ( 1896 -128 0 ) ( 1896 -128 512 ) dev/dev_measurewall01d 0 0 0 -0.250000 0.250000 0 0 0
@ -163,7 +92,7 @@
( 1824 -512 512 ) ( 1856 -512 512 ) ( 1856 -512 0 ) dev/dev_measurewall01d 0 0 0 -0.250000 0.250000 0 0 0
( 1824 512 0 ) ( 1824 -512 512 ) ( 1824 -512 0 ) dev/dev_measurewall01d 0 0 0 -0.250000 0.250000 0 0 0
}
// brush 18
// brush 10
{
( -1536 512 512 ) ( 1824 512 512 ) ( 1824 512 0 ) dev/dev_measurewall01a -128 0 0 0.250000 0.250000 0 0 0
( -1536 544 0 ) ( -1536 512 512 ) ( -1536 512 0 ) dev/dev_measurewall01a -128 0 0 0.250000 0.250000 0 0 0
@ -172,7 +101,7 @@
( -1536 544 512 ) ( 1824 544 0 ) ( 1824 544 512 ) dev/dev_measurewall01a -128 0 0 0.250000 0.250000 0 0 0
( -1536 512 512 ) ( 1824 544 512 ) ( 1824 512 512 ) dev/dev_measurewall01a -128 0 0 0.250000 0.250000 0 0 0
}
// brush 19
// brush 11
{
( 1824 512 0 ) ( 1824 -512 512 ) ( 1824 -512 0 ) dev/dev_measurewall01a 0 0 0 -0.250000 0.250000 0 0 0
( 1824 -512 512 ) ( 1856 -512 512 ) ( 1856 -512 0 ) dev/dev_measurewall01a 0 0 0 -0.250000 0.250000 0 0 0
@ -181,7 +110,7 @@
( 1824 512 512 ) ( 1856 512 0 ) ( 1856 512 512 ) dev/dev_measurewall01a 0 0 0 -0.250000 0.250000 0 0 0
( 1824 512 512 ) ( 1856 -512 512 ) ( 1824 -512 512 ) dev/dev_measurewall01a 0 0 0 -0.250000 0.250000 0 0 0
}
// brush 20
// brush 12
{
( -1536 512 512 ) ( -1536 -512 0 ) ( -1536 -512 512 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
( -1568 512 0 ) ( -1568 -512 512 ) ( -1568 -512 0 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
@ -190,7 +119,7 @@
( -1568 512 512 ) ( -1536 512 0 ) ( -1536 512 512 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
( -1568 512 512 ) ( -1536 -512 512 ) ( -1568 -512 512 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
}
// brush 21
// brush 13
{
( -1536 -512 512 ) ( 1824 -512 0 ) ( 1824 -512 512 ) dev/dev_measurewall01a 128 0 0 -0.250000 0.250000 0 0 0
( -1536 -544 512 ) ( -1536 -512 0 ) ( -1536 -512 512 ) dev/dev_measurewall01a 128 0 0 -0.250000 0.250000 0 0 0
@ -590,3 +519,107 @@
"classname" "env_cubemap"
"origin" "-432 0 328"
}
// entity 27
{
"classname" "func_ladder"
// brush 0
{
( -368 -256 256 ) ( -368 -320 256 ) ( -400 -256 256 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -368 -288 128 ) ( -400 -288 128 ) ( -368 -288 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -384 -256 128 ) ( -384 -256 0 ) ( -384 -320 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -400 -320 0 ) ( -368 -320 0 ) ( -400 -256 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 -318 0 ) ( -400 -318 128 ) ( -368 -318 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 -320 0 ) ( -400 -256 0 ) ( -400 -320 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
}
// entity 28
{
"classname" "func_ladder"
// brush 0
{
( -368 -96 256 ) ( -368 -160 256 ) ( -400 -96 256 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -368 -128 128 ) ( -400 -128 128 ) ( -368 -128 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -384 -96 128 ) ( -384 -96 0 ) ( -384 -160 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -400 -160 0 ) ( -368 -160 0 ) ( -400 -96 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 -158 0 ) ( -400 -158 128 ) ( -368 -158 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 -160 0 ) ( -400 -96 0 ) ( -400 -160 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
}
// entity 29
{
"classname" "func_ladder"
// brush 0
{
( -368 160 256 ) ( -368 96 256 ) ( -400 160 256 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -368 128 128 ) ( -400 128 128 ) ( -368 128 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -384 160 128 ) ( -384 160 0 ) ( -384 96 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -400 96 0 ) ( -368 96 0 ) ( -400 160 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 98 0 ) ( -400 98 128 ) ( -368 98 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 96 0 ) ( -400 160 0 ) ( -400 96 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
}
// entity 30
{
"classname" "func_ladder"
// brush 0
{
( -368 320 256 ) ( -368 256 256 ) ( -400 320 256 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -368 288 128 ) ( -400 288 128 ) ( -368 288 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -384 320 128 ) ( -384 320 0 ) ( -384 256 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -400 256 0 ) ( -368 256 0 ) ( -400 320 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 258 0 ) ( -400 258 128 ) ( -368 258 0 ) common/climb 32 0 0 0.500000 0.500000 0 0 0
( -400 256 0 ) ( -400 320 0 ) ( -400 256 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
}
// entity 31
{
"classname" "func_ladder"
// brush 0
{
( -448 -256 256 ) ( -448 -320 256 ) ( -480 -256 256 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -448 -288 128 ) ( -480 -288 128 ) ( -448 -288 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -464 -256 128 ) ( -464 -256 0 ) ( -464 -320 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 -320 0 ) ( -448 -320 0 ) ( -480 -256 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 -318 0 ) ( -480 -318 128 ) ( -448 -318 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 -320 0 ) ( -480 -256 0 ) ( -480 -320 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
}
// entity 32
{
"classname" "func_ladder"
// brush 0
{
( -448 -96 256 ) ( -448 -160 256 ) ( -480 -96 256 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -448 -128 128 ) ( -480 -128 128 ) ( -448 -128 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -464 -96 128 ) ( -464 -96 0 ) ( -464 -160 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 -160 0 ) ( -448 -160 0 ) ( -480 -96 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 -158 0 ) ( -480 -158 128 ) ( -448 -158 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 -160 0 ) ( -480 -96 0 ) ( -480 -160 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
}
// entity 33
{
"classname" "func_ladder"
// brush 0
{
( -448 160 256 ) ( -448 96 256 ) ( -480 160 256 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -448 128 128 ) ( -480 128 128 ) ( -448 128 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -464 160 128 ) ( -464 160 0 ) ( -464 96 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 96 0 ) ( -448 96 0 ) ( -480 160 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 98 0 ) ( -480 98 128 ) ( -448 98 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 96 0 ) ( -480 160 0 ) ( -480 96 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
}
// entity 34
{
"classname" "func_ladder"
// brush 0
{
( -448 320 256 ) ( -448 256 256 ) ( -480 320 256 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -448 288 128 ) ( -480 288 128 ) ( -448 288 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -464 320 128 ) ( -464 320 0 ) ( -464 256 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 256 0 ) ( -448 256 0 ) ( -480 320 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 258 0 ) ( -480 258 128 ) ( -448 258 0 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
( -480 256 0 ) ( -480 320 0 ) ( -480 256 128 ) common/climb 0 0 0 0.500000 0.500000 0 0 0
}
}

View file

@ -3,165 +3,165 @@
"classname" "worldspawn"
// brush 0
{
( 248 192 -64 ) ( 248 -192 -64 ) ( -264 192 -64 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( 256 192 8 ) ( -256 192 8 ) ( 256 192 0 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 256 192 8 ) ( 256 192 0 ) ( 256 -192 8 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -192 -128 ) ( 256 -192 -128 ) ( -256 192 -128 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -192 0 ) ( -256 -192 8 ) ( 256 -192 0 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -192 0 ) ( -256 192 0 ) ( -256 -192 8 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -192 0 ) ( -256 -192 8 ) ( 256 -192 0 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -192 -128 ) ( 256 -192 -128 ) ( -256 192 -128 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 256 192 8 ) ( 256 192 0 ) ( 256 -192 8 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 256 192 8 ) ( -256 192 8 ) ( 256 192 0 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 248 192 -64 ) ( 248 -192 -64 ) ( -264 192 -64 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
}
// brush 1
{
( 248 192 192 ) ( 248 -192 192 ) ( -264 192 192 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 256 192 264 ) ( -256 192 264 ) ( 256 192 256 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 256 192 264 ) ( 256 192 256 ) ( 256 -192 264 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -192 128 ) ( 256 -192 128 ) ( -256 192 128 ) pbrtest/tiles052 0 0 0 0.250000 0.250000 0 0 0
( -256 -192 256 ) ( -256 -192 264 ) ( 256 -192 256 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -192 256 ) ( -256 192 256 ) ( -256 -192 264 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -192 256 ) ( -256 -192 264 ) ( 256 -192 256 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -192 128 ) ( 256 -192 128 ) ( -256 192 128 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 256 192 264 ) ( 256 192 256 ) ( 256 -192 264 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 256 192 264 ) ( -256 192 264 ) ( 256 192 256 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 248 192 192 ) ( 248 -192 192 ) ( -264 192 192 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
}
// brush 2
{
( 184 192 192 ) ( 184 -192 192 ) ( -328 192 192 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 192 192 264 ) ( -320 192 264 ) ( 192 192 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -256 192 8 ) ( -256 192 0 ) ( -256 -192 8 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -768 -192 -128 ) ( -256 -192 -128 ) ( -768 192 -128 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -320 -192 256 ) ( -320 -192 264 ) ( 192 -192 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -320 -192 256 ) ( -320 192 256 ) ( -320 -192 264 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -320 -192 256 ) ( -320 -192 264 ) ( 192 -192 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -768 -192 -128 ) ( -256 -192 -128 ) ( -768 192 -128 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -256 192 8 ) ( -256 192 0 ) ( -256 -192 8 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 192 192 264 ) ( -320 192 264 ) ( 192 192 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 184 192 192 ) ( 184 -192 192 ) ( -328 192 192 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
}
// brush 3
{
( 760 192 192 ) ( 760 -192 192 ) ( 248 192 192 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 768 192 264 ) ( 256 192 264 ) ( 768 192 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 320 192 8 ) ( 320 192 0 ) ( 320 -192 8 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -192 -192 -128 ) ( 320 -192 -128 ) ( -192 192 -128 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 256 -192 256 ) ( 256 192 256 ) ( 256 -192 264 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 256 -192 256 ) ( 256 -192 264 ) ( 768 -192 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 256 -192 256 ) ( 256 192 256 ) ( 256 -192 264 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -192 -192 -128 ) ( 320 -192 -128 ) ( -192 192 -128 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 320 192 8 ) ( 320 192 0 ) ( 320 -192 8 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 768 192 264 ) ( 256 192 264 ) ( 768 192 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 760 192 192 ) ( 760 -192 192 ) ( 248 192 192 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
}
// brush 4
{
( 184 256 192 ) ( 184 -128 192 ) ( -328 256 192 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 192 256 264 ) ( -320 256 264 ) ( 192 256 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 320 544 8 ) ( 320 544 0 ) ( 320 160 8 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -768 -128 -128 ) ( -256 -128 -128 ) ( -768 256 -128 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 272 192 256 ) ( 272 192 264 ) ( 784 192 256 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -320 -128 256 ) ( -320 256 256 ) ( -320 -128 264 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 272 192 256 ) ( 272 192 264 ) ( 784 192 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -768 -128 -128 ) ( -256 -128 -128 ) ( -768 256 -128 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 320 544 8 ) ( 320 544 0 ) ( 320 160 8 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 192 256 264 ) ( -320 256 264 ) ( 192 256 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 184 256 192 ) ( 184 -128 192 ) ( -328 256 192 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
}
// brush 5
{
( 248 -384 -64 ) ( 248 -768 -64 ) ( -264 -384 -64 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( 256 -384 8 ) ( -256 -384 8 ) ( 256 -384 0 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 256 -384 8 ) ( 256 -384 0 ) ( 256 -768 8 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -768 -128 ) ( 256 -768 -128 ) ( -256 -384 -128 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -768 0 ) ( -256 -768 8 ) ( 256 -768 0 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -768 0 ) ( -256 -384 0 ) ( -256 -768 8 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -768 0 ) ( -256 -768 8 ) ( 256 -768 0 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -768 -128 ) ( 256 -768 -128 ) ( -256 -384 -128 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 256 -384 8 ) ( 256 -384 0 ) ( 256 -768 8 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 256 -384 8 ) ( -256 -384 8 ) ( 256 -384 0 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 248 -384 -64 ) ( 248 -768 -64 ) ( -264 -384 -64 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
}
// brush 6
{
( 248 -384 192 ) ( 248 -768 192 ) ( -264 -384 192 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 256 -384 264 ) ( -256 -384 264 ) ( 256 -384 256 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 256 -384 264 ) ( 256 -384 256 ) ( 256 -768 264 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -768 128 ) ( 256 -768 128 ) ( -256 -384 128 ) pbrtest/woodsiding001 0 0 0 0.250000 0.250000 0 0 0
( -256 -768 256 ) ( -256 -768 264 ) ( 256 -768 256 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -768 256 ) ( -256 -384 256 ) ( -256 -768 264 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -768 256 ) ( -256 -768 264 ) ( 256 -768 256 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( -256 -768 128 ) ( 256 -768 128 ) ( -256 -384 128 ) pbrtest/metalplates006 0 0 0 0.250000 0.250000 0 0 0
( 256 -384 264 ) ( 256 -384 256 ) ( 256 -768 264 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 256 -384 264 ) ( -256 -384 264 ) ( 256 -384 256 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
( 248 -384 192 ) ( 248 -768 192 ) ( -264 -384 192 ) measure/floor 0 0 0 0.500000 0.500000 0 0 0
}
// brush 7
{
( 184 -384 192 ) ( 184 -768 192 ) ( -328 -384 192 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( 192 -384 264 ) ( -320 -384 264 ) ( 192 -384 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -256 -384 8 ) ( -256 -384 0 ) ( -256 -768 8 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -768 -768 -128 ) ( -256 -768 -128 ) ( -768 -384 -128 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( -320 -768 256 ) ( -320 -768 264 ) ( 192 -768 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -320 -768 256 ) ( -320 -384 256 ) ( -320 -768 264 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( -320 -768 256 ) ( -320 -768 264 ) ( 192 -768 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -768 -768 -128 ) ( -256 -768 -128 ) ( -768 -384 -128 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( -256 -384 8 ) ( -256 -384 0 ) ( -256 -768 8 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 192 -384 264 ) ( -320 -384 264 ) ( 192 -384 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 184 -384 192 ) ( 184 -768 192 ) ( -328 -384 192 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
}
// brush 8
{
( 760 -384 192 ) ( 760 -768 192 ) ( 248 -384 192 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( 768 -384 264 ) ( 256 -384 264 ) ( 768 -384 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 320 -384 8 ) ( 320 -384 0 ) ( 320 -768 8 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( -192 -768 -128 ) ( 320 -768 -128 ) ( -192 -384 -128 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( 256 -768 256 ) ( 256 -384 256 ) ( 256 -768 264 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 256 -768 256 ) ( 256 -768 264 ) ( 768 -768 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 256 -768 256 ) ( 256 -384 256 ) ( 256 -768 264 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -192 -768 -128 ) ( 320 -768 -128 ) ( -192 -384 -128 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( 320 -384 8 ) ( 320 -384 0 ) ( 320 -768 8 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( 768 -384 264 ) ( 256 -384 264 ) ( 768 -384 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 760 -384 192 ) ( 760 -768 192 ) ( 248 -384 192 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
}
// brush 9
{
( 184 -768 192 ) ( 184 -1152 192 ) ( -328 -768 192 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( 192 -768 264 ) ( -320 -768 264 ) ( 192 -768 256 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 320 -480 8 ) ( 320 -480 0 ) ( 320 -864 8 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( -768 -1152 -128 ) ( -256 -1152 -128 ) ( -768 -768 -128 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( 272 -832 256 ) ( 272 -832 264 ) ( 784 -832 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -320 -1152 256 ) ( -320 -768 256 ) ( -320 -1152 264 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( 272 -832 256 ) ( 272 -832 264 ) ( 784 -832 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -768 -1152 -128 ) ( -256 -1152 -128 ) ( -768 -768 -128 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( 320 -480 8 ) ( 320 -480 0 ) ( 320 -864 8 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( 192 -768 264 ) ( -320 -768 264 ) ( 192 -768 256 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 184 -768 192 ) ( 184 -1152 192 ) ( -328 -768 192 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
}
// brush 10
{
( 184 -192 192 ) ( 184 -576 192 ) ( -328 -192 192 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 320 96 8 ) ( 320 96 0 ) ( 320 -288 8 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 272 -320 256 ) ( 272 -320 264 ) ( 784 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -320 -576 256 ) ( -320 -192 256 ) ( -320 -576 264 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -56 -104 128 ) ( 80 -472 128 ) ( 80 -104 128 ) measure/wall64a 48 0 0 0.500000 0.500000 0 0 0
( -320 -576 256 ) ( -320 -192 256 ) ( -320 -576 264 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 272 -320 256 ) ( 272 -320 264 ) ( 784 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 320 96 8 ) ( 320 96 0 ) ( 320 -288 8 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 184 -192 192 ) ( 184 -576 192 ) ( -328 -192 192 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
}
// brush 11
{
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 320 96 8 ) ( 320 96 0 ) ( 320 -288 8 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -768 -576 -128 ) ( -256 -576 -128 ) ( -768 -192 -128 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 280 -320 256 ) ( 280 -320 264 ) ( 792 -320 256 ) measure/wall128gr 240 0 0 0.500000 0.500000 0 0 0
( 72 -472 192 ) ( 72 -104 -128 ) ( 72 -104 192 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( 80 -104 128 ) ( 80 -472 128 ) ( -56 -104 128 ) NULL 48 0 0 0.500000 0.500000 0 0 0
( 72 -472 192 ) ( 72 -104 -128 ) ( 72 -104 192 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( 280 -320 256 ) ( 280 -320 264 ) ( 792 -320 256 ) measure/wall128gr 240 0 0 0.500000 0.500000 0 0 0
( -768 -576 -128 ) ( -256 -576 -128 ) ( -768 -192 -128 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 320 96 8 ) ( 320 96 0 ) ( 320 -288 8 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
}
// brush 12
{
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -768 -576 -128 ) ( -256 -576 -128 ) ( -768 -192 -128 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 272 -320 256 ) ( 272 -320 264 ) ( 784 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -320 -576 256 ) ( -320 -192 256 ) ( -320 -576 264 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 72 -104 192 ) ( 72 -104 -128 ) ( 72 -472 192 ) NULL 0 0 0 0.500000 0.500000 0 0 0
( -72 -104 -64 ) ( 64 -472 -64 ) ( -72 -472 -64 ) measure/wall64a 16 0 0 0.500000 0.500000 0 0 0
( 72 -104 192 ) ( 72 -104 -128 ) ( 72 -472 192 ) NULL 0 0 0 0.500000 0.500000 0 0 0
( -320 -576 256 ) ( -320 -192 256 ) ( -320 -576 264 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 272 -320 256 ) ( 272 -320 264 ) ( 784 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -768 -576 -128 ) ( -256 -576 -128 ) ( -768 -192 -128 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
}
// brush 13
{
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 272 -320 256 ) ( 272 -320 264 ) ( 784 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -320 -576 256 ) ( -320 -192 256 ) ( -320 -576 264 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 80 -104 128 ) ( 80 -472 128 ) ( -56 -104 128 ) NULL 48 0 0 0.500000 0.500000 0 0 0
( -72 -472 -64 ) ( 64 -472 -64 ) ( -72 -104 -64 ) NULL 16 0 0 0.500000 0.500000 0 0 0
( -64 -472 192 ) ( -64 -104 -128 ) ( -64 -472 -128 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( -72 -472 -64 ) ( 64 -472 -64 ) ( -72 -104 -64 ) NULL 16 0 0 0.500000 0.500000 0 0 0
( 80 -104 128 ) ( 80 -472 128 ) ( -56 -104 128 ) NULL 48 0 0 0.500000 0.500000 0 0 0
( -320 -576 256 ) ( -320 -192 256 ) ( -320 -576 264 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 272 -320 256 ) ( 272 -320 264 ) ( 784 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
}
// brush 14
{
( 184 -320 192 ) ( 184 -704 192 ) ( -328 -320 192 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( 192 -320 264 ) ( -320 -320 264 ) ( 192 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 320 -32 8 ) ( 320 -32 0 ) ( 320 -416 8 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( 272 -384 256 ) ( 272 -384 264 ) ( 784 -384 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -320 -704 256 ) ( -320 -320 256 ) ( -320 -704 264 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( -56 -104 128 ) ( 80 -472 128 ) ( 80 -104 128 ) measure/wall64a 48 0 0 0.500000 0.500000 0 0 0
( -320 -704 256 ) ( -320 -320 256 ) ( -320 -704 264 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( 272 -384 256 ) ( 272 -384 264 ) ( 784 -384 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 320 -32 8 ) ( 320 -32 0 ) ( 320 -416 8 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( 192 -320 264 ) ( -320 -320 264 ) ( 192 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 184 -320 192 ) ( 184 -704 192 ) ( -328 -320 192 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
}
// brush 15
{
( 192 -320 264 ) ( -320 -320 264 ) ( 192 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 320 -32 8 ) ( 320 -32 0 ) ( 320 -416 8 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( -768 -704 -128 ) ( -256 -704 -128 ) ( -768 -320 -128 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( 272 -384 256 ) ( 272 -384 264 ) ( 784 -384 256 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 72 -472 192 ) ( 72 -104 -128 ) ( 72 -104 192 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( 80 -104 128 ) ( 80 -472 128 ) ( -56 -104 128 ) NULL 48 0 0 0.500000 0.500000 0 0 0
( 72 -472 192 ) ( 72 -104 -128 ) ( 72 -104 192 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( 272 -384 256 ) ( 272 -384 264 ) ( 784 -384 256 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( -768 -704 -128 ) ( -256 -704 -128 ) ( -768 -320 -128 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( 320 -32 8 ) ( 320 -32 0 ) ( 320 -416 8 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( 192 -320 264 ) ( -320 -320 264 ) ( 192 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
}
// brush 16
{
( 192 -320 264 ) ( -320 -320 264 ) ( 192 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -768 -704 -128 ) ( -256 -704 -128 ) ( -768 -320 -128 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( 272 -384 256 ) ( 272 -384 264 ) ( 784 -384 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -320 -704 256 ) ( -320 -320 256 ) ( -320 -704 264 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( 72 -104 192 ) ( 72 -104 -128 ) ( 72 -472 192 ) NULL 0 0 0 0.500000 0.500000 0 0 0
( -72 -104 -64 ) ( 64 -472 -64 ) ( -72 -472 -64 ) measure/wall64a 16 0 0 0.500000 0.500000 0 0 0
( 72 -104 192 ) ( 72 -104 -128 ) ( 72 -472 192 ) NULL 0 0 0 0.500000 0.500000 0 0 0
( -320 -704 256 ) ( -320 -320 256 ) ( -320 -704 264 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( 272 -384 256 ) ( 272 -384 264 ) ( 784 -384 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( -768 -704 -128 ) ( -256 -704 -128 ) ( -768 -320 -128 ) measure/wall128gr 0 128 0 0.500000 0.500000 0 0 0
( 192 -320 264 ) ( -320 -320 264 ) ( 192 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
}
// brush 17
{
( 192 -320 264 ) ( -320 -320 264 ) ( 192 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
( 272 -384 256 ) ( 272 -384 264 ) ( 784 -384 256 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -320 -704 256 ) ( -320 -320 256 ) ( -320 -704 264 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( 80 -104 128 ) ( 80 -472 128 ) ( -56 -104 128 ) NULL 48 0 0 0.500000 0.500000 0 0 0
( -72 -472 -64 ) ( 64 -472 -64 ) ( -72 -104 -64 ) NULL 16 0 0 0.500000 0.500000 0 0 0
( -64 -472 192 ) ( -64 -104 -128 ) ( -64 -472 -128 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( -72 -472 -64 ) ( 64 -472 -64 ) ( -72 -104 -64 ) NULL 16 0 0 0.500000 0.500000 0 0 0
( 80 -104 128 ) ( 80 -472 128 ) ( -56 -104 128 ) NULL 48 0 0 0.500000 0.500000 0 0 0
( -320 -704 256 ) ( -320 -320 256 ) ( -320 -704 264 ) measure/wall128gr 128 0 0 0.500000 0.500000 0 0 0
( 272 -384 256 ) ( 272 -384 264 ) ( 784 -384 256 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 192 -320 264 ) ( -320 -320 264 ) ( 192 -320 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 0 0 0
}
}
// entity 1
@ -174,202 +174,202 @@
}
// entity 3
{
"classname" "func_button"
"target" "foobar2"
"classname" "func_button"
// brush 0
{
( 88 -40 0 ) ( 88 -80 0 ) ( 48 -40 0 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 88 -48 72 ) ( 48 -48 72 ) ( 88 -48 64 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 80 -40 72 ) ( 80 -40 64 ) ( 80 -80 72 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 48 -80 -64 ) ( 88 -80 -64 ) ( 48 -40 -64 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 40 -80 64 ) ( 40 -80 72 ) ( 80 -80 64 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 48 -80 64 ) ( 48 -40 64 ) ( 48 -80 72 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 40 -80 64 ) ( 40 -80 72 ) ( 80 -80 64 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 48 -80 -64 ) ( 88 -80 -64 ) ( 48 -40 -64 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 80 -40 72 ) ( 80 -40 64 ) ( 80 -80 72 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 88 -48 72 ) ( 48 -48 72 ) ( 88 -48 64 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 88 -40 0 ) ( 88 -80 0 ) ( 48 -40 0 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
}
}
// entity 4
{
"classname" "func_button"
"target" "foobar1"
"classname" "func_button"
// brush 0
{
( 88 152 0 ) ( 88 112 0 ) ( 48 152 0 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 88 144 72 ) ( 48 144 72 ) ( 88 144 64 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 80 152 72 ) ( 80 152 64 ) ( 80 112 72 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 48 112 -64 ) ( 88 112 -64 ) ( 48 152 -64 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 40 112 64 ) ( 40 112 72 ) ( 80 112 64 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 48 112 64 ) ( 48 152 64 ) ( 48 112 72 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 40 112 64 ) ( 40 112 72 ) ( 80 112 64 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 48 112 -64 ) ( 88 112 -64 ) ( 48 152 -64 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 80 152 72 ) ( 80 152 64 ) ( 80 112 72 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 88 144 72 ) ( 48 144 72 ) ( 88 144 64 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
( 88 152 0 ) ( 88 112 0 ) ( 48 152 0 ) next/rusty7 0 0 0 0.500000 0.500000 0 0 0
}
}
// entity 5
{
"classname" "point_message"
"origin" "-160.000000 128.000000 32.000000"
"message" "White dynamic light with no style pattern."
"origin" "-160.000000 128.000000 32.000000"
"classname" "point_message"
}
// entity 6
{
"classname" "light_dynamic"
"origin" "-192.000000 128.000000 64.000000"
"_light" "255 255 255"
"brightness" "250"
"_light" "255 255 255"
"origin" "-192.000000 128.000000 64.000000"
"classname" "light_dynamic"
}
// entity 7
{
"classname" "point_message"
"origin" "-160.000000 -64.000000 32.000000"
"message" "Small blinking yellow dynamic light."
"origin" "-160.000000 -64.000000 32.000000"
"classname" "point_message"
}
// entity 8
{
"classname" "light_dynamic"
"origin" "-192.000000 -64.000000 64.000000"
"pattern" "zm"
"_light" "255 255 128"
"brightness" "150"
"_light" "255 255 128"
"pattern" "zm"
"origin" "-192.000000 -64.000000 64.000000"
"classname" "light_dynamic"
}
// entity 9
{
"classname" "point_message"
"origin" "120.000000 128.000000 32.000000"
"message" "Toggable white flickering dynamic light."
"origin" "120.000000 128.000000 32.000000"
"classname" "point_message"
}
// entity 10
{
"classname" "light_dynamic"
"origin" "192.000000 128.000000 64.000000"
"targetname" "foobar1"
"style" "1"
"_light" "255 255 255"
"brightness" "250"
"_light" "255 255 255"
"style" "1"
"targetname" "foobar1"
"origin" "192.000000 128.000000 64.000000"
"classname" "light_dynamic"
}
// entity 11
{
"classname" "point_message"
"origin" "120.000000 -64.000000 32.000000"
"message" "Toggable red slow pulsing dynamic light."
"origin" "120.000000 -64.000000 32.000000"
"classname" "point_message"
}
// entity 12
{
"classname" "light_dynamic"
"origin" "192.000000 -128.000000 64.000000"
"targetname" "foobar2"
"style" "2"
"_light" "255 0 0"
"start_active" "1"
"brightness" "250"
"start_active" "1"
"_light" "255 0 0"
"style" "2"
"targetname" "foobar2"
"origin" "192.000000 -128.000000 64.000000"
"classname" "light_dynamic"
}
// entity 13
{
"classname" "ncItem"
"spin" "1"
"origin" "160.000000 0.000000 0.000000"
"model" "models/logos/visions.vvm"
"mins" "-16 -16 -64"
"angles" "0 -90 0"
"avelocity" "0 90 0"
"shadows" "1"
"avelocity" "0 90 0"
"angles" "0 -90 0"
"mins" "-16 -16 -64"
"model" "models/logos/visions.vvm"
"origin" "160.000000 0.000000 0.000000"
"spin" "1"
"classname" "ncItem"
}
// entity 14
{
"classname" "env_cubemap"
"origin" "0 0 0"
"classname" "env_cubemap"
}
// entity 15
{
"classname" "env_projectedtexture"
"origin" "-64.000000 -576.000000 24.000000"
"texturename" "textures/skies/smudge/bg"
"lightcolor" "255 255 255 1024"
"parentname" "trainy"
"targetname" "sky_cube"
"spawnflags" "1"
"targetname" "sky_cube"
"parentname" "trainy"
"lightcolor" "255 255 255 1024"
"texturename" "textures/skies/smudge/bg"
"origin" "-64.000000 -576.000000 24.000000"
"classname" "env_projectedtexture"
}
// entity 16
{
"classname" "ncItem"
"spin" "1"
"origin" "192.000000 -576.000000 32.000000"
"mins" "-16 -16 -64"
"model" "models/logos/visions.vvm"
"avelocity" "0 90 0"
"shadows" "1"
"avelocity" "0 90 0"
"model" "models/logos/visions.vvm"
"mins" "-16 -16 -64"
"origin" "192.000000 -576.000000 32.000000"
"spin" "1"
"classname" "ncItem"
}
// entity 17
{
"classname" "point_message"
"origin" "0.000000 -576.000000 24.000000"
"message" "env_projectedtexture room"
"origin" "0.000000 -576.000000 24.000000"
"classname" "point_message"
}
// entity 18
{
"classname" "func_train"
"target" "stop1"
"spawnflags" "8"
"targetname" "trainy"
"spawnflags" "8"
"target" "stop1"
"classname" "func_train"
// brush 0
{
( -56 -568 8 ) ( -56 -592 8 ) ( -80 -568 8 ) NULL 48 48 0 0.500000 0.500000 0 0 0
( -48 -560 8 ) ( -72 -560 8 ) ( -48 -560 0 ) NULL 32 16 0 0.500000 0.500000 0 0 0
( -48 -560 8 ) ( -48 -560 0 ) ( -48 -584 8 ) NULL 0 16 0 0.500000 0.500000 0 0 0
( -80 -592 0 ) ( -56 -592 0 ) ( -80 -568 0 ) NULL 48 48 0 0.500000 0.500000 0 0 0
( -80 -592 0 ) ( -80 -592 8 ) ( -56 -592 0 ) NULL 48 16 0 0.500000 0.500000 0 0 0
( -80 -592 0 ) ( -80 -568 0 ) ( -80 -592 8 ) NULL 16 16 0 0.500000 0.500000 0 0 0
( -80 -592 0 ) ( -80 -592 8 ) ( -56 -592 0 ) NULL 48 16 0 0.500000 0.500000 0 0 0
( -80 -592 0 ) ( -56 -592 0 ) ( -80 -568 0 ) NULL 48 48 0 0.500000 0.500000 0 0 0
( -48 -560 8 ) ( -48 -560 0 ) ( -48 -584 8 ) NULL 0 16 0 0.500000 0.500000 0 0 0
( -48 -560 8 ) ( -72 -560 8 ) ( -48 -560 0 ) NULL 32 16 0 0.500000 0.500000 0 0 0
( -56 -568 8 ) ( -56 -592 8 ) ( -80 -568 8 ) NULL 48 48 0 0.500000 0.500000 0 0 0
}
// brush 1
{
( -56 -560 16 ) ( -56 -592 16 ) ( -72 -560 16 ) common/origin 0 0 0 0.500000 0.500000 0 0 0
( -56 -568 16 ) ( -72 -568 16 ) ( -56 -568 -8 ) common/origin 0 0 0 0.500000 0.500000 0 0 0
( -56 -560 16 ) ( -56 -560 -8 ) ( -56 -592 16 ) common/origin 0 0 0 0.500000 0.500000 0 0 0
( -72 -592 -8 ) ( -56 -592 -8 ) ( -72 -560 -8 ) common/origin 0 0 0 0.500000 0.500000 0 0 0
( -72 -584 -8 ) ( -72 -584 16 ) ( -56 -584 -8 ) common/origin 0 0 0 0.500000 0.500000 0 0 0
( -72 -592 -8 ) ( -72 -560 -8 ) ( -72 -592 16 ) common/origin 0 0 0 0.500000 0.500000 0 0 0
( -72 -584 -8 ) ( -72 -584 16 ) ( -56 -584 -8 ) common/origin 0 0 0 0.500000 0.500000 0 0 0
( -72 -592 -8 ) ( -56 -592 -8 ) ( -72 -560 -8 ) common/origin 0 0 0 0.500000 0.500000 0 0 0
( -56 -560 16 ) ( -56 -560 -8 ) ( -56 -592 16 ) common/origin 0 0 0 0.500000 0.500000 0 0 0
( -56 -568 16 ) ( -72 -568 16 ) ( -56 -568 -8 ) common/origin 0 0 0 0.500000 0.500000 0 0 0
( -56 -560 16 ) ( -56 -592 16 ) ( -72 -560 16 ) common/origin 0 0 0 0.500000 0.500000 0 0 0
}
}
// entity 19
{
"classname" "path_corner"
"origin" "-128.000000 -576.000000 0.000000"
"targetname" "stop1"
"target" "stop2"
"speed" "100"
"target" "stop2"
"targetname" "stop1"
"origin" "-128.000000 -576.000000 0.000000"
"classname" "path_corner"
}
// entity 20
{
"classname" "path_corner"
"origin" "64.000000 -576.000000 0.000000"
"target" "stop1"
"targetname" "stop2"
"target" "stop1"
"origin" "64.000000 -576.000000 0.000000"
"classname" "path_corner"
}
// entity 21
{
"classname" "env_projectedtexture"
"origin" "40.000000 -504.000000 24.000000"
"parentname" "trainy"
"spawnflags" "1"
"parentname" "trainy"
"origin" "40.000000 -504.000000 24.000000"
"classname" "env_projectedtexture"
}
// entity 22
{
"classname" "env_projectedtexture"
"origin" "40.000000 -648.000000 24.000000"
"parentname" "trainy"
"spawnflags" "1"
"parentname" "trainy"
"origin" "40.000000 -648.000000 24.000000"
"classname" "env_projectedtexture"
}
// entity 23
{
"classname" "func_button"
"OnPressed" "sky_cube,SpotlightTexture,env/sundown_hdr/250th/bg,0,-1"
"OnPressed" "sky_cube,SpotlightTexture,env/dune_hdr/250th/bg,2.5,-1"
"OnPressed" "sky_cube,SpotlightTexture,env/dune,2.5,-1"
"OnPressed" "sky_cube,SpotlightTexture,env/smudge/bg,5,-1"
"OnPressed" "sky_cube,SetPattern,zqmaamqzzqmaamqz,5,-1"
"OnPressed" "sky_cube,SetPattern,z,7.5,-1"
// brush 0
{
( -16 -760 8 ) ( -16 -768 8 ) ( -32 -760 8 ) measure/counter 0 0 0 0.500000 0.500000 0 0 0
( -16 -760 64 ) ( -32 -760 64 ) ( -16 -760 -64 ) measure/counter 0 0 0 0.500000 0.500000 0 0 0
( -16 -760 64 ) ( -16 -760 -64 ) ( -16 -768 64 ) measure/counter 0 0 0 0.500000 0.500000 0 0 0
( -24 -768 -8 ) ( -8 -768 -8 ) ( -24 -760 -8 ) measure/counter 48 0 0 0.500000 0.500000 0 0 0
( -32 -768 -64 ) ( -32 -768 64 ) ( -16 -768 -64 ) measure/counter 0 0 0 0.500000 0.500000 0 0 0
( -32 -768 -64 ) ( -32 -760 -64 ) ( -32 -768 64 ) measure/counter 0 0 0 0.500000 0.500000 0 0 0
( -32 -768 -64 ) ( -32 -768 64 ) ( -16 -768 -64 ) measure/counter 0 0 0 0.500000 0.500000 0 0 0
( -24 -768 -8 ) ( -8 -768 -8 ) ( -24 -760 -8 ) measure/counter 48 0 0 0.500000 0.500000 0 0 0
( -16 -760 64 ) ( -16 -760 -64 ) ( -16 -768 64 ) measure/counter 0 0 0 0.500000 0.500000 0 0 0
( -16 -760 64 ) ( -32 -760 64 ) ( -16 -760 -64 ) measure/counter 0 0 0 0.500000 0.500000 0 0 0
( -16 -760 8 ) ( -16 -768 8 ) ( -32 -760 8 ) measure/counter 0 0 0 0.500000 0.500000 0 0 0
}
}
// entity 24
@ -377,11 +377,11 @@
"classname" "func_dustmotes"
// brush 0
{
( -128 0 -40 ) ( -256 0 -40 ) ( -256 -128 -40 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( -256 -128 80 ) ( -256 0 80 ) ( -128 0 80 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( -256 -128 8 ) ( -128 -128 8 ) ( -128 -128 0 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 8 ) ( -128 0 8 ) ( -128 0 0 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( -128 0 8 ) ( -256 0 8 ) ( -256 0 0 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( -256 0 8 ) ( -256 -128 8 ) ( -256 -128 0 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( -128 0 8 ) ( -256 0 8 ) ( -256 0 0 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 8 ) ( -128 0 8 ) ( -128 0 0 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( -256 -128 8 ) ( -128 -128 8 ) ( -128 -128 0 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( -256 -128 80 ) ( -256 0 80 ) ( -128 0 80 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( -128 0 -40 ) ( -256 0 -40 ) ( -256 -128 -40 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
}
}

View file

@ -1,22 +1,13 @@
// entity 0
{
"hdr_iris_fade_down" "1"
"hdr_iris_fade_up" "0.5"
"hdr_iris_multiplier" "1"
"hdr_iris_maxvalue" "4"
"hdr_iris_minvalue" "0.0"
"classname" "worldspawn"
"hdr_iris_minvalue" "0.0"
"hdr_iris_maxvalue" "4"
"hdr_iris_multiplier" "1"
"hdr_iris_fade_up" "0.5"
"hdr_iris_fade_down" "1"
// brush 0
{
( -1536 -132 0 ) ( -1536 252 0 ) ( -1536 -132 8 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( -552 -192 0 ) ( -552 -192 8 ) ( -40 -192 0 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( -552 -192 -128 ) ( -40 -192 -128 ) ( -552 192 -128 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( 256 232 8 ) ( 256 232 0 ) ( 256 -152 8 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( -40 192 8 ) ( -552 192 8 ) ( -40 192 0 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( -48 192 -64 ) ( -48 -192 -64 ) ( -560 192 -64 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
}
// brush 1
{
( 0 -200 256 ) ( 0 184 256 ) ( 0 -200 264 ) common/skyportal 16 0 0 0.250000 0.250000 0 0 0
( -256 -192 256 ) ( -256 -192 264 ) ( 256 -192 256 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
( -256 -192 128 ) ( 256 -192 128 ) ( -256 192 128 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
@ -24,53 +15,53 @@
( 256 192 264 ) ( -256 192 264 ) ( 256 192 256 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
( 248 192 192 ) ( 248 -192 192 ) ( -264 192 192 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
}
// brush 1
{
( -1536 -192 256 ) ( -1536 192 256 ) ( -1536 -192 264 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -1536 -192 256 ) ( -1536 -192 264 ) ( -1024 -192 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -1984 -192 -128 ) ( -1472 -192 -128 ) ( -1984 192 -128 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -1472 192 -184 ) ( -1472 192 -192 ) ( -1472 -192 -184 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -1024 192 264 ) ( -1536 192 264 ) ( -1024 192 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -1032 192 0 ) ( -1032 -192 0 ) ( -1544 192 0 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
}
// brush 2
{
( -1536 -192 256 ) ( -1536 192 256 ) ( -1536 -192 264 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -1536 -192 256 ) ( -1536 -192 264 ) ( -1024 -192 256 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -1984 -192 -128 ) ( -1472 -192 -128 ) ( -1984 192 -128 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -1472 192 -184 ) ( -1472 192 -192 ) ( -1472 -192 -184 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -1024 192 264 ) ( -1536 192 264 ) ( -1024 192 256 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -1032 192 0 ) ( -1032 -192 0 ) ( -1544 192 0 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( 256 -192 64 ) ( 256 192 64 ) ( 256 -192 72 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 256 -192 256 ) ( 256 -192 264 ) ( 768 -192 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -192 -192 -128 ) ( 320 -192 -128 ) ( -192 192 -128 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 320 192 8 ) ( 320 192 0 ) ( 320 -192 8 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 768 192 264 ) ( 256 192 264 ) ( 768 192 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 760 192 0 ) ( 760 -192 0 ) ( 248 192 0 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
}
// brush 3
{
( 256 -192 64 ) ( 256 192 64 ) ( 256 -192 72 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( 256 -192 256 ) ( 256 -192 264 ) ( 768 -192 256 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -192 -192 -128 ) ( 320 -192 -128 ) ( -192 192 -128 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( 320 192 8 ) ( 320 192 0 ) ( 320 -192 8 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( 768 192 264 ) ( 256 192 264 ) ( 768 192 256 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( 760 192 0 ) ( 760 -192 0 ) ( 248 192 0 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -1536 -588 256 ) ( -1536 -204 256 ) ( -1536 -588 264 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -24 -256 256 ) ( -24 -256 264 ) ( 488 -256 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -1064 -576 -128 ) ( -552 -576 -128 ) ( -1064 -192 -128 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 320 96 8 ) ( 320 96 0 ) ( 320 -288 8 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -112 -192 0 ) ( -112 -576 0 ) ( -624 -192 0 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
}
// brush 4
{
( -1536 -588 256 ) ( -1536 -204 256 ) ( -1536 -588 264 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -24 -256 256 ) ( -24 -256 264 ) ( 488 -256 256 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -1064 -576 -128 ) ( -552 -576 -128 ) ( -1064 -192 -128 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( 320 96 8 ) ( 320 96 0 ) ( 320 -288 8 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -112 -192 0 ) ( -112 -576 0 ) ( -624 -192 0 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -1536 -148 256 ) ( -1536 236 256 ) ( -1536 -148 264 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -24 192 256 ) ( -24 192 264 ) ( 488 192 256 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -1064 -128 -128 ) ( -552 -128 -128 ) ( -1064 256 -128 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 320 552 8 ) ( 320 552 0 ) ( 320 168 8 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -104 256 264 ) ( -616 256 264 ) ( -104 256 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -112 256 0 ) ( -112 -128 0 ) ( -624 256 0 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
}
// brush 5
{
( -1536 -148 256 ) ( -1536 236 256 ) ( -1536 -148 264 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -24 192 256 ) ( -24 192 264 ) ( 488 192 256 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -1064 -128 -128 ) ( -552 -128 -128 ) ( -1064 256 -128 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( 320 552 8 ) ( 320 552 0 ) ( 320 168 8 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -104 256 264 ) ( -616 256 264 ) ( -104 256 256 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -112 256 0 ) ( -112 -128 0 ) ( -624 256 0 ) pbrtest/tiles032 0 0 0 0.250000 0.250000 0 0 0
( -1536 -192 384 ) ( -1536 192 384 ) ( -1536 -192 392 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -1536 -192 384 ) ( -1536 -192 392 ) ( -1024 -192 384 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -1984 -192 0 ) ( -1472 -192 0 ) ( -1984 192 0 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -1472 192 -56 ) ( -1472 192 -64 ) ( -1472 -192 -56 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -1024 192 392 ) ( -1536 192 392 ) ( -1024 192 384 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -1032 192 128 ) ( -1032 -192 128 ) ( -1544 192 128 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
}
// brush 6
{
( -1536 -192 384 ) ( -1536 192 384 ) ( -1536 -192 392 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -1536 -192 384 ) ( -1536 -192 392 ) ( -1024 -192 384 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -1984 -192 0 ) ( -1472 -192 0 ) ( -1984 192 0 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -1472 192 -56 ) ( -1472 192 -64 ) ( -1472 -192 -56 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -1024 192 392 ) ( -1536 192 392 ) ( -1024 192 384 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -1032 192 128 ) ( -1032 -192 128 ) ( -1544 192 128 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
}
// brush 7
{
( 256 -192 192 ) ( 256 192 192 ) ( 256 -192 200 ) common/skyportal 0 384 0 0.250000 0.250000 0 0 0
( 256 -192 384 ) ( 256 -192 392 ) ( 768 -192 384 ) common/skyportal 0 256 0 0.250000 0.250000 0 0 0
( -192 -192 0 ) ( 320 -192 0 ) ( -192 192 0 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
@ -78,26 +69,26 @@
( 768 192 392 ) ( 256 192 392 ) ( 768 192 384 ) common/skyportal 0 256 0 0.250000 0.250000 0 0 0
( 760 192 128 ) ( 760 -192 128 ) ( 248 192 128 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
}
// brush 7
{
( -1536 -588 384 ) ( -1536 -204 384 ) ( -1536 -588 392 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -24 -256 384 ) ( -24 -256 392 ) ( 488 -256 384 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -1064 -576 0 ) ( -552 -576 0 ) ( -1064 -192 0 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 0 120 136 ) ( 0 120 128 ) ( 0 -264 136 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -104 -192 392 ) ( -616 -192 392 ) ( -104 -192 384 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -112 -192 128 ) ( -112 -576 128 ) ( -624 -192 128 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
}
// brush 8
{
( -1536 -588 384 ) ( -1536 -204 384 ) ( -1536 -588 392 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -24 -256 384 ) ( -24 -256 392 ) ( 488 -256 384 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -1064 -576 0 ) ( -552 -576 0 ) ( -1064 -192 0 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 0 120 136 ) ( 0 120 128 ) ( 0 -264 136 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -104 -192 392 ) ( -616 -192 392 ) ( -104 -192 384 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -112 -192 128 ) ( -112 -576 128 ) ( -624 -192 128 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -1536 -148 384 ) ( -1536 236 384 ) ( -1536 -148 392 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -24 192 384 ) ( -24 192 392 ) ( 488 192 384 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -1064 -128 0 ) ( -552 -128 0 ) ( -1064 256 0 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 0 536 136 ) ( 0 536 128 ) ( 0 152 136 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -104 256 392 ) ( -616 256 392 ) ( -104 256 384 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -112 256 128 ) ( -112 -128 128 ) ( -624 256 128 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
}
// brush 9
{
( -1536 -148 384 ) ( -1536 236 384 ) ( -1536 -148 392 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -24 192 384 ) ( -24 192 392 ) ( 488 192 384 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -1064 -128 0 ) ( -552 -128 0 ) ( -1064 256 0 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 0 536 136 ) ( 0 536 128 ) ( 0 152 136 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -104 256 392 ) ( -616 256 392 ) ( -104 256 384 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -112 256 128 ) ( -112 -128 128 ) ( -624 256 128 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
}
// brush 10
{
( 0 -576 384 ) ( 0 -192 384 ) ( 0 -576 392 ) common/skyportal 0 256 0 0.250000 0.250000 0 0 0
( 272 -256 384 ) ( 272 -256 392 ) ( 784 -256 384 ) common/skyportal 0 256 0 0.250000 0.250000 0 0 0
( -768 -576 0 ) ( -256 -576 0 ) ( -768 -192 0 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
@ -105,7 +96,7 @@
( 192 -192 392 ) ( -320 -192 392 ) ( 192 -192 384 ) common/skyportal 0 256 0 0.250000 0.250000 0 0 0
( 184 -192 128 ) ( 184 -576 128 ) ( -328 -192 128 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
}
// brush 11
// brush 10
{
( -1472 -200 256 ) ( -1472 184 256 ) ( -1472 -200 264 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( -552 -192 256 ) ( -552 -192 264 ) ( -40 -192 256 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
@ -114,7 +105,7 @@
( -40 192 264 ) ( -552 192 264 ) ( -40 192 256 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( -48 192 192 ) ( -48 -192 192 ) ( -560 192 192 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
}
// brush 12
// brush 11
{
( 0 -120 384 ) ( 0 264 384 ) ( 0 -120 392 ) common/skyportal 496 256 0 0.250000 0.250000 0 0 0
( 272 192 384 ) ( 272 192 392 ) ( 784 192 384 ) common/skyportal 0 256 0 0.250000 0.250000 0 0 0
@ -123,7 +114,7 @@
( 192 256 392 ) ( -320 256 392 ) ( 192 256 384 ) common/skyportal 0 256 0 0.250000 0.250000 0 0 0
( 184 256 128 ) ( 184 -128 128 ) ( -328 256 128 ) common/skyportal 0 0 0 0.250000 0.250000 0 0 0
}
// brush 13
// brush 12
{
( 2560 448 512 ) ( 2560 456 512 ) ( 2560 448 768 ) common/skyportal 48 0 0 0.500000 0.500000 0 0 0
( 2560 448 512 ) ( 2560 448 768 ) ( 2568 448 512 ) common/skyportal 16 0 0 0.500000 0.500000 0 0 0
@ -132,7 +123,7 @@
( 2568 456 768 ) ( 2560 456 768 ) ( 2568 456 512 ) common/skyportal 16 0 0 0.500000 0.500000 0 0 0
( 2568 456 768 ) ( 2568 448 768 ) ( 2560 456 768 ) common/skyportal 16 16 0 0.500000 0.500000 0 0 0
}
// brush 14
// brush 13
{
( 2048 1024 256 ) ( 2560 1024 256 ) ( 2048 1536 256 ) skybox/sundown 384 0 0 0.500000 0.500000 0 0 0
( 2048 1024 256 ) ( 2048 1536 0 ) ( 2048 1536 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
@ -141,7 +132,7 @@
( 2048 1536 256 ) ( 2560 1536 0 ) ( 2560 1536 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
( 2048 1536 320 ) ( 2560 1024 320 ) ( 2048 1024 320 ) skybox/sundown 384 0 0 0.500000 0.500000 0 0 0
}
// brush 15
// brush 14
{
( 2560 1536 256 ) ( 2560 1536 0 ) ( 2048 1536 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
( 2048 1024 256 ) ( 2048 1536 0 ) ( 2048 1536 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
@ -150,7 +141,7 @@
( 2048 1600 256 ) ( 2560 1600 0 ) ( 2560 1600 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
( 2048 1536 256 ) ( 2560 1024 256 ) ( 2048 1024 256 ) skybox/sundown 384 0 0 0.500000 0.500000 0 0 0
}
// brush 16
// brush 15
{
( 2560 1024 256 ) ( 2560 1024 0 ) ( 2560 1536 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
( 2560 1024 0 ) ( 2048 1024 256 ) ( 2560 1024 256 ) skybox/sundown 32 0 0 0.500000 0.500000 0 0 0
@ -159,7 +150,7 @@
( 2048 1536 256 ) ( 2560 1536 0 ) ( 2560 1536 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
( 2048 1536 256 ) ( 2560 1024 256 ) ( 2048 1024 256 ) skybox/sundown 384 0 0 0.500000 0.500000 0 0 0
}
// brush 17
// brush 16
{
( 2560 1024 0 ) ( 2048 1024 0 ) ( 2560 1536 0 ) skybox/sundown 24 0 0 0.500000 0.500000 0 0 0
( 2048 1024 256 ) ( 2048 1536 0 ) ( 2048 1536 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
@ -168,7 +159,7 @@
( 2560 1536 256 ) ( 2560 1024 0 ) ( 2560 1024 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
( 2048 1536 256 ) ( 2560 1536 0 ) ( 2560 1536 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
}
// brush 18
// brush 17
{
( 2560 1024 256 ) ( 2048 1024 256 ) ( 2560 1024 0 ) skybox/sundown 32 0 0 0.500000 0.500000 0 0 0
( 2048 1024 256 ) ( 2048 1536 0 ) ( 2048 1536 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
@ -177,7 +168,7 @@
( 2560 1536 256 ) ( 2560 1024 0 ) ( 2560 1024 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
( 2048 1536 256 ) ( 2560 1024 256 ) ( 2048 1024 256 ) skybox/sundown 384 0 0 0.500000 0.500000 0 0 0
}
// brush 19
// brush 18
{
( 2048 1536 256 ) ( 2048 1536 0 ) ( 2048 1024 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
( 1984 1024 256 ) ( 1984 1536 0 ) ( 1984 1536 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
@ -186,7 +177,7 @@
( 2048 1536 256 ) ( 2560 1536 0 ) ( 2560 1536 256 ) skybox/sundown 0 0 0 0.500000 0.500000 0 0 0
( 2048 1536 256 ) ( 2560 1024 256 ) ( 2048 1024 256 ) skybox/sundown 384 0 0 0.500000 0.500000 0 0 0
}
// brush 20
// brush 19
{
( 120 -8 0 ) ( 120 12 0 ) ( 120 -8 4 ) pbrtest/metal022 0 0 0 0.500000 0.500000 0 0 0
( 120 -8 0 ) ( 120 -8 4 ) ( 140 -8 0 ) pbrtest/metal022 0 0 0 0.500000 0.500000 0 0 0
@ -195,6 +186,132 @@
( 140 8 -60 ) ( 120 8 -60 ) ( 140 8 -64 ) pbrtest/metal022 0 0 0 0.500000 0.500000 0 0 0
( 140 12 4 ) ( 140 -8 4 ) ( 120 12 4 ) pbrtest/metal022 0 0 0 0.500000 0.500000 0 0 0
}
// brush 20
{
( 140 76 4 ) ( 140 56 4 ) ( 120 76 4 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 140 72 -60 ) ( 120 72 -60 ) ( 140 72 -64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 136 76 4 ) ( 136 76 0 ) ( 136 56 4 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 120 56 -64 ) ( 140 56 -64 ) ( 120 76 -64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 120 56 0 ) ( 120 56 4 ) ( 140 56 0 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 120 56 0 ) ( 120 76 0 ) ( 120 56 4 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
}
// brush 21
{
( 120 -72 0 ) ( 120 -52 0 ) ( 120 -72 4 ) pbrtest/woodsiding001 -136 208 90 0.250000 0.250000 0 0 0
( 120 -72 0 ) ( 120 -72 4 ) ( 140 -72 0 ) pbrtest/woodsiding001 -136 208 90 0.250000 0.250000 0 0 0
( 120 -72 -64 ) ( 140 -72 -64 ) ( 120 -52 -64 ) pbrtest/woodsiding001 -136 208 90 0.250000 0.250000 0 0 0
( 136 -52 4 ) ( 136 -52 0 ) ( 136 -72 4 ) pbrtest/woodsiding001 -136 208 90 0.250000 0.250000 0 0 0
( 140 -56 -60 ) ( 120 -56 -60 ) ( 140 -56 -64 ) pbrtest/woodsiding001 -136 208 90 0.250000 0.250000 0 0 0
( 140 -52 4 ) ( 140 -72 4 ) ( 120 -52 4 ) pbrtest/woodsiding001 -136 208 90 0.250000 0.250000 0 0 0
}
// brush 22
{
( 80 96 -72 ) ( 168 96 -72 ) ( 80 -96 -72 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -1536 -132 0 ) ( -1536 252 0 ) ( -1536 -132 8 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( -552 -192 0 ) ( -552 -192 8 ) ( -40 -192 0 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( -552 -192 -128 ) ( -40 -192 -128 ) ( -552 192 -128 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( 256 232 8 ) ( 256 232 0 ) ( 256 -152 8 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( -40 192 8 ) ( -552 192 8 ) ( -40 192 0 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
}
// brush 23
{
( 184 72 -8 ) ( 184 -120 -8 ) ( 184 72 -72 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 96 -120 -8 ) ( 184 -120 -8 ) ( 184 -120 -72 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( 168 96 -72 ) ( 80 96 -72 ) ( 80 -96 -72 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( 256 232 8 ) ( 256 232 0 ) ( 256 -152 8 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( -40 192 8 ) ( -552 192 8 ) ( -40 192 0 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( -48 192 -64 ) ( -48 -192 -64 ) ( -560 192 -64 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
}
// brush 24
{
( 8 64 -8 ) ( 96 64 -8 ) ( 8 64 -72 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( 0 -184 -8 ) ( 0 8 -8 ) ( 0 8 -72 ) pbrtest/woodfloor041 256 0 0 0.250000 0.250000 0 0 0
( 168 32 -72 ) ( 80 32 -72 ) ( 80 -160 -72 ) pbrtest/woodfloor041 0 -256 0 0.250000 0.250000 0 0 0
( -1536 -196 0 ) ( -1536 188 0 ) ( -1536 -196 8 ) pbrtest/woodfloor041 256 0 0 0.250000 0.250000 0 0 0
( -40 128 8 ) ( -552 128 8 ) ( -40 128 0 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( -48 128 -64 ) ( -48 -256 -64 ) ( -560 128 -64 ) pbrtest/woodfloor041 0 -256 0 0.250000 0.250000 0 0 0
}
// brush 25
{
( 0 -96 -8 ) ( 0 96 -8 ) ( 0 -96 -72 ) pbrtest/metalplates006 0 0 0 0.250000 0.250000 0 0 0
( 80 -64 -8 ) ( -8 -64 -8 ) ( -8 -64 -72 ) pbrtest/metalplates006 0 0 0 0.250000 0.250000 0 0 0
( 24 -128 -8 ) ( 112 -128 -8 ) ( 112 -128 -72 ) pbrtest/metalplates006 0 0 0 0.250000 0.250000 0 0 0
( 168 96 -72 ) ( 80 96 -72 ) ( 80 -96 -72 ) pbrtest/metalplates006 0 0 0 0.250000 0.250000 0 0 0
( -1536 -132 0 ) ( -1536 252 0 ) ( -1536 -132 8 ) pbrtest/metalplates006 0 0 0 0.250000 0.250000 0 0 0
( -48 192 -64 ) ( -48 -192 -64 ) ( -560 192 -64 ) pbrtest/metalplates006 0 0 0 0.250000 0.250000 0 0 0
}
// brush 26
{
( 168 96 -72 ) ( 80 96 -72 ) ( 80 -96 -72 ) common/caulk 32 0 0 0.250000 0.250000 0 0 0
( 80 -96 -64 ) ( 80 96 -64 ) ( 168 96 -64 ) liquid/water2 32 0 0 0.250000 0.250000 0 0 0
( 96 -120 -8 ) ( 184 -120 -8 ) ( 184 -120 -72 ) common/caulk 32 -32 0 0.250000 0.250000 0 0 0
( 184 -120 -8 ) ( 184 72 -8 ) ( 184 72 -72 ) common/caulk 0 -32 0 0.250000 0.250000 0 0 0
( 168 120 -8 ) ( 80 120 -8 ) ( 80 120 -72 ) common/caulk 32 -32 0 0.250000 0.250000 0 0 0
( 72 96 -8 ) ( 72 -96 -8 ) ( 72 -96 -72 ) common/caulk 0 -32 0 0.250000 0.250000 0 0 0
}
// brush 27
{
( 64 192 -64 ) ( 64 -192 -64 ) ( -448 192 -64 ) pbrtest/pavingstones094 -448 0 0 0.250000 0.250000 0 0 0
( 72 192 8 ) ( -440 192 8 ) ( 72 192 0 ) pbrtest/pavingstones094 -448 0 0 0.250000 0.250000 0 0 0
( 0 -180 0 ) ( 0 204 0 ) ( 0 -180 8 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( 280 96 -72 ) ( 192 96 -72 ) ( 192 -96 -72 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( 184 -120 -8 ) ( 184 72 -8 ) ( 184 72 -72 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( 192 120 -8 ) ( 280 120 -8 ) ( 192 120 -72 ) pbrtest/concrete028 -448 0 0 0.250000 0.250000 0 0 0
}
// brush 28
{
( -48 248 -64 ) ( -48 -136 -64 ) ( -560 248 -64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -1536 -76 0 ) ( -1536 308 0 ) ( -1536 -76 8 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 168 152 -72 ) ( 80 152 -72 ) ( 80 -40 -72 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 24 -64 -8 ) ( 112 -64 -8 ) ( 112 -64 -72 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 80 0 -8 ) ( -8 0 -8 ) ( -8 0 -72 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 0 -40 -8 ) ( 0 152 -8 ) ( 0 -40 -72 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
}
// brush 29
{
( 0 24 -8 ) ( 0 216 -8 ) ( 0 24 -72 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 80 64 -8 ) ( -8 64 -8 ) ( -8 64 -72 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 24 0 -8 ) ( 112 0 -8 ) ( 112 0 -72 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 168 216 -72 ) ( 80 216 -72 ) ( 80 24 -72 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( -1536 -12 0 ) ( -1536 372 0 ) ( -1536 -12 8 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( -48 312 -64 ) ( -48 -72 -64 ) ( -560 312 -64 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
}
// brush 30
{
( -48 120 -64 ) ( -48 -264 -64 ) ( -560 120 -64 ) pbrtest/pavingstones094 0 -288 0 0.250000 0.250000 0 0 0
( -1536 -204 0 ) ( -1536 180 0 ) ( -1536 -204 8 ) pbrtest/pavingstones094 288 0 0 0.250000 0.250000 0 0 0
( 168 24 -72 ) ( 80 24 -72 ) ( 80 -168 -72 ) common/caulk 0 -32 0 0.250000 0.250000 0 0 0
( 24 -192 -8 ) ( 112 -192 -8 ) ( 112 -192 -72 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( 80 -128 -8 ) ( -8 -128 -8 ) ( -8 -128 -72 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( 0 -168 -8 ) ( 0 24 -8 ) ( 0 -168 -72 ) pbrtest/concrete028 288 0 0 0.250000 0.250000 0 0 0
}
// brush 31
{
( 136 192 -64 ) ( 136 -192 -64 ) ( -376 192 -64 ) pbrtest/pavingstones094 -224 0 0 0.250000 0.250000 0 0 0
( 256 248 8 ) ( 256 248 0 ) ( 256 -136 8 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( 1096 -192 0 ) ( 1096 -192 8 ) ( 1608 -192 0 ) pbrtest/pavingstones094 -224 0 0 0.250000 0.250000 0 0 0
( 72 -180 0 ) ( 72 204 0 ) ( 72 -180 8 ) pbrtest/pavingstones094 0 0 0 0.250000 0.250000 0 0 0
( 352 96 -72 ) ( 264 96 -72 ) ( 264 -96 -72 ) common/caulk -32 0 0 0.250000 0.250000 0 0 0
( 328 -120 -8 ) ( 240 -120 -8 ) ( 328 -120 -72 ) pbrtest/concrete028 -224 0 0 0.250000 0.250000 0 0 0
}
// brush 32
{
( 80 -192 -8 ) ( 168 -192 -8 ) ( 80 -192 -72 ) pbrtest/concrete028 -448 0 0 0.250000 0.250000 0 0 0
( 72 -432 -8 ) ( 72 -240 -8 ) ( 72 -240 -72 ) common/caulk 32 0 0 0.250000 0.250000 0 0 0
( 280 24 -72 ) ( 192 24 -72 ) ( 192 -168 -72 ) common/caulk 0 -32 0 0.250000 0.250000 0 0 0
( 0 -252 0 ) ( 0 132 0 ) ( 0 -252 8 ) pbrtest/pavingstones094 288 0 0 0.250000 0.250000 0 0 0
( 72 120 8 ) ( -440 120 8 ) ( 72 120 0 ) pbrtest/pavingstones094 -448 0 0 0.250000 0.250000 0 0 0
( 64 120 -64 ) ( 64 -264 -64 ) ( -448 120 -64 ) pbrtest/pavingstones094 -448 -288 0 0.250000 0.250000 0 0 0
}
// brush 33
{
( 0 152 -8 ) ( 0 344 -8 ) ( 0 152 -72 ) pbrtest/concrete028 -480 0 0 0.250000 0.250000 0 0 0
( 80 192 -8 ) ( -8 192 -8 ) ( -8 192 -72 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( 24 128 -8 ) ( 112 128 -8 ) ( 112 128 -72 ) common/caulk 0 0 0 0.250000 0.250000 0 0 0
( 168 344 -72 ) ( 80 344 -72 ) ( 80 152 -72 ) common/caulk 0 32 0 0.250000 0.250000 0 0 0
( -1536 116 0 ) ( -1536 500 0 ) ( -1536 116 8 ) pbrtest/pavingstones094 -480 0 0 0.250000 0.250000 0 0 0
( -48 440 -64 ) ( -48 56 -64 ) ( -560 440 -64 ) pbrtest/pavingstones094 0 480 0 0.250000 0.250000 0 0 0
}
}
// entity 1
{
@ -251,28 +368,7 @@
"classname" "prop_physics"
"origin" "-1344 64 0"
"model" "models/props_gltf/boombox.gltf"
"modelscale" "25"
"mins" "-12 -12 -12"
"modelscale" "25"
"mins" "-12 -12 -12"
"maxs" "12 12 12"
}
// entity 10
{
"classname" "prop_physics"
"origin" "-1000 64 0"
"model" "models/props_gltf/waterbottle.gltf"
"modelscale" "1"
"mins" "-12 -12 -12"
"maxs" "12 12 12"
}
// entity 10
{
"classname" "ncItem"
"origin" "-1000 0 -32"
"model" "models/props_gltf/glTF/FlightHelmet.gltf"
"modelscale" "1"
"mins" "-12 -12 -12"
"maxs" "12 12 64"
"spin" "1"
}

View file

@ -1,147 +1,147 @@
// entity 0
{
"classname" "worldspawn"
"skyname" "smudge"
"classname" "worldspawn"
// brush 0
{
( 128 128 64 ) ( -128 128 64 ) ( 128 128 -64 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( 128 128 -64 ) ( 128 -128 64 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -72 ) ( 128 -128 -72 ) ( -128 128 -72 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 -128 64 ) ( 128 -128 -64 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 128 -64 ) ( -128 -128 64 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
( -128 128 -64 ) ( 128 -128 -64 ) ( -128 -128 -64 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 128 -64 ) ( -128 -128 64 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 -128 64 ) ( 128 -128 -64 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -72 ) ( 128 -128 -72 ) ( -128 128 -72 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( 128 128 -64 ) ( 128 -128 64 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( -128 128 64 ) ( 128 128 -64 ) dev/dev_measurewall01a 0 0 0 0.250000 0.250000 0 0 0
}
// brush 1
{
( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( -128 128 64 ) ( 128 128 -64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( 128 128 -64 ) ( 128 -128 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 128 -64 ) ( -128 -128 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -128 128 64 ) ( 128 -128 64 ) ( 128 128 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 64 64 64 ) ( -64 64 72 ) ( 64 64 72 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 64 64 64 ) ( -64 64 72 ) ( 64 64 72 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -128 128 64 ) ( 128 -128 64 ) ( 128 128 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 128 -64 ) ( -128 -128 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( 128 128 -64 ) ( 128 -128 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( -128 128 64 ) ( 128 128 -64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
}
// brush 2
{
( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( 128 128 -64 ) ( 128 -128 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 -128 64 ) ( 128 -128 -64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -128 128 64 ) ( 128 -128 64 ) ( 128 128 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 64 64 72 ) ( -64 64 72 ) ( 64 64 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 64 -64 72 ) ( 64 64 64 ) ( 64 64 72 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 64 -64 72 ) ( 64 64 64 ) ( 64 64 72 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 64 64 72 ) ( -64 64 72 ) ( 64 64 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -128 128 64 ) ( 128 -128 64 ) ( 128 128 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 -128 64 ) ( 128 -128 -64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( 128 128 -64 ) ( 128 -128 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
}
// brush 3
{
( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 -128 64 ) ( 128 -128 -64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 128 -64 ) ( -128 -128 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -128 128 64 ) ( 128 -128 64 ) ( 128 128 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 64 64 72 ) ( 64 64 64 ) ( 64 -64 72 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 64 -64 64 ) ( -64 -64 72 ) ( -64 -64 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 64 -64 64 ) ( -64 -64 72 ) ( -64 -64 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 64 64 72 ) ( 64 64 64 ) ( 64 -64 72 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -128 128 64 ) ( 128 -128 64 ) ( 128 128 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 128 -64 ) ( -128 -128 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 -128 64 ) ( 128 -128 -64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
}
// brush 4
{
( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 128 -64 ) ( -128 -128 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -128 128 64 ) ( 128 -128 64 ) ( 128 128 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( 64 64 72 ) ( -64 64 72 ) ( 64 64 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -64 -64 64 ) ( -64 -64 72 ) ( 64 -64 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -64 -64 72 ) ( -64 64 64 ) ( -64 -64 64 ) pbrtest/bricks023 0 0 0 0.250000 0.250000 0 0 0
( -64 -64 72 ) ( -64 64 64 ) ( -64 -64 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -64 -64 64 ) ( -64 -64 72 ) ( 64 -64 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 64 64 72 ) ( -64 64 72 ) ( 64 64 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -128 128 64 ) ( 128 -128 64 ) ( 128 128 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 128 -64 ) ( -128 -128 64 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
}
// brush 5
{
( 64 64 144 ) ( 64 -64 144 ) ( -64 64 144 ) common/skyportal 0 0 0 0.500000 0.500000 0 0 0
( 64 64 144 ) ( -64 64 144 ) ( 64 64 128 ) common/skyportal 0 0 0 0.500000 0.500000 0 0 0
( 64 64 144 ) ( 64 64 128 ) ( 64 -64 144 ) common/skyportal 0 0 0 0.500000 0.500000 0 0 0
( -64 -64 128 ) ( 64 -64 128 ) ( -64 64 128 ) common/skyportal 0 0 0 0.500000 0.500000 0 0 0
( -64 -64 128 ) ( -64 -64 144 ) ( 64 -64 128 ) common/skyportal 0 0 0 0.500000 0.500000 0 0 0
( -64 -64 128 ) ( -64 64 128 ) ( -64 -64 144 ) common/skyportal 0 0 0 0.500000 0.500000 0 0 0
( -64 -64 128 ) ( -64 -64 144 ) ( 64 -64 128 ) common/skyportal 0 0 0 0.500000 0.500000 0 0 0
( -64 -64 128 ) ( 64 -64 128 ) ( -64 64 128 ) common/skyportal 0 0 0 0.500000 0.500000 0 0 0
( 64 64 144 ) ( 64 64 128 ) ( 64 -64 144 ) common/skyportal 0 0 0 0.500000 0.500000 0 0 0
( 64 64 144 ) ( -64 64 144 ) ( 64 64 128 ) common/skyportal 0 0 0 0.500000 0.500000 0 0 0
( 64 64 144 ) ( 64 -64 144 ) ( -64 64 144 ) common/skyportal 0 0 0 0.500000 0.500000 0 0 0
}
// brush 6
{
( 0 32 32 ) ( 0 -48 32 ) ( -8 32 32 ) dev/dev_measurewall01a 384 264 0 0.250000 0.250000 0 0 0
( 0 32 24 ) ( -8 32 24 ) ( 0 32 16 ) dev/dev_measurewall01a 384 264 0 0.250000 0.250000 0 0 0
( 8 32 -56 ) ( 8 32 -64 ) ( 8 -48 -56 ) dev/dev_measurewall01a 384 264 0 0.250000 0.250000 0 0 0
( -8 -40 -64 ) ( 0 -40 -64 ) ( -8 40 -64 ) dev/dev_measurewall01a 384 264 0 0.250000 0.250000 0 0 0
( -8 -32 -64 ) ( -8 -32 -56 ) ( 0 -32 -64 ) dev/dev_measurewall01a 384 264 0 0.250000 0.250000 0 0 0
( -8 -40 -64 ) ( -8 40 -64 ) ( -8 -40 -56 ) dev/dev_measurewall01a 384 264 0 0.250000 0.250000 0 0 0
( -8 -32 -64 ) ( -8 -32 -56 ) ( 0 -32 -64 ) dev/dev_measurewall01a 384 264 0 0.250000 0.250000 0 0 0
( -8 -40 -64 ) ( 0 -40 -64 ) ( -8 40 -64 ) dev/dev_measurewall01a 384 264 0 0.250000 0.250000 0 0 0
( 8 32 -56 ) ( 8 32 -64 ) ( 8 -48 -56 ) dev/dev_measurewall01a 384 264 0 0.250000 0.250000 0 0 0
( 0 32 24 ) ( -8 32 24 ) ( 0 32 16 ) dev/dev_measurewall01a 384 264 0 0.250000 0.250000 0 0 0
( 0 32 32 ) ( 0 -48 32 ) ( -8 32 32 ) dev/dev_measurewall01a 384 264 0 0.250000 0.250000 0 0 0
}
// brush 7
{
( 128 128 -64 ) ( -128 128 64 ) ( 128 128 64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 128 -64 ) ( -128 -128 64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( 128 -128 -64 ) ( -128 128 -64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( 128 128 -64 ) ( 128 -128 64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( 128 136 64 ) ( -128 136 64 ) ( 128 136 -64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( 128 -128 64 ) ( -128 128 64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( 128 136 64 ) ( -128 136 64 ) ( 128 136 -64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( 128 128 -64 ) ( 128 -128 64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( 128 -128 -64 ) ( -128 128 -64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 128 -64 ) ( -128 -128 64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( 128 128 -64 ) ( -128 128 64 ) ( 128 128 64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
}
// brush 8
{
( 128 -128 -64 ) ( -128 -128 64 ) ( -128 -128 -64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 128 -64 ) ( -128 -128 64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( -128 -136 -64 ) ( -128 -136 64 ) ( 128 -136 -64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( 128 -128 -64 ) ( -128 128 -64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( 128 128 64 ) ( 128 128 -64 ) ( 128 -128 64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( 128 128 64 ) ( 128 -128 64 ) ( -128 128 64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( 128 128 64 ) ( 128 128 -64 ) ( 128 -128 64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( 128 -128 -64 ) ( -128 128 -64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( -128 -136 -64 ) ( -128 -136 64 ) ( 128 -136 -64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 128 -64 ) ( -128 -128 64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( 128 -128 -64 ) ( -128 -128 64 ) ( -128 -128 -64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
}
// brush 9
{
( -128 -128 64 ) ( -128 128 -64 ) ( -128 -128 -64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( -136 -128 -64 ) ( -136 128 -64 ) ( -136 -128 64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 -128 64 ) ( 128 -128 -64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( 128 -128 -64 ) ( -128 128 -64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( -128 128 64 ) ( 128 128 -64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( 128 -128 64 ) ( -128 128 64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( 128 128 64 ) ( -128 128 64 ) ( 128 128 -64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( 128 -128 -64 ) ( -128 128 -64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( -128 -128 -64 ) ( -128 -128 64 ) ( 128 -128 -64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( -136 -128 -64 ) ( -136 128 -64 ) ( -136 -128 64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
( -128 -128 64 ) ( -128 128 -64 ) ( -128 -128 -64 ) dev/dev_measurewall01d 0 256 0 0.250000 0.250000 0 0 0
}
// brush 10
{
( 392 128 64 ) ( 392 -128 64 ) ( 136 128 64 ) dev/dev_measurewall01d -32 256 0 -0.250000 0.250000 0 0 0
( 392 128 64 ) ( 136 128 64 ) ( 392 128 -64 ) dev/dev_measurewall01d -32 256 0 -0.250000 0.250000 0 0 0
( 136 -128 -64 ) ( 392 -128 -64 ) ( 136 128 -64 ) dev/dev_measurewall01d -32 256 0 -0.250000 0.250000 0 0 0
( 136 0 -64 ) ( 136 0 64 ) ( 392 0 -64 ) dev/dev_measurewall01d -32 256 0 -0.250000 0.250000 0 0 0
( 128 -128 -64 ) ( 128 128 -64 ) ( 128 -128 64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( 136 -128 64 ) ( 136 128 -64 ) ( 136 -128 -64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( 128 -128 -64 ) ( 128 128 -64 ) ( 128 -128 64 ) dev/dev_measurewall01d 0 256 0 -0.250000 0.250000 0 0 0
( 136 0 -64 ) ( 136 0 64 ) ( 392 0 -64 ) dev/dev_measurewall01d -32 256 0 -0.250000 0.250000 0 0 0
( 136 -128 -64 ) ( 392 -128 -64 ) ( 136 128 -64 ) dev/dev_measurewall01d -32 256 0 -0.250000 0.250000 0 0 0
( 392 128 64 ) ( 136 128 64 ) ( 392 128 -64 ) dev/dev_measurewall01d -32 256 0 -0.250000 0.250000 0 0 0
( 392 128 64 ) ( 392 -128 64 ) ( 136 128 64 ) dev/dev_measurewall01d -32 256 0 -0.250000 0.250000 0 0 0
}
// brush 11
{
( 136 -128 64 ) ( 136 128 -64 ) ( 136 -128 -64 ) dev/dev_measurewall01a 0 256 0 -0.250000 0.250000 0 0 0
( 128 -128 -64 ) ( 128 128 -64 ) ( 128 -128 64 ) dev/dev_measurewall01a 0 256 0 -0.250000 0.250000 0 0 0
( 136 -128 -64 ) ( 136 -128 64 ) ( 392 -128 -64 ) dev/dev_measurewall01a 0 256 0 -0.250000 0.250000 0 0 0
( 136 -128 -64 ) ( 392 -128 -64 ) ( 136 128 -64 ) dev/dev_measurewall01a 0 256 0 -0.250000 0.250000 0 0 0
( 400 0 64 ) ( 144 0 64 ) ( 400 0 -64 ) dev/dev_measurewall01a 0 256 0 -0.250000 0.250000 0 0 0
( 392 128 64 ) ( 392 -128 64 ) ( 136 128 64 ) dev/dev_measurewall01a 0 256 0 -0.250000 0.250000 0 0 0
( 400 0 64 ) ( 144 0 64 ) ( 400 0 -64 ) dev/dev_measurewall01a 0 256 0 -0.250000 0.250000 0 0 0
( 136 -128 -64 ) ( 392 -128 -64 ) ( 136 128 -64 ) dev/dev_measurewall01a 0 256 0 -0.250000 0.250000 0 0 0
( 136 -128 -64 ) ( 136 -128 64 ) ( 392 -128 -64 ) dev/dev_measurewall01a 0 256 0 -0.250000 0.250000 0 0 0
( 128 -128 -64 ) ( 128 128 -64 ) ( 128 -128 64 ) dev/dev_measurewall01a 0 256 0 -0.250000 0.250000 0 0 0
( 136 -128 64 ) ( 136 128 -64 ) ( 136 -128 -64 ) dev/dev_measurewall01a 0 256 0 -0.250000 0.250000 0 0 0
}
}
// entity 1
{
"classname" "info_player_start"
"origin" "-96.000000 0.000000 0.000000"
"classname" "info_player_start"
}
// entity 2
{
"classname" "light_environment"
"origin" "0.000000 0.000000 96.000000"
"color" "1 1 1"
"intensity" "2000"
"pitch" "-145"
"samples" "16"
"sunspreadangle" "6"
"filterradius" "1"
"ambientcolor" "0.7 0.8 1"
"filterradius" "1"
"sunspreadangle" "6"
"samples" "16"
"pitch" "-145"
"intensity" "2000"
"color" "1 1 1"
"origin" "0.000000 0.000000 96.000000"
"classname" "light_environment"
}
// entity 3
{
"classname" "env_sun"
"origin" "0.000000 0.000000 96.000000"
"pitch" "-44"
"angle" "325"
"pitch" "-44"
"origin" "0.000000 0.000000 96.000000"
"classname" "env_sun"
}
// entity 4
{
"classname" "env_cubemap"
"origin" "64 0 -16"
"classname" "env_cubemap"
}
// entity 5
{
"origin" "-64 0 -16"
"classname" "env_cubemap"
"origin" "-64 0 -16"
}

View file

@ -3,57 +3,57 @@
"classname" "worldspawn"
// brush 0
{
( -256 -192 0 ) ( -256 192 0 ) ( -256 -192 8 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( -256 -192 0 ) ( -256 -192 8 ) ( 256 -192 0 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( -256 -192 -128 ) ( 256 -192 -128 ) ( -256 192 -128 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( 256 192 8 ) ( 256 192 0 ) ( 256 -192 8 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( 256 192 8 ) ( -256 192 8 ) ( 256 192 0 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( 248 192 -64 ) ( 248 -192 -64 ) ( -264 192 -64 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( 256 192 8 ) ( -256 192 8 ) ( 256 192 0 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( 256 192 8 ) ( 256 192 0 ) ( 256 -192 8 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( -256 -192 -128 ) ( 256 -192 -128 ) ( -256 192 -128 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( -256 -192 0 ) ( -256 -192 8 ) ( 256 -192 0 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
( -256 -192 0 ) ( -256 192 0 ) ( -256 -192 8 ) pbrtest/woodfloor041 0 0 0 0.250000 0.250000 0 0 0
}
// brush 1
{
( -256 -192 256 ) ( -256 192 256 ) ( -256 -192 264 ) pbrtest/woodsiding001 0 0 0 0.250000 0.250000 0 0 0
( -256 -192 256 ) ( -256 -192 264 ) ( 256 -192 256 ) pbrtest/woodsiding001 0 0 0 0.250000 0.250000 0 0 0
( -256 -192 128 ) ( 256 -192 128 ) ( -256 192 128 ) pbrtest/woodsiding001 0 0 0 0.250000 0.250000 0 0 0
( 256 192 264 ) ( 256 192 256 ) ( 256 -192 264 ) pbrtest/woodsiding001 0 0 0 0.250000 0.250000 0 0 0
( 256 192 264 ) ( -256 192 264 ) ( 256 192 256 ) pbrtest/woodsiding001 0 0 0 0.250000 0.250000 0 0 0
( 248 192 192 ) ( 248 -192 192 ) ( -264 192 192 ) pbrtest/woodsiding001 0 0 0 0.250000 0.250000 0 0 0
( 256 192 264 ) ( -256 192 264 ) ( 256 192 256 ) pbrtest/woodsiding001 0 0 0 0.250000 0.250000 0 0 0
( 256 192 264 ) ( 256 192 256 ) ( 256 -192 264 ) pbrtest/woodsiding001 0 0 0 0.250000 0.250000 0 0 0
( -256 -192 128 ) ( 256 -192 128 ) ( -256 192 128 ) pbrtest/woodsiding001 0 0 0 0.250000 0.250000 0 0 0
( -256 -192 256 ) ( -256 -192 264 ) ( 256 -192 256 ) pbrtest/woodsiding001 0 0 0 0.250000 0.250000 0 0 0
( -256 -192 256 ) ( -256 192 256 ) ( -256 -192 264 ) pbrtest/woodsiding001 0 0 0 0.250000 0.250000 0 0 0
}
// brush 2
{
( -320 -192 256 ) ( -320 192 256 ) ( -320 -192 264 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -320 -192 256 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -768 -192 -128 ) ( -256 -192 -128 ) ( -768 192 -128 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -256 192 8 ) ( -256 192 0 ) ( -256 -192 8 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 192 192 264 ) ( -320 192 264 ) ( 192 192 256 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 184 192 192 ) ( 184 -192 192 ) ( -328 192 192 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 184 192 192 ) ( 184 -192 192 ) ( -328 192 192 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 192 192 264 ) ( -320 192 264 ) ( 192 192 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -256 192 8 ) ( -256 192 0 ) ( -256 -192 8 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -768 -192 -128 ) ( -256 -192 -128 ) ( -768 192 -128 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -320 -192 256 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -320 -192 256 ) ( -320 192 256 ) ( -320 -192 264 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
}
// brush 3
{
( 256 -192 256 ) ( 256 192 256 ) ( 256 -192 264 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 256 -192 256 ) ( 256 -192 264 ) ( 768 -192 256 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -192 -192 -128 ) ( 320 -192 -128 ) ( -192 192 -128 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 320 192 8 ) ( 320 192 0 ) ( 320 -192 8 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 768 192 264 ) ( 256 192 264 ) ( 768 192 256 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 760 192 192 ) ( 760 -192 192 ) ( 248 192 192 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 760 192 192 ) ( 760 -192 192 ) ( 248 192 192 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 768 192 264 ) ( 256 192 264 ) ( 768 192 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 320 192 8 ) ( 320 192 0 ) ( 320 -192 8 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -192 -192 -128 ) ( 320 -192 -128 ) ( -192 192 -128 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 256 -192 256 ) ( 256 -192 264 ) ( 768 -192 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 256 -192 256 ) ( 256 192 256 ) ( 256 -192 264 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
}
// brush 4
{
( -320 -576 256 ) ( -320 -192 256 ) ( -320 -576 264 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 272 -256 256 ) ( 272 -256 264 ) ( 784 -256 256 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -768 -576 -128 ) ( -256 -576 -128 ) ( -768 -192 -128 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 320 96 8 ) ( 320 96 0 ) ( 320 -288 8 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 184 -192 192 ) ( 184 -576 192 ) ( -328 -192 192 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 184 -192 192 ) ( 184 -576 192 ) ( -328 -192 192 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 320 96 8 ) ( 320 96 0 ) ( 320 -288 8 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -768 -576 -128 ) ( -256 -576 -128 ) ( -768 -192 -128 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 272 -256 256 ) ( 272 -256 264 ) ( 784 -256 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -320 -576 256 ) ( -320 -192 256 ) ( -320 -576 264 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
}
// brush 5
{
( -320 -128 256 ) ( -320 256 256 ) ( -320 -128 264 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 272 192 256 ) ( 272 192 264 ) ( 784 192 256 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( -768 -128 -128 ) ( -256 -128 -128 ) ( -768 256 -128 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 320 544 8 ) ( 320 544 0 ) ( 320 160 8 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 192 256 264 ) ( -320 256 264 ) ( 192 256 256 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 184 256 192 ) ( 184 -128 192 ) ( -328 256 192 ) pbrtest/bricks045 0 0 0 0.250000 0.250000 0 0 0
( 184 256 192 ) ( 184 -128 192 ) ( -328 256 192 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 192 256 264 ) ( -320 256 264 ) ( 192 256 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 320 544 8 ) ( 320 544 0 ) ( 320 160 8 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -768 -128 -128 ) ( -256 -128 -128 ) ( -768 256 -128 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( 272 192 256 ) ( 272 192 264 ) ( 784 192 256 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
( -320 -128 256 ) ( -320 256 256 ) ( -320 -128 264 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
}
}
// entity 1
@ -66,79 +66,79 @@
}
// entity 3
{
"light" "50"
"origin" "192.000000 128.000000 64.000000"
"classname" "light"
"origin" "192.000000 128.000000 64.000000"
"light" "50"
}
// entity 4
{
"light" "50"
"origin" "192.000000 -128.000000 64.000000"
"classname" "light"
"origin" "192.000000 -128.000000 64.000000"
"light" "50"
}
// entity 5
{
"OnPressed" "foobar,Stop,,0,-1"
"classname" "func_button"
"OnPressed" "foobar,Stop,,0,-1"
// brush 0
{
( 48 -80 64 ) ( 48 -40 64 ) ( 48 -80 72 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 40 -80 64 ) ( 40 -80 72 ) ( 80 -80 64 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 48 -80 -64 ) ( 88 -80 -64 ) ( 48 -40 -64 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 80 -40 72 ) ( 80 -40 64 ) ( 80 -80 72 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 88 -48 72 ) ( 48 -48 72 ) ( 88 -48 64 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 88 -40 0 ) ( 88 -80 0 ) ( 48 -40 0 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 88 -48 72 ) ( 48 -48 72 ) ( 88 -48 64 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 80 -40 72 ) ( 80 -40 64 ) ( 80 -80 72 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 48 -80 -64 ) ( 88 -80 -64 ) ( 48 -40 -64 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 40 -80 64 ) ( 40 -80 72 ) ( 80 -80 64 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 48 -80 64 ) ( 48 -40 64 ) ( 48 -80 72 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
}
}
// entity 6
{
"OnPressed" "foobar,Start,,0,-1"
"classname" "func_button"
"OnPressed" "foobar,Start,,0,-1"
// brush 0
{
( 48 112 64 ) ( 48 152 64 ) ( 48 112 72 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 40 112 64 ) ( 40 112 72 ) ( 80 112 64 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 48 112 -64 ) ( 88 112 -64 ) ( 48 152 -64 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 80 152 72 ) ( 80 152 64 ) ( 80 112 72 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 88 144 72 ) ( 48 144 72 ) ( 88 144 64 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 88 152 0 ) ( 88 112 0 ) ( 48 152 0 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 88 144 72 ) ( 48 144 72 ) ( 88 144 64 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 80 152 72 ) ( 80 152 64 ) ( 80 112 72 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 48 112 -64 ) ( 88 112 -64 ) ( 48 152 -64 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 40 112 64 ) ( 40 112 72 ) ( 80 112 64 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
( 48 112 64 ) ( 48 152 64 ) ( 48 112 72 ) pbrtest/metal022 0 0 0 0.250000 0.250000 0 0 0
}
}
// entity 7
{
"light" "25"
"origin" "-192.000000 128.000000 64.000000"
"classname" "light"
"origin" "-192.000000 128.000000 64.000000"
"light" "25"
}
// entity 8
{
"style" "9"
"light" "25"
"origin" "-192.000000 -64.000000 64.000000"
"classname" "light"
"origin" "-192.000000 -64.000000 64.000000"
"light" "25"
"style" "9"
}
// entity 9
{
"message" "Particle Emitter: On"
"origin" "64.000000 128.000000 32.000000"
"classname" "point_message"
"origin" "64.000000 128.000000 32.000000"
"message" "Particle Emitter: On"
}
// entity 10
{
"message" "Particle Emitter: Off"
"origin" "64.000000 -64.000000 32.000000"
"classname" "point_message"
"origin" "64.000000 -64.000000 32.000000"
"message" "Particle Emitter: Off"
}
// entity 11
{
"interval" "0.25"
"effect_name" "test.ball"
"targetname" "foobar"
"origin" "128.000000 32.000000 32.000000"
"classname" "info_particle_system"
"origin" "128.000000 32.000000 32.000000"
"targetname" "foobar"
"effect_name" "test.ball"
"interval" "0.25"
}
// entity 12
{
"origin" "0 0 -8"
"classname" "env_cubemap"
"origin" "0 0 -8"
}

View file

@ -0,0 +1,10 @@
wireframe
{
program wireframe
{
if r_wireframe == 1
nodepthtest
endif
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -255,12 +255,16 @@ scripted_sequence::RunOnEntity(entity targ)
if (!HasSpawnFlags(SSFL_REPEATABLE))
m_iEnabled = FALSE;
if (f.IsPerforming()) {
f.CancelSchedule();
}
NSAIScript_Log("\tName: %s", targetname);
NSAIScript_Log("\tTarget: %s", m_strMonster);
NSAIScript_Log("\tStarted: %f", time);
/* if we're told an anim, we better have it... or else. */
if (m_strActionAnim) {
if (STRING_SET(m_strActionAnim)) {
f.m_flSequenceEnd = frameforname(f.modelindex, m_strActionAnim);
if (f.m_flSequenceEnd == -1) {
print(sprintf("^1ERROR: Framegroup %s not found!\n", m_strActionAnim));
@ -269,7 +273,7 @@ scripted_sequence::RunOnEntity(entity targ)
}
/* entity to trigger after sequence ends */
if (target) {
if (STRING_SET(target)) {
NSAIScript_Log("\tTrigger when finished: %s", target);
f.m_strRouteEnded = target;
f.m_ssLast = this;
@ -290,7 +294,7 @@ scripted_sequence::RunOnEntity(entity targ)
f.m_iSequenceFlags = spawnflags;
f.m_strSequenceKillTarget = m_strKillTarget;
if (m_strKillTarget) {
if (STRING_SET(m_strKillTarget)) {
//readcmd(sprintf("watchpoint_ssqc %d.nextthink\n", num_for_edict(f)));
NSAIScript_Log("\tKillTarget when finished: %S", m_strKillTarget);
}
@ -301,12 +305,12 @@ scripted_sequence::RunOnEntity(entity targ)
} else if (m_iMove == SS_WALK) {
f.RouteToPosition(GetOrigin());
f.m_flSequenceSpeed = f.GetWalkSpeed();
NSAIScript_Log("\tType: SS_WALK (%i)", m_iMove);
NSAIScript_Log("\tType: SS_WALK (%i) at %d up/s", m_iMove, f.m_flSequenceSpeed);
return;
} else if (m_iMove == SS_RUN) {
f.RouteToPosition(GetOrigin());
f.m_flSequenceSpeed = f.GetRunSpeed();
NSAIScript_Log("\tType: SS_RUN (%i)", m_iMove);
NSAIScript_Log("\tType: SS_RUN (%i) at %d up/s", m_iMove, f.m_flSequenceSpeed);
return;
} else if (m_iMove == SS_INSTANTANEOUS) {
f.SetOrigin(GetOrigin());
@ -316,7 +320,7 @@ scripted_sequence::RunOnEntity(entity targ)
}
/* all the non-moving targets will do this at least */
if (m_strActionAnim) {
if (STRING_SET(m_strActionAnim)) {
if (m_iMove == SS_NO) {
//f.SetAngles(GetAngles());
//f.SetOrigin(GetOrigin());
@ -342,14 +346,18 @@ scripted_sequence::RunOnEntity(entity targ)
f.m_iSequenceState = SEQUENCESTATE_ENDING;
if (HasSpawnFlags(SSFL_LEAVECORPSE))
f.ScheduleThink(f.FreeStateDead, duration);
else if (HasSpawnFlags(SSFL_NOSCRIPTMOVE) || m_iMove == SS_NO)
f.ScheduleThink(f.FreeState, duration);
else
f.ScheduleThink(f.FreeStateMoved, duration);
if (HasSpawnFlags(SSFL_LEAVECORPSE)) {
f.think = ncMonster::ScriptedSequenceEnded_Dead;
f.nextthink = GetTime() + duration;
} else if (HasSpawnFlags(SSFL_NOSCRIPTMOVE) || m_iMove == SS_NO) {
f.think = ncMonster::ScriptedSequenceEnded;
f.nextthink = GetTime() + duration;
} else {
f.think = ncMonster::ScriptedSequenceEnded_Moved;
f.nextthink = GetTime() + duration;
}
NSAIScript_Log("\tEnding: %f", f.GetNextThinkTime());
NSAIScript_Log("\tEnding: %f", f.nextthink);
/* make sure we're forgetting about enemies and attack states in sequence */
f.m_eEnemy = __NULL__;

View file

@ -81,8 +81,29 @@ vector Nodes_FindCoverFromEnemyFarNode(ncActor targetEnemy, vector nodePosition)
/** Returns the position of a spot that'll provide cover from the specified enemy.
@param traceEntity The entity which will be testing for collisions.
@param targetOrigin The spot to hide from.
@return Absolute position of a valid cover spot. */
vector Nodes_FindCoverFromPosition(vector targetOrigin);
vector Nodes_FindCoverFromPosition(entity traceEntity, vector targetOrigin);
/** Returns the position of a spot that is accessible within a specified position.
@param traceEntity The entity which will be testing for collisions.
@param targetOrigin The spot to be near.
@param minRadius The mininum distance / search radius from the targetOrigin.
@param maxRadius The maximum Radius in which we'll look for a free spot.
@return Absolute position of a valid cover spot. */
vector Nodes_FindEmptySpotNearPosition(entity traceEntity, vector position, float minRadius, float maxRadius);
/** Returns the position of a spot that is far away within a specified position.
@param traceEntity The entity which will be testing for collisions.
@param targetOrigin The spot to be near.
@param minRadius The mininum distance / search radius from the targetOrigin.
@param maxRadius The maximum Radius in which we'll look for a free spot.
@return Absolute position of a valid cover spot. */
vector Nodes_FindEmptySpotAwayFromPosition(entity traceEntity, vector position, float minRadius, float maxRadius);
/** @} */ // end of nav

View file

@ -212,7 +212,7 @@ vector
Nodes_FindCoverFromEnemy(ncActor targetEnemy)
{
float bestDistance = COST_INFINITE;
int bestNodeID = -1;
int bestNodeID = -1i;
for (int i = 0; i < g_iNodes; i++) {
vector nodePosition = g_pNodes[i].m_vecOrigin;
@ -226,6 +226,10 @@ Nodes_FindCoverFromEnemy(ncActor targetEnemy)
}
}
if (bestNodeID != -1i) {
return g_vec_null;
}
return (g_pNodes[bestNodeID].m_vecOrigin);
}
@ -294,22 +298,124 @@ Nodes_FindCoverFromEnemyFarNode(ncActor targetEnemy, vector targetNode)
}
vector
Nodes_FindCoverFromPosition(vector targetOrigin)
Nodes_FindCoverFromPosition(entity traceEntity, vector targetOrigin)
{
float bestDistance = 0;
int bestNodeID = -1;
float bestDistance = COST_INFINITE;
int bestNodeID = -1i;
#if 0
if (g_iNodes <= 0i) {
return Nodes_FindEmptySpotNearPosition(world, targetOrigin, 512.0, 4096.0f);
}
#endif
for (int i = 0; i < g_iNodes; i++) {
vector nodePosition = g_pNodes[i].m_vecOrigin;
float nodeDistance = distanceSquared(nodePosition, targetOrigin);
float nodeDistance = distanceSquared(nodePosition, traceEntity.origin);
traceline(targetOrigin, nodePosition, MOVE_WORLDONLY, world);
traceline(nodePosition, targetOrigin, MOVE_NORMAL, traceEntity);
if (trace_fraction < 1.0 && nodeDistance > bestDistance) {
if ((trace_ent == world || trace_fraction < 1.0) && nodeDistance < bestDistance) {
bestDistance = nodeDistance;
bestNodeID = i;
}
}
if (bestNodeID) {
return (g_vec_null);
}
NSError("%v", (g_pNodes[bestNodeID].m_vecOrigin));
return (g_pNodes[bestNodeID].m_vecOrigin);
}
vector
Nodes_FindEmptySpotNearPosition(entity traceEntity, vector position, float minRadius, float maxRadius)
{
float bestYaw = 0.0f;
float bestDist = 0.0f;
vector testAngle = g_vec_null;
vector testPos = g_vec_null;
for (float yawTest = 0.0f; yawTest < 360.0f; yawTest += 10.0f) {
vector testPos;
float distSquared;
vector testAngle = traceEntity.angles = [0, yawTest, 0];
testAngle[0] = testAngle[2] = 0.0f;
makevectors(testAngle);
testPos = position + (v_forward * 2048.0f);
tracebox(position, traceEntity.mins, traceEntity.maxs, testPos, MOVE_NORMAL, traceEntity);
distSquared = distance(position, trace_endpos);
if (distSquared > bestDist) {
bestYaw = yawTest;
bestDist = distSquared;
}
}
/* cancel early */
if (bestDist <= minRadius) {
return (g_vec_null);
}
for (float dist = minRadius; dist < maxRadius; dist += ((maxRadius - minRadius) / 16.0f)) {
vector testAngle = [0, bestYaw, 0];
testAngle[0] = testAngle[2] = 0.0f;
makevectors(testAngle);
vector testPos = position + (v_forward * dist);
tracebox(testPos, traceEntity.mins, traceEntity.maxs, testPos, MOVE_NORMAL, traceEntity);
if (!trace_startsolid) {
return (testPos);
}
}
return (g_vec_null);
}
vector
Nodes_FindEmptySpotAwayFromPosition(entity traceEntity, vector position, float minRadius, float maxRadius)
{
float bestYaw = 0.0f;
float bestDist = 0.0f;
vector testAngle = g_vec_null;
vector testPos = g_vec_null;
for (float yawTest = 0.0f; yawTest < 360.0f; yawTest += 10.0f) {
vector testPos;
float distSquared;
vector testAngle = traceEntity.angles = [0, yawTest, 0];
testAngle[0] = testAngle[2] = 0.0f;
makevectors(testAngle);
testPos = position + (v_forward * 2048.0f);
tracebox(position, traceEntity.mins, traceEntity.maxs, testPos, MOVE_NORMAL, traceEntity);
distSquared = distance(position, trace_endpos);
if (distSquared > bestDist) {
bestYaw = yawTest;
bestDist = distSquared;
}
}
/* cancel early */
if (bestDist <= minRadius) {
return (g_vec_null);
}
for (float dist = maxRadius; dist > minRadius; dist -= ((maxRadius - minRadius) / 16.0f)) {
vector testAngle = [0, bestYaw, 0];
testAngle[0] = testAngle[2] = 0.0f;
makevectors(testAngle);
vector testPos = position + (v_forward * dist);
tracebox(testPos, traceEntity.mins, traceEntity.maxs, testPos, MOVE_NORMAL, traceEntity);
if (!trace_startsolid) {
return (testPos);
}
}
return (g_vec_null);
}

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016-2022 Vera Visions LLC.
* Copyright (c) 2016-2025 Vera Visions LLC.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@ -17,12 +17,23 @@
void
ncOutput::TriggerOutput(void)
{
/* plug into all the inputs. */
for (entity f = world; (f = find(f, ::targetname, m_strTarget));) {
ncEntity trigger = (ncEntity)f;
ncIO ourOwner = (ncIO)owner;
ncIO ourActivator = (ncIO)m_eActivator;
if (trigger.Input != __NULL__) {
trigger.Input(m_eActivator, m_strInput, m_strData);
/* plug into all the inputs. */
if (m_strTarget == "!self") {
printf("AAAAAAAAAAAAAAAAA SELF!!!\n");
ourOwner.Input(m_eActivator, m_strInput, m_strData);
} else if (m_strTarget == "!activator") {
ourActivator.Input(m_eActivator, m_strInput, m_strData);
printf("AAAAAAAAAAAAAAAAA ACTIVATOR!!!\n");
} else {
for (entity f = world; (f = find(f, ::targetname, m_strTarget));) {
ncEntity trigger = (ncEntity)f;
if (trigger.Input != __NULL__) {
trigger.Input(m_eActivator, m_strInput, m_strData);
}
}
}

View file

@ -97,19 +97,26 @@ public:
nonvirtual void SetTarget(ncEntity target);
nonvirtual ncEntity GetTarget(void);
nonvirtual void Think(void);
nonvirtual bool ProgressOnMovement(void);
nonvirtual void SetFailSchedule(string);
private:
string m_name;
int m_taskCount;
int m_onTask;
ncActor m_controllingActor;
ncDict m_scheduleDecl;
ncEntity m_eTarget;
bool m_inProgress;
bool m_bProgressOnMovement;
string m_failSchedule;
nonvirtual bool AssignActor(ncActor targetActor);
nonvirtual void Advance(void);
nonvirtual void AdvanceLater(float timeDelta);
nonvirtual void Cancel(void);
nonvirtual void Message(string);
nonvirtual bool InProgress(void);
};
/** @} */ // end of npc_schedules

View file

@ -25,56 +25,138 @@ ncSchedule::ncSchedule(void)
m_taskCount = 0i;
m_controllingActor = __NULL__;
m_scheduleDecl = __NULL__;
m_failSchedule = __NULL__;
}
void
ncSchedule::AdvanceLater(float timeDelta)
{
EntLog("Advancing schedule in %f seconds.", timeDelta);
m_inProgress = true;
EntLog("Advancing %S in %f seconds.", m_name, timeDelta);
ncTimer newTimer = __NULL__;
newTimer = newTimer.TemporaryTimer(this, Advance, timeDelta, false);
}
bool
ncSchedule::InProgress(void)
{
return (m_inProgress);
}
void
ncSchedule::Advance(void)
{
string taskInput;
string taskParms;
bool shouldCancel = false;
if (wasfreed(this)) {
return;
}
/* Our actor is dead. Invalidate right away. */
if (!m_controllingActor) {
shouldCancel = true;
} else {
if (m_controllingActor.IsAlive() == false) {
shouldCancel = true;
}
if (m_controllingActor.m_activeSchedule != this) {
shouldCancel = true;
}
}
if (shouldCancel == true) {
ReleaseThink();
Cancel();
return;
}
m_onTask++;
if (m_onTask > m_taskCount) {
ReleaseThink();
Cancel();
return;
}
string taskString = m_scheduleDecl.GetString(sprintf("task_%i", m_onTask));
tokenize_console(taskString);
taskInput = argv(0);
taskParms = argv(1);
EntLog("Advancing schedule to Task %i of %i.", m_onTask, m_taskCount);
if (STRING_SET(taskString)) {
tokenize_console(taskString);
taskInput = argv(0);
taskParms = argv(1);
} else {
EntError("Task %i not defined! Cancelling schedule.", m_onTask);
m_onTask = m_taskCount + 1i;
ReleaseThink();
Cancel();
return;
}
m_inProgress = false;
EntLog("Advancing %S to Task %i of %i.", m_name, m_onTask, m_taskCount);
EntLog("Instructing %S to perform %S with parms %S", m_controllingActor.classname, taskInput, taskParms);
m_controllingActor.Input(this, taskInput, taskParms);
m_controllingActor.Input(this, taskInput, substring(taskString, strlen(taskInput) + 1, -1));
/* did we get scheduled for later? no? advance us ourselves */
if (m_inProgress == false && m_bProgressOnMovement == false) {
AdvanceLater(0.1);
}
}
void
ncSchedule::Cancel(void)
{
if (wasfreed(this)) {
return;
}
EntLog("Schedule for %S (%d) terminated.", m_controllingActor.classname, num_for_edict(m_controllingActor));
/* TODO: Let NPC know that it's done? */
m_controllingActor.m_activeSchedule = __NULL__;
m_controllingActor = __NULL__;
if (m_controllingActor) {
if (m_controllingActor.m_activeSchedule == this) {
m_controllingActor.m_activeSchedule = __NULL__;
if ((m_onTask <= m_taskCount) && STRING_SET(m_failSchedule)) {
m_controllingActor.Input(this, "PerformSchedule", m_failSchedule);
}
m_controllingActor = __NULL__;
}
}
Destroy();
}
bool
ncSchedule::ProgressOnMovement(void)
{
return (m_bProgressOnMovement);
}
void
ncSchedule::Think(void)
{
bool shouldCancel = false;
/* Our actor is dead. Invalidate right away. */
if (m_controllingActor.IsAlive() == false) {
if (!m_controllingActor) {
shouldCancel = true;
} else {
if (m_controllingActor.IsAlive() == false) {
shouldCancel = true;
}
if (m_controllingActor.m_activeSchedule != this) {
shouldCancel = true;
}
}
if (shouldCancel == true) {
ReleaseThink();
Cancel();
return;
@ -84,6 +166,36 @@ ncSchedule::Think(void)
ScheduleThink(Think, 0.0f);
}
void
ncSchedule::Message(string messageString)
{
bool lookUpValue = m_scheduleDecl.GetBool(sprintf("fail_on%s", messageString));
string lookUpString = m_scheduleDecl.GetString(messageString);
EntLog("^2%S received %S", m_name, messageString);
if (STRING_SET(lookUpString)) {
string taskInput;
string taskParameter;
tokenize_console(lookUpString);
taskInput = argv(0);
taskParameter = substring(lookUpString, strlen(taskInput) + 1, -1);
EntLog("^3triggering Input %S with parameter %S", taskInput, taskParameter);
m_controllingActor.Input(this, taskInput, taskParameter);
}
if (lookUpValue) {
EntLog("^1schedule killed by message.", taskInput, taskParameter);
ReleaseThink();
Cancel();
}
}
void
ncSchedule::SetFailSchedule(string failSchedule)
{
m_failSchedule = failSchedule;
}
bool
ncSchedule::AssignActor(ncActor targetActor)
{
@ -94,9 +206,7 @@ ncSchedule::AssignActor(ncActor targetActor)
return (false);
}
EntLog("Schedule %d created and active.", num_for_edict(this));
EntLog("Controlling %S (%d)", m_controllingActor.classname, num_for_edict(m_controllingActor));
EntLog("Total tasks: %i", m_taskCount);
EntLog("Schedule %S (%d) created and active.\n\t\tControlling %S (%d)\n\t\tTotal tasks: %i", m_name, num_for_edict(this), m_controllingActor.classname, num_for_edict(m_controllingActor), m_taskCount);
Advance();
@ -123,6 +233,7 @@ ncSchedule::CreateSchedule(ncActor targetActor, string scheduleDecl)
{
ncSchedule newSchedule = spawn(ncSchedule);
newSchedule.m_name = scheduleDecl;
newSchedule.m_scheduleDecl = ncDict::LoadDeclFromFile(scheduleDecl, sprintf("schedules/%s.decl", scheduleDecl));
if ((newSchedule.m_scheduleDecl.TokenCount() % 2) != 0) {

View file

@ -681,7 +681,7 @@ CheckSpawn(void() spawnfunc)
ncEntity ent = (ncEntity)self;
string desiredClass = ent.classname;
static string lastClass;
bool skipLoad = false;
bool skipLoad = false; /* entity data will be loaded elsewhere */
/* cancel out early */
if (ent == world) {
@ -695,6 +695,16 @@ CheckSpawn(void() spawnfunc)
/* no longer needed, immediately discard. */
__fullspawndata = "";
/* we have to diverge here in order to support in-code class entities,
decl entities and overrides of both.
this switch also controls the priority:
1. maptweaks, can override anything.
2. entitydef, can even override built-in class names
2.0 entitydef, defined in a map (maps/foobar.def)
2.1 entitydef, defined within decls/def/*.def
3. in-code classes */
if (MapTweak_EntitySpawn(ent) == true) {
skipLoad = true;
} else if (EntityDef_SpawnClassname(desiredClass) != __NULL__) {

View file

@ -46,18 +46,26 @@ MapC_Init(void)
}
}
/* Rule specific Scripting, nicknamed 'RuleC' because MapC exists. */
void
RuleC_Init(void)
__weak string
Game_DefaultRules(void)
{
string gameType = cvars.GetString("g_gametype");
string pathToProgs;
if (!STRING_SET(gameType)) {
bool isCoop = cvars.GetBool("coop");
bool isSingle = (cvars.GetInteger("sv_playerslots") <= 1) ? (true) : (false);
g_ruleCName = gameType = (isSingle || isCoop) == (true) ? "singleplayer" : "deathmatch";
gameType = (isSingle || isCoop) == (true) ? "singleplayer" : "deathmatch";
}
return (gameType);
}
/* Rule specific Scripting, nicknamed 'RuleC' because MapC exists. */
void
RuleC_Init(void)
{
string gameType = g_ruleCName = Game_DefaultRules();
string pathToProgs;
pathToProgs = strcat("progs/", gameType, ".dat");
@ -78,7 +86,7 @@ RuleC_Init(void)
externset(g_ruleCProgs, world, "self");
thread(mainFunction())
} else {
NSError("%S does not have a main function.", pathToProgs);
error(sprintf("RuleC %S does not have a main function.", pathToProgs));
}
}
}

View file

@ -173,6 +173,15 @@ Spawn_TeleportToSpawn(entity targetEnt)
entity spawnPoint = Spawn_SelectRandom(desiredSpawn);
if (spawnPoint) {
targetEnt.origin = spawnPoint.origin;
targetEnt.angles = spawnPoint.angles;
setorigin_safe(targetEnt, targetEnt.origin);
return;
}
spawnPoint = Spawn_SelectRandom("info_player_start");
if (spawnPoint) {
targetEnt.origin = spawnPoint.origin;
targetEnt.angles = spawnPoint.angles;

View file

@ -75,6 +75,7 @@ public:
/* overrides */
virtual void SpawnKey(string,string);
virtual void Spawned(void);
virtual void Precache(void);
nonvirtual void Spawn(void);
/** Tells the engine to make the entity static, effectively making it inaccessible.

View file

@ -43,23 +43,34 @@ ncEntity::Spawn(void)
return;
}
/* only precache at start time... */
if (time == 0.0f) {
Precache();
}
Respawn();
}
void
ncEntity::Precache(void)
{
if (STRING_SET(model)) {
precache_model(model);
}
#ifdef SERVER
if (STRING_SET(m_strOnTrigger)) {
m_strOnTrigger = CreateOutput(m_strOnTrigger);
}
#endif
}
void
ncEntity::Spawned(void)
{
super::Spawned();
#ifdef SERVER
if (model) {
precache_model(model);
}
if (m_strOnTrigger != "") {
m_strOnTrigger = CreateOutput(m_strOnTrigger);
}
/* used to network our shared ID */
entityDefID = EntityDef_NetIDFromName(classname);
#endif

View file

@ -276,6 +276,10 @@ private:
#endif
};
#define CREATE_OUTPUT(x) if (STRING_SET(x)) { \
x = CreateOutput(x); \
}
.bool isActor;
.bool _mapspawned;

View file

@ -52,13 +52,13 @@ void
ncIO::Spawned(void)
{
#ifdef SERVER
if (m_strOnUser1)
if (STRING_SET(m_strOnUser1))
m_strOnUser1 = CreateOutput(m_strOnUser1);
if (m_strOnUser2)
if (STRING_SET(m_strOnUser2))
m_strOnUser2 = CreateOutput(m_strOnUser2);
if (m_strOnUser3)
if (STRING_SET(m_strOnUser3))
m_strOnUser3 = CreateOutput(m_strOnUser3);
if (m_strOnUser4)
if (STRING_SET(m_strOnUser4))
m_strOnUser4 = CreateOutput(m_strOnUser4);
#endif
@ -74,7 +74,14 @@ ncIO::OnRemoveEntity(void)
void
ncIO::Destroy(void)
{
OnRemoveEntity();
if (wasfreed(this)) {
return;
}
if (OnRemoveEntity) {
OnRemoveEntity();
}
customphysics = __NULL__;
modelindex = 0;
solid = 0;
@ -271,18 +278,22 @@ ncIO::GetSpawnEntity(string keyName, entity startEntity)
void
ncIO::UseOutput(entity act, string outname)
{
if (!outname || outname == "")
return;
if (!act)
if (!STRING_SET(outname)) {
return;
}
for (entity f = world; (f = find(f, ::targetname, outname));) {
ncOutput op = (ncOutput)f;
NSError("Target: %s", op.m_strTarget);
NSError("Input: %s", op.m_strInput);
NSError("Data Message: %s", op.m_strData);
NSError("Delay: %f", op.m_flDelay);
NSError("Uses: %i", op.m_iCount);
/* no more tries and not -1 (infinite) */
if (op.m_iCount == 0) {
return;
continue;
}
op.ScheduleOutput(act);
@ -292,37 +303,47 @@ ncIO::UseOutput(entity act, string outname)
string
ncIO::CreateOutput(string outmsg)
{
static int outcount = 0;
string outname = "";
float c;
static int outID = 0i;
if not (outmsg) {
if (!STRING_SET(outmsg)) {
error("Cannot assign EMPTY contents to CreateOutput!");
}
outname = sprintf("output_%i", outcount);
outcount++;
/* vanilla trigger and/or reuse */
if (tokenizebyseparator(outmsg, ",") <= 5) {
return outmsg;
}
outname = sprintf("output_%i", outID);
outID += 1i;
/* to make sure tokenize 'remembers' to tell us about the commonly
empty data string, we prepared the output string beforehand to
at least contain a _ symbol after the comma separator... now
we gotta clip that away using substring(). messy, but that's the
only way to keep them at 5 argv() calls per output */
c = tokenizebyseparator(outmsg, ",");
for (float i = 1; i < c; i+=5) {
for (float i = 1; i < tokenizebyseparator(outmsg, ","); i+=5) {
string ourTarget = substring(argv(i), 1,-1);
string ourInput = substring(argv(i+1), 1,-1);
string ourData = substring(argv(i+2), 1,-1);
float ourDelay = stof(substring(argv(i+3), 1,-1));
int ourCount = (int)stoi(substring(argv(i+4), 1,-1));
ncOutput new_minion = spawn(ncOutput);
new_minion.owner = this;
new_minion.classname = "triggerminion";
new_minion.targetname = outname;
new_minion.m_strTarget = substring(argv(i), 1,-1);
new_minion.m_strInput = substring(argv(i+1), 1,-1);
new_minion.m_strData = substring(argv(i+2), 1,-1);
new_minion.m_flDelay = stof(substring(argv(i+3), 1,-1));
new_minion.m_iCount = stoi(substring(argv(i+4), 1,-1));
new_minion.m_iOldCount = new_minion.m_iCount;
new_minion.m_strTarget = ourTarget;
new_minion.m_strInput = ourInput;
new_minion.m_strData = ourData;
new_minion.m_flDelay = ourDelay;
new_minion.m_iOldCount = new_minion.m_iCount = ourCount;
/* print final debug output */
NSLog("^2%s::CreateOutput report:", classname);
NSLog("%d Name: %s", num_for_edict(new_minion), outname);
NSLog("Owner: %s (%d)", new_minion.owner.classname, num_for_edict(new_minion.owner));
NSLog("Target: %s", new_minion.m_strTarget);
NSLog("Input: %s", new_minion.m_strInput);
NSLog("Data Message: %s", new_minion.m_strData);

View file

@ -248,6 +248,7 @@ public:
#ifdef SERVER
/* overrides */
virtual void DebugDraw(void);
virtual void Save(float);
virtual void Restore(string,string);
virtual void EvaluateEntity(void);
@ -330,14 +331,16 @@ public:
nonvirtual bool IsValidEnemy(entity);
/** Returns TRUE if the monster is currently on route to a position. */
virtual bool IsOnRoute(void);
/** Override */
virtual void RouteClear(void);
/* sequences */
/** Internal use only. Called when a sequence is done. */
virtual void FreeState(void);
virtual void ScriptedSequenceEnded(void);
/** Internal use only. Called when a sequence is done. */
virtual void FreeStateMoved(void);
virtual void ScriptedSequenceEnded_Moved(void);
/** Internal use only. Called when a sequence is done and we leave a corpse. */
virtual void FreeStateDead(void);
virtual void ScriptedSequenceEnded_Dead(void);
/** Internal use only. Called when a movement route is done. */
virtual void RouteEnded(void);
/** Internal use only. Called every frame to progress through a route. */
@ -354,7 +357,7 @@ public:
/** Returns the type of sequence they're currently in. */
nonvirtual int GetSequenceState(void);
/** Returns if they're currently in a scripted sequence. */
nonvirtual bool InSequence(void);
nonvirtual bool InScriptedSequence(void);
/* animation cycles */
/** DEPRECATED, Overridable: Called when we need to play a fresh idle framegroup. */
@ -365,11 +368,12 @@ public:
virtual int AnimRun(void);
/** Call to play a single animation onto it, which cannot be interrupted by movement. */
virtual void AnimPlay(float);
/** Internal use only. Run every frame to update animation parameters. */
/** Internal use only. Run every frame to update movement animation parameters. */
virtual void AnimationUpdate(void);
/** Returns if we're currently in a forced animation sequence. */
nonvirtual bool InAnimation(void);
nonvirtual void AnimReset(void);
nonvirtual bool InForcedAnimation(void);
/** Starts the animation sequence from the beginning */
nonvirtual void AnimationRewind(void);
/* states */
/** Called whenever the state of this ncMonster changes. */
@ -420,6 +424,21 @@ private:
vector base_maxs;
float base_health;
/* I/O */
string m_outputOnDamaged;
string m_outputOnDeath;
string m_outputOnHalfHealth;
string m_outputOnHearPlayer;
string m_outputOnFoundEnemy;
string m_outputOnLostEnemy;
string m_outputOnLostEnemyLOS;
string m_outputOnFoundPlayer;
string m_outputOnLostPlayer;
string m_outputOnLostPlayerLOS;
string m_outputOnDamagedByPlayer;
string m_outputOnGreetPlayer;
bool m_bMetPlayer;
/* sequences */
string m_strRouteEnded;
int m_iSequenceRemove;
@ -534,10 +553,10 @@ private:
bool m_usesNav;
bool m_fireFromHead;
bool m_pvsSleep;
bool m_bCanAttack;
nonvirtual void _LerpTurnToEnemy(void);
nonvirtual void _LerpTurnToPos(vector);
nonvirtual void _LerpTurnToYaw(vector);
nonvirtual void _LerpTurnToYaw(float);
virtual void _Alerted(void);
nonvirtual void _ChaseAfterSpawn(void);
#endif

File diff suppressed because it is too large Load diff

View file

@ -165,9 +165,12 @@ public:
/** Overridable: Called regularily to select a new schedule to perform. */
virtual void SelectNewSchedule(void);
nonvirtual void ScheduleThink(void);
/** Forces a named schedule to be performed. */
nonvirtual bool CancelSchedule(void);
nonvirtual void PerformSchedule(string);
nonvirtual void MessageSchedule(string);
nonvirtual bool IsPerforming(void);
/* methods we'd like others to override */
@ -187,7 +190,7 @@ public:
/** When called, will wipe any memory of an ongoing route. */
virtual void RouteClear(void);
/** Internal use only. Called every frame to see our route progression. */
virtual void CheckRoute(void);
virtual void CheckRouteProgression(void);
/** When called, will plot a route to a given world coordinate and start moving. */
virtual void RouteToPosition(vector);
/** When called, will plot a route to a given world coordinate and start moving, ignoring any links that contain the given link flags. */
@ -195,7 +198,7 @@ public:
/** When called, will start following a path_corner */
virtual void ChasePath(string startPath);
/** Internal use only. Called every frame to see our route progression. */
virtual void CheckRoute_Path(void);
virtual void CheckRouteProgression_Path(void);
/** Overridable: Called when the entity is ready to move. When overridden, will no longer move until super function is called, or physics is handled within. */
virtual void Physics_Run(void);
#endif
@ -215,6 +218,7 @@ private:
vector m_vecRouteEntity;
entity m_eFollowing;
float m_flMoveSpeedKey;
string m_mindset;
#endif
/* sounds, may even be predicted. */

View file

@ -19,6 +19,7 @@ void
ncActor::ncActor(void)
{
#ifdef SERVER
m_activeSchedule = __NULL__;
m_iNodes = 0i;
m_iCurNode = -1i;
m_pRoute = __NULL__;
@ -342,10 +343,29 @@ ncActor::RestoreComplete(void)
RouteToPosition(m_vecLastNode);
}
void
ncActor::ScheduleThink(void)
{
if (IsPerforming() == false && m_iNodes <= 0i) {
SelectNewSchedule();
}
}
void
ncActor::SelectNewSchedule(void)
{
string schedule;
string currentMindset = "idle";
if (STRING_SET(m_mindset)) {
currentMindset = m_mindset;
}
schedule = GetDefString(strcat("mindset_", currentMindset));
if (STRING_SET(schedule)) {
PerformSchedule(schedule);
}
}
bool
@ -354,14 +374,37 @@ ncActor::IsPerforming(void)
return (m_activeSchedule) ? (true) : (false);
}
bool
ncActor::CancelSchedule(void)
{
if (m_activeSchedule) {
m_activeSchedule.ReleaseThink();
m_activeSchedule.Cancel();
return (true);
}
return (false);
}
void
ncActor::MessageSchedule(string messageString)
{
if (m_activeSchedule) {
m_activeSchedule.Message(messageString);
}
}
void
ncActor::PerformSchedule(string scheduleDecl)
{
if (m_activeSchedule) {
m_activeSchedule.Cancel();
float scheduleCount = tokenizebyseparator(scheduleDecl, ",");
if (scheduleCount > 1i) {
scheduleDecl = argv(floor(random(0, scheduleCount)));
}
CancelSchedule();
ncSchedule::CreateSchedule(this, scheduleDecl);
}
@ -398,27 +441,77 @@ ncActor::Input(entity eAct, string strInput, string strData)
}
break;
/* schedule management */
case "ActorThinks":
printf("%S (%d): %s\n", classname, num_for_edict(this), strData);
break;
case "ChangeMindset":
m_mindset = strData;
break;
case "PerformSchedule":
PerformSchedule(strData);
break;
/* some tasks. */
case "WalkToTarget":
RouteToPosition(m_activeSchedule.GetTarget().origin);
m_activeSchedule.AdvanceLater(100);
break;
case "RunToTarget":
RouteToPosition(m_activeSchedule.GetTarget().origin);
m_activeSchedule.AdvanceLater(100);
break;
case "CrouchToTarget":
RouteToPosition(m_activeSchedule.GetTarget().origin);
m_activeSchedule.AdvanceLater(100);
break;
case "ProneToTarget":
RouteToPosition(m_activeSchedule.GetTarget().origin);
m_activeSchedule.AdvanceLater(100);
break;
case "TargetNearestPlayer":
m_activeSchedule.SetTarget(find(world, ::classname, "player"));
m_activeSchedule.Advance();
entity firstPlayer = find(world, ::classname, "player");
if (firstPlayer) {
m_activeSchedule.SetTarget(firstPlayer);
} else {
CancelSchedule();
}
// NSWarning("Task %S unimplemented", strInput);
break;
case "GoToCover":
vector coverPos = Nodes_FindCoverFromPosition(this, GetOrigin());
if (vlen(coverPos) > 0.0f) {
RouteToPosition(coverPos);
} else {
CancelSchedule();
}
break;
case "GoToSpotInRadius":
vector t = Nodes_FindEmptySpotNearPosition(this, GetOrigin(), 128.0f, stof(strData));
if (vlen(t) > 0.0f) {
RouteToPosition(t);
} else {
CancelSchedule();
}
break;
case "AvoidSpotInRadius":
vector t = Nodes_FindEmptySpotAwayFromPosition(this, GetOrigin(), 0.0f, stof(strData));
if (vlen(t) > 0.0f) {
RouteToPosition(t);
} else {
CancelSchedule();
}
break;
case "TurnToRandomYaw":
float randomYaw = random(45.0f,180.0f) - 90.0f;
angles[1] += randomYaw;
v_angle = angles;
break;
case "GoForward":
RouteToPosition(GetOrigin() + (anglesToForward(angles) * 1024.0f));
break;
default:
super::Input(eAct, strInput, strData);
}
@ -430,14 +523,11 @@ ncActor::Input(entity eAct, string strInput, string strData)
void
ncActor::RouteEnded(void)
{
if (m_activeSchedule) {
m_activeSchedule.Advance();
}
ClearVelocity();
}
void
ncActor::CheckRoute_Path(void)
ncActor::CheckRouteProgression_Path(void)
{
float flDist = distance(m_pathEntity.GetOrigin(), GetOrigin());
@ -459,7 +549,7 @@ ncActor::CheckRoute_Path(void)
}
void
ncActor::CheckRoute(void)
ncActor::CheckRouteProgression(void)
{
float flDist;
float flNodeRadius;
@ -473,7 +563,7 @@ ncActor::CheckRoute(void)
}
if (STRING_SET(m_pathTarget) && m_pathEntity) {
CheckRoute_Path();
CheckRouteProgression_Path();
return;
}
@ -503,7 +593,7 @@ ncActor::CheckRoute(void)
if (m_iCurNode < 0) {
evenpos = m_vecLastNode;
evenpos[2] = origin[2];
flNodeRadius = 16.0f;
flNodeRadius = 8.0f;
} else {
evenpos = m_pRoute[m_iCurNode].dest;
evenpos[2] = origin[2];
@ -513,10 +603,13 @@ ncActor::CheckRoute(void)
flNodeRadius = 16.0f;
}
vector wishAngles = vectoangles(evenpos - origin);
ideal_yaw = wishAngles[1];
flDist = floor(vlen(evenpos - origin));
if (flDist < flNodeRadius) {
ncActor_Log("%S reached node", targetname);
//ncActor_Log("%S reached node", targetname);
m_iCurNode--;
velocity = [0,0,0]; /* clamp friction */
@ -527,7 +620,9 @@ ncActor::CheckRoute(void)
/* can we walk directly to our target destination? */
if (trace_fraction == 1.0) {
vector idealAngles = vectoangles(m_vecLastNode - origin);
ncActor_Log("Walking directly to last node at '%v'", m_vecLastNode);
ideal_yaw = idealAngles[1];
m_iCurNode = -1;
}
}
@ -544,8 +639,11 @@ ncActor::CheckRoute(void)
/* it's accessible */
if (!trace_startsolid && trace_fraction == 1.0f) {
vector idealAngles = vectoangles(vecNextNode - origin);
evenpos = vecNextNode;
m_iCurNode = iNextNode;
ideal_yaw = idealAngles[1];
ncActor_Log("Skipping to next node %i at '%v'", iNextNode, vecNextNode);
return;
}
@ -707,22 +805,25 @@ ncActor::RouteToPositionDenyFlags(vector destination, int denylinkflags)
if (numnodes < 1i) {
ncActor_Log("No path available.");
return;
}
p.m_iNodes = numnodes;
p.m_iCurNode = numnodes - 1;
p.m_pRoute = nodelist;
p._m_flRouteGiveUp = time + 4.0f;
{
p.m_iNodes = numnodes;
p.m_iCurNode = numnodes - 1;
p.m_pRoute = nodelist;
p._m_flRouteGiveUp = time + 4.0f;
}
//traceline(p.origin, dest, MOVE_NORMAL, this);
tracebox(p.origin, [-16, -16, -16], [16, 16, 16], dest, MOVE_NORMAL, this);
tracebox(p.origin, p.mins, p.maxs, dest, MOVE_NORMAL, p);
/* can we walk directly to our target destination? */
if (trace_fraction == 1.0) {
ncActor_Log("Walking directly to last node");
p.m_iNodes = 1;
p.m_iCurNode = -1;
} else {
p._m_flRouteGiveUp = time + 5.0f;
} else if (numnodes > 0i) {
ncActor_Log("Path obstructed, calculating route");
/* run through all nodes, mark the closest direct path possible */
@ -752,17 +853,16 @@ ncActor::RouteToPositionDenyFlags(vector destination, int denylinkflags)
}
RouteClear();
if (!m_iNodes) {
route_calculate(this, destination, denylinkflags, RouteToPosition_RouteCB);
m_vecLastNode = destination;
}
this.origin[2] += 16.0f;
route_calculate(this, destination, denylinkflags, RouteToPosition_RouteCB);
this.origin[2] -= 16.0f;
m_vecLastNode = destination;
}
void
ncActor::ChasePath(string startPath)
{
if (STRING_SET(startPath)) {
if (!STRING_SET(startPath)) {
m_pathTarget = __NULL__;
m_pathEntity = __NULL__;
return;
@ -776,8 +876,9 @@ ncActor::ChasePath(string startPath)
void
ncActor::RouteClear(void)
{
if (!m_iNodes)
if (!m_iNodes) {
return;
}
m_iCurNode = BOTROUTE_END;
m_iNodes = 0;
@ -836,8 +937,7 @@ ncActor::LaunchProjectile(string defName, bool thrown, float timeOfs)
nade.SetWeaponOwner(m_activeWeapon);
nade.Launch(GetEyePos(), GetViewAngle(), time - timeOfs, 0.0f, 0.0f);
makevectors(throwDirection);
nade.SetVelocity((v_forward * throwingStrength) + GetVelocity());
nade.SetVelocity((anglesToForward(throwDirection) * throwingStrength) + GetVelocity());
#endif
}
@ -873,7 +973,7 @@ ncActor::PlantCharge(string defName)
plantedEntity.SetOwner(this);
plantedEntity.real_owner = this;
printf("Planted %S at %v\n", plantedEntity.classname, origin);
EntLog("Planted %S at %v\n", plantedEntity.classname, origin);
#endif
/* push us outta the way! */
@ -886,8 +986,9 @@ int
ncActor::GetReserveAmmo(int ammoType)
{
/* bounds check */
if (ammoType <= 0i || ammoType >= MAX_AMMO_TYPES)
if (ammoType <= 0i || ammoType >= MAX_AMMO_TYPES) {
return (0i);
}
return (m_iAmmoTypes[ammoType]);
}
@ -938,8 +1039,9 @@ ncActor::GiveAmmo(int ammoType, int ammoAmount)
m_iAmmoTypes[ammoType] += ammoAmount;
if (m_iAmmoTypes[ammoType] >= maxAmmo)
if (m_iAmmoTypes[ammoType] >= maxAmmo) {
m_iAmmoTypes[ammoType] = maxAmmo;
}
return (true);
}
@ -952,8 +1054,9 @@ ncActor::UseAmmo(int ammoType, int ammoAmount)
}
/* bounds check */
if (HasAmmo(ammoType, ammoAmount) == false)
if (HasAmmo(ammoType, ammoAmount) == false) {
return (false);
}
m_iAmmoTypes[ammoType] -= ammoAmount;
return (true);
@ -963,12 +1066,14 @@ bool
ncActor::HasAmmo(int ammoType, int ammoAmount)
{
/* bounds check */
if (ammoType < 0i || ammoType >= MAX_AMMO_TYPES)
if (ammoType < 0i || ammoType >= MAX_AMMO_TYPES) {
return (false);
}
/* will underflow when used. */
if ((m_iAmmoTypes[ammoType] - ammoAmount) < 0i)
if ((m_iAmmoTypes[ammoType] - ammoAmount) < 0i) {
return (false);
}
return (true);
}

View file

@ -102,6 +102,7 @@ public:
virtual void OnPlayerUse(void);
//virtual void Hide(void);
virtual void Respawn(void);
virtual void Input(entity,string,string);
virtual void SpawnKey(string,string);
virtual float SendEntity(entity,float);
virtual void Save(float);

View file

@ -313,6 +313,18 @@ ncTalkMonster::Speak(string sentence)
multicast(origin, MULTICAST_PVS);
}
void
ncTalkMonster::Input(entity activatorEntity, string inputName, string dataField)
{
switch (inputName) {
case "SpeakSentence":
Sentence(dataField);
break;
default:
super::Input(activatorEntity, inputName, dataField);
}
}
void
ncTalkMonster::SeenPlayer(ncActor thePlayer)
{
@ -568,7 +580,7 @@ ncTalkMonster::FollowPlayer(void)
input_angles[0] = 0;
input_angles[1] = fixAngleDelta(input_angles[1]);
input_angles[2] = 0;
_LerpTurnToYaw(input_angles);
_LerpTurnToYaw(input_angles[1]);
/* for best results, we want to ignore the Z plane
this avoids the problem of a follower spinning
@ -635,7 +647,7 @@ ncTalkMonster::FollowPlayer(void)
input_angles[0] = 0;
input_angles[1] = fixAngleDelta(input_angles[1]);
input_angles[2] = 0;
_LerpTurnToYaw(input_angles);
_LerpTurnToYaw(input_angles[1]);
}
} else {
m_vecLastUserPos = vecParent;
@ -719,16 +731,17 @@ ncTalkMonster::RunAI(void)
return;
}
if (InScriptedSequence() == false) {
ScheduleThink();
}
SeeThink();
AttackThink();
FollowChain();
#if 0
if (m_eFollowing != world && m_iNodes <= 0) {
m_eLookAt = m_eFollowing;
FollowPlayer();
} else if (m_iFlags & MONSTER_FEAR) {
PanicFrame();
} else {
if (random() < 0.5) {
TalkPlayerAsk();
@ -1187,7 +1200,7 @@ ncTalkMonster_ParseSentence(void)
ent = findfloat(world, entnum, e);
if (ent) {
if (ent.classname != "speaker" && ent.classname != "ncTalkMonster" && ent.classname != "ambient_generic") {
if (ent.classname != "speaker" && ent.declclass != "ncTalkMonster" && ent.classname != "ncTalkMonster" && ent.classname != "ambient_generic") {
NSError("Entity %d not a ncTalkMonster!", e);
} else {
targ = (ncTalkMonster)ent;

View file

@ -73,7 +73,7 @@ Activities_GetSequenceForEntity(ncEntity targetEntity, string activityName)
if (!STRING_SET(fireValue)) {
float actValue = Activities_GetActID(actNameCheck);
if (actValue == ACTIVITY_NOTFOUND) {
if (actValue != ACTIVITY_NOTFOUND) {
/* look it up in the model itself now */
float frameGroup = frameforaction(targetEntity.modelindex, actValue);
return (frameGroup);

View file

@ -443,6 +443,22 @@ typedef struct
declAPI_t declManager;
/** @} */ // end of shared
void
setorigin_safe(entity target, vector testorg)
{
for (int i = 0; i < 16; i++) {
tracebox(testorg, target.mins, target.maxs, testorg, MOVE_NORMAL, target);
if (!trace_startsolid) {
break;
}
testorg[2] += 1.0;
}
setorigin(target, testorg);
}
__variant
linkToSharedProgs(string funcName)
{

View file

@ -16,6 +16,9 @@
#include "../common/defs.h"
.float w_reload_next;
.float w_attack_next;
/* networking helpers */
#define NETWORKED_INT(x) int x; int x ##_net;
#define NETWORKED_FLOAT(x) float x; float x ##_net;
@ -383,22 +386,6 @@ traceline(vector v1, vector v2, float flags, entity ent)
prior(v1, v2, flags, ent);
}
void
setorigin_safe(entity target, vector testorg)
{
for (int i = 0; i < 16; i++) {
tracebox(testorg, target.mins, target.maxs, testorg, MOVE_NORMAL, target);
if (!trace_startsolid) {
break;
}
testorg[2] += 1.0;
}
setorigin(target, testorg);
}
#ifdef SERVER
string Skill_GetStringValue(string, string);
#endif

View file

@ -75,7 +75,7 @@ ncPlayer::Physics_Fall(float flDownforce)
ncDict damageDecl = spawn(ncDict);
damageDecl.AddKey("damage", itos((int)finalDamage));
damageDecl.AddKey("noArmor", "1");
Damage(this, this, damageDecl, 1.0, g_vec_null, GetOrigin() + [0,0, mins[2]]);
Damage(this, world, damageDecl, 1.0, g_vec_null, GetOrigin() + [0,0, mins[2]]);
remove(damageDecl);
//Damage_Apply(this, world, fFallDamage, 0, DMG_FALL | DMG_SKIP_ARMOR);
@ -595,7 +595,6 @@ ncPlayer::Physics_Run(void)
RemoveVFlags(VFL_SPRINTING);
}
/* maxspeed changes when crouching, TODO: make this game-specific */
maxspeed = Physics_MaxSpeed();
#ifdef SERVER

View file

@ -207,7 +207,7 @@ PropData_ParseField(int i, string keyName, string setValue)
g_propdata[i].breakable_particle = setValue;
break;
case "breakable_model":
g_propdata[i].breakable_model = setValue;
g_propdata[i].breakable_model = strtolower(setValue);
break;
case "breakable_count":
g_propdata[i].breakable_count = stoi(setValue);