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 // entity 0
{ {
"skyname" "dune"
"classname" "worldspawn" "classname" "worldspawn"
// brush 0 // 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 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 ) skybox/dune 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 ) skybox/dune 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 ) skybox/dune 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 ) skybox/dune 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 ) skybox/dune 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 // brush 1
{ {
@ -57,78 +58,6 @@
} }
// brush 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 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 ( 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 ( 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 ( 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 ( 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 ( 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 ( 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 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 ( 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 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 ( 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 ( 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 ( 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 ( 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 ( 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 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 ( 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 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 ( -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 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 ( -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 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 ( 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 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 ( 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 ( -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 ( -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 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 ( -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 -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 ( -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" "classname" "env_cubemap"
"origin" "-432 0 328" "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" "classname" "worldspawn"
// brush 0 // 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 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 // 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 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 // 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 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 // brush 3
{ {
( 760 192 192 ) ( 760 -192 192 ) ( 248 192 192 ) 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
( 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 264 ) ( 768 -192 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 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 // 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 ( -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 // 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 -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 // 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 -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 // 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 -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 // brush 8
{ {
( 760 -384 192 ) ( 760 -768 192 ) ( 248 -384 192 ) 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
( 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 -768 264 ) ( 768 -768 256 ) measure/wall128gr 0 0 0 0.500000 0.500000 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 // 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 ( -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 // 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 ( -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 // brush 11
{ {
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/bricks023 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
( 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
( 80 -104 128 ) ( 80 -472 128 ) ( -56 -104 128 ) NULL 48 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 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 // 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 -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 // 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 ( -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 // 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 ( -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 // brush 15
{ {
( 192 -320 264 ) ( -320 -320 264 ) ( 192 -320 256 ) measure/wall128gr 0 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
( 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
( 80 -104 128 ) ( 80 -472 128 ) ( -56 -104 128 ) NULL 48 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 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 // 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 -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 // 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 ( -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 // entity 1
@ -174,202 +174,202 @@
} }
// entity 3 // entity 3
{ {
"classname" "func_button"
"target" "foobar2" "target" "foobar2"
"classname" "func_button"
// brush 0 // 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 ( 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 // entity 4
{ {
"classname" "func_button"
"target" "foobar1" "target" "foobar1"
"classname" "func_button"
// brush 0 // 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 ( 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 // entity 5
{ {
"classname" "point_message"
"origin" "-160.000000 128.000000 32.000000"
"message" "White dynamic light with no style pattern." "message" "White dynamic light with no style pattern."
"origin" "-160.000000 128.000000 32.000000"
"classname" "point_message"
} }
// entity 6 // entity 6
{ {
"classname" "light_dynamic"
"origin" "-192.000000 128.000000 64.000000"
"_light" "255 255 255"
"brightness" "250" "brightness" "250"
"_light" "255 255 255"
"origin" "-192.000000 128.000000 64.000000"
"classname" "light_dynamic"
} }
// entity 7 // entity 7
{ {
"classname" "point_message"
"origin" "-160.000000 -64.000000 32.000000"
"message" "Small blinking yellow dynamic light." "message" "Small blinking yellow dynamic light."
"origin" "-160.000000 -64.000000 32.000000"
"classname" "point_message"
} }
// entity 8 // entity 8
{ {
"classname" "light_dynamic"
"origin" "-192.000000 -64.000000 64.000000"
"pattern" "zm"
"_light" "255 255 128"
"brightness" "150" "brightness" "150"
"_light" "255 255 128"
"pattern" "zm"
"origin" "-192.000000 -64.000000 64.000000"
"classname" "light_dynamic"
} }
// entity 9 // entity 9
{ {
"classname" "point_message"
"origin" "120.000000 128.000000 32.000000"
"message" "Toggable white flickering dynamic light." "message" "Toggable white flickering dynamic light."
"origin" "120.000000 128.000000 32.000000"
"classname" "point_message"
} }
// entity 10 // entity 10
{ {
"classname" "light_dynamic"
"origin" "192.000000 128.000000 64.000000"
"targetname" "foobar1"
"style" "1"
"_light" "255 255 255"
"brightness" "250" "brightness" "250"
"_light" "255 255 255"
"style" "1"
"targetname" "foobar1"
"origin" "192.000000 128.000000 64.000000"
"classname" "light_dynamic"
} }
// entity 11 // entity 11
{ {
"classname" "point_message"
"origin" "120.000000 -64.000000 32.000000"
"message" "Toggable red slow pulsing dynamic light." "message" "Toggable red slow pulsing dynamic light."
"origin" "120.000000 -64.000000 32.000000"
"classname" "point_message"
} }
// entity 12 // 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" "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 // 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" "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 // entity 14
{ {
"classname" "env_cubemap"
"origin" "0 0 0" "origin" "0 0 0"
"classname" "env_cubemap"
} }
// entity 15 // 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" "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 // 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" "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 // entity 17
{ {
"classname" "point_message"
"origin" "0.000000 -576.000000 24.000000"
"message" "env_projectedtexture room" "message" "env_projectedtexture room"
"origin" "0.000000 -576.000000 24.000000"
"classname" "point_message"
} }
// entity 18 // entity 18
{ {
"classname" "func_train"
"target" "stop1"
"spawnflags" "8"
"targetname" "trainy" "targetname" "trainy"
"spawnflags" "8"
"target" "stop1"
"classname" "func_train"
// brush 0 // 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 -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 // 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 -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 // entity 19
{ {
"classname" "path_corner"
"origin" "-128.000000 -576.000000 0.000000"
"targetname" "stop1"
"target" "stop2"
"speed" "100" "speed" "100"
"target" "stop2"
"targetname" "stop1"
"origin" "-128.000000 -576.000000 0.000000"
"classname" "path_corner"
} }
// entity 20 // entity 20
{ {
"classname" "path_corner"
"origin" "64.000000 -576.000000 0.000000"
"target" "stop1"
"targetname" "stop2" "targetname" "stop2"
"target" "stop1"
"origin" "64.000000 -576.000000 0.000000"
"classname" "path_corner"
} }
// entity 21 // entity 21
{ {
"classname" "env_projectedtexture"
"origin" "40.000000 -504.000000 24.000000"
"parentname" "trainy"
"spawnflags" "1" "spawnflags" "1"
"parentname" "trainy"
"origin" "40.000000 -504.000000 24.000000"
"classname" "env_projectedtexture"
} }
// entity 22 // entity 22
{ {
"classname" "env_projectedtexture"
"origin" "40.000000 -648.000000 24.000000"
"parentname" "trainy"
"spawnflags" "1" "spawnflags" "1"
"parentname" "trainy"
"origin" "40.000000 -648.000000 24.000000"
"classname" "env_projectedtexture"
} }
// entity 23 // entity 23
{ {
"classname" "func_button" "classname" "func_button"
"OnPressed" "sky_cube,SpotlightTexture,env/sundown_hdr/250th/bg,0,-1" "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,SpotlightTexture,env/smudge/bg,5,-1"
"OnPressed" "sky_cube,SetPattern,zqmaamqzzqmaamqz,5,-1" "OnPressed" "sky_cube,SetPattern,zqmaamqzzqmaamqz,5,-1"
"OnPressed" "sky_cube,SetPattern,z,7.5,-1" "OnPressed" "sky_cube,SetPattern,z,7.5,-1"
// brush 0 // 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 -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 // entity 24
@ -377,11 +377,11 @@
"classname" "func_dustmotes" "classname" "func_dustmotes"
// brush 0 // 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 ( -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 // 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" "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 // 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 ( 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 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 ( -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 ( 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 ( 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 // brush 2
{ {
( -1536 -192 256 ) ( -1536 192 256 ) ( -1536 -192 264 ) 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
( -1536 -192 256 ) ( -1536 -192 264 ) ( -1024 -192 256 ) pbrtest/tiles032 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
( -1984 -192 -128 ) ( -1472 -192 -128 ) ( -1984 192 -128 ) pbrtest/tiles032 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
( -1472 192 -184 ) ( -1472 192 -192 ) ( -1472 -192 -184 ) pbrtest/tiles032 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
( -1024 192 264 ) ( -1536 192 264 ) ( -1024 192 256 ) pbrtest/tiles032 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
( -1032 192 0 ) ( -1032 -192 0 ) ( -1544 192 0 ) pbrtest/tiles032 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 // brush 3
{ {
( 256 -192 64 ) ( 256 192 64 ) ( 256 -192 72 ) 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
( 256 -192 256 ) ( 256 -192 264 ) ( 768 -192 256 ) pbrtest/tiles032 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
( -192 -192 -128 ) ( 320 -192 -128 ) ( -192 192 -128 ) pbrtest/tiles032 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 192 8 ) ( 320 192 0 ) ( 320 -192 8 ) pbrtest/tiles032 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 192 264 ) ( 256 192 264 ) ( 768 192 256 ) pbrtest/tiles032 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
( 760 192 0 ) ( 760 -192 0 ) ( 248 192 0 ) pbrtest/tiles032 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 // brush 4
{ {
( -1536 -588 256 ) ( -1536 -204 256 ) ( -1536 -588 264 ) 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 -256 256 ) ( -24 -256 264 ) ( 488 -256 256 ) pbrtest/tiles032 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 -576 -128 ) ( -552 -576 -128 ) ( -1064 -192 -128 ) pbrtest/tiles032 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 96 8 ) ( 320 96 0 ) ( 320 -288 8 ) pbrtest/tiles032 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
( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/tiles032 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 -192 0 ) ( -112 -576 0 ) ( -624 -192 0 ) pbrtest/tiles032 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 // brush 5
{ {
( -1536 -148 256 ) ( -1536 236 256 ) ( -1536 -148 264 ) 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
( -24 192 256 ) ( -24 192 264 ) ( 488 192 256 ) pbrtest/tiles032 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
( -1064 -128 -128 ) ( -552 -128 -128 ) ( -1064 256 -128 ) pbrtest/tiles032 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
( 320 552 8 ) ( 320 552 0 ) ( 320 168 8 ) pbrtest/tiles032 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
( -104 256 264 ) ( -616 256 264 ) ( -104 256 256 ) pbrtest/tiles032 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
( -112 256 0 ) ( -112 -128 0 ) ( -624 256 0 ) pbrtest/tiles032 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 // 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 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 ( 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 ( -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 ( 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 ( 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 // brush 8
{ {
( -1536 -588 384 ) ( -1536 -204 384 ) ( -1536 -588 392 ) 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 -256 384 ) ( -24 -256 392 ) ( 488 -256 384 ) pbrtest/bricks045 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 -576 0 ) ( -552 -576 0 ) ( -1064 -192 0 ) pbrtest/bricks045 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 120 136 ) ( 0 120 128 ) ( 0 -264 136 ) pbrtest/bricks045 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 -192 392 ) ( -616 -192 392 ) ( -104 -192 384 ) pbrtest/bricks045 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 -192 128 ) ( -112 -576 128 ) ( -624 -192 128 ) pbrtest/bricks045 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 // 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 ( 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 ( 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 ( -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 ( 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 ( 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 ( -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 ( -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 ( -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 ( -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 ( 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 ( 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 ( 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 ( 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 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 ( 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 ) ( 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 ( 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 ) ( 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 ( 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 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 ( 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 ( 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 ( 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 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 ( 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 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 ( 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 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 ( 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 ( 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 ( 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 ( 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 ( 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 ( 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 ( 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 ( 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 ( 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 ( 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 ( 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 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 ( 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 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 ( 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 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 ( 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 // entity 1
{ {
@ -251,28 +368,7 @@
"classname" "prop_physics" "classname" "prop_physics"
"origin" "-1344 64 0" "origin" "-1344 64 0"
"model" "models/props_gltf/boombox.gltf" "model" "models/props_gltf/boombox.gltf"
"modelscale" "25" "modelscale" "25"
"mins" "-12 -12 -12" "mins" "-12 -12 -12"
"maxs" "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 // entity 0
{ {
"classname" "worldspawn"
"skyname" "smudge" "skyname" "smudge"
"classname" "worldspawn"
// brush 0 // 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 -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 // brush 1
{ {
( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) 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/bricks023 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/bricks023 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/bricks023 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/bricks023 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
( 64 64 64 ) ( -64 64 72 ) ( 64 64 72 ) pbrtest/bricks023 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 // brush 2
{ {
( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) 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
( 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/concrete028 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/concrete028 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/concrete028 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 ( 128 128 64 ) ( 128 128 -64 ) ( 128 -128 64 ) pbrtest/concrete028 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 ( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
} }
// brush 3 // brush 3
{ {
( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) 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
( -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/concrete028 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/concrete028 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/concrete028 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 ( -128 -128 -64 ) ( -128 -128 64 ) ( 128 -128 -64 ) pbrtest/concrete028 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 ( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
} }
// brush 4 // brush 4
{ {
( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) 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
( -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 64 ) pbrtest/concrete028 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/concrete028 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 ( -128 128 64 ) ( 128 -128 64 ) ( 128 128 64 ) pbrtest/concrete028 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 ( -128 -128 -64 ) ( -128 128 -64 ) ( -128 -128 64 ) pbrtest/concrete028 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 ( 128 128 128 ) ( 128 -128 128 ) ( -128 128 128 ) pbrtest/concrete028 0 0 0 0.250000 0.250000 0 0 0
} }
// brush 5 // 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 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 // 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 -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 // 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 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 // 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 -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 // 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
( -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 // 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 ( 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 // 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 ( 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 // entity 1
{ {
"classname" "info_player_start"
"origin" "-96.000000 0.000000 0.000000" "origin" "-96.000000 0.000000 0.000000"
"classname" "info_player_start"
} }
// entity 2 // 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" "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 // entity 3
{ {
"classname" "env_sun"
"origin" "0.000000 0.000000 96.000000"
"pitch" "-44"
"angle" "325" "angle" "325"
"pitch" "-44"
"origin" "0.000000 0.000000 96.000000"
"classname" "env_sun"
} }
// entity 4 // entity 4
{ {
"classname" "env_cubemap"
"origin" "64 0 -16" "origin" "64 0 -16"
"classname" "env_cubemap"
} }
// entity 5 // entity 5
{ {
"origin" "-64 0 -16"
"classname" "env_cubemap" "classname" "env_cubemap"
"origin" "-64 0 -16"
} }

View file

@ -3,57 +3,57 @@
"classname" "worldspawn" "classname" "worldspawn"
// brush 0 // 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 ( 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 // 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 ( 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 // brush 2
{ {
( -320 -192 256 ) ( -320 192 256 ) ( -320 -192 264 ) 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
( -320 -192 256 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/bricks045 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
( -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/redbrick003 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 ( -768 -192 -128 ) ( -256 -192 -128 ) ( -768 192 -128 ) pbrtest/redbrick003 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 ( -320 -192 256 ) ( -320 -192 264 ) ( 192 -192 256 ) pbrtest/redbrick003 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 ( -320 -192 256 ) ( -320 192 256 ) ( -320 -192 264 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
} }
// brush 3 // brush 3
{ {
( 256 -192 256 ) ( 256 192 256 ) ( 256 -192 264 ) 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
( 256 -192 256 ) ( 256 -192 264 ) ( 768 -192 256 ) pbrtest/bricks045 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
( -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/redbrick003 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 ( -192 -192 -128 ) ( 320 -192 -128 ) ( -192 192 -128 ) pbrtest/redbrick003 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 ( 256 -192 256 ) ( 256 -192 264 ) ( 768 -192 256 ) pbrtest/redbrick003 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 ( 256 -192 256 ) ( 256 192 256 ) ( 256 -192 264 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
} }
// brush 4 // brush 4
{ {
( -320 -576 256 ) ( -320 -192 256 ) ( -320 -576 264 ) 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
( 272 -256 256 ) ( 272 -256 264 ) ( 784 -256 256 ) pbrtest/bricks045 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
( -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/redbrick003 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 ( -768 -576 -128 ) ( -256 -576 -128 ) ( -768 -192 -128 ) pbrtest/redbrick003 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 ( 272 -256 256 ) ( 272 -256 264 ) ( 784 -256 256 ) pbrtest/redbrick003 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 ( -320 -576 256 ) ( -320 -192 256 ) ( -320 -576 264 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
} }
// brush 5 // brush 5
{ {
( -320 -128 256 ) ( -320 256 256 ) ( -320 -128 264 ) 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
( 272 192 256 ) ( 272 192 264 ) ( 784 192 256 ) pbrtest/bricks045 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
( -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/redbrick003 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 ( -768 -128 -128 ) ( -256 -128 -128 ) ( -768 256 -128 ) pbrtest/redbrick003 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 ( 272 192 256 ) ( 272 192 264 ) ( 784 192 256 ) pbrtest/redbrick003 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 ( -320 -128 256 ) ( -320 256 256 ) ( -320 -128 264 ) pbrtest/redbrick003 0 0 0 0.250000 0.250000 0 0 0
} }
} }
// entity 1 // entity 1
@ -66,79 +66,79 @@
} }
// entity 3 // entity 3
{ {
"light" "50"
"origin" "192.000000 128.000000 64.000000"
"classname" "light" "classname" "light"
"origin" "192.000000 128.000000 64.000000"
"light" "50"
} }
// entity 4 // entity 4
{ {
"light" "50"
"origin" "192.000000 -128.000000 64.000000"
"classname" "light" "classname" "light"
"origin" "192.000000 -128.000000 64.000000"
"light" "50"
} }
// entity 5 // entity 5
{ {
"OnPressed" "foobar,Stop,,0,-1"
"classname" "func_button" "classname" "func_button"
"OnPressed" "foobar,Stop,,0,-1"
// brush 0 // 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 -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 // entity 6
{ {
"OnPressed" "foobar,Start,,0,-1"
"classname" "func_button" "classname" "func_button"
"OnPressed" "foobar,Start,,0,-1"
// brush 0 // 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 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 // entity 7
{ {
"light" "25"
"origin" "-192.000000 128.000000 64.000000"
"classname" "light" "classname" "light"
"origin" "-192.000000 128.000000 64.000000"
"light" "25"
} }
// entity 8 // entity 8
{ {
"style" "9"
"light" "25"
"origin" "-192.000000 -64.000000 64.000000"
"classname" "light" "classname" "light"
"origin" "-192.000000 -64.000000 64.000000"
"light" "25"
"style" "9"
} }
// entity 9 // entity 9
{ {
"message" "Particle Emitter: On"
"origin" "64.000000 128.000000 32.000000"
"classname" "point_message" "classname" "point_message"
"origin" "64.000000 128.000000 32.000000"
"message" "Particle Emitter: On"
} }
// entity 10 // entity 10
{ {
"message" "Particle Emitter: Off"
"origin" "64.000000 -64.000000 32.000000"
"classname" "point_message" "classname" "point_message"
"origin" "64.000000 -64.000000 32.000000"
"message" "Particle Emitter: Off"
} }
// entity 11 // entity 11
{ {
"interval" "0.25"
"effect_name" "test.ball"
"targetname" "foobar"
"origin" "128.000000 32.000000 32.000000"
"classname" "info_particle_system" "classname" "info_particle_system"
"origin" "128.000000 32.000000 32.000000"
"targetname" "foobar"
"effect_name" "test.ball"
"interval" "0.25"
} }
// entity 12 // entity 12
{ {
"origin" "0 0 -8"
"classname" "env_cubemap" "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)) if (!HasSpawnFlags(SSFL_REPEATABLE))
m_iEnabled = FALSE; m_iEnabled = FALSE;
if (f.IsPerforming()) {
f.CancelSchedule();
}
NSAIScript_Log("\tName: %s", targetname); NSAIScript_Log("\tName: %s", targetname);
NSAIScript_Log("\tTarget: %s", m_strMonster); NSAIScript_Log("\tTarget: %s", m_strMonster);
NSAIScript_Log("\tStarted: %f", time); NSAIScript_Log("\tStarted: %f", time);
/* if we're told an anim, we better have it... or else. */ /* 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); f.m_flSequenceEnd = frameforname(f.modelindex, m_strActionAnim);
if (f.m_flSequenceEnd == -1) { if (f.m_flSequenceEnd == -1) {
print(sprintf("^1ERROR: Framegroup %s not found!\n", m_strActionAnim)); 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 */ /* entity to trigger after sequence ends */
if (target) { if (STRING_SET(target)) {
NSAIScript_Log("\tTrigger when finished: %s", target); NSAIScript_Log("\tTrigger when finished: %s", target);
f.m_strRouteEnded = target; f.m_strRouteEnded = target;
f.m_ssLast = this; f.m_ssLast = this;
@ -290,7 +294,7 @@ scripted_sequence::RunOnEntity(entity targ)
f.m_iSequenceFlags = spawnflags; f.m_iSequenceFlags = spawnflags;
f.m_strSequenceKillTarget = m_strKillTarget; f.m_strSequenceKillTarget = m_strKillTarget;
if (m_strKillTarget) { if (STRING_SET(m_strKillTarget)) {
//readcmd(sprintf("watchpoint_ssqc %d.nextthink\n", num_for_edict(f))); //readcmd(sprintf("watchpoint_ssqc %d.nextthink\n", num_for_edict(f)));
NSAIScript_Log("\tKillTarget when finished: %S", m_strKillTarget); NSAIScript_Log("\tKillTarget when finished: %S", m_strKillTarget);
} }
@ -301,12 +305,12 @@ scripted_sequence::RunOnEntity(entity targ)
} else if (m_iMove == SS_WALK) { } else if (m_iMove == SS_WALK) {
f.RouteToPosition(GetOrigin()); f.RouteToPosition(GetOrigin());
f.m_flSequenceSpeed = f.GetWalkSpeed(); 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; return;
} else if (m_iMove == SS_RUN) { } else if (m_iMove == SS_RUN) {
f.RouteToPosition(GetOrigin()); f.RouteToPosition(GetOrigin());
f.m_flSequenceSpeed = f.GetRunSpeed(); 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; return;
} else if (m_iMove == SS_INSTANTANEOUS) { } else if (m_iMove == SS_INSTANTANEOUS) {
f.SetOrigin(GetOrigin()); f.SetOrigin(GetOrigin());
@ -316,7 +320,7 @@ scripted_sequence::RunOnEntity(entity targ)
} }
/* all the non-moving targets will do this at least */ /* all the non-moving targets will do this at least */
if (m_strActionAnim) { if (STRING_SET(m_strActionAnim)) {
if (m_iMove == SS_NO) { if (m_iMove == SS_NO) {
//f.SetAngles(GetAngles()); //f.SetAngles(GetAngles());
//f.SetOrigin(GetOrigin()); //f.SetOrigin(GetOrigin());
@ -342,14 +346,18 @@ scripted_sequence::RunOnEntity(entity targ)
f.m_iSequenceState = SEQUENCESTATE_ENDING; f.m_iSequenceState = SEQUENCESTATE_ENDING;
if (HasSpawnFlags(SSFL_LEAVECORPSE)) if (HasSpawnFlags(SSFL_LEAVECORPSE)) {
f.ScheduleThink(f.FreeStateDead, duration); f.think = ncMonster::ScriptedSequenceEnded_Dead;
else if (HasSpawnFlags(SSFL_NOSCRIPTMOVE) || m_iMove == SS_NO) f.nextthink = GetTime() + duration;
f.ScheduleThink(f.FreeState, duration); } else if (HasSpawnFlags(SSFL_NOSCRIPTMOVE) || m_iMove == SS_NO) {
else f.think = ncMonster::ScriptedSequenceEnded;
f.ScheduleThink(f.FreeStateMoved, duration); 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 */ /* make sure we're forgetting about enemies and attack states in sequence */
f.m_eEnemy = __NULL__; 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. /** 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. @param targetOrigin The spot to hide from.
@return Absolute position of a valid cover spot. */ @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 /** @} */ // end of nav

View file

@ -212,7 +212,7 @@ vector
Nodes_FindCoverFromEnemy(ncActor targetEnemy) Nodes_FindCoverFromEnemy(ncActor targetEnemy)
{ {
float bestDistance = COST_INFINITE; float bestDistance = COST_INFINITE;
int bestNodeID = -1; int bestNodeID = -1i;
for (int i = 0; i < g_iNodes; i++) { for (int i = 0; i < g_iNodes; i++) {
vector nodePosition = g_pNodes[i].m_vecOrigin; 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); return (g_pNodes[bestNodeID].m_vecOrigin);
} }
@ -294,22 +298,124 @@ Nodes_FindCoverFromEnemyFarNode(ncActor targetEnemy, vector targetNode)
} }
vector vector
Nodes_FindCoverFromPosition(vector targetOrigin) Nodes_FindCoverFromPosition(entity traceEntity, vector targetOrigin)
{ {
float bestDistance = 0; float bestDistance = COST_INFINITE;
int bestNodeID = -1; 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++) { for (int i = 0; i < g_iNodes; i++) {
vector nodePosition = g_pNodes[i].m_vecOrigin; 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; bestDistance = nodeDistance;
bestNodeID = i; bestNodeID = i;
} }
} }
if (bestNodeID) {
return (g_vec_null);
}
NSError("%v", (g_pNodes[bestNodeID].m_vecOrigin));
return (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 * Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@ -17,12 +17,23 @@
void void
ncOutput::TriggerOutput(void) ncOutput::TriggerOutput(void)
{ {
/* plug into all the inputs. */ ncIO ourOwner = (ncIO)owner;
for (entity f = world; (f = find(f, ::targetname, m_strTarget));) { ncIO ourActivator = (ncIO)m_eActivator;
ncEntity trigger = (ncEntity)f;
if (trigger.Input != __NULL__) { /* plug into all the inputs. */
trigger.Input(m_eActivator, m_strInput, m_strData); 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 void SetTarget(ncEntity target);
nonvirtual ncEntity GetTarget(void); nonvirtual ncEntity GetTarget(void);
nonvirtual void Think(void); nonvirtual void Think(void);
nonvirtual bool ProgressOnMovement(void);
nonvirtual void SetFailSchedule(string);
private: private:
string m_name;
int m_taskCount; int m_taskCount;
int m_onTask; int m_onTask;
ncActor m_controllingActor; ncActor m_controllingActor;
ncDict m_scheduleDecl; ncDict m_scheduleDecl;
ncEntity m_eTarget; ncEntity m_eTarget;
bool m_inProgress;
bool m_bProgressOnMovement;
string m_failSchedule;
nonvirtual bool AssignActor(ncActor targetActor); nonvirtual bool AssignActor(ncActor targetActor);
nonvirtual void Advance(void); nonvirtual void Advance(void);
nonvirtual void AdvanceLater(float timeDelta); nonvirtual void AdvanceLater(float timeDelta);
nonvirtual void Cancel(void); nonvirtual void Cancel(void);
nonvirtual void Message(string);
nonvirtual bool InProgress(void);
}; };
/** @} */ // end of npc_schedules /** @} */ // end of npc_schedules

View file

@ -25,56 +25,138 @@ ncSchedule::ncSchedule(void)
m_taskCount = 0i; m_taskCount = 0i;
m_controllingActor = __NULL__; m_controllingActor = __NULL__;
m_scheduleDecl = __NULL__; m_scheduleDecl = __NULL__;
m_failSchedule = __NULL__;
} }
void void
ncSchedule::AdvanceLater(float timeDelta) 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__; ncTimer newTimer = __NULL__;
newTimer = newTimer.TemporaryTimer(this, Advance, timeDelta, false); newTimer = newTimer.TemporaryTimer(this, Advance, timeDelta, false);
} }
bool
ncSchedule::InProgress(void)
{
return (m_inProgress);
}
void void
ncSchedule::Advance(void) ncSchedule::Advance(void)
{ {
string taskInput; string taskInput;
string taskParms; 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++; m_onTask++;
if (m_onTask > m_taskCount) { if (m_onTask > m_taskCount) {
ReleaseThink();
Cancel(); Cancel();
return; return;
} }
string taskString = m_scheduleDecl.GetString(sprintf("task_%i", m_onTask)); 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); 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 void
ncSchedule::Cancel(void) ncSchedule::Cancel(void)
{ {
if (wasfreed(this)) {
return;
}
EntLog("Schedule for %S (%d) terminated.", m_controllingActor.classname, num_for_edict(m_controllingActor)); EntLog("Schedule for %S (%d) terminated.", m_controllingActor.classname, num_for_edict(m_controllingActor));
/* TODO: Let NPC know that it's done? */ /* TODO: Let NPC know that it's done? */
m_controllingActor.m_activeSchedule = __NULL__; if (m_controllingActor) {
m_controllingActor = __NULL__; 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(); Destroy();
} }
bool
ncSchedule::ProgressOnMovement(void)
{
return (m_bProgressOnMovement);
}
void void
ncSchedule::Think(void) ncSchedule::Think(void)
{ {
bool shouldCancel = false;
/* Our actor is dead. Invalidate right away. */ /* 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(); ReleaseThink();
Cancel(); Cancel();
return; return;
@ -84,6 +166,36 @@ ncSchedule::Think(void)
ScheduleThink(Think, 0.0f); 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 bool
ncSchedule::AssignActor(ncActor targetActor) ncSchedule::AssignActor(ncActor targetActor)
{ {
@ -94,9 +206,7 @@ ncSchedule::AssignActor(ncActor targetActor)
return (false); return (false);
} }
EntLog("Schedule %d created and active.", num_for_edict(this)); 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);
EntLog("Controlling %S (%d)", m_controllingActor.classname, num_for_edict(m_controllingActor));
EntLog("Total tasks: %i", m_taskCount);
Advance(); Advance();
@ -123,6 +233,7 @@ ncSchedule::CreateSchedule(ncActor targetActor, string scheduleDecl)
{ {
ncSchedule newSchedule = spawn(ncSchedule); ncSchedule newSchedule = spawn(ncSchedule);
newSchedule.m_name = scheduleDecl;
newSchedule.m_scheduleDecl = ncDict::LoadDeclFromFile(scheduleDecl, sprintf("schedules/%s.decl", scheduleDecl)); newSchedule.m_scheduleDecl = ncDict::LoadDeclFromFile(scheduleDecl, sprintf("schedules/%s.decl", scheduleDecl));
if ((newSchedule.m_scheduleDecl.TokenCount() % 2) != 0) { if ((newSchedule.m_scheduleDecl.TokenCount() % 2) != 0) {

View file

@ -681,7 +681,7 @@ CheckSpawn(void() spawnfunc)
ncEntity ent = (ncEntity)self; ncEntity ent = (ncEntity)self;
string desiredClass = ent.classname; string desiredClass = ent.classname;
static string lastClass; static string lastClass;
bool skipLoad = false; bool skipLoad = false; /* entity data will be loaded elsewhere */
/* cancel out early */ /* cancel out early */
if (ent == world) { if (ent == world) {
@ -695,6 +695,16 @@ CheckSpawn(void() spawnfunc)
/* no longer needed, immediately discard. */ /* no longer needed, immediately discard. */
__fullspawndata = ""; __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) { if (MapTweak_EntitySpawn(ent) == true) {
skipLoad = true; skipLoad = true;
} else if (EntityDef_SpawnClassname(desiredClass) != __NULL__) { } else if (EntityDef_SpawnClassname(desiredClass) != __NULL__) {

View file

@ -46,18 +46,26 @@ MapC_Init(void)
} }
} }
/* Rule specific Scripting, nicknamed 'RuleC' because MapC exists. */ __weak string
void Game_DefaultRules(void)
RuleC_Init(void)
{ {
string gameType = cvars.GetString("g_gametype"); string gameType = cvars.GetString("g_gametype");
string pathToProgs;
if (!STRING_SET(gameType)) { if (!STRING_SET(gameType)) {
bool isCoop = cvars.GetBool("coop"); bool isCoop = cvars.GetBool("coop");
bool isSingle = (cvars.GetInteger("sv_playerslots") <= 1) ? (true) : (false); 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"); pathToProgs = strcat("progs/", gameType, ".dat");
@ -78,7 +86,7 @@ RuleC_Init(void)
externset(g_ruleCProgs, world, "self"); externset(g_ruleCProgs, world, "self");
thread(mainFunction()) thread(mainFunction())
} else { } 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); 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) { if (spawnPoint) {
targetEnt.origin = spawnPoint.origin; targetEnt.origin = spawnPoint.origin;
targetEnt.angles = spawnPoint.angles; targetEnt.angles = spawnPoint.angles;

View file

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

View file

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

View file

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

View file

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

View file

@ -248,6 +248,7 @@ public:
#ifdef SERVER #ifdef SERVER
/* overrides */ /* overrides */
virtual void DebugDraw(void);
virtual void Save(float); virtual void Save(float);
virtual void Restore(string,string); virtual void Restore(string,string);
virtual void EvaluateEntity(void); virtual void EvaluateEntity(void);
@ -330,14 +331,16 @@ public:
nonvirtual bool IsValidEnemy(entity); nonvirtual bool IsValidEnemy(entity);
/** Returns TRUE if the monster is currently on route to a position. */ /** Returns TRUE if the monster is currently on route to a position. */
virtual bool IsOnRoute(void); virtual bool IsOnRoute(void);
/** Override */
virtual void RouteClear(void);
/* sequences */ /* sequences */
/** Internal use only. Called when a sequence is done. */ /** 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. */ /** 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. */ /** 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. */ /** Internal use only. Called when a movement route is done. */
virtual void RouteEnded(void); virtual void RouteEnded(void);
/** Internal use only. Called every frame to progress through a route. */ /** 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. */ /** Returns the type of sequence they're currently in. */
nonvirtual int GetSequenceState(void); nonvirtual int GetSequenceState(void);
/** Returns if they're currently in a scripted sequence. */ /** Returns if they're currently in a scripted sequence. */
nonvirtual bool InSequence(void); nonvirtual bool InScriptedSequence(void);
/* animation cycles */ /* animation cycles */
/** DEPRECATED, Overridable: Called when we need to play a fresh idle framegroup. */ /** DEPRECATED, Overridable: Called when we need to play a fresh idle framegroup. */
@ -365,11 +368,12 @@ public:
virtual int AnimRun(void); virtual int AnimRun(void);
/** Call to play a single animation onto it, which cannot be interrupted by movement. */ /** Call to play a single animation onto it, which cannot be interrupted by movement. */
virtual void AnimPlay(float); 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); virtual void AnimationUpdate(void);
/** Returns if we're currently in a forced animation sequence. */ /** Returns if we're currently in a forced animation sequence. */
nonvirtual bool InAnimation(void); nonvirtual bool InForcedAnimation(void);
nonvirtual void AnimReset(void); /** Starts the animation sequence from the beginning */
nonvirtual void AnimationRewind(void);
/* states */ /* states */
/** Called whenever the state of this ncMonster changes. */ /** Called whenever the state of this ncMonster changes. */
@ -420,6 +424,21 @@ private:
vector base_maxs; vector base_maxs;
float base_health; 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 */ /* sequences */
string m_strRouteEnded; string m_strRouteEnded;
int m_iSequenceRemove; int m_iSequenceRemove;
@ -534,10 +553,10 @@ private:
bool m_usesNav; bool m_usesNav;
bool m_fireFromHead; bool m_fireFromHead;
bool m_pvsSleep; bool m_pvsSleep;
bool m_bCanAttack;
nonvirtual void _LerpTurnToEnemy(void);
nonvirtual void _LerpTurnToPos(vector); nonvirtual void _LerpTurnToPos(vector);
nonvirtual void _LerpTurnToYaw(vector); nonvirtual void _LerpTurnToYaw(float);
virtual void _Alerted(void); virtual void _Alerted(void);
nonvirtual void _ChaseAfterSpawn(void); nonvirtual void _ChaseAfterSpawn(void);
#endif #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. */ /** Overridable: Called regularily to select a new schedule to perform. */
virtual void SelectNewSchedule(void); virtual void SelectNewSchedule(void);
nonvirtual void ScheduleThink(void);
/** Forces a named schedule to be performed. */ /** Forces a named schedule to be performed. */
nonvirtual bool CancelSchedule(void);
nonvirtual void PerformSchedule(string); nonvirtual void PerformSchedule(string);
nonvirtual void MessageSchedule(string);
nonvirtual bool IsPerforming(void); nonvirtual bool IsPerforming(void);
/* methods we'd like others to override */ /* methods we'd like others to override */
@ -187,7 +190,7 @@ public:
/** When called, will wipe any memory of an ongoing route. */ /** When called, will wipe any memory of an ongoing route. */
virtual void RouteClear(void); virtual void RouteClear(void);
/** Internal use only. Called every frame to see our route progression. */ /** 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. */ /** When called, will plot a route to a given world coordinate and start moving. */
virtual void RouteToPosition(vector); 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. */ /** 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 */ /** When called, will start following a path_corner */
virtual void ChasePath(string startPath); virtual void ChasePath(string startPath);
/** Internal use only. Called every frame to see our route progression. */ /** 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. */ /** 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); virtual void Physics_Run(void);
#endif #endif
@ -215,6 +218,7 @@ private:
vector m_vecRouteEntity; vector m_vecRouteEntity;
entity m_eFollowing; entity m_eFollowing;
float m_flMoveSpeedKey; float m_flMoveSpeedKey;
string m_mindset;
#endif #endif
/* sounds, may even be predicted. */ /* sounds, may even be predicted. */

View file

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

View file

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

View file

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

View file

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

View file

@ -443,6 +443,22 @@ typedef struct
declAPI_t declManager; declAPI_t declManager;
/** @} */ // end of shared /** @} */ // 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 __variant
linkToSharedProgs(string funcName) linkToSharedProgs(string funcName)
{ {

View file

@ -16,6 +16,9 @@
#include "../common/defs.h" #include "../common/defs.h"
.float w_reload_next;
.float w_attack_next;
/* networking helpers */ /* networking helpers */
#define NETWORKED_INT(x) int x; int x ##_net; #define NETWORKED_INT(x) int x; int x ##_net;
#define NETWORKED_FLOAT(x) float x; float 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); 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 #ifdef SERVER
string Skill_GetStringValue(string, string); string Skill_GetStringValue(string, string);
#endif #endif

View file

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

View file

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