[nexuiz-commits] r6532 - in branches/nexuiz-2.0: . data data/maps data/qcsrc/client data/qcsrc/common data/qcsrc/menu data/qcsrc/server data/scripts data/sound/cdtracks misc/mediasource misc/netradiant-NexuizPack/nexuiz.game/data misc/tools

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sun Apr 19 07:12:17 EDT 2009


Author: div0
Date: 2009-04-19 07:12:15 -0400 (Sun, 19 Apr 2009)
New Revision: 6532

Added:
   branches/nexuiz-2.0/data/maps/desertfactory.bgs
   branches/nexuiz-2.0/data/maps/desertfactory.bgs-maker.pl
   branches/nexuiz-2.0/data/qcsrc/client/bgmscript.qc
   branches/nexuiz-2.0/data/qcsrc/client/bgmscript.qh
   branches/nexuiz-2.0/data/qcsrc/client/wall.qc
   branches/nexuiz-2.0/data/qcsrc/server/g_models.qc
   branches/nexuiz-2.0/data/sound/cdtracks/ninesix.ogg
   branches/nexuiz-2.0/data/sound/cdtracks/sixtyfour_revisited.ogg
   branches/nexuiz-2.0/misc/mediasource/music/
   branches/nexuiz-2.0/misc/tools/midi2bgs.pl
Modified:
   branches/nexuiz-2.0/.patchsets
   branches/nexuiz-2.0/data/Makefile
   branches/nexuiz-2.0/data/defaultNexuiz.cfg
   branches/nexuiz-2.0/data/effectinfo.txt
   branches/nexuiz-2.0/data/maps/aneurysm.bsp
   branches/nexuiz-2.0/data/maps/aneurysm.map
   branches/nexuiz-2.0/data/maps/basement.bsp
   branches/nexuiz-2.0/data/maps/basement.map
   branches/nexuiz-2.0/data/maps/desertfactory.bsp
   branches/nexuiz-2.0/data/maps/desertfactory.map
   branches/nexuiz-2.0/data/qcsrc/client/Main.qc
   branches/nexuiz-2.0/data/qcsrc/client/View.qc
   branches/nexuiz-2.0/data/qcsrc/client/casings.qc
   branches/nexuiz-2.0/data/qcsrc/client/csqc_builtins.qc
   branches/nexuiz-2.0/data/qcsrc/client/gibs.qc
   branches/nexuiz-2.0/data/qcsrc/client/interpolate.qc
   branches/nexuiz-2.0/data/qcsrc/client/main.qh
   branches/nexuiz-2.0/data/qcsrc/client/particles.qc
   branches/nexuiz-2.0/data/qcsrc/client/progs.src
   branches/nexuiz-2.0/data/qcsrc/common/constants.qh
   branches/nexuiz-2.0/data/qcsrc/menu/menu.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
   branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
   branches/nexuiz-2.0/data/qcsrc/server/constants.qh
   branches/nexuiz-2.0/data/qcsrc/server/ent_cs.qc
   branches/nexuiz-2.0/data/qcsrc/server/extensions.qh
   branches/nexuiz-2.0/data/qcsrc/server/g_subs.qc
   branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc
   branches/nexuiz-2.0/data/qcsrc/server/gamecommand.qc
   branches/nexuiz-2.0/data/qcsrc/server/progs.src
   branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc
   branches/nexuiz-2.0/data/qcsrc/server/t_items.qc
   branches/nexuiz-2.0/data/scripts/entities.def
   branches/nexuiz-2.0/data/sound/cdtracks/sixtyfour_.ogg
   branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def
   branches/nexuiz-2.0/misc/tools/bsptool.pl
Log:
r6487 | div0 | 2009-04-14 19:58:42 +0200 (Tue, 14 Apr 2009) | 2 lines
document misc_laser and func_door oddities
r6489 | div0 | 2009-04-15 11:01:26 +0200 (Wed, 15 Apr 2009) | 2 lines
a debugging helper "NextFrameCommand", may become useful later
r6490 | div0 | 2009-04-15 11:18:46 +0200 (Wed, 15 Apr 2009) | 2 lines
entities.def update; new cvar checksums
r6491 | m0rfar | 2009-04-15 19:00:59 +0200 (Wed, 15 Apr 2009) | 1 line
Patch by terencehill. Fixes some warnings on aneurysm. And a typo on Basement.
r6492 | div0 | 2009-04-16 00:41:07 +0200 (Thu, 16 Apr 2009) | 2 lines
experimental system for music synced particle effects. Not stable yet!
r6493 | div0 | 2009-04-16 01:10:22 +0200 (Thu, 16 Apr 2009) | 2 lines
some entity field name improvements for bgmscript
r6494 | div0 | 2009-04-16 01:19:54 +0200 (Thu, 16 Apr 2009) | 2 lines
change extension .pp -> .bgs
r6495 | div0 | 2009-04-16 01:21:50 +0200 (Thu, 16 Apr 2009) | 2 lines
document bgmscript
r6496 | div0 | 2009-04-16 07:41:22 +0200 (Thu, 16 Apr 2009) | 2 lines
tiny particle emitter script change: bgmscript now supports not just states 0 or 1, but velocity from 0 to 1, to give different strength of effects...
r6497 | div0 | 2009-04-16 09:11:30 +0200 (Thu, 16 Apr 2009) | 2 lines
some project files for the new music tracks
r6498 | div0 | 2009-04-16 09:16:12 +0200 (Thu, 16 Apr 2009) | 2 lines
ninesix music
r6499 | div0 | 2009-04-16 10:11:41 +0200 (Thu, 16 Apr 2009) | 2 lines
add a MIDI to BGS converter
r6500 | div0 | 2009-04-16 11:09:35 +0200 (Thu, 16 Apr 2009) | 2 lines
func_pointparticles: reduce bandwidth
r6501 | div0 | 2009-04-16 11:58:22 +0200 (Thu, 16 Apr 2009) | 2 lines
more fixes for pointparticles bgm script
r6502 | div0 | 2009-04-16 12:03:36 +0200 (Thu, 16 Apr 2009) | 2 lines
bgmscript: fix rewinding at end of music
r6503 | div0 | 2009-04-16 13:03:40 +0200 (Thu, 16 Apr 2009) | 2 lines
remove pointparticles glow_color (does not work anyway)
r6504 | div0 | 2009-04-16 13:06:36 +0200 (Thu, 16 Apr 2009) | 2 lines
more pointparticles goodies
r6505 | div0 | 2009-04-16 13:07:51 +0200 (Thu, 16 Apr 2009) | 2 lines
and more... changed decay's meaning, updated docs
r6506 | div0 | 2009-04-16 13:39:40 +0200 (Thu, 16 Apr 2009) | 2 lines
compat fix for ame7q3tny1
r6507 | esteel | 2009-04-16 16:56:12 +0200 (Thu, 16 Apr 2009) | 1 line
update misc/netradiant-NexuizPack/nexuiz.game/data/entities.def
r6508 | div0 | 2009-04-16 17:03:25 +0200 (Thu, 16 Apr 2009) | 2 lines
desertfactory smoke emitters now synced to music :P
r6509 | div0 | 2009-04-16 17:10:58 +0200 (Thu, 16 Apr 2009) | 2 lines
midi2bgs: handle MIDIs correctly where a note from one track is stopped on another
r6510 | div0 | 2009-04-16 17:11:29 +0200 (Thu, 16 Apr 2009) | 3 lines
new smoke emitter for DF;
fix bgmvolume 0
r6511 | div0 | 2009-04-16 17:17:19 +0200 (Thu, 16 Apr 2009) | 2 lines
sixtyfour: delete some silence at beginning and end
r6512 | div0 | 2009-04-16 17:29:30 +0200 (Thu, 16 Apr 2009) | 2 lines
sixtyfour project file
r6513 | div0 | 2009-04-17 07:47:01 +0200 (Fri, 17 Apr 2009) | 2 lines
sixtyfour revisited
r6514 | div0 | 2009-04-17 07:47:53 +0200 (Fri, 17 Apr 2009) | 2 lines
support angle -1 and -2 on all entities, not just doors
r6515 | div0 | 2009-04-17 09:44:02 +0200 (Fri, 17 Apr 2009) | 2 lines
func_clientweall, func_clientillusionary (with BGM script control)
r6516 | div0 | 2009-04-17 10:17:30 +0200 (Fri, 17 Apr 2009) | 2 lines
forgot two fields of func_clientillusionary
r6517 | div0 | 2009-04-17 11:21:25 +0200 (Fri, 17 Apr 2009) | 2 lines
as always, forgot some files
r6518 | div0 | 2009-04-17 11:32:30 +0200 (Fri, 17 Apr 2009) | 2 lines
speed up loading of BGM script
r6519 | div0 | 2009-04-17 11:40:24 +0200 (Fri, 17 Apr 2009) | 2 lines
error message fix
r6520 | div0 | 2009-04-17 12:22:19 +0200 (Fri, 17 Apr 2009) | 2 lines
fix note-off during decay or attack stage when above sustain level
r6521 | div0 | 2009-04-17 13:05:31 +0200 (Fri, 17 Apr 2009) | 2 lines
fix behaviour on "cd stop" etc. commands
r6522 | esteel | 2009-04-17 13:37:33 +0200 (Fri, 17 Apr 2009) | 1 line
update misc/netradiant-NexuizPack/nexuiz.game/data/entities.def
r6523 | div0 | 2009-04-17 14:21:05 +0200 (Fri, 17 Apr 2009) | 2 lines
fix a weird menu mouse pointer jumping bug
r6524 | div0 | 2009-04-17 20:42:26 +0200 (Fri, 17 Apr 2009) | 2 lines
misc_clientmodel: clientside misc_gamemodel
r6525 | div0 | 2009-04-17 21:00:47 +0200 (Fri, 17 Apr 2009) | 2 lines
refactored model entity code to make it more readable
r6526 | div0 | 2009-04-17 21:07:33 +0200 (Fri, 17 Apr 2009) | 2 lines
make entities.def show misc_clientmodel
r6527 | div0 | 2009-04-17 21:12:51 +0200 (Fri, 17 Apr 2009) | 2 lines
misc_clientmodel
r6528 | div0 | 2009-04-17 21:16:41 +0200 (Fri, 17 Apr 2009) | 2 lines
avoid drawing clientwall/etc. with alpha <= 0.003
r6529 | div0 | 2009-04-17 21:28:39 +0200 (Fri, 17 Apr 2009) | 2 lines
fix fteqcc optimization :P
r6530 | div0 | 2009-04-17 22:14:04 +0200 (Fri, 17 Apr 2009) | 2 lines
sv_cheats 1: show all players on team radar
r6531 | div0 | 2009-04-19 12:21:01 +0200 (Sun, 19 Apr 2009) | 2 lines
fix bsptool handling _gridsize keys


Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/.patchsets	2009-04-19 11:12:15 UTC (rev 6532)
@@ -1,2 +1,2 @@
 master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-6459,6461-6486
+revisions_applied = 1-6531

Modified: branches/nexuiz-2.0/data/Makefile
===================================================================
--- branches/nexuiz-2.0/data/Makefile	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/Makefile	2009-04-19 11:12:15 UTC (rev 6532)
@@ -3,6 +3,7 @@
 PK3NAME ?= `date +../data%Y%m%d.pk3`
 ZIP ?= 7za a -tzip -mx=9
 ZIPEXCLUDE ?= -x\!*.pk3 -xr\!\.svn -x\!qcsrc
+DIFF ?= diff
 
 FTEQCCFLAGS ?= -Wall -Wno-mundane -O3 -Ono-c -Ono-cs -flo
 FTEQCCFLAGS_PROGS ?= 
@@ -20,7 +21,7 @@
 .PHONY: update-cvarcount
 update-cvarcount:
 	[ "$(NEX_BUILDSYSTEM)" = "" ] || [ "$(NEX_BUILDSYSTEM)" = "1" ]
-	[ "$(NEX_BUILDSYSTEM)" != "" ] || { ! [ -f ../misc/netradiant-NexuizPack/nexuiz.game/data/entities.def ] || diff ../misc/netradiant-NexuizPack/nexuiz.game/data/entities.def scripts/entities.def || { echo entities.def mismatch, please merge ../misc/netradiant-NexuizPack/nexuiz.game/data/entities.def and scripts/entities.def; exit 1; }; }
+	[ "$(NEX_BUILDSYSTEM)" != "" ] || { ! [ -f ../misc/netradiant-NexuizPack/nexuiz.game/data/entities.def ] || $(DIFF) ../misc/netradiant-NexuizPack/nexuiz.game/data/entities.def scripts/entities.def || { echo entities.def mismatch, please merge ../misc/netradiant-NexuizPack/nexuiz.game/data/entities.def and scripts/entities.def; exit 1; }; }
 	[ "$(NEX_BUILDSYSTEM)" != "" ] || { DO_NOT_RUN_MAKE=1 sh update-cvarcount.sh; }
 
 .PHONY: qc

Modified: branches/nexuiz-2.0/data/defaultNexuiz.cfg
===================================================================
--- branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/defaultNexuiz.cfg	2009-04-19 11:12:15 UTC (rev 6532)
@@ -24,7 +24,7 @@
 seta g_configversion 0	"Configuration file version (used to upgrade settings) 0: first run, or previous start was <2.4.1  Later, it's overridden by config.cfg, version ranges are defined in config_update.cfg"
 
 // default.cfg versioning (update using update-cvarcount.sh, run that every time after adding a new cvar)
-set cvar_check_default 779a1c2f508f65a13bad23ce1758beb8
+set cvar_check_default cfaa3e6ce44a23e5563db2d3ee7c53e4
 
 // Nexuiz version (formatted for machines)
 // used to determine if a client version is compatible
@@ -1250,7 +1250,7 @@
 set sv_foginterval 0
 
 // Audio track names (for old-style "cd loop NUMBER" usage)
-set g_cdtracks_remaplist "digital-pursuit breakdown-easy brainsukker chaos-fog infight neuronal-diving subcities thru-the-mirror calling-bogus beast-of-insanity thunder creation brokenlight stairs sixtyfour_ desert3" "list used by mapinfo system to automatically assign cdtracks - must match the cd remap command"
+set g_cdtracks_remaplist "digital-pursuit breakdown-easy brainsukker chaos-fog infight neuronal-diving subcities thru-the-mirror calling-bogus beast-of-insanity thunder creation brokenlight stairs sixtyfour_ desert3 ninesix sixtyfour_revisited" "list used by mapinfo system to automatically assign cdtracks - must match the cd remap command"
 set g_cdtracks_dontusebydefault "digital-pursuit thunder brokenlight" "list used by mapinfo system to automatically assign cdtracks - must be a subset of g_cdtracks_remaplist"
 cd remap $g_cdtracks_remaplist
 set sv_intermission_cdtrack brainsukker

Modified: branches/nexuiz-2.0/data/effectinfo.txt
===================================================================
--- branches/nexuiz-2.0/data/effectinfo.txt	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/effectinfo.txt	2009-04-19 11:12:15 UTC (rev 6532)
@@ -2748,7 +2748,6 @@
 //steam, it needs direction
 // used nowhere in code
 effect steam
-effect steam
 type smoke
 count 2
 tex 0 8
@@ -3192,3 +3191,20 @@
 size 3 3
 stretchfactor 0.6
 velocitymultiplier 0.7
+
+// smoke emitter for small pipes
+// used nowhere in code
+effect smoking_smallemitter
+count 20
+type alphastatic
+tex 0 8
+color 0x292929 0x000000
+size 6 15
+sizeincrease 20
+alpha 200 256 100
+gravity -0.1
+bounce 0
+originjitter 10 10 10
+velocityjitter 5 5 20
+//velocitymultiplier -20
+airfriction -1

Modified: branches/nexuiz-2.0/data/maps/aneurysm.bsp
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/maps/aneurysm.map
===================================================================
--- branches/nexuiz-2.0/data/maps/aneurysm.map	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/maps/aneurysm.map	2009-04-19 11:12:15 UTC (rev 6532)
@@ -29554,10 +29554,10 @@
 {
 ( 616 876 -8 ) ( 616 716 -8 ) ( 88 876 -8 ) common/caulk 0 24 0 0.5 0.5 0 0 0
 ( 608 760 -116 ) ( 80 760 -116 ) ( 608 760 -244 ) common/caulk 16 24 0 0.5 0.5 0 0 0
-( 424 864 -96 ) ( 424 864 -224 ) ( 424 704 -96 ) common/caulk -0 0 0 0.5 0.5 0 0 0
+( 424 864 -96 ) ( 424 864 -224 ) ( 424 704 -96 ) common/caulk 0 0 0 0.5 0.5 0 0 0
 ( 88 704 -224 ) ( 616 704 -224 ) ( 88 864 -224 ) common/caulk 0 0 0 0.5 0.5 0 0 0
 ( 88 704 -224 ) ( 88 704 -96 ) ( 616 704 -224 ) common/caulk 0 0 0 0.5 0.5 0 0 0
-( 280 704 -224 ) ( 280 864 -224 ) ( 280 704 -96 ) common/caulk -0 0 0 0.5 0.5 0 0 0
+( 280 704 -224 ) ( 280 864 -224 ) ( 280 704 -96 ) common/caulk 0 0 0 0.5 0.5 0 0 0
 }
 // brush 3100
 {
@@ -29642,7 +29642,7 @@
 }
 // brush 3109
 {
-( 356 1568 236 ) ( 356 1504 236 ) ( 232 1504 236 ) common/caulk -0 0 0 -0.5 0.5 0 0 0
+( 356 1568 236 ) ( 356 1504 236 ) ( 232 1504 236 ) common/caulk 0 0 0 -0.5 0.5 0 0 0
 ( -32 1568 8 ) ( 660 1568 736 ) ( 536 1568 736 ) common/caulk 0 0 0 -0.5 0.5 0 0 0
 ( -32 1504 8 ) ( 536 1568 736 ) ( 536 1504 736 ) common/caulk 0 0 0 0.5 0.5 0 0 0
 ( 112 1568 56 ) ( -16 1504 56 ) ( 112 1504 56 ) common/caulk 32 0 0 -0.5 0.5 0 0 0
@@ -29820,7 +29820,7 @@
 // entity 21
 {
 "classname" "item_strength"
-"origin" "-80.000000 416.000000 144.000000"
+"origin" "-96.000000 416.000000 144.000000"
 }
 // entity 22
 {
@@ -29901,7 +29901,7 @@
 // entity 37
 {
 "classname" "info_player_deathmatch"
-"angle" "270"
+"angle" "-90.000000"
 "origin" "-928.000000 1672.000000 80.000000"
 }
 // entity 38
@@ -30567,7 +30567,7 @@
 // entity 141
 {
 "classname" "item_bullets"
-"origin" "-590.000000 1808.000000 115.000000"
+"origin" "-606.000000 1800.000000 115.000000"
 }
 // entity 142
 {
@@ -30596,15 +30596,10 @@
 }
 // entity 147
 {
-"classname" "item_health_mega"
-"origin" "378.000000 1902.000000 -67.000000"
-}
-// entity 148
-{
 "classname" "dom_team"
 "model" "models/domination/dom_unclaimed.md3"
 }
-// entity 149
+// entity 148
 {
 "classname" "dom_team"
 "cnt" "13"
@@ -30614,7 +30609,7 @@
 "noise" "domination/claim.wav"
 "noise1" "domination/claim.wav"
 }
-// entity 150
+// entity 149
 {
 "classname" "dom_team"
 "cnt" "4"
@@ -30624,7 +30619,7 @@
 "noise" "domination/claim.wav"
 "noise1" "domination/claim.wav"
 }
-// entity 151
+// entity 150
 {
 "classname" "dom_team"
 "cnt" "9"
@@ -30634,46 +30629,46 @@
 "noise" "domination/claim.wav"
 "noise1" "domination/claim.wav"
 }
-// entity 152
+// entity 151
 {
 "classname" "dom_controlpoint"
 "angle" "-45"
 "message" "^3 has captured the ^1Round Corner"
 "origin" "1220.000000 1840.000000 36.000000"
 }
-// entity 153
+// entity 152
 {
 "classname" "dom_controlpoint"
 "message" "^3 has captured the ^1Upper Main Room"
 "origin" "580.000000 712.000000 32.000000"
 }
-// entity 154
+// entity 153
 {
 "classname" "dom_controlpoint"
 "message" "^3 has captured the ^1Strength Room"
 "origin" "-322.000000 126.000000 16.000000"
 }
-// entity 155
+// entity 154
 {
 "classname" "dom_controlpoint"
 "angle" "90"
 "message" "^3 has captured the ^1Lower Main Room"
 "origin" "350.000000 -206.000000 -200.000000"
 }
-// entity 156
+// entity 155
 {
 "classname" "dom_controlpoint"
 "message" "^3 has captured the ^1Nex"
 "origin" "1040.000000 1326.000000 -200.000000"
 }
-// entity 157
+// entity 156
 {
 "classname" "dom_controlpoint"
 "angle" "-45"
 "message" "^3 has captured the ^1Bridge"
 "origin" "-890.000000 1700.000000 80.000000"
 }
-// entity 158
+// entity 157
 {
 "classname" "func_group"
 // brush 0
@@ -30817,7 +30812,7 @@
 ( -57 1512 300 ) ( -57 1568 244 ) ( -47 1512 300 ) common/caulk -16 -24 0 0.5 0.5 134217728 4 0
 }
 }
-// entity 159
+// entity 158
 {
 "classname" "func_group"
 // brush 0
@@ -30961,7 +30956,7 @@
 ( -381 1514 288 ) ( -375 1514 288 ) ( -375 1514 278 ) evil_metals/mtldrk0 62 -40 0 0.5 -0.5 134217728 0 0
 }
 }
-// entity 160
+// entity 159
 {
 "classname" "func_group"
 "a_lightmapscale" "0.125"
@@ -30975,28 +30970,28 @@
 ( 1116 662 14 ) ( 1116 668 14 ) ( 1116 668 26 ) evil_metals/mtldrk0 -176 47 90 0.5 0.5 134217728 0 0
 }
 }
-// entity 161
+// entity 160
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "736 -44 -128"
 }
-// entity 162
+// entity 161
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "50"
 "origin" "-104 -96 -262"
 }
-// entity 163
+// entity 162
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "50"
 "origin" "856 1320 -262"
 }
-// entity 164
+// entity 163
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -31031,7 +31026,7 @@
 }
 }
 }
-// entity 165
+// entity 164
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -31066,7 +31061,7 @@
 }
 }
 }
-// entity 166
+// entity 165
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -31101,7 +31096,7 @@
 }
 }
 }
-// entity 167
+// entity 166
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -31136,14 +31131,14 @@
 }
 }
 }
-// entity 168
+// entity 167
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "80"
 "origin" "348 1028 68"
 }
-// entity 169
+// entity 168
 {
 "classname" "func_group"
 // brush 0
@@ -31228,7 +31223,7 @@
 ( 550 1952 216 ) ( 538 1952 216 ) ( 538 1952 232 ) evil_metals/mtldrk0 -132 0 -180 0.5 -0.5 134217728 0 0
 }
 }
-// entity 170
+// entity 169
 {
 "classname" "func_group"
 // brush 0
@@ -31313,7 +31308,7 @@
 ( 760 1962 226 ) ( 760 1956 226 ) ( 776 1962 226 ) evil_metals/mtldrk0 -195 52 -180 0.5 -0.5 134217728 0 0
 }
 }
-// entity 171
+// entity 170
 {
 "classname" "func_group"
 // brush 0
@@ -31398,7 +31393,7 @@
 ( 1030 1952 216 ) ( 1018 1952 216 ) ( 1018 1952 232 ) evil_metals/mtldrk0 -196 0 -180 0.5 -0.5 134217728 0 0
 }
 }
-// entity 172
+// entity 171
 {
 "classname" "func_group"
 // brush 0
@@ -31483,7 +31478,7 @@
 ( 1214 1656 226 ) ( 1220 1656 226 ) ( 1214 1672 226 ) evil_metals/mtldrk0 60 -156 -90 0.5 -0.5 134217728 0 0
 }
 }
-// entity 173
+// entity 172
 {
 "classname" "func_group"
 // brush 0
@@ -31568,7 +31563,7 @@
 ( 1226 1496 216 ) ( 1226 1484 216 ) ( 1226 1484 232 ) evil_metals/mtldrk0 224 -1 -180 0.5 -0.5 134217728 0 0
 }
 }
-// entity 174
+// entity 173
 {
 "classname" "func_group"
 // brush 0
@@ -31653,7 +31648,7 @@
 ( 1216 974 234 ) ( 1222 974 234 ) ( 1216 990 234 ) evil_metals/mtldrk0 232 -160 -90 0.5 -0.5 134217728 0 0
 }
 }
-// entity 175
+// entity 174
 {
 "classname" "func_group"
 // brush 0
@@ -31738,14 +31733,14 @@
 ( 1226 1220 224 ) ( 1226 1208 224 ) ( 1226 1208 240 ) evil_metals/mtldrk0 184 15 -180 0.5 -0.5 134217728 0 0
 }
 }
-// entity 176
+// entity 175
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1408 832 16"
 }
-// entity 177
+// entity 176
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -31753,7 +31748,7 @@
 "origin" "1416 832 24"
 "target" "t94"
 }
-// entity 178
+// entity 177
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -31773,7 +31768,7 @@
 }
 }
 }
-// entity 179
+// entity 178
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -31793,7 +31788,7 @@
 }
 }
 }
-// entity 180
+// entity 179
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -31813,21 +31808,21 @@
 }
 }
 }
-// entity 181
+// entity 180
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "50"
 "origin" "164 1904 222"
 }
-// entity 182
+// entity 181
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "50"
 "origin" "304 2044 -30"
 }
-// entity 183
+// entity 182
 {
 "classname" "func_group"
 // brush 0
@@ -31912,7 +31907,7 @@
 ( 188 890 -40 ) ( 200 890 -40 ) ( 200 890 -24 ) evil_metals/mtldrk0 -72 0 0 0.5 0.5 134217728 0 0
 }
 }
-// entity 184
+// entity 183
 {
 "classname" "func_group"
 // brush 0
@@ -31997,7 +31992,7 @@
 ( 554 880 -30 ) ( 554 886 -30 ) ( 538 880 -30 ) evil_metals/mtldrk0 -8 0 0 0.5 -0.5 134217728 0 0
 }
 }
-// entity 185
+// entity 184
 {
 "classname" "func_group"
 // brush 0
@@ -32082,7 +32077,7 @@
 ( 772 890 -40 ) ( 784 890 -40 ) ( 784 890 -24 ) evil_metals/mtldrk0 40 0 0 0.5 0.5 134217728 0 0
 }
 }
-// entity 186
+// entity 185
 {
 "classname" "func_group"
 // brush 0
@@ -32167,7 +32162,7 @@
 ( 1040 722 -30 ) ( 1034 722 -30 ) ( 1040 706 -30 ) evil_metals/mtldrk0 -88 0 90 0.5 -0.5 134217728 0 0
 }
 }
-// entity 187
+// entity 186
 {
 "classname" "func_group"
 // brush 0
@@ -32252,7 +32247,7 @@
 ( 508 6 -40 ) ( 496 6 -40 ) ( 496 6 -24 ) evil_metals/mtldrk0 -216 0 -180 0.5 -0.5 134217728 0 0
 }
 }
-// entity 188
+// entity 187
 {
 "classname" "func_group"
 // brush 0
@@ -32337,7 +32332,7 @@
 ( 1030 180 -40 ) ( 1030 192 -40 ) ( 1030 192 -24 ) evil_metals/mtldrk0 -56 0 0 0.5 0.5 134217728 0 0
 }
 }
-// entity 189
+// entity 188
 {
 "classname" "func_group"
 // brush 0
@@ -32422,329 +32417,329 @@
 ( 766 16 -30 ) ( 766 10 -30 ) ( 782 16 -30 ) evil_metals/mtldrk0 -184 0 -180 0.5 -0.5 134217728 0 0
 }
 }
-// entity 190
+// entity 189
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-880 736 152"
 }
-// entity 191
+// entity 190
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "65"
 "origin" "1648 1352 102"
 }
-// entity 192
+// entity 191
 {
 "classname" "light"
 "_color" "1 1 0.6"
 "light" "200"
 "origin" "820 984 104"
 }
-// entity 193
+// entity 192
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "620 900 132"
 }
-// entity 194
+// entity 193
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "620 1036 132"
 }
-// entity 195
+// entity 194
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "50"
 "origin" "688 1160 -46"
 }
-// entity 196
+// entity 195
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "50"
 "origin" "624 1160 -46"
 }
-// entity 197
+// entity 196
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "65"
 "origin" "356 724 150"
 }
-// entity 198
+// entity 197
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "65"
 "origin" "440 136 174"
 }
-// entity 199
+// entity 198
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "65"
 "origin" "200 136 174"
 }
-// entity 200
+// entity 199
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "464 472 204"
 }
-// entity 201
+// entity 200
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "368 472 204"
 }
-// entity 202
+// entity 201
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "368 552 204"
 }
-// entity 203
+// entity 202
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "464 552 204"
 }
-// entity 204
+// entity 203
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "272 552 204"
 }
-// entity 205
+// entity 204
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "176 552 204"
 }
-// entity 206
+// entity 205
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "176 472 204"
 }
-// entity 207
+// entity 206
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "272 472 204"
 }
-// entity 208
+// entity 207
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "272 312 204"
 }
-// entity 209
+// entity 208
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "176 312 204"
 }
-// entity 210
+// entity 209
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "176 392 204"
 }
-// entity 211
+// entity 210
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "272 392 204"
 }
-// entity 212
+// entity 211
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "464 392 204"
 }
-// entity 213
+// entity 212
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "368 392 204"
 }
-// entity 214
+// entity 213
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "368 312 204"
 }
-// entity 215
+// entity 214
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "464 312 204"
 }
-// entity 216
+// entity 215
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "744 208 132"
 }
-// entity 217
+// entity 216
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "744 104 132"
 }
-// entity 218
+// entity 217
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "848 -16 528"
 }
-// entity 219
+// entity 218
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "952 -16 360"
 }
-// entity 220
+// entity 219
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "848 -16 304"
 }
-// entity 221
+// entity 220
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "848 -16 416"
 }
-// entity 222
+// entity 221
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "952 -16 472"
 }
-// entity 223
+// entity 222
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "952 -16 248"
 }
-// entity 224
+// entity 223
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "848 -16 192"
 }
-// entity 225
+// entity 224
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "848 -16 80"
 }
-// entity 226
+// entity 225
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "960 -16 16"
 }
-// entity 227
+// entity 226
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "952 -16 136"
 }
-// entity 228
+// entity 227
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "70"
 "origin" "1000 4 80"
 }
-// entity 229
+// entity 228
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "70"
 "origin" "1000 4 124"
 }
-// entity 230
+// entity 229
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "70"
 "origin" "1032 4 124"
 }
-// entity 231
+// entity 230
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "70"
 "origin" "1032 4 80"
 }
-// entity 232
+// entity 231
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "70"
 "origin" "1072 4 80"
 }
-// entity 233
+// entity 232
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "70"
 "origin" "1072 4 124"
 }
-// entity 234
+// entity 233
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "70"
 "origin" "1120 4 124"
 }
-// entity 235
+// entity 234
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "70"
 "origin" "1120 4 80"
 }
-// entity 236
+// entity 235
 {
 "classname" "func_group"
 "a_lightmapscale" "0.125"
@@ -33001,14 +32996,14 @@
 ( 992 156 232 ) ( 992 148 232 ) ( 992 148 224 ) evil6_trims/e6boltstrip 17 14 -180 0.5 -0.5 134217728 0 0
 }
 }
-// entity 237
+// entity 236
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "300"
 "origin" "1160 484 468"
 }
-// entity 238
+// entity 237
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -33021,11 +33016,11 @@
 (
 ( ( 1040.0762939453 480 484.0450744629 0 0.25 ) ( 1053.6303710938 480 492.5472412109 0 0.125 ) ( 1067.1844482422 480 501.0494384766 0 0 ) )
 ( ( 1048.2357177734 383.8932495117 484.012512207 0.7535349727 0.25 ) ( 1061.2709960938 385.1230773926 493.2085571289 0.7535349727 0.125 ) ( 1074.3063964844 386.3529052734 502.4046325684 0.7535349727 0 ) )
-( ( 1120.2537841797 380.0020141602 392.0090637207 1.6668419838 0.25 ) ( 1133.0161132812 380.3712463379 401.6519165039 1.6668419838 0.125 ) ( 1145.7785644531 380.7404785156 411.2947692871 1.6668419838 0 ) )
-( ( 1163.7478027344 383.8852539062 331.9785766602 2.2467839718 0.25 ) ( 1177.0810546875 383.6931152344 340.8210449219 2.2467839718 0.125 ) ( 1190.4141845703 383.5009460449 349.663482666 2.2467839718 0 ) )
+( ( 1120.2537841797 380.0020141602 392.0090637207 1.6668419838 0.25 ) ( 1133.0161132813 380.3712463379 401.6519165039 1.6668419838 0.125 ) ( 1145.7785644531 380.7404785156 411.2947692871 1.6668419838 0 ) )
+( ( 1163.7478027344 383.8852539063 331.9785766602 2.2467839718 0.25 ) ( 1177.0810546875 383.6931152344 340.8210449219 2.2467839718 0.125 ) ( 1190.4141845703 383.5009460449 349.663482666 2.2467839718 0 ) )
 ( ( 1167.6062011719 480 323.7553405762 3.0010259151 0.25 ) ( 1181.3212890625 480 331.9952392578 3.0010259151 0.125 ) ( 1195.0363769531 480 340.2351074219 3.0010259151 0 ) )
 ( ( 1163.7478027344 576.1147460938 331.9785766602 3.7552680969 0.25 ) ( 1177.0810546875 576.3068847656 340.8210449219 3.7552680969 0.125 ) ( 1190.4141845703 576.4990844727 349.663482666 3.7552680969 0 ) )
-( ( 1120.2537841797 579.9979858398 392.0090637207 4.3352098465 0.25 ) ( 1133.0161132812 579.6287841797 401.6519165039 4.3352098465 0.125 ) ( 1145.7785644531 579.2595214844 411.2947387695 4.3352098465 0 ) )
+( ( 1120.2537841797 579.9979858398 392.0090637207 4.3352098465 0.25 ) ( 1133.0161132813 579.6287841797 401.6519165039 4.3352098465 0.125 ) ( 1145.7785644531 579.2595214844 411.2947387695 4.3352098465 0 ) )
 ( ( 1048.2357177734 576.1067504883 484.012512207 5.2485170364 0.25 ) ( 1061.2709960938 574.876953125 493.2085571289 5.2485170364 0.125 ) ( 1074.3063964844 573.6470947266 502.4046325684 5.2485170364 0 ) )
 ( ( 1040.0762939453 480 484.0450744629 6.0020518303 0.25 ) ( 1053.6303710938 480 492.5472412109 6.0020518303 0.125 ) ( 1067.1844482422 480 501.0494384766 6.0020518303 0 ) )
 )
@@ -33041,9 +33036,9 @@
 ( ( 1048.1772460938 480 470.2474365234 0 0.125 ) ( 1044.1267089844 480 477.1462402344 0 0.0625 ) ( 1040.0762939453 480 484.0450744629 0 0 ) )
 ( ( 1053.7821044922 395.3137207031 474.2754516602 0.6638050079 0.125 ) ( 1051.0089111328 389.6034851074 479.1439819336 0.6638050079 0.0625 ) ( 1048.2357177734 383.8932495117 484.012512207 0.6638050079 0 ) )
 ( ( 1120 396 392 1.4889229536 0.125 ) ( 1120.126953125 388.0010070801 392.0045166016 1.4889229536 0.0625 ) ( 1120.2537841797 380.0020141602 392.0090637207 1.4889229536 0 ) )
-( ( 1157.8911132812 395.3137207031 341.5226745605 1.982049942 0.125 ) ( 1160.8194580078 389.5994873047 336.7506103516 1.982049942 0.0625 ) ( 1163.7478027344 383.8852539062 331.9785766602 1.982049942 0 ) )
+( ( 1157.8911132813 395.3137207031 341.5226745605 1.982049942 0.125 ) ( 1160.8194580078 389.5994873047 336.7506103516 1.982049942 0.0625 ) ( 1163.7478027344 383.8852539063 331.9785766602 1.982049942 0 ) )
 ( ( 1159.3607177734 480 337.4671020508 2.6445190907 0.125 ) ( 1163.4833984375 480 330.6112060547 2.6445190907 0.0625 ) ( 1167.6062011719 480 323.7553405762 2.6445190907 0 ) )
-( ( 1157.8911132812 564.6862792969 341.5226745605 3.3069880009 0.125 ) ( 1160.8194580078 570.4005126953 336.7506103516 3.3069880009 0.0625 ) ( 1163.7478027344 576.1147460938 331.9785766602 3.3069880009 0 ) )
+( ( 1157.8911132813 564.6862792969 341.5226745605 3.3069880009 0.125 ) ( 1160.8194580078 570.4005126953 336.7506103516 3.3069880009 0.0625 ) ( 1163.7478027344 576.1147460938 331.9785766602 3.3069880009 0 ) )
 ( ( 1120 564 392 3.8001160622 0.125 ) ( 1120.126953125 571.9990234375 392.0045166016 3.8001160622 0.0625 ) ( 1120.2537841797 579.9979858398 392.0090637207 3.8001160622 0 ) )
 ( ( 1053.7821044922 564.6862792969 474.2754516602 4.6252331734 0.125 ) ( 1051.0089111328 570.396484375 479.1439819336 4.6252331734 0.0625 ) ( 1048.2357177734 576.1067504883 484.012512207 4.6252331734 0 ) )
 ( ( 1048.1772460938 480 470.2474365234 5.2890381813 0.125 ) ( 1044.1267089844 480 477.1462402344 5.2890381813 0.0625 ) ( 1040.0762939453 480 484.0450744629 5.2890381813 0 ) )
@@ -33051,7 +33046,7 @@
 }
 }
 }
-// entity 239
+// entity 238
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -33064,11 +33059,11 @@
 (
 ( ( 1203.9996337891 492 1344.0457763672 0 0 ) ( 1211.9993896484 492 1344.1066894531 0 0.0625 ) ( 1219.9991455078 492 1344.1674804688 0 0.125 ) )
 ( ( 1204.0377197266 395.9623413086 1344.0059814453 0.6626240015 0 ) ( 1209.6754150391 401.6380310059 1344.0622558594 0.6626240015 0.0625 ) ( 1215.3131103516 407.3137207031 1344.1184082031 0.6626240015 0.125 ) )
-( ( 1324.1489257812 396.0007019043 1343.9807128906 1.5125290155 0 ) ( 1324.0744628906 404.0003662109 1343.9903564453 1.5125290155 0.0625 ) ( 1324 412 1344 1.5125290155 0.125 ) )
+( ( 1324.1489257813 396.0007019043 1343.9807128906 1.5125290155 0 ) ( 1324.0744628906 404.0003662109 1343.9903564453 1.5125290155 0.0625 ) ( 1324 412 1344 1.5125290155 0.125 ) )
 ( ( 1416.0662841797 396.0663146973 1344.0430908203 2.1439580917 0 ) ( 1410.3764648438 401.6900024414 1344.0737304688 2.1439580917 0.0625 ) ( 1404.6867675781 407.3137207031 1344.1042480469 2.1439580917 0.125 ) )
-( ( 1416.0003662109 492 1344.0369873047 2.8065810204 0 ) ( 1408.0004882812 492 1344.0922851562 2.8065810204 0.0625 ) ( 1400.0007324219 492 1344.1474609375 2.8065810204 0.125 ) )
+( ( 1416.0003662109 492 1344.0369873047 2.8065810204 0 ) ( 1408.0004882813 492 1344.0922851563 2.8065810204 0.0625 ) ( 1400.0007324219 492 1344.1474609375 2.8065810204 0.125 ) )
 ( ( 1416.0662841797 587.9337158203 1344.0430908203 3.4692049026 0 ) ( 1410.3764648438 582.3099975586 1344.0737304688 3.4692049026 0.0625 ) ( 1404.6867675781 576.6862792969 1344.1042480469 3.4692049026 0.125 ) )
-( ( 1324.1489257812 587.9992675781 1343.9807128906 4.1006331444 0 ) ( 1324.0744628906 579.9996337891 1343.9903564453 4.1006331444 0.0625 ) ( 1324 572 1344 4.1006331444 0.125 ) )
+( ( 1324.1489257813 587.9992675781 1343.9807128906 4.1006331444 0 ) ( 1324.0744628906 579.9996337891 1343.9903564453 4.1006331444 0.0625 ) ( 1324 572 1344 4.1006331444 0.125 ) )
 ( ( 1204.0377197266 588.0376586914 1344.0059814453 4.9505391121 0 ) ( 1209.6754150391 582.3619384766 1344.0622558594 4.9505391121 0.0625 ) ( 1215.3131103516 576.6862792969 1344.1184082031 4.9505391121 0.125 ) )
 ( ( 1203.9996337891 492 1344.0457763672 5.6131629944 0 ) ( 1211.9993896484 492 1344.1066894531 5.6131629944 0.0625 ) ( 1219.9991455078 492 1344.1674804688 5.6131629944 0.125 ) )
 )
@@ -33084,304 +33079,304 @@
 ( ( 1219.9991455078 480 1344.1674804688 0 7.4391450882 ) ( 1225.9487304688 480 572.1620483398 0 1.4076730013 ) ( 1048.1772460938 480 470.2474365234 0 0 ) )
 ( ( 1215.3131103516 395.3137207031 1344.1184082031 0.6626240015 7.4391450882 ) ( 1221.1351318359 396.0913391113 574.8668212891 0.6626240015 1.4076730013 ) ( 1053.7821044922 395.3137207031 474.2754516602 0.6626240015 0 ) )
 ( ( 1324 400 1344 1.5125290155 7.4391450882 ) ( 1268 400 560 1.5125290155 1.4076730013 ) ( 1120 396 392 1.5125290155 0 ) )
-( ( 1404.6867675781 395.3137207031 1344.1042480469 2.1439580917 7.4391450882 ) ( 1398.7502441406 396.0133056641 481.111114502 2.1439580917 1.4076730013 ) ( 1157.8911132812 395.3137207031 341.5226745605 2.1439580917 0 ) )
+( ( 1404.6867675781 395.3137207031 1344.1042480469 2.1439580917 7.4391450882 ) ( 1398.7502441406 396.0133056641 481.111114502 2.1439580917 1.4076730013 ) ( 1157.8911132813 395.3137207031 341.5226745605 2.1439580917 0 ) )
 ( ( 1400.0007324219 480 1344.1474609375 2.8065810204 7.4391450882 ) ( 1393.9957275391 480 483.7383117676 2.8065810204 1.4076730013 ) ( 1159.3607177734 480 337.4671020508 2.8065810204 0 ) )
-( ( 1404.6867675781 564.6862792969 1344.1042480469 3.4692049026 7.4391450882 ) ( 1398.7502441406 563.9866943359 481.111114502 3.4692049026 1.4076730013 ) ( 1157.8911132812 564.6862792969 341.5226745605 3.4692049026 0 ) )
+( ( 1404.6867675781 564.6862792969 1344.1042480469 3.4692049026 7.4391450882 ) ( 1398.7502441406 563.9866943359 481.111114502 3.4692049026 1.4076730013 ) ( 1157.8911132813 564.6862792969 341.5226745605 3.4692049026 0 ) )
 ( ( 1324 560 1344 4.1006331444 7.4391450882 ) ( 1268 560 560 4.1006331444 1.4076730013 ) ( 1120 564 392 4.1006331444 0 ) )
-( ( 1215.3131103516 564.6862792969 1344.1184082031 4.9505391121 7.4391450882 ) ( 1221.1351318359 563.9086914062 574.8668212891 4.9505391121 1.4076730013 ) ( 1053.7821044922 564.6862792969 474.2754516602 4.9505391121 0 ) )
+( ( 1215.3131103516 564.6862792969 1344.1184082031 4.9505391121 7.4391450882 ) ( 1221.1351318359 563.9086914063 574.8668212891 4.9505391121 1.4076730013 ) ( 1053.7821044922 564.6862792969 474.2754516602 4.9505391121 0 ) )
 ( ( 1219.9991455078 480 1344.1674804688 5.6131629944 7.4391450882 ) ( 1225.9487304688 480 572.1620483398 5.6131629944 1.4076730013 ) ( 1048.1772460938 480 470.2474365234 5.6131629944 0 ) )
 )
 }
 }
 }
-// entity 240
+// entity 239
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1108 1140 152"
 }
-// entity 241
+// entity 240
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "100"
 "origin" "936 420 380"
 }
-// entity 242
+// entity 241
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "65"
 "origin" "956 276 106"
 }
-// entity 243
+// entity 242
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "100"
 "origin" "936 512 146"
 }
-// entity 244
+// entity 243
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "100"
 "origin" "940 736 146"
 }
-// entity 245
+// entity 244
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "100"
 "origin" "1076 892 102"
 }
-// entity 246
+// entity 245
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "70"
 "origin" "1152 36 80"
 }
-// entity 247
+// entity 246
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "70"
 "origin" "1152 36 124"
 }
-// entity 248
+// entity 247
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "80"
 "origin" "1152 72 124"
 }
-// entity 249
+// entity 248
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "80"
 "origin" "1152 72 80"
 }
-// entity 250
+// entity 249
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "90"
 "origin" "1152 100 80"
 }
-// entity 251
+// entity 250
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "90"
 "origin" "1152 100 124"
 }
-// entity 252
+// entity 251
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "100"
 "origin" "1152 132 124"
 }
-// entity 253
+// entity 252
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "100"
 "origin" "1152 132 80"
 }
-// entity 254
+// entity 253
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "110"
 "origin" "1152 164 80"
 }
-// entity 255
+// entity 254
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "110"
 "origin" "1152 164 124"
 }
-// entity 256
+// entity 255
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "130"
 "origin" "1152 196 124"
 }
-// entity 257
+// entity 256
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "130"
 "origin" "1152 196 80"
 }
-// entity 258
+// entity 257
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "150"
 "origin" "1152 228 80"
 }
-// entity 259
+// entity 258
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "150"
 "origin" "1152 228 124"
 }
-// entity 260
+// entity 259
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "180"
 "origin" "1152 260 124"
 }
-// entity 261
+// entity 260
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "180"
 "origin" "1152 260 80"
 }
-// entity 262
+// entity 261
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "300"
 "origin" "1152 420 80"
 }
-// entity 263
+// entity 262
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "300"
 "origin" "1152 388 80"
 }
-// entity 264
+// entity 263
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "300"
 "origin" "1152 356 80"
 }
-// entity 265
+// entity 264
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "300"
 "origin" "1152 328 80"
 }
-// entity 266
+// entity 265
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "300"
 "origin" "1152 292 80"
 }
-// entity 267
+// entity 266
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "300"
 "origin" "1152 292 124"
 }
-// entity 268
+// entity 267
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1144 528 124"
 }
-// entity 269
+// entity 268
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1148 584 124"
 }
-// entity 270
+// entity 269
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1148 632 80"
 }
-// entity 271
+// entity 270
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1148 632 124"
 }
-// entity 272
+// entity 271
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1192 636 124"
 }
-// entity 273
+// entity 272
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1192 636 80"
 }
-// entity 274
+// entity 273
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1256 672 80"
 }
-// entity 275
+// entity 274
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1256 672 124"
 }
-// entity 276
+// entity 275
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1324 700 124"
 }
-// entity 277
+// entity 276
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1324 700 80"
 }
-// entity 278
+// entity 277
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1364 728 80"
 }
-// entity 279
+// entity 278
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1364 728 124"
 }
-// entity 280
+// entity 279
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "150"
 "origin" "1264 928 102"
 }
-// entity 281
+// entity 280
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -33389,21 +33384,21 @@
 "origin" "1416 940 24"
 "target" "t91"
 }
-// entity 282
+// entity 281
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1408 940 16"
 }
-// entity 283
+// entity 282
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1408 1008 16"
 }
-// entity 284
+// entity 283
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -33411,14 +33406,14 @@
 "origin" "1416 1008 24"
 "target" "t90"
 }
-// entity 285
+// entity 284
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1009 1015 16"
 }
-// entity 286
+// entity 285
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -33426,7 +33421,7 @@
 "origin" "1007 1022 24"
 "target" "t89"
 }
-// entity 287
+// entity 286
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -33434,21 +33429,21 @@
 "origin" "896 983 24"
 "target" "t88"
 }
-// entity 288
+// entity 287
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "900 977 16"
 }
-// entity 289
+// entity 288
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "855 901 16"
 }
-// entity 290
+// entity 289
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -33456,7 +33451,7 @@
 "origin" "848 904 24"
 "target" "t87"
 }
-// entity 291
+// entity 290
 {
 "classname" "func_group"
 "a_lightmapscale" "0.125"
@@ -35103,7 +35098,7 @@
 ( 1000 612 48 ) ( 1000 612 56 ) ( 1006 604 56 ) common/caulk 8 48 0 0.5 0.5 134217728 4 0
 }
 }
-// entity 292
+// entity 291
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -35115,9 +35110,9 @@
 ( 9 3 0 0 0 )
 (
 ( ( 1056 1088 124 0 0 ) ( 776 1088 124 0 4.375 ) ( 776 824 120 0 8.5 ) )
-( ( 1055.6352539062 1067.3078613281 124.6862945557 0.25 0 ) ( 801.2933959961 1054.4937744141 123.0056915283 0.25 4.375 ) ( 796.6862792969 824 124.6862945557 0.25 8.5 ) )
+( ( 1055.6352539063 1067.3078613281 124.6862945557 0.25 0 ) ( 801.2933959961 1054.4937744141 123.0056915283 0.25 4.375 ) ( 796.6862792969 824 124.6862945557 0.25 8.5 ) )
 ( ( 1055.4841308594 1067.9916992188 104 0.5 0 ) ( 796.5053710938 1059.1298828125 104 0.5 4.375 ) ( 792 824 104 0.5 8.5 ) )
-( ( 1055.6352539062 1067.3078613281 83.3137054443 0.75 0 ) ( 801.2933959961 1054.4937744141 84.9943084717 0.75 4.375 ) ( 796.6862792969 824 83.3137054443 0.75 8.5 ) )
+( ( 1055.6352539063 1067.3078613281 83.3137054443 0.75 0 ) ( 801.2933959961 1054.4937744141 84.9943084717 0.75 4.375 ) ( 796.6862792969 824 83.3137054443 0.75 8.5 ) )
 ( ( 1056 1088 84 1 0 ) ( 776 1088 84 1 4.375 ) ( 776 824 88 1 8.5 ) )
 ( ( 1056 1108.6862792969 83.3137054443 1.25 0 ) ( 750.5319824219 1113.4680175781 85.063949585 1.25 4.375 ) ( 755.3137207031 824 83.3137054443 1.25 8.5 ) )
 ( ( 1056 1108 104 1.5 0 ) ( 755.3137207031 1108.6862792969 104 1.5 4.375 ) ( 760 824 104 1.5 8.5 ) )
@@ -35153,9 +35148,9 @@
 ( 9 3 0 0 0 )
 (
 ( ( 1056 1088 136 0 0.5 ) ( 1064 1088 128 0 0.25 ) ( 1056 1088 124 0 0 ) )
-( ( 1056 1056 136 1 0.5 ) ( 1063.8176269531 1061.6539306641 130.3431396484 1 0.25 ) ( 1055.6352539062 1067.3078613281 124.6862945557 1 0 ) )
+( ( 1056 1056 136 1 0.5 ) ( 1063.8176269531 1061.6539306641 130.3431396484 1 0.25 ) ( 1055.6352539063 1067.3078613281 124.6862945557 1 0 ) )
 ( ( 1056 1056 104 2 0.5 ) ( 1063.7420654297 1063.9958496094 104 2 0.25 ) ( 1055.4841308594 1067.9916992188 104 2 0 ) )
-( ( 1056 1056 72 3 0.5 ) ( 1063.8176269531 1061.6539306641 77.6568527222 3 0.25 ) ( 1055.6352539062 1067.3078613281 83.3137054443 3 0 ) )
+( ( 1056 1056 72 3 0.5 ) ( 1063.8176269531 1061.6539306641 77.6568527222 3 0.25 ) ( 1055.6352539063 1067.3078613281 83.3137054443 3 0 ) )
 ( ( 1056 1088 72 4 0.5 ) ( 1064 1088 80 4 0.25 ) ( 1056 1088 84 4 0 ) )
 ( ( 1056 1120 72 5 0.5 ) ( 1064 1114.3431396484 77.6568527222 5 0.25 ) ( 1056 1108.6862792969 83.3137054443 5 0 ) )
 ( ( 1056 1120 104 6 0.5 ) ( 1064 1112 104 6 0.25 ) ( 1056 1108 104 6 0 ) )
@@ -35165,7 +35160,7 @@
 }
 }
 }
-// entity 293
+// entity 292
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35173,7 +35168,7 @@
 "origin" "840 792 24"
 "target" "t80"
 }
-// entity 294
+// entity 293
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35181,7 +35176,7 @@
 "origin" "840 736 24"
 "target" "t79"
 }
-// entity 295
+// entity 294
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35189,28 +35184,28 @@
 "origin" "840 680 24"
 "target" "t78"
 }
-// entity 296
+// entity 295
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "848 792 16"
 }
-// entity 297
+// entity 296
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "848 736 16"
 }
-// entity 298
+// entity 297
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "848 680 16"
 }
-// entity 299
+// entity 298
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35218,21 +35213,21 @@
 "origin" "1112 1144 24"
 "target" "t76"
 }
-// entity 300
+// entity 299
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1120 1144 16"
 }
-// entity 301
+// entity 300
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1120 1088 16"
 }
-// entity 302
+// entity 301
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35240,7 +35235,7 @@
 "origin" "1112 1088 24"
 "target" "t75"
 }
-// entity 303
+// entity 302
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35248,21 +35243,21 @@
 "origin" "1416 1088 24"
 "target" "t74"
 }
-// entity 304
+// entity 303
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1408 1088 16"
 }
-// entity 305
+// entity 304
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1408 1144 16"
 }
-// entity 306
+// entity 305
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35270,7 +35265,7 @@
 "origin" "1416 1144 24"
 "target" "t73"
 }
-// entity 307
+// entity 306
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35278,14 +35273,14 @@
 "origin" "1104 1747 24"
 "target" "t72"
 }
-// entity 308
+// entity 307
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1110 1752 16"
 }
-// entity 309
+// entity 308
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35293,21 +35288,21 @@
 "origin" "1402 1801 24"
 "target" "t71"
 }
-// entity 310
+// entity 309
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1394 1799 16"
 }
-// entity 311
+// entity 310
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1322 1932 16"
 }
-// entity 312
+// entity 311
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35315,7 +35310,7 @@
 "origin" "1328 1937 24"
 "target" "t70"
 }
-// entity 313
+// entity 312
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35323,28 +35318,28 @@
 "origin" "1180 2032 24"
 "target" "t69"
 }
-// entity 314
+// entity 313
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1178 2024 16"
 }
-// entity 315
+// entity 314
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "80"
 "origin" "1152 1328 128"
 }
-// entity 316
+// entity 315
 {
 "classname" "light"
 "_color" "1 0.35 0"
 "light" "10"
 "origin" "1408 1296 16"
 }
-// entity 317
+// entity 316
 {
 "classname" "light"
 "_color" "1 0.35 0"
@@ -35352,7 +35347,7 @@
 "origin" "1416 1296 24"
 "target" "t68"
 }
-// entity 318
+// entity 317
 {
 "classname" "light"
 "_color" "1 0.35 0"
@@ -35360,21 +35355,21 @@
 "origin" "1416 1352 24"
 "target" "t67"
 }
-// entity 319
+// entity 318
 {
 "classname" "light"
 "_color" "1 0.35 0"
 "light" "10"
 "origin" "1408 1352 16"
 }
-// entity 320
+// entity 319
 {
 "classname" "light"
 "_color" "1 0.35 0"
 "light" "10"
 "origin" "1408 1408 16"
 }
-// entity 321
+// entity 320
 {
 "classname" "light"
 "_color" "1 0.35 0"
@@ -35382,7 +35377,7 @@
 "origin" "1416 1408 24"
 "target" "t66"
 }
-// entity 322
+// entity 321
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35390,21 +35385,21 @@
 "origin" "1112 1536 24"
 "target" "t63"
 }
-// entity 323
+// entity 322
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1120 1536 16"
 }
-// entity 324
+// entity 323
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1120 1592 16"
 }
-// entity 325
+// entity 324
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35412,7 +35407,7 @@
 "origin" "1112 1592 24"
 "target" "t62"
 }
-// entity 326
+// entity 325
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35420,7 +35415,7 @@
 "origin" "952 1752 24"
 "target" "t61"
 }
-// entity 327
+// entity 326
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35428,7 +35423,7 @@
 "origin" "896 1752 24"
 "target" "t60"
 }
-// entity 328
+// entity 327
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35436,35 +35431,35 @@
 "origin" "840 1752 24"
 "target" "t59"
 }
-// entity 329
+// entity 328
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "952 1760 16"
 }
-// entity 330
+// entity 329
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "896 1760 16"
 }
-// entity 331
+// entity 330
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "840 1760 16"
 }
-// entity 332
+// entity 331
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "472 1760 16"
 }
-// entity 333
+// entity 332
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35472,7 +35467,7 @@
 "origin" "472 1752 24"
 "target" "t58"
 }
-// entity 334
+// entity 333
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35480,21 +35475,21 @@
 "origin" "416 1752 24"
 "target" "t57"
 }
-// entity 335
+// entity 334
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "416 1760 16"
 }
-// entity 336
+// entity 335
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "416 2048 16"
 }
-// entity 337
+// entity 336
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35502,7 +35497,7 @@
 "origin" "416 2056 24"
 "target" "t56"
 }
-// entity 338
+// entity 337
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35510,21 +35505,21 @@
 "origin" "472 2056 24"
 "target" "t55"
 }
-// entity 339
+// entity 338
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "472 2048 16"
 }
-// entity 340
+// entity 339
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "616 2048 16"
 }
-// entity 341
+// entity 340
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35532,7 +35527,7 @@
 "origin" "616 2056 24"
 "target" "t54"
 }
-// entity 342
+// entity 341
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35540,35 +35535,35 @@
 "origin" "696 2056 24"
 "target" "t53"
 }
-// entity 343
+// entity 342
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "696 2048 16"
 }
-// entity 344
+// entity 343
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "840 2048 16"
 }
-// entity 345
+// entity 344
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "896 2048 16"
 }
-// entity 346
+// entity 345
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "952 2048 16"
 }
-// entity 347
+// entity 346
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35576,7 +35571,7 @@
 "origin" "840 2056 24"
 "target" "t52"
 }
-// entity 348
+// entity 347
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35584,7 +35579,7 @@
 "origin" "896 2056 24"
 "target" "t51"
 }
-// entity 349
+// entity 348
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35592,77 +35587,77 @@
 "origin" "952 2056 24"
 "target" "t50"
 }
-// entity 350
+// entity 349
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "150"
 "origin" "1264 1208 102"
 }
-// entity 351
+// entity 350
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "150"
 "origin" "1264 1496 102"
 }
-// entity 352
+// entity 351
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "150"
 "origin" "1264 1656 102"
 }
-// entity 353
+// entity 352
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "150"
 "origin" "1024 1912 102"
 }
-// entity 354
+// entity 353
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "150"
 "origin" "768 1912 102"
 }
-// entity 355
+// entity 354
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "100"
 "origin" "428 1916 86"
 }
-// entity 356
+// entity 355
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "150"
 "origin" "536 1912 102"
 }
-// entity 357
+// entity 356
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "100"
 "origin" "704 1328 102"
 }
-// entity 358
+// entity 357
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "100"
 "origin" "648 1688 102"
 }
-// entity 359
+// entity 358
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "100"
 "origin" "544 1472 102"
 }
-// entity 360
+// entity 359
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35670,7 +35665,7 @@
 "origin" "352 1320 32"
 "target" "t49"
 }
-// entity 361
+// entity 360
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35678,7 +35673,7 @@
 "origin" "416 1320 32"
 "target" "t48"
 }
-// entity 362
+// entity 361
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35686,7 +35681,7 @@
 "origin" "480 1320 32"
 "target" "t47"
 }
-// entity 363
+// entity 362
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35694,7 +35689,7 @@
 "origin" "480 1624 32"
 "target" "t46"
 }
-// entity 364
+// entity 363
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35702,7 +35697,7 @@
 "origin" "416 1624 32"
 "target" "t45"
 }
-// entity 365
+// entity 364
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -35710,105 +35705,105 @@
 "origin" "352 1624 32"
 "target" "t44"
 }
-// entity 366
+// entity 365
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "100"
 "origin" "296 1472 102"
 }
-// entity 367
+// entity 366
 {
 "classname" "light"
 "_color" "1 1 0.75"
 "light" "2"
 "origin" "352 1328 24"
 }
-// entity 368
+// entity 367
 {
 "classname" "light"
 "_color" "1 1 0.75"
 "light" "2"
 "origin" "416 1328 24"
 }
-// entity 369
+// entity 368
 {
 "classname" "light"
 "_color" "1 1 0.75"
 "light" "2"
 "origin" "480 1328 24"
 }
-// entity 370
+// entity 369
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "264 1312 24"
 }
-// entity 371
+// entity 370
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "264 1632 24"
 }
-// entity 372
+// entity 371
 {
 "classname" "light"
 "_color" "1 1 0.75"
 "light" "2"
 "origin" "480 1616 24"
 }
-// entity 373
+// entity 372
 {
 "classname" "light"
 "_color" "1 1 0.75"
 "light" "2"
 "origin" "416 1616 24"
 }
-// entity 374
+// entity 373
 {
 "classname" "light"
 "_color" "1 1 0.75"
 "light" "2"
 "origin" "352 1616 24"
 }
-// entity 375
+// entity 374
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-305 364 268"
 }
-// entity 376
+// entity 375
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-434 784 172"
 }
-// entity 377
+// entity 376
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "90"
 "origin" "-76 416 192"
 }
-// entity 378
+// entity 377
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "150"
 "origin" "96 1832 112"
 }
-// entity 379
+// entity 378
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-434 126 172"
 }
-// entity 380
+// entity 379
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -35826,7 +35821,7 @@
 }
 }
 }
-// entity 381
+// entity 380
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -35857,7 +35852,7 @@
 }
 }
 }
-// entity 382
+// entity 381
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -35875,7 +35870,7 @@
 }
 }
 }
-// entity 383
+// entity 382
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -35893,7 +35888,7 @@
 }
 }
 }
-// entity 384
+// entity 383
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -35924,28 +35919,28 @@
 }
 }
 }
-// entity 385
+// entity 384
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-664 1288 222"
 }
-// entity 386
+// entity 385
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-584 1288 222"
 }
-// entity 387
+// entity 386
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-416 1288 222"
 }
-// entity 388
+// entity 387
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -35959,8 +35954,8 @@
 ( ( -536 1295.9993896484 8 0 0.125 ) ( -537.940246582 1303.7604980469 8 0 0.0625009984 ) ( -535.8804931641 1311.5217285156 8.0000009537 0 0 ) )
 ( ( -600.0012207031 1279.9993896484 8 0.5153970122 0.125 ) ( -595.0778808594 1286.3049316406 8 0.5153970122 0.0625009984 ) ( -590.1546020508 1292.6105957031 8 0.5153970122 0 ) )
 ( ( -600.0012207031 1343.9997558594 8 1.0154000521 0.125 ) ( -592.0012207031 1343.9997558594 8 1.0154000521 0.0625009984 ) ( -584.0012207031 1343.9997558594 8 1.0154000521 0 ) )
-( ( -600.0012207031 1392 8 1.3904019594 0.125 ) ( -593.6955566406 1387.0766601562 8 1.3904019594 0.0625009984 ) ( -587.3899536133 1382.1533203125 8 1.3904019594 0 ) )
-( ( -536 1408 8 1.9057999849 0.125 ) ( -536.059753418 1400.2387695312 8 1.9057999849 0.0625009984 ) ( -536.1195068359 1392.4776611328 8 1.9057999849 0 ) )
+( ( -600.0012207031 1392 8 1.3904019594 0.125 ) ( -593.6955566406 1387.0766601563 8 1.3904019594 0.0625009984 ) ( -587.3899536133 1382.1533203125 8 1.3904019594 0 ) )
+( ( -536 1408 8 1.9057999849 0.125 ) ( -536.059753418 1400.2387695313 8 1.9057999849 0.0625009984 ) ( -536.1195068359 1392.4776611328 8 1.9057999849 0 ) )
 )
 }
 }
@@ -35974,8 +35969,8 @@
 ( ( -535.8804931641 1311.5217285156 40 0 -0.0623219982 ) ( -535.940246582 1303.7604980469 40 0 -0.122957997 ) ( -536 1295.9993896484 40 0 -0.1835940033 ) )
 ( ( -590.1546020508 1292.6105957031 40 0.4490190148 -0.0623219982 ) ( -595.0778808594 1286.3049316406 40 0.4490190148 -0.122957997 ) ( -600.0012207031 1279.9993896484 40 0.4490190148 -0.1835940033 ) )
 ( ( -584.0012207031 1343.9997558594 40 0.8533650041 -0.0623219982 ) ( -592.0012207031 1343.9997558594 40 0.8533650041 -0.122957997 ) ( -600.0012207031 1343.9997558594 40 0.8533650041 -0.1835940033 ) )
-( ( -587.3899536133 1382.1533203125 40 1.1526130438 -0.0623219982 ) ( -593.6955566406 1387.0766601562 40 1.1526130438 -0.122957997 ) ( -600.0012207031 1392 40 1.1526130438 -0.1835940033 ) )
-( ( -536.1195068359 1392.4776611328 40 1.5612039566 -0.0623219982 ) ( -536.059753418 1400.2387695312 40 1.5612039566 -0.122957997 ) ( -536 1408 40 1.5612039566 -0.1835940033 ) )
+( ( -587.3899536133 1382.1533203125 40 1.1526130438 -0.0623219982 ) ( -593.6955566406 1387.0766601563 40 1.1526130438 -0.122957997 ) ( -600.0012207031 1392 40 1.1526130438 -0.1835940033 ) )
+( ( -536.1195068359 1392.4776611328 40 1.5612039566 -0.0623219982 ) ( -536.059753418 1400.2387695313 40 1.5612039566 -0.122957997 ) ( -536 1408 40 1.5612039566 -0.1835940033 ) )
 )
 }
 }
@@ -35995,7 +35990,7 @@
 }
 }
 }
-// entity 389
+// entity 388
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -36026,7 +36021,7 @@
 }
 }
 }
-// entity 390
+// entity 389
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -36044,7 +36039,7 @@
 }
 }
 }
-// entity 391
+// entity 390
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -36079,7 +36074,7 @@
 }
 }
 }
-// entity 392
+// entity 391
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -36097,7 +36092,7 @@
 }
 }
 }
-// entity 393
+// entity 392
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -36111,13 +36106,13 @@
 ( ( -536 1487.9993896484 8 0 0.125 ) ( -535.940246582 1495.7604980469 8 0 0.0625009984 ) ( -535.8804931641 1503.5217285156 8 0 0 ) )
 ( ( -600.0012207031 1471.9993896484 8 0.5153970122 0.125 ) ( -595.0778808594 1478.3049316406 8 0.5153970122 0.0625009984 ) ( -590.1546020508 1484.6105957031 8 0.5153970122 0 ) )
 ( ( -600.0012207031 1535.9997558594 8 1.0154000521 0.125 ) ( -592.0012207031 1535.9997558594 8 1.0154000521 0.0625009984 ) ( -584.0012207031 1535.9997558594 8 1.0154000521 0 ) )
-( ( -600.0012207031 1584 8 1.3904019594 0.125 ) ( -593.6955566406 1579.0766601562 8 1.3904019594 0.0625009984 ) ( -587.3899536133 1574.1533203125 8 1.3904019594 0 ) )
-( ( -536 1600 8 1.9057999849 0.125 ) ( -536.059753418 1592.2387695312 8 1.9057999849 0.0625009984 ) ( -536.1195068359 1584.4776611328 8 1.9057999849 0 ) )
+( ( -600.0012207031 1584 8 1.3904019594 0.125 ) ( -593.6955566406 1579.0766601563 8 1.3904019594 0.0625009984 ) ( -587.3899536133 1574.1533203125 8 1.3904019594 0 ) )
+( ( -536 1600 8 1.9057999849 0.125 ) ( -536.059753418 1592.2387695313 8 1.9057999849 0.0625009984 ) ( -536.1195068359 1584.4776611328 8 1.9057999849 0 ) )
 )
 }
 }
 }
-// entity 394
+// entity 393
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -36135,7 +36130,7 @@
 }
 }
 }
-// entity 395
+// entity 394
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -36153,7 +36148,7 @@
 }
 }
 }
-// entity 396
+// entity 395
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -36167,8 +36162,8 @@
 ( ( -535.8804931641 1503.5217285156 40 0 -0.0623219982 ) ( -535.940246582 1495.7604980469 40 0 -0.122957997 ) ( -536 1487.9993896484 40 0 -0.1835940033 ) )
 ( ( -590.1546020508 1484.6105957031 40 0.4490190148 -0.0623219982 ) ( -595.0778808594 1478.3049316406 40 0.4490190148 -0.122957997 ) ( -600.0012207031 1471.9993896484 40 0.4490190148 -0.1835940033 ) )
 ( ( -584.0012207031 1535.9997558594 40 0.8533650041 -0.0623219982 ) ( -592.0012207031 1535.9997558594 40 0.8533650041 -0.122957997 ) ( -600.0012207031 1535.9997558594 40 0.8533650041 -0.1835940033 ) )
-( ( -587.3899536133 1574.1533203125 40 1.1526130438 -0.0623219982 ) ( -593.6955566406 1579.0766601562 40 1.1526130438 -0.122957997 ) ( -600.0012207031 1584 40 1.1526130438 -0.1835940033 ) )
-( ( -536.1195068359 1584.4776611328 40 1.5612039566 -0.0623219982 ) ( -536.059753418 1592.2387695312 40 1.5612039566 -0.122957997 ) ( -536 1600 40 1.5612039566 -0.1835940033 ) )
+( ( -587.3899536133 1574.1533203125 40 1.1526130438 -0.0623219982 ) ( -593.6955566406 1579.0766601563 40 1.1526130438 -0.122957997 ) ( -600.0012207031 1584 40 1.1526130438 -0.1835940033 ) )
+( ( -536.1195068359 1584.4776611328 40 1.5612039566 -0.0623219982 ) ( -536.059753418 1592.2387695313 40 1.5612039566 -0.122957997 ) ( -536 1600 40 1.5612039566 -0.1835940033 ) )
 )
 }
 }
@@ -36188,7 +36183,7 @@
 }
 }
 }
-// entity 397
+// entity 396
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36196,7 +36191,7 @@
 "origin" "-680 888 20"
 "target" "t42"
 }
-// entity 398
+// entity 397
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36204,7 +36199,7 @@
 "origin" "-680 968 20"
 "target" "t41"
 }
-// entity 399
+// entity 398
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36212,7 +36207,7 @@
 "origin" "-604 928 16"
 "target" "t40"
 }
-// entity 400
+// entity 399
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36220,7 +36215,7 @@
 "origin" "-740 928 16"
 "target" "t39"
 }
-// entity 401
+// entity 400
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36228,7 +36223,7 @@
 "origin" "-740 736 16"
 "target" "t38"
 }
-// entity 402
+// entity 401
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36236,7 +36231,7 @@
 "origin" "-604 736 16"
 "target" "t37"
 }
-// entity 403
+// entity 402
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36244,7 +36239,7 @@
 "origin" "-680 776 20"
 "target" "t36"
 }
-// entity 404
+// entity 403
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36252,7 +36247,7 @@
 "origin" "-680 696 20"
 "target" "t35"
 }
-// entity 405
+// entity 404
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36260,7 +36255,7 @@
 "origin" "-680 552 20"
 "target" "t33"
 }
-// entity 406
+// entity 405
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36268,7 +36263,7 @@
 "origin" "-604 512 16"
 "target" "t32"
 }
-// entity 407
+// entity 406
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36276,7 +36271,7 @@
 "origin" "-740 512 16"
 "target" "t31"
 }
-// entity 408
+// entity 407
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36284,7 +36279,7 @@
 "origin" "-740 320 16"
 "target" "t30"
 }
-// entity 409
+// entity 408
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36292,7 +36287,7 @@
 "origin" "-604 320 16"
 "target" "t29"
 }
-// entity 410
+// entity 409
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36300,7 +36295,7 @@
 "origin" "-680 280 20"
 "target" "t27"
 }
-// entity 411
+// entity 410
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36308,7 +36303,7 @@
 "origin" "-680 56 20"
 "target" "t26"
 }
-// entity 412
+// entity 411
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36316,7 +36311,7 @@
 "origin" "-680 136 20"
 "target" "t25"
 }
-// entity 413
+// entity 412
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36324,7 +36319,7 @@
 "origin" "-604 96 16"
 "target" "t24"
 }
-// entity 414
+// entity 413
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36332,7 +36327,7 @@
 "origin" "-740 96 16"
 "target" "t23"
 }
-// entity 415
+// entity 414
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36340,7 +36335,7 @@
 "origin" "-740 -96 16"
 "target" "t22"
 }
-// entity 416
+// entity 415
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36348,7 +36343,7 @@
 "origin" "-604 -96 16"
 "target" "t21"
 }
-// entity 417
+// entity 416
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36356,7 +36351,7 @@
 "origin" "-680 -56 20"
 "target" "t20"
 }
-// entity 418
+// entity 417
 {
 "classname" "light"
 "_color" "1 0.5 0"
@@ -36364,28 +36359,28 @@
 "origin" "-680 -136 20"
 "target" "t19"
 }
-// entity 419
+// entity 418
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "-408 -96 84"
 }
-// entity 420
+// entity 419
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "55"
 "origin" "-212 -92 84"
 }
-// entity 421
+// entity 420
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "-132 -92 -52"
 }
-// entity 422
+// entity 421
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -36405,7 +36400,7 @@
 }
 }
 }
-// entity 423
+// entity 422
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -36425,7 +36420,7 @@
 }
 }
 }
-// entity 424
+// entity 423
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -36445,7 +36440,7 @@
 }
 }
 }
-// entity 425
+// entity 424
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -36465,7 +36460,7 @@
 }
 }
 }
-// entity 426
+// entity 425
 {
 "classname" "func_group"
 "a_lightmapscale" "0.125"
@@ -37610,21 +37605,21 @@
 ( -696 -64 16 ) ( -712 -64 16 ) ( -712 -80 16 ) common/caulk -16 0 0 0.5 0.5 134217728 4 0
 }
 }
-// entity 427
+// entity 426
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "8"
 "origin" "1152 1436 -36"
 }
-// entity 428
+// entity 427
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "8"
 "origin" "1152 1436 -136"
 }
-// entity 429
+// entity 428
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37632,35 +37627,35 @@
 "origin" "1152 1412 -136"
 "target" "t17"
 }
-// entity 430
+// entity 429
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1132 1408 -88"
 }
-// entity 431
+// entity 430
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1172 1408 -88"
 }
-// entity 432
+// entity 431
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1132 396 -88"
 }
-// entity 433
+// entity 432
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1132 436 -88"
 }
-// entity 434
+// entity 433
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37668,35 +37663,35 @@
 "origin" "1136 416 -136"
 "target" "t16"
 }
-// entity 435
+// entity 434
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "8"
 "origin" "1160 416 -136"
 }
-// entity 436
+// entity 435
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "8"
 "origin" "1160 416 -36"
 }
-// entity 437
+// entity 436
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "8"
 "origin" "1352 1120 -36"
 }
-// entity 438
+// entity 437
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "8"
 "origin" "1352 1120 -136"
 }
-// entity 439
+// entity 438
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37704,35 +37699,35 @@
 "origin" "1328 1120 -136"
 "target" "t15"
 }
-// entity 440
+// entity 439
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1324 1140 -88"
 }
-// entity 441
+// entity 440
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1324 1100 -88"
 }
-// entity 442
+// entity 441
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "84 1004 -88"
 }
-// entity 443
+// entity 442
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "44 1004 -88"
 }
-// entity 444
+// entity 443
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37740,35 +37735,35 @@
 "origin" "64 1008 -136"
 "target" "t14"
 }
-// entity 445
+// entity 444
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "8"
 "origin" "64 1032 -136"
 }
-// entity 446
+// entity 445
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "8"
 "origin" "64 1032 -36"
 }
-// entity 447
+// entity 446
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "8"
 "origin" "608 1032 -36"
 }
-// entity 448
+// entity 447
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "8"
 "origin" "608 1032 -136"
 }
-// entity 449
+// entity 448
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37776,84 +37771,84 @@
 "origin" "608 1008 -136"
 "target" "t13"
 }
-// entity 450
+// entity 449
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "588 1004 -88"
 }
-// entity 451
+// entity 450
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "628 1004 -88"
 }
-// entity 452
+// entity 451
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "788 620 -104"
 }
-// entity 453
+// entity 452
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "648 240 -52"
 }
-// entity 454
+// entity 453
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "672 240 -80"
 }
-// entity 455
+// entity 454
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "732 240 -80"
 }
-// entity 456
+// entity 455
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "760 240 -60"
 }
-// entity 457
+// entity 456
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "760 620 -60"
 }
-// entity 458
+// entity 457
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "648 620 -52"
 }
-// entity 459
+// entity 458
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "672 620 -80"
 }
-// entity 460
+// entity 459
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "732 620 -80"
 }
-// entity 461
+// entity 460
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37861,7 +37856,7 @@
 "origin" "760 240 -60"
 "target" "t12"
 }
-// entity 462
+// entity 461
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37869,7 +37864,7 @@
 "origin" "732 240 -80"
 "target" "t11"
 }
-// entity 463
+// entity 462
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37877,7 +37872,7 @@
 "origin" "648 240 -52"
 "target" "t10"
 }
-// entity 464
+// entity 463
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37885,7 +37880,7 @@
 "origin" "672 240 -80"
 "target" "t9"
 }
-// entity 465
+// entity 464
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37893,7 +37888,7 @@
 "origin" "672 620 -80"
 "target" "t8"
 }
-// entity 466
+// entity 465
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37901,7 +37896,7 @@
 "origin" "648 620 -52"
 "target" "t7"
 }
-// entity 467
+// entity 466
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37909,7 +37904,7 @@
 "origin" "732 620 -80"
 "target" "t6"
 }
-// entity 468
+// entity 467
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37917,7 +37912,7 @@
 "origin" "760 620 -60"
 "target" "t5"
 }
-// entity 469
+// entity 468
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37925,7 +37920,7 @@
 "origin" "-36 416 -44"
 "target" "t4"
 }
-// entity 470
+// entity 469
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37933,7 +37928,7 @@
 "origin" "-52 416 -76"
 "target" "t3"
 }
-// entity 471
+// entity 470
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -37941,7 +37936,7 @@
 "origin" "-88 416 -100"
 "target" "t2"
 }
-// entity 472
+// entity 471
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -37972,7 +37967,7 @@
 }
 }
 }
-// entity 473
+// entity 472
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -38003,7 +37998,7 @@
 }
 }
 }
-// entity 474
+// entity 473
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -38038,7 +38033,7 @@
 }
 }
 }
-// entity 475
+// entity 474
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -38073,7 +38068,7 @@
 }
 }
 }
-// entity 476
+// entity 475
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -38093,7 +38088,7 @@
 }
 }
 }
-// entity 477
+// entity 476
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -38137,7 +38132,7 @@
 }
 }
 }
-// entity 478
+// entity 477
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -38187,7 +38182,7 @@
 }
 }
 }
-// entity 479
+// entity 478
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -38237,28 +38232,28 @@
 }
 }
 }
-// entity 480
+// entity 479
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-434 952 172"
 }
-// entity 481
+// entity 480
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-434 872 172"
 }
-// entity 482
+// entity 481
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-434 704 172"
 }
-// entity 483
+// entity 482
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
@@ -38266,294 +38261,294 @@
 "origin" "-128 416 -112"
 "target" "t1"
 }
-// entity 484
+// entity 483
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "80 920 -128"
 }
-// entity 485
+// entity 484
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "-152 920 -128"
 }
-// entity 486
+// entity 485
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "272 920 -128"
 }
-// entity 487
+// entity 486
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "504 920 -128"
 }
-// entity 488
+// entity 487
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "952 848 -128"
 }
-// entity 489
+// entity 488
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "720 848 -128"
 }
-// entity 490
+// entity 489
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "704 704 -128"
 }
-// entity 491
+// entity 490
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "936 704 -128"
 }
-// entity 492
+// entity 491
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "920 520 -128"
 }
-// entity 493
+// entity 492
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "688 520 -128"
 }
-// entity 494
+// entity 493
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "696 336 -128"
 }
-// entity 495
+// entity 494
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "928 336 -128"
 }
-// entity 496
+// entity 495
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "872 104 -128"
 }
-// entity 497
+// entity 496
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "640 104 -128"
 }
-// entity 498
+// entity 497
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "536 24 -128"
 }
-// entity 499
+// entity 498
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "400 -80 -128"
 }
-// entity 500
+// entity 499
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "296 -88 -128"
 }
-// entity 501
+// entity 500
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "352 -296 -128"
 }
-// entity 502
+// entity 501
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "152 -8 -128"
 }
-// entity 503
+// entity 502
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "-32 -88 -128"
 }
-// entity 504
+// entity 503
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "56 144 -128"
 }
-// entity 505
+// entity 504
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "0 304 -128"
 }
-// entity 506
+// entity 505
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "24 528 -128"
 }
-// entity 507
+// entity 506
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "80 672 -128"
 }
-// entity 508
+// entity 507
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "352 -296 -48"
 }
-// entity 509
+// entity 508
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "352 -296 64"
 }
-// entity 510
+// entity 509
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "352 -296 168"
 }
-// entity 511
+// entity 510
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "40 416 -88"
 }
-// entity 512
+// entity 511
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "184 416 -16"
 }
-// entity 513
+// entity 512
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "512 416 -16"
 }
-// entity 514
+// entity 513
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "100"
 "origin" "344 416 0"
 }
-// entity 515
+// entity 514
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "100"
 "origin" "352 584 200"
 }
-// entity 516
+// entity 515
 {
 "classname" "light"
 "_color" "0.9 0.7 0.2"
 "light" "80"
 "origin" "352 424 112"
 }
-// entity 517
+// entity 516
 {
 "classname" "light"
 "_color" "0.9 0.7 0.2"
 "light" "80"
 "origin" "520 576 112"
 }
-// entity 518
+// entity 517
 {
 "classname" "light"
 "_color" "0.9 0.7 0.2"
 "light" "80"
 "origin" "224 560 112"
 }
-// entity 519
+// entity 518
 {
 "classname" "light"
 "_color" "0.9 0.7 0.2"
 "light" "80"
 "origin" "240 296 112"
 }
-// entity 520
+// entity 519
 {
 "classname" "light"
 "_color" "0.9 0.7 0.2"
 "light" "80"
 "origin" "512 280 112"
 }
-// entity 521
+// entity 520
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "80"
 "origin" "608 128 64"
 }
-// entity 522
+// entity 521
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "80"
 "origin" "48 128 64"
 }
-// entity 523
+// entity 522
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "80"
 "origin" "48 728 64"
 }
-// entity 524
+// entity 523
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "80"
 "origin" "564 708 48"
 }
-// entity 525
+// entity 524
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -38571,7 +38566,7 @@
 }
 }
 }
-// entity 526
+// entity 525
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -38589,7 +38584,7 @@
 }
 }
 }
-// entity 527
+// entity 526
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -38607,7 +38602,7 @@
 }
 }
 }
-// entity 528
+// entity 527
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -38625,7 +38620,7 @@
 }
 }
 }
-// entity 529
+// entity 528
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -38656,7 +38651,7 @@
 }
 }
 }
-// entity 530
+// entity 529
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -38687,7 +38682,7 @@
 }
 }
 }
-// entity 531
+// entity 530
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -38718,7 +38713,7 @@
 }
 }
 }
-// entity 532
+// entity 531
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -38749,266 +38744,266 @@
 }
 }
 }
-// entity 533
+// entity 532
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-305 292 268"
 }
-// entity 534
+// entity 533
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-305 460 268"
 }
-// entity 535
+// entity 534
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-305 540 268"
 }
-// entity 536
+// entity 535
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-434 66 172"
 }
-// entity 537
+// entity 536
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-306 -62 268"
 }
-// entity 538
+// entity 537
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "100"
 "origin" "-984 -96 116"
 }
-// entity 539
+// entity 538
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "90"
 "origin" "-886 -96 146"
 }
-// entity 540
+// entity 539
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "55"
 "origin" "-1084 836 324"
 }
-// entity 541
+// entity 540
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "55"
 "origin" "-1084 604 324"
 }
-// entity 542
+// entity 541
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "55"
 "origin" "-1084 412 324"
 }
-// entity 543
+// entity 542
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "55"
 "origin" "-1084 220 324"
 }
-// entity 544
+// entity 543
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "55"
 "origin" "-1084 4 324"
 }
-// entity 545
+// entity 544
 {
 "classname" "light"
 "_color" "1 0.5 0.2"
 "light" "55"
 "origin" "-36 -92 84"
 }
-// entity 546
+// entity 545
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "90"
 "origin" "-160 208 192"
 }
-// entity 547
+// entity 546
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "90"
 "origin" "-886 96 146"
 }
-// entity 548
+// entity 547
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "100"
 "origin" "-984 96 116"
 }
-// entity 549
+// entity 548
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "100"
 "origin" "-984 320 116"
 }
-// entity 550
+// entity 549
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "90"
 "origin" "-886 320 146"
 }
-// entity 551
+// entity 550
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "90"
 "origin" "-886 512 146"
 }
-// entity 552
+// entity 551
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "100"
 "origin" "-984 512 116"
 }
-// entity 553
+// entity 552
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "100"
 "origin" "-984 736 116"
 }
-// entity 554
+// entity 553
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "90"
 "origin" "-886 736 146"
 }
-// entity 555
+// entity 554
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "90"
 "origin" "-886 928 146"
 }
-// entity 556
+// entity 555
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "100"
 "origin" "-984 928 116"
 }
-// entity 557
+// entity 556
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "90"
 "origin" "-76 288 192"
 }
-// entity 558
+// entity 557
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "90"
 "origin" "-76 544 192"
 }
-// entity 559
+// entity 558
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "90"
 "origin" "-160 624 192"
 }
-// entity 560
+// entity 559
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "1096 912 -128"
 }
-// entity 561
+// entity 560
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "1152 1120 -128"
 }
-// entity 562
+// entity 561
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "1152 1152 -128"
 }
-// entity 563
+// entity 562
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "1152 1280 -128"
 }
-// entity 564
+// entity 563
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "992 1312 -128"
 }
-// entity 565
+// entity 564
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "55"
 "origin" "848 1320 -128"
 }
-// entity 566
+// entity 565
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "-36 416 -44"
 }
-// entity 567
+// entity 566
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "-52 416 -76"
 }
-// entity 568
+// entity 567
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "-88 416 -100"
 }
-// entity 569
+// entity 568
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "-128 416 -112"
 }
-// entity 570
+// entity 569
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39039,7 +39034,7 @@
 }
 }
 }
-// entity 571
+// entity 570
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -39057,7 +39052,7 @@
 }
 }
 }
-// entity 572
+// entity 571
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39075,7 +39070,7 @@
 }
 }
 }
-// entity 573
+// entity 572
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -39095,392 +39090,392 @@
 }
 }
 }
-// entity 574
+// entity 573
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "100"
 "origin" "-936 1120 108"
 }
-// entity 575
+// entity 574
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "90"
 "origin" "-862 1120 146"
 }
-// entity 576
+// entity 575
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "90"
 "origin" "-862 1248 146"
 }
-// entity 577
+// entity 576
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "100"
 "origin" "-936 1248 108"
 }
-// entity 578
+// entity 577
 {
 "classname" "light"
 "_color" "1 0.5 0"
 "light" "100"
 "origin" "-936 1440 108"
 }
-// entity 579
+// entity 578
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "90"
 "origin" "-862 1440 146"
 }
-// entity 580
+// entity 579
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-56 1688 222"
 }
-// entity 581
+// entity 580
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-136 1688 222"
 }
-// entity 582
+// entity 581
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-304 1688 222"
 }
-// entity 583
+// entity 582
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "150"
 "origin" "-256 1992 126"
 }
-// entity 584
+// entity 583
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "150"
 "origin" "-672 1832 128"
 }
-// entity 585
+// entity 584
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "150"
 "origin" "-224 1200 112"
 }
-// entity 586
+// entity 585
 {
 "classname" "light"
 "_color" "0.2 0.1 0"
 "light" "180"
 "origin" "-292 1660 -124"
 }
-// entity 587
+// entity 586
 {
 "classname" "light"
 "_color" "0.2 0.1 0"
 "light" "180"
 "origin" "-300 1332 -124"
 }
-// entity 588
+// entity 587
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-306 -142 268"
 }
-// entity 589
+// entity 588
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "150"
 "origin" "-416 1888 174"
 }
-// entity 590
+// entity 589
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-752 1384 336"
 }
-// entity 591
+// entity 590
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-712 1384 328"
 }
-// entity 592
+// entity 591
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-672 1384 320"
 }
-// entity 593
+// entity 592
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-552 1384 296"
 }
-// entity 594
+// entity 593
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-592 1384 304"
 }
-// entity 595
+// entity 594
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-632 1384 312"
 }
-// entity 596
+// entity 595
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-512 1384 288"
 }
-// entity 597
+// entity 596
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-472 1384 280"
 }
-// entity 598
+// entity 597
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-432 1384 272"
 }
-// entity 599
+// entity 598
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-328 1384 272"
 }
-// entity 600
+// entity 599
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-280 1384 272"
 }
-// entity 601
+// entity 600
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-184 1384 272"
 }
-// entity 602
+// entity 601
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-232 1384 272"
 }
-// entity 603
+// entity 602
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "8 1384 272"
 }
-// entity 604
+// entity 603
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-88 1384 272"
 }
-// entity 605
+// entity 604
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-136 1384 272"
 }
-// entity 606
+// entity 605
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "64 1384 272"
 }
-// entity 607
+// entity 606
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "112 1384 272"
 }
-// entity 608
+// entity 607
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "112 1568 272"
 }
-// entity 609
+// entity 608
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "64 1568 272"
 }
-// entity 610
+// entity 609
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-136 1568 272"
 }
-// entity 611
+// entity 610
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-88 1568 272"
 }
-// entity 612
+// entity 611
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "8 1568 272"
 }
-// entity 613
+// entity 612
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-232 1568 272"
 }
-// entity 614
+// entity 613
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-184 1568 272"
 }
-// entity 615
+// entity 614
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-280 1568 272"
 }
-// entity 616
+// entity 615
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-328 1568 272"
 }
-// entity 617
+// entity 616
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-432 1568 272"
 }
-// entity 618
+// entity 617
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-472 1568 280"
 }
-// entity 619
+// entity 618
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-512 1568 288"
 }
-// entity 620
+// entity 619
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-632 1568 312"
 }
-// entity 621
+// entity 620
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-592 1568 304"
 }
-// entity 622
+// entity 621
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-552 1568 296"
 }
-// entity 623
+// entity 622
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-672 1568 320"
 }
-// entity 624
+// entity 623
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-712 1568 328"
 }
-// entity 625
+// entity 624
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "-752 1568 336"
 }
-// entity 626
+// entity 625
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "150"
 "origin" "-920 1688 198"
 }
-// entity 627
+// entity 626
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-504 1288 222"
 }
-// entity 628
+// entity 627
 {
 "classname" "light"
 "_color" "0.8 0.4 0"
 "light" "180"
 "origin" "-224 1680 222"
 }
-// entity 629
+// entity 628
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39498,7 +39493,7 @@
 }
 }
 }
-// entity 630
+// entity 629
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39516,7 +39511,7 @@
 }
 }
 }
-// entity 631
+// entity 630
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39534,7 +39529,7 @@
 }
 }
 }
-// entity 632
+// entity 631
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39552,7 +39547,7 @@
 }
 }
 }
-// entity 633
+// entity 632
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39570,7 +39565,7 @@
 }
 }
 }
-// entity 634
+// entity 633
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39588,7 +39583,7 @@
 }
 }
 }
-// entity 635
+// entity 634
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39606,7 +39601,7 @@
 }
 }
 }
-// entity 636
+// entity 635
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39624,7 +39619,7 @@
 }
 }
 }
-// entity 637
+// entity 636
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39642,7 +39637,7 @@
 }
 }
 }
-// entity 638
+// entity 637
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39660,7 +39655,7 @@
 }
 }
 }
-// entity 639
+// entity 638
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39678,7 +39673,7 @@
 }
 }
 }
-// entity 640
+// entity 639
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39696,7 +39691,7 @@
 }
 }
 }
-// entity 641
+// entity 640
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39714,7 +39709,7 @@
 }
 }
 }
-// entity 642
+// entity 641
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39732,7 +39727,7 @@
 }
 }
 }
-// entity 643
+// entity 642
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39750,7 +39745,7 @@
 }
 }
 }
-// entity 644
+// entity 643
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39768,7 +39763,7 @@
 }
 }
 }
-// entity 645
+// entity 644
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39786,7 +39781,7 @@
 }
 }
 }
-// entity 646
+// entity 645
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39804,7 +39799,7 @@
 }
 }
 }
-// entity 647
+// entity 646
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39822,7 +39817,7 @@
 }
 }
 }
-// entity 648
+// entity 647
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39840,21 +39835,21 @@
 }
 }
 }
-// entity 649
+// entity 648
 {
 "classname" "light"
 "_color" "0.9 0.5 0.1"
 "light" "150"
 "origin" "1227 1852 102"
 }
-// entity 650
+// entity 649
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1112 1026 16"
 }
-// entity 651
+// entity 650
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -39862,7 +39857,7 @@
 "origin" "1107 1032 24"
 "target" "t77"
 }
-// entity 652
+// entity 651
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -39895,28 +39890,28 @@
 }
 }
 }
-// entity 653
+// entity 652
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "848 488 16"
 }
-// entity 654
+// entity 653
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "848 544 16"
 }
-// entity 655
+// entity 654
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "848 600 16"
 }
-// entity 656
+// entity 655
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -39924,7 +39919,7 @@
 "origin" "840 488 24"
 "target" "t81"
 }
-// entity 657
+// entity 656
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -39932,7 +39927,7 @@
 "origin" "840 544 24"
 "target" "t82"
 }
-// entity 658
+// entity 657
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -39940,7 +39935,7 @@
 "origin" "840 600 24"
 "target" "t83"
 }
-// entity 659
+// entity 658
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -39948,7 +39943,7 @@
 "origin" "840 408 24"
 "target" "t84"
 }
-// entity 660
+// entity 659
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -39956,7 +39951,7 @@
 "origin" "840 352 24"
 "target" "t85"
 }
-// entity 661
+// entity 660
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -39964,28 +39959,28 @@
 "origin" "840 296 24"
 "target" "t86"
 }
-// entity 662
+// entity 661
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "848 408 16"
 }
-// entity 663
+// entity 662
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "848 352 16"
 }
-// entity 664
+// entity 663
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "848 296 16"
 }
-// entity 665
+// entity 664
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -40005,7 +40000,7 @@
 }
 }
 }
-// entity 666
+// entity 665
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -40025,7 +40020,7 @@
 }
 }
 }
-// entity 667
+// entity 666
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -40045,7 +40040,7 @@
 }
 }
 }
-// entity 668
+// entity 667
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -40065,7 +40060,7 @@
 }
 }
 }
-// entity 669
+// entity 668
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -40085,7 +40080,7 @@
 }
 }
 }
-// entity 670
+// entity 669
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -40105,7 +40100,7 @@
 }
 }
 }
-// entity 671
+// entity 670
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -40125,7 +40120,7 @@
 }
 }
 }
-// entity 672
+// entity 671
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -40145,7 +40140,7 @@
 }
 }
 }
-// entity 673
+// entity 672
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -40180,7 +40175,7 @@
 }
 }
 }
-// entity 674
+// entity 673
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -40215,7 +40210,7 @@
 }
 }
 }
-// entity 675
+// entity 674
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -40250,7 +40245,7 @@
 }
 }
 }
-// entity 676
+// entity 675
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -40285,175 +40280,175 @@
 }
 }
 }
-// entity 677
+// entity 676
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1108 1032 152"
 }
-// entity 678
+// entity 677
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1052 1032 152"
 }
-// entity 679
+// entity 678
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "1052 1032 48"
 }
-// entity 680
+// entity 679
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "40"
 "origin" "1183 102 270"
 }
-// entity 681
+// entity 680
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "300"
 "origin" "1248 484 676"
 }
-// entity 682
+// entity 681
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-160 640 192"
 }
-// entity 683
+// entity 682
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-64 544 192"
 }
-// entity 684
+// entity 683
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-64 288 192"
 }
-// entity 685
+// entity 684
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-160 192 192"
 }
-// entity 686
+// entity 685
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-64 416 192"
 }
-// entity 687
+// entity 686
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-920 1688 198"
 }
-// entity 688
+// entity 687
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-416 1888 174"
 }
-// entity 689
+// entity 688
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-224 1200 112"
 }
-// entity 690
+// entity 689
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-672 1832 128"
 }
-// entity 691
+// entity 690
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-256 1992 126"
 }
-// entity 692
+// entity 691
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-856 1440 152"
 }
-// entity 693
+// entity 692
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-856 1248 152"
 }
-// entity 694
+// entity 693
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-856 1120 152"
 }
-// entity 695
+// entity 694
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-880 928 152"
 }
-// entity 696
+// entity 695
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-880 512 152"
 }
-// entity 697
+// entity 696
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-880 320 152"
 }
-// entity 698
+// entity 697
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-880 96 152"
 }
-// entity 699
+// entity 698
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "-880 -96 152"
 }
-// entity 700
+// entity 699
 {
 "classname" "light"
 "_color" "1 1 1"
 "light" "5"
 "origin" "96 1832 112"
 }
-// entity 701
+// entity 700
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -40461,21 +40456,21 @@
 "origin" "1416 1592 24"
 "target" "t92"
 }
-// entity 702
+// entity 701
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1408 1592 16"
 }
-// entity 703
+// entity 702
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
 "light" "10"
 "origin" "1408 1536 16"
 }
-// entity 704
+// entity 703
 {
 "classname" "light"
 "_color" "0.99 0.81 0.12"
@@ -40483,7 +40478,7 @@
 "origin" "1416 1536 24"
 "target" "t93"
 }
-// entity 705
+// entity 704
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -40540,49 +40535,49 @@
 }
 }
 }
-// entity 706
+// entity 705
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "80"
 "origin" "340 860 68"
 }
-// entity 707
+// entity 706
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "80"
 "origin" "492 1020 68"
 }
-// entity 708
+// entity 707
 {
 "classname" "light"
 "_color" "0.99 0.61 0.12"
 "light" "80"
 "origin" "652 1156 68"
 }
-// entity 709
+// entity 708
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "636 1316 220"
 }
-// entity 710
+// entity 709
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "636 1476 220"
 }
-// entity 711
+// entity 710
 {
 "classname" "light"
 "_color" "0.8 0.65 0.1"
 "light" "60"
 "origin" "404 1476 228"
 }
-// entity 712
+// entity 711
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -40602,7 +40597,7 @@
 }
 }
 }
-// entity 713
+// entity 712
 {
 "classname" "func_group"
 "type" "patchCapped"
@@ -40620,7 +40615,7 @@
 }
 }
 }
-// entity 714
+// entity 713
 {
 "classname" "func_group"
 "type" "patchThick"
@@ -40655,7 +40650,7 @@
 }
 }
 }
-// entity 715
+// entity 714
 {
 "classname" "func_group"
 "type" "patchCapped"

Modified: branches/nexuiz-2.0/data/maps/basement.bsp
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/maps/basement.map
===================================================================
--- branches/nexuiz-2.0/data/maps/basement.map	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/maps/basement.map	2009-04-19 11:12:15 UTC (rev 6532)
@@ -2,7 +2,7 @@
 // entity 0
 {
 "classname" "worldspawn"
-"meesage" "Basement by Zombie"
+"message" "Basement by Zombie"
 // brush 0
 {
 ( -128 192 8 ) ( -128 136 8 ) ( -128 136 0 ) evil2_basefloor/flr_tmtl_drk 0 16 0 0.5 0.5 0 0 0

Copied: branches/nexuiz-2.0/data/maps/desertfactory.bgs (from rev 6531, trunk/data/maps/desertfactory.bgs)
===================================================================
--- branches/nexuiz-2.0/data/maps/desertfactory.bgs	                        (rev 0)
+++ branches/nexuiz-2.0/data/maps/desertfactory.bgs	2009-04-19 11:12:15 UTC (rev 6532)
@@ -0,0 +1,1130 @@
+a 0.200000 1
+a 0.377165 0
+a 0.436220 1
+a 0.613386 0
+a 0.672441 1
+a 0.849606 0
+a 2.089764 1
+a 2.266929 0
+a 2.325984 1
+a 2.503150 0
+a 2.562205 1
+a 2.739370 0
+a 3.979528 1
+a 4.156693 0
+a 4.215748 1
+a 4.392913 0
+a 4.451969 1
+a 4.629134 0
+a 5.869291 1
+a 6.046457 0
+a 6.105512 1
+a 6.282677 0
+a 6.341732 1
+a 6.518898 0
+a 7.759055 1
+a 7.936220 0
+a 7.995276 1
+a 8.172441 0
+a 8.231496 1
+a 8.408661 0
+a 9.648819 1
+a 9.825984 0
+a 9.885039 1
+a 10.062205 0
+a 10.121260 1
+a 10.298425 0
+a 11.538583 1
+a 11.715748 0
+a 11.774803 1
+a 11.951969 0
+a 12.011024 1
+a 12.188189 0
+a 13.428346 1
+a 13.605512 0
+a 13.664567 1
+a 13.841732 0
+a 13.900787 1
+a 14.077953 0
+a 15.318110 1
+a 15.495276 0
+a 15.554331 1
+a 15.731496 0
+a 15.790551 1
+a 15.967717 0
+a 17.207874 1
+a 17.385039 0
+a 17.444094 1
+a 17.621260 0
+a 17.680315 1
+a 17.857480 0
+a 19.097638 1
+a 19.274803 0
+a 19.333858 1
+a 19.511024 0
+a 19.570079 1
+a 19.747244 0
+a 20.987402 1
+a 21.164567 0
+a 21.223622 1
+a 21.400787 0
+a 21.459843 1
+a 21.637008 0
+a 22.877165 1
+a 23.054331 0
+a 23.113386 1
+a 23.290551 0
+a 23.349606 1
+a 23.526772 0
+a 24.766929 1
+a 24.944094 0
+a 25.003150 1
+a 25.180315 0
+a 25.239370 1
+a 25.416535 0
+a 26.656693 1
+a 26.833858 0
+a 26.892913 1
+a 27.070079 0
+a 27.129134 1
+a 27.306299 0
+a 28.546457 1
+a 28.723622 0
+a 28.782677 1
+a 28.959843 0
+a 29.018898 1
+a 29.196063 0
+a 30.436220 1
+a 30.613386 0
+a 30.672441 1
+a 30.849606 0
+a 30.908661 1
+a 31.085827 0
+a 32.325984 1
+a 32.503150 0
+a 32.562205 1
+a 32.739370 0
+a 32.798425 1
+a 32.975591 0
+a 34.215748 1
+a 34.392913 0
+a 34.451969 1
+a 34.629134 0
+a 34.688189 1
+a 34.865354 0
+a 36.105512 1
+a 36.282677 0
+a 36.341732 1
+a 36.518898 0
+a 36.577953 1
+a 36.755118 0
+a 37.995276 1
+a 38.172441 0
+a 38.231496 1
+a 38.408661 0
+a 38.467717 1
+a 38.644882 0
+a 39.885039 1
+a 40.062205 0
+a 40.121260 1
+a 40.298425 0
+a 40.357480 1
+a 40.534646 0
+a 41.774803 1
+a 41.951969 0
+a 42.011024 1
+a 42.188189 0
+a 42.247244 1
+a 42.424409 0
+a 43.664567 1
+a 43.841732 0
+a 43.900787 1
+a 44.077953 0
+a 44.137008 1
+a 44.314173 0
+a 45.554331 1
+a 45.731496 0
+a 45.790551 1
+a 45.967717 0
+a 46.026772 1
+a 46.203937 0
+a 47.444094 1
+a 47.621260 0
+a 47.680315 1
+a 47.857480 0
+a 47.916535 1
+a 48.093701 0
+a 49.333858 1
+a 49.511024 0
+a 49.570079 1
+a 49.747244 0
+a 49.806299 1
+a 49.983465 0
+a 51.223622 1
+a 51.400787 0
+a 51.459843 1
+a 51.637008 0
+a 51.696063 1
+a 51.873228 0
+a 53.113386 1
+a 53.290551 0
+a 53.349606 1
+a 53.526772 0
+a 53.585827 1
+a 53.762992 0
+a 55.003150 1
+a 55.180315 0
+a 55.239370 1
+a 55.416535 0
+a 55.475591 1
+a 55.652756 0
+a 56.892913 1
+a 57.070079 0
+a 57.129134 1
+a 57.306299 0
+a 57.365354 1
+a 57.542520 0
+a 58.782677 1
+a 58.959843 0
+a 59.018898 1
+a 59.196063 0
+a 59.255118 1
+a 59.432283 0
+a 60.672441 1
+a 60.849606 0
+a 60.908661 1
+a 61.085827 0
+a 61.144882 1
+a 61.322047 0
+a 62.562205 1
+a 62.739370 0
+a 62.798425 1
+a 62.975591 0
+a 63.034646 1
+a 63.211811 0
+a 64.451969 1
+a 64.629134 0
+a 64.688189 1
+a 64.865354 0
+a 64.924409 1
+a 65.101575 0
+a 66.341732 1
+a 66.518898 0
+a 66.577953 1
+a 66.755118 0
+a 66.814173 1
+a 66.991339 0
+a 68.231496 1
+a 68.408661 0
+a 72.011024 1
+a 72.188189 0
+a 75.790551 1
+a 75.967717 0
+a 79.570079 1
+a 79.747244 0
+a 83.349606 1
+a 83.526772 0
+a 83.585827 1
+a 83.762992 0
+a 83.822047 1
+a 83.999213 0
+a 85.239370 1
+a 85.416535 0
+a 85.475591 1
+a 85.652756 0
+a 85.711811 1
+a 85.888976 0
+a 87.129134 1
+a 87.306299 0
+a 87.365354 1
+a 87.542520 0
+a 87.601575 1
+a 87.778740 0
+a 89.018898 1
+a 89.196063 0
+a 89.255118 1
+a 89.432283 0
+a 89.491339 1
+a 89.668504 0
+a 90.908661 1
+a 91.085827 0
+a 91.144882 1
+a 91.322047 0
+a 91.381102 1
+a 91.558268 0
+a 92.798425 1
+a 92.975591 0
+a 93.034646 1
+a 93.211811 0
+a 93.270866 1
+a 93.448031 0
+a 94.688189 1
+a 94.865354 0
+a 94.924409 1
+a 95.101575 0
+a 95.160630 1
+a 95.337795 0
+a 96.577953 1
+a 96.755118 0
+a 96.814173 1
+a 96.991339 0
+a 97.050394 1
+a 97.227559 0
+a 98.467717 1
+a 98.644882 0
+a 98.703937 1
+a 98.881102 0
+a 98.940157 1
+a 99.117323 0
+a 100.357480 1
+a 100.534646 0
+a 100.593701 1
+a 100.770866 0
+a 100.829921 1
+a 101.007087 0
+a 102.247244 1
+a 102.424409 0
+a 102.483465 1
+a 102.660630 0
+a 102.719685 1
+a 102.896850 0
+a 104.137008 1
+a 104.314173 0
+a 104.373228 1
+a 104.550394 0
+a 104.609449 1
+a 104.786614 0
+a 106.026772 1
+a 106.203937 0
+a 106.262992 1
+a 106.440157 0
+a 106.499213 1
+a 106.676378 0
+a 107.916535 1
+a 108.093701 0
+a 108.152756 1
+a 108.329921 0
+a 108.388976 1
+a 108.566142 0
+a 109.806299 1
+a 109.983465 0
+a 110.042520 1
+a 110.219685 0
+a 110.278740 1
+a 110.455906 0
+a 111.696063 1
+a 111.873228 0
+a 111.932283 1
+a 112.109449 0
+a 112.168504 1
+a 112.345669 0
+a 113.585827 1
+a 113.762992 0
+a 113.822047 1
+a 113.999213 0
+a 114.058268 1
+a 114.235433 0
+a 115.475591 1
+a 115.652756 0
+a 115.711811 1
+a 115.888976 0
+a 115.948031 1
+a 116.125197 0
+a 117.365354 1
+a 117.542520 0
+a 117.601575 1
+a 117.778740 0
+a 117.837795 1
+a 118.014961 0
+a 119.255118 1
+a 119.432283 0
+a 119.491339 1
+a 119.668504 0
+a 119.727559 1
+a 119.904724 0
+a 121.144882 1
+a 121.322047 0
+a 121.381102 1
+a 121.558268 0
+a 121.617323 1
+a 121.794488 0
+a 123.034646 1
+a 123.211811 0
+a 123.270866 1
+a 123.448031 0
+a 123.507087 1
+a 123.684252 0
+a 124.924409 1
+a 125.101575 0
+a 125.160630 1
+a 125.337795 0
+a 125.396850 1
+a 125.574016 0
+a 126.814173 1
+a 126.991339 0
+a 127.050394 1
+a 127.227559 0
+a 127.286614 1
+a 127.463780 0
+a 128.703937 1
+a 128.881102 0
+a 128.940157 1
+a 129.117323 0
+a 129.176378 1
+a 129.353543 0
+a 130.593701 1
+a 130.770866 0
+a 130.829921 1
+a 131.007087 0
+a 131.066142 1
+a 131.243307 0
+a 132.483465 1
+a 132.660630 0
+a 132.719685 1
+a 132.896850 0
+a 132.955906 1
+a 133.133071 0
+a 134.373228 1
+a 134.550394 0
+a 134.609449 1
+a 134.786614 0
+a 134.845669 1
+a 135.022835 0
+a 136.262992 1
+a 136.440157 0
+a 136.499213 1
+a 136.676378 0
+a 136.735433 1
+a 136.912598 0
+a 138.152756 1
+a 138.329921 0
+a 138.388976 1
+a 138.566142 0
+a 138.625197 1
+a 138.802362 0
+a 140.042520 1
+a 140.219685 0
+a 140.278740 1
+a 140.455906 0
+a 140.514961 1
+a 140.692126 0
+a 141.932283 1
+a 142.109449 0
+a 142.168504 1
+a 142.345669 0
+a 142.404724 1
+a 142.581890 0
+a 143.822047 1
+a 143.999213 0
+a 144.058268 1
+a 144.235433 0
+a 144.294488 1
+a 144.471654 0
+a 145.711811 1
+a 145.888976 0
+a 145.948031 1
+a 146.125197 0
+a 146.184252 1
+a 146.361417 0
+a 147.601575 1
+a 147.778740 0
+a 147.837795 1
+a 148.014961 0
+a 148.074016 1
+a 148.251181 0
+a 149.491339 1
+a 149.668504 0
+a 149.727559 1
+a 149.904724 0
+a 149.963780 1
+a 150.140945 0
+a 151.381102 1
+a 151.558268 0
+a 151.617323 1
+a 151.794488 0
+a 151.853543 1
+a 152.030709 0
+a 153.270866 1
+a 153.448031 0
+a 153.507087 1
+a 153.684252 0
+a 153.743307 1
+a 153.920472 0
+a 155.160630 1
+a 155.337795 0
+a 155.396850 1
+a 155.574016 0
+a 155.633071 1
+a 155.810236 0
+a 157.050394 1
+a 157.227559 0
+a 157.286614 1
+a 157.463780 0
+a 157.522835 1
+a 157.700000 0
+a 158.940157 1
+a 159.117323 0
+a 159.176378 1
+a 159.353543 0
+a 159.412598 1
+a 159.589764 0
+a 160.829921 1
+a 161.007087 0
+a 161.066142 1
+a 161.243307 0
+a 161.302362 1
+a 161.479528 0
+a 162.719685 1
+a 162.896850 0
+a 162.955906 1
+a 163.133071 0
+a 163.192126 1
+a 163.369291 0
+a 164.609449 1
+a 164.786614 0
+a 164.845669 1
+a 165.022835 0
+a 165.081890 1
+a 165.259055 0
+a 166.499213 1
+a 166.676378 0
+a 166.735433 1
+a 166.912598 0
+a 166.971654 1
+a 167.148819 0
+a 168.388976 1
+a 168.566142 0
+a 168.625197 1
+a 168.802362 0
+a 168.861417 1
+a 169.038583 0
+a 170.278740 1
+a 170.455906 0
+a 170.514961 1
+a 170.692126 0
+a 170.751181 1
+a 170.928346 0
+a 172.168504 1
+a 172.345669 0
+a 172.404724 1
+a 172.581890 0
+a 172.640945 1
+a 172.818110 0
+a 174.058268 1
+a 174.235433 0
+a 174.294488 1
+a 174.471654 0
+a 174.530709 1
+a 174.707874 0
+a 175.948031 1
+a 176.125197 0
+a 176.184252 1
+a 176.361417 0
+a 176.420472 1
+a 176.597638 0
+a 177.837795 1
+a 178.014961 0
+a 178.074016 1
+a 178.251181 0
+a 178.310236 1
+a 178.487402 0
+a 179.727559 1
+a 179.904724 0
+a 179.963780 1
+a 180.140945 0
+a 180.200000 1
+a 180.377165 0
+a 181.617323 1
+a 181.794488 0
+a 181.853543 1
+a 182.030709 0
+a 182.089764 1
+a 182.266929 0
+a 183.507087 1
+a 183.684252 0
+a 183.743307 1
+a 183.920472 0
+a 183.979528 1
+a 184.156693 0
+a 185.396850 1
+a 185.574016 0
+a 185.633071 1
+a 185.810236 0
+a 185.869291 1
+a 186.046457 0
+a 187.286614 1
+a 187.463780 0
+a 187.522835 1
+a 187.700000 0
+a 187.759055 1
+a 187.936220 0
+a 189.176378 1
+a 189.353543 0
+a 189.412598 1
+a 189.589764 0
+a 189.648819 1
+a 189.825984 0
+a 191.066142 1
+a 191.243307 0
+a 191.302362 1
+a 191.479528 0
+a 191.538583 1
+a 191.715748 0
+a 192.955906 1
+a 193.133071 0
+a 193.192126 1
+a 193.369291 0
+a 193.428346 1
+a 193.605512 0
+a 194.845669 1
+a 195.022835 0
+a 195.081890 1
+a 195.259055 0
+a 195.318110 1
+a 195.495276 0
+a 196.735433 1
+a 196.912598 0
+a 196.971654 1
+a 197.148819 0
+a 197.207874 1
+a 197.385039 0
+a 198.625197 1
+a 198.802362 0
+a 198.861417 1
+a 199.038583 0
+a 199.097638 1
+a 199.274803 0
+a 200.514961 1
+a 200.692126 0
+a 200.751181 1
+a 200.928346 0
+a 200.987402 1
+a 201.164567 0
+a 202.404724 1
+a 202.581890 0
+a 202.640945 1
+a 202.818110 0
+a 202.877165 1
+a 203.054331 0
+a 204.294488 1
+a 204.471654 0
+b 8.703937 1
+b 8.881102 0
+b 10.593701 1
+b 10.770866 0
+b 12.483465 1
+b 12.660630 0
+b 14.373228 1
+b 14.550394 0
+b 16.262992 1
+b 16.440157 0
+b 18.152756 1
+b 18.329921 0
+b 20.042520 1
+b 20.219685 0
+b 21.932283 1
+b 22.109449 0
+b 23.822047 1
+b 23.999213 0
+b 25.711811 1
+b 25.888976 0
+b 27.601575 1
+b 27.778740 0
+b 29.491339 1
+b 29.668504 0
+b 31.381102 1
+b 31.558268 0
+b 33.270866 1
+b 33.448031 0
+b 35.160630 1
+b 35.337795 0
+b 37.050394 1
+b 37.227559 0
+b 38.940157 1
+b 39.117323 0
+b 40.829921 1
+b 41.007087 0
+b 42.719685 1
+b 42.896850 0
+b 44.609449 1
+b 44.786614 0
+b 46.499213 1
+b 46.676378 0
+b 48.388976 1
+b 48.566142 0
+b 50.278740 1
+b 50.455906 0
+b 52.168504 1
+b 52.345669 0
+b 54.058268 1
+b 54.235433 0
+b 55.948031 1
+b 56.125197 0
+b 57.837795 1
+b 58.014961 0
+b 59.727559 1
+b 59.904724 0
+b 61.617323 1
+b 61.794488 0
+b 63.507087 1
+b 63.684252 0
+b 65.396850 1
+b 65.574016 0
+b 67.286614 1
+b 67.463780 0
+b 67.759055 1
+b 67.936220 0
+b 67.995276 1
+b 68.172441 0
+b 68.467717 1
+b 68.644882 0
+b 72.247244 1
+b 72.424409 0
+b 76.026772 1
+b 76.203937 0
+b 79.806299 1
+b 79.983465 0
+b 84.294488 1
+b 84.471654 0
+b 86.184252 1
+b 86.361417 0
+b 88.074016 1
+b 88.251181 0
+b 89.963780 1
+b 90.140945 0
+b 91.853543 1
+b 92.030709 0
+b 93.743307 1
+b 93.920472 0
+b 95.633071 1
+b 95.810236 0
+b 97.522835 1
+b 97.700000 0
+b 99.412598 1
+b 99.589764 0
+b 101.302362 1
+b 101.479528 0
+b 103.192126 1
+b 103.369291 0
+b 105.081890 1
+b 105.259055 0
+b 106.971654 1
+b 107.148819 0
+b 108.861417 1
+b 109.038583 0
+b 110.751181 1
+b 110.928346 0
+b 112.640945 1
+b 112.818110 0
+b 114.530709 1
+b 114.707874 0
+b 116.420472 1
+b 116.597638 0
+b 118.310236 1
+b 118.487402 0
+b 120.200000 1
+b 120.377165 0
+b 122.089764 1
+b 122.266929 0
+b 123.979528 1
+b 124.156693 0
+b 125.869291 1
+b 126.046457 0
+b 127.759055 1
+b 127.936220 0
+b 129.648819 1
+b 129.825984 0
+b 131.538583 1
+b 131.715748 0
+b 133.428346 1
+b 133.605512 0
+b 135.318110 1
+b 135.495276 0
+b 137.207874 1
+b 137.385039 0
+b 139.097638 1
+b 139.274803 0
+b 140.987402 1
+b 141.164567 0
+b 142.877165 1
+b 143.054331 0
+b 143.349606 1
+b 143.526772 0
+b 143.585827 1
+b 143.762992 0
+b 144.766929 1
+b 144.944094 0
+b 146.656693 1
+b 146.833858 0
+b 148.546457 1
+b 148.723622 0
+b 150.436220 1
+b 150.613386 0
+b 152.325984 1
+b 152.503150 0
+b 154.215748 1
+b 154.392913 0
+b 156.105512 1
+b 156.282677 0
+b 157.995276 1
+b 158.172441 0
+b 158.467717 1
+b 158.644882 0
+b 158.703937 1
+b 158.881102 0
+b 159.885039 1
+b 160.062205 0
+b 161.774803 1
+b 161.951969 0
+b 163.664567 1
+b 163.841732 0
+b 165.554331 1
+b 165.731496 0
+b 167.444094 1
+b 167.621260 0
+b 169.333858 1
+b 169.511024 0
+b 171.223622 1
+b 171.400787 0
+b 173.113386 1
+b 173.290551 0
+b 173.585827 1
+b 173.762992 0
+b 173.822047 1
+b 173.999213 0
+b 175.003150 1
+b 175.180315 0
+b 176.892913 1
+b 177.070079 0
+b 178.782677 1
+b 178.959843 0
+b 180.672441 1
+b 180.849606 0
+b 182.562205 1
+b 182.739370 0
+b 184.451969 1
+b 184.629134 0
+b 186.341732 1
+b 186.518898 0
+b 188.231496 1
+b 188.408661 0
+b 190.121260 1
+b 190.298425 0
+b 192.011024 1
+b 192.188189 0
+b 193.900787 1
+b 194.077953 0
+b 195.790551 1
+b 195.967717 0
+b 197.680315 1
+b 197.857480 0
+b 199.570079 1
+b 199.747244 0
+b 201.459843 1
+b 201.637008 0
+b 203.349606 1
+b 203.526772 0
+c 9.412598 1
+c 9.589764 0
+c 10.829921 1
+c 11.007087 0
+c 11.066142 1
+c 11.243307 0
+c 11.302362 1
+c 11.479528 0
+c 13.192126 1
+c 13.369291 0
+c 14.609449 1
+c 14.786614 0
+c 14.845669 1
+c 15.022835 0
+c 15.081890 1
+c 15.259055 0
+c 16.971654 1
+c 17.148819 0
+c 18.388976 1
+c 18.566142 0
+c 18.625197 1
+c 18.802362 0
+c 18.861417 1
+c 19.038583 0
+c 20.751181 1
+c 20.928346 0
+c 22.168504 1
+c 22.345669 0
+c 22.404724 1
+c 22.581890 0
+c 22.640945 1
+c 22.818110 0
+c 24.530709 1
+c 24.707874 0
+c 25.948031 1
+c 26.125197 0
+c 26.184252 1
+c 26.361417 0
+c 26.420472 1
+c 26.597638 0
+c 28.310236 1
+c 28.487402 0
+c 29.727559 1
+c 29.904724 0
+c 29.963780 1
+c 30.140945 0
+c 30.200000 1
+c 30.377165 0
+c 32.089764 1
+c 32.266929 0
+c 33.507087 1
+c 33.684252 0
+c 33.743307 1
+c 33.920472 0
+c 33.979528 1
+c 34.156693 0
+c 35.869291 1
+c 36.046457 0
+c 37.286614 1
+c 37.463780 0
+c 37.522835 1
+c 37.700000 0
+c 37.759055 1
+c 37.936220 0
+c 39.648819 1
+c 39.825984 0
+c 41.538583 1
+c 41.715748 0
+c 43.428346 1
+c 43.605512 0
+c 45.318110 1
+c 45.495276 0
+c 47.207874 1
+c 47.385039 0
+c 49.097638 1
+c 49.274803 0
+c 50.987402 1
+c 51.164567 0
+c 52.877165 1
+c 53.054331 0
+c 54.766929 1
+c 54.944094 0
+c 56.656693 1
+c 56.833858 0
+c 58.546457 1
+c 58.723622 0
+c 60.436220 1
+c 60.613386 0
+c 62.325984 1
+c 62.503150 0
+c 64.215748 1
+c 64.392913 0
+c 66.105512 1
+c 66.282677 0
+c 68.703937 1
+c 68.881102 0
+c 69.176378 1
+c 69.353543 0
+c 69.648819 1
+c 69.825984 0
+c 70.121260 1
+c 70.298425 0
+c 70.593701 1
+c 70.770866 0
+c 71.066142 1
+c 71.243307 0
+c 71.538583 1
+c 71.715748 0
+c 72.483465 1
+c 72.660630 0
+c 72.955906 1
+c 73.133071 0
+c 73.428346 1
+c 73.605512 0
+c 73.900787 1
+c 74.077953 0
+c 74.373228 1
+c 74.550394 0
+c 74.845669 1
+c 75.022835 0
+c 75.318110 1
+c 75.495276 0
+c 76.262992 1
+c 76.440157 0
+c 76.735433 1
+c 76.912598 0
+c 77.207874 1
+c 77.385039 0
+c 77.680315 1
+c 77.857480 0
+c 78.152756 1
+c 78.329921 0
+c 78.625197 1
+c 78.802362 0
+c 79.097638 1
+c 79.274803 0
+c 80.042520 1
+c 80.219685 0
+c 80.514961 1
+c 80.692126 0
+c 80.987402 1
+c 81.164567 0
+c 81.459843 1
+c 81.637008 0
+c 81.932283 1
+c 82.109449 0
+c 82.404724 1
+c 82.581890 0
+c 82.877165 1
+c 83.054331 0
+c 85.003150 1
+c 85.180315 0
+c 86.420472 1
+c 86.597638 0
+c 86.656693 1
+c 86.833858 0
+c 86.892913 1
+c 87.070079 0
+c 88.782677 1
+c 88.959843 0
+c 90.200000 1
+c 90.377165 0
+c 90.436220 1
+c 90.613386 0
+c 90.672441 1
+c 90.849606 0
+c 92.562205 1
+c 92.739370 0
+c 93.979528 1
+c 94.156693 0
+c 94.215748 1
+c 94.392913 0
+c 94.451969 1
+c 94.629134 0
+c 96.341732 1
+c 96.518898 0
+c 97.759055 1
+c 97.936220 0
+c 97.995276 1
+c 98.172441 0
+c 98.231496 1
+c 98.408661 0
+c 100.121260 1
+c 100.298425 0
+c 101.538583 1
+c 101.715748 0
+c 101.774803 1
+c 101.951969 0
+c 102.011024 1
+c 102.188189 0
+c 103.900787 1
+c 104.077953 0
+c 105.318110 1
+c 105.495276 0
+c 105.554331 1
+c 105.731496 0
+c 105.790551 1
+c 105.967717 0
+c 107.680315 1
+c 107.857480 0
+c 109.097638 1
+c 109.274803 0
+c 109.333858 1
+c 109.511024 0
+c 109.570079 1
+c 109.747244 0
+c 111.459843 1
+c 111.637008 0
+c 112.877165 1
+c 113.054331 0
+c 113.113386 1
+c 113.290551 0
+c 113.349606 1
+c 113.526772 0
+c 115.239370 1
+c 115.416535 0
+c 117.129134 1
+c 117.306299 0
+c 119.018898 1
+c 119.196063 0
+c 120.908661 1
+c 121.085827 0
+c 122.798425 1
+c 122.975591 0
+c 124.688189 1
+c 124.865354 0
+c 126.577953 1
+c 126.755118 0
+c 128.467717 1
+c 128.644882 0
+c 130.357480 1
+c 130.534646 0
+c 132.247244 1
+c 132.424409 0
+c 134.137008 1
+c 134.314173 0
+c 136.026772 1
+c 136.203937 0
+c 137.916535 1
+c 138.093701 0
+c 139.806299 1
+c 139.983465 0
+c 141.696063 1
+c 141.873228 0
+c 145.475591 1
+c 145.652756 0
+c 147.365354 1
+c 147.542520 0
+c 149.255118 1
+c 149.432283 0
+c 151.144882 1
+c 151.322047 0
+c 153.034646 1
+c 153.211811 0
+c 154.924409 1
+c 155.101575 0
+c 156.814173 1
+c 156.991339 0
+c 160.593701 1
+c 160.770866 0
+c 162.483465 1
+c 162.660630 0
+c 164.373228 1
+c 164.550394 0
+c 166.262992 1
+c 166.440157 0
+c 168.152756 1
+c 168.329921 0
+c 170.042520 1
+c 170.219685 0
+c 171.932283 1
+c 172.109449 0
+c 175.711811 1
+c 175.888976 0
+c 177.601575 1
+c 177.778740 0
+c 179.491339 1
+c 179.668504 0
+c 181.381102 1
+c 181.558268 0
+c 183.270866 1
+c 183.448031 0
+c 185.160630 1
+c 185.337795 0
+c 187.050394 1
+c 187.227559 0
+c 188.940157 1
+c 189.117323 0
+c 190.829921 1
+c 191.007087 0
+c 192.719685 1
+c 192.896850 0
+c 194.609449 1
+c 194.786614 0
+c 196.499213 1
+c 196.676378 0
+c 198.388976 1
+c 198.566142 0
+c 200.278740 1
+c 200.455906 0
+c 202.168504 1
+c 202.345669 0
+c 204.058268 1
+c 204.235433 0

Copied: branches/nexuiz-2.0/data/maps/desertfactory.bgs-maker.pl (from rev 6531, trunk/data/maps/desertfactory.bgs-maker.pl)
===================================================================
--- branches/nexuiz-2.0/data/maps/desertfactory.bgs-maker.pl	                        (rev 0)
+++ branches/nexuiz-2.0/data/maps/desertfactory.bgs-maker.pl	2009-04-19 11:12:15 UTC (rev 6532)
@@ -0,0 +1,77 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my $dt = 0.5;
+my $pattern = '';
+my $time = 0;
+my $staccato = 0.25;
+my @script = ();
+
+while(<DATA>)
+{
+	chomp;
+	my (@arg) = split /\s+/, $_;
+	if($arg[0] eq 'time')
+	{
+		$time = $arg[1];
+	}
+	elsif($arg[0] eq 'bpm')
+	{
+		$dt = 60.0 / $arg[1];
+	}
+	elsif($arg[0] eq 'pattern')
+	{
+		$pattern = $arg[1];
+	}
+	elsif($arg[0] eq 'range')
+	{
+		my ($begin, $end) = ($arg[1], $arg[2]);
+		my $n = $end - $begin;
+		for(0..($n - 1))
+		{
+			my $char = substr $pattern, ($_ % length $pattern), 1;
+			push @script, [$char, $time, 1], [$char, $time + $dt * (1 - $staccato), 0]
+				unless $char eq '_';
+			$time += $dt;
+		}
+	}
+}
+
+for(sort { $a->[0] cmp $b->[0] or $a->[1] <=> $b->[1] } @script)
+{
+	printf "%s %f %d\n", @$_;
+}
+
+__DATA__
+time           0.200
+bpm            254
+pattern        aaa_____aaa_____
+range          0 32
+pattern        aaa_b__caaa_bccc
+range          32 160
+pattern        aaa_b__caaa_b__c
+range          160 272
+pattern        aaa_b__caaa_b_bb
+range          272 288
+pattern        abc_c_c_c_c_c_c_
+range          288 352
+pattern        aaa_b__caaa_bccc
+range          352 480
+pattern        aaa_b__caaa_b__c
+range          480 592
+pattern        aaa_b__caaa_b_bb
+range          592 608
+pattern        aaa_b__caaa_b__c
+range          608 656
+pattern        aaa_b__caaa_b_bb
+range          656 672
+pattern        aaa_b__caaa_b__c
+range          672 720
+pattern        aaa_b__caaa_b_bb
+range          720 736
+pattern        aaa_b__caaa_b__c
+range          736 864
+pattern        a_______________
+range          864 865

Modified: branches/nexuiz-2.0/data/maps/desertfactory.bsp
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/maps/desertfactory.map
===================================================================
--- branches/nexuiz-2.0/data/maps/desertfactory.map	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/maps/desertfactory.map	2009-04-19 11:12:15 UTC (rev 6532)
@@ -11477,9 +11477,11 @@
 // entity 456
 {
 "classname" "func_pointparticles"
-"impulse" "4"
-"count" "1"
-"mdl" "smoking"
+"impulse" "1"
+"count" "5"
+"mdl" "smoking_smallemitter"
+"bgmscript" "c"
+"spawnflags" "2"
 // brush 0
 {
 ( 249 820 360 ) ( 249 788 360 ) ( 217 820 360 ) common/trigger 0 0 0 0.25 0.25 134217728 0 0
@@ -11493,9 +11495,11 @@
 // entity 457
 {
 "classname" "func_pointparticles"
-"impulse" "4"
-"count" "1"
+"impulse" "1"
+"count" "3"
 "mdl" "smoke_ring"
+"bgmscript" "a"
+"spawnflags" "2"
 // brush 0
 {
 ( 1668 1040 304 ) ( 1668 1008 304 ) ( 1636 1040 304 ) common/trigger 0 0 0 0.25 0.25 134217728 0 0
@@ -11512,8 +11516,10 @@
 "impulse" "1"
 "count" "1"
 "mdl" "TE_EXPLOSION"
-"targetname" "steamburst01"
+"targetname" "steam02_secret"
 "noise" "sound/desertfactory/steam_burst.wav"
+"bgmscript" "b"
+"spawnflags" "3"
 // brush 0
 {
 ( 1668 1040 300 ) ( 1668 1008 300 ) ( 1636 1040 300 ) common/trigger 0 0 0 0.25 0.25 134217728 0 0
@@ -11524,14 +11530,6 @@
 ( 1652 1007 312 ) ( 1652 1039 312 ) ( 1652 1007 344 ) common/trigger 0 0 0 0.25 0.25 134217728 0 0
 }
 }
-// entity 459
-{
-"classname" "trigger_multivibrator"
-"origin" "1654 1024 512"
-"wait" "2"
-"respawntime" "20"
-"target" "steamburst01"
-}
 // entity 460
 {
 "classname" "target_speaker"
@@ -11620,11 +11618,12 @@
 // entity 472
 {
 "classname" "func_pointparticles"
-"impulse" "4"
-"count" "1"
+"impulse" "1"
+"count" "3"
 "mdl" "smoke_ring"
-"spawnflags" "1"
+"spawnflags" "3"
 "targetname" "steam02_secret"
+"bgmscript" "a"
 // brush 0
 {
 ( 854 402 304 ) ( 854 370 304 ) ( 822 402 304 ) common/trigger 0 0 0 0.25 0.25 134217728 0 0
@@ -11641,8 +11640,10 @@
 "impulse" "1"
 "count" "1"
 "mdl" "TE_EXPLOSION"
-"targetname" "steamburst02"
+"targetname" "steam02_secret"
 "noise" "sound/desertfactory/steam_burst.wav"
+"bgmscript" "b"
+"spawnflags" "3"
 // brush 0
 {
 ( 856 400 300 ) ( 856 368 300 ) ( 824 400 300 ) common/trigger 0 0 0 0.25 0.25 134217728 0 0
@@ -11653,16 +11654,6 @@
 ( 840 367 312 ) ( 840 399 312 ) ( 840 367 344 ) common/trigger 0 0 0 0.25 0.25 134217728 0 0
 }
 }
-// entity 474
-{
-"classname" "trigger_multivibrator"
-"origin" "842 384 512"
-"target" "steamburst02"
-"wait" "2"
-"respawntime" "8"
-"targetname" "steam02_secret"
-"spawnflags" "1"
-}
 // entity 475
 {
 "classname" "trigger_multiple"

Modified: branches/nexuiz-2.0/data/qcsrc/client/Main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/Main.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/client/Main.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -775,6 +775,7 @@
 		case ENT_CLIENT_MAPVOTE: Ent_MapVote(); break;
 		case ENT_CLIENT_CLIENTDATA: Ent_ClientData(); break;
 		case ENT_CLIENT_RANDOMSEED: Ent_RandomSeed(); break;
+		case ENT_CLIENT_WALL: Ent_Wall(); break;
 		default:
 			error(strcat("unknown entity type in CSQC_Ent_Update: ", ftos(self.enttype), "\n"));
 			break;

Modified: branches/nexuiz-2.0/data/qcsrc/client/View.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/View.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/client/View.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -199,6 +199,7 @@
 float zoomscript_caught;
 float view_set;
 float camera_mode;
+string NextFrameCommand;
 void CSQC_UpdateView(float w, float h)
 {
 	entity e;
@@ -473,6 +474,12 @@
 			drawpic('0.5 0 0' * (vid_conwidth - wcross_size_x) + '0 0.5 0' * (vid_conheight - wcross_size_y), wcross_name, wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL);
 		}
 	}
+
+	if(NextFrameCommand)
+	{
+		localcmd("\n", NextFrameCommand, "\n");
+		NextFrameCommand = string_null;
+	}
 }
 
 void Sbar_Draw();

Copied: branches/nexuiz-2.0/data/qcsrc/client/bgmscript.qc (from rev 6531, trunk/data/qcsrc/client/bgmscript.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/bgmscript.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/client/bgmscript.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -0,0 +1,229 @@
+#define CONSTANT_SPEED_DECAY
+
+float bgmscriptbuf;
+float bgmscriptbufsize;
+float bgmscriptbufloaded;
+
+.float bgmscriptline;
+.float bgmscriptline0;
+.float bgmscriptvolume;
+.float bgmscripttime;
+.float bgmscriptstate;
+.float bgmscriptstatetime;
+
+float GetAttackDecaySustainAmplitude(float a, float d, float s, float t)
+{
+	// phase:
+	//   attack: from 0 to 1, in time a for a full length
+	//   decay: from 1 to s, in time d
+	//   sustain: s
+	
+	if(t < 0)
+		return 0;
+	
+	if(a)
+		if(t <= a)
+			return t / a;
+
+	if(d)
+		if(t <= a + d)
+			return ((t - a) / d) * (s - 1) + 1;
+
+	return s;
+}
+
+float GetReleaseAmplitude(float d, float s, float r, float t)
+{
+	float decayval, releaseval;
+
+	if(!r)
+		return 0;
+	
+	if(t > r)
+		return 0;
+	
+	releaseval = s * (1 - t / r);
+
+	if(t < -d)
+		return 1;
+
+	if(t < 0 && t >= -d)
+	{
+		// pre-time decay
+		// value is s at time  0
+		//          1 at time -d
+		decayval = ((t + d) / d) * (s - 1) + 1;
+		return max(decayval, releaseval);
+	}
+
+	return releaseval;
+}
+
+float GetAttackTime(float a, float amp)
+{
+	return amp * a;
+}
+
+float GetReleaseTime(float d, float s, float r, float amp)
+{
+	float decaytime, releasetime;
+
+	if(!s)
+		return 0;
+	
+	// if amp > s, we may be in the attack or in the prolonged decay curve
+	releasetime = (1 - amp / s) * r;
+
+	if(amp > s)
+	{
+		if(s == 1) // gracefully handle division by zero here
+			return 0;
+
+		// pre-time decay
+		// value is s at time  0
+		//          1 at time -d
+		decaytime = (amp - 1) / (s - 1) * d - d;
+		return max(decaytime, releasetime);
+	}
+
+	return releasetime;
+}
+
+void BGMScript_Init()
+{
+	string s;
+	float fh;
+	bgmscriptbuf = bgmscriptbufsize = 0;
+	bgmscriptbufloaded = 1;
+	s = strcat("maps/", mi_shortname, ".bgs");
+	fh = fopen(s, FILE_READ);
+	if(fh < 0)
+		return;
+	bgmscriptbuf = buf_create();
+	while((s = fgets(fh)))
+	{
+		bufstr_set(bgmscriptbuf, bgmscriptbufsize, s);
+		++bgmscriptbufsize;
+	}
+	fclose(fh);
+}
+
+void BGMScript_InitEntity(entity e)
+{
+	float l;
+	string m;
+	if(e.bgmscript != "")
+	{
+		if(!bgmscriptbufloaded)
+			BGMScript_Init();
+
+		float i;
+
+		m = strcat(e.bgmscript, " ");
+		l = strlen(m);
+
+		e.bgmscriptline0 = -1;
+		for(i = 0; i < bgmscriptbufsize; ++i)
+		{
+			if(substring(bufstr_get(bgmscriptbuf, i), 0, l) == m)
+				break;
+		}
+		e.bgmscriptline = e.bgmscriptline0 = i;
+		if(i >= bgmscriptbufsize)
+		{
+			print("ERROR: bgmscript does not define ", e.bgmscript, "\n");
+			e.bgmscript = "";
+		}
+	}
+}
+
+float GetCurrentAmplitude(entity e, float trel)
+{
+	if(e.bgmscriptstate)
+		return GetAttackDecaySustainAmplitude(e.bgmscriptattack, e.bgmscriptdecay, e.bgmscriptsustain, trel) * e.bgmscriptvolume;
+	else
+	{
+#ifdef CONSTANT_SPEED_DECAY
+		return GetReleaseAmplitude(e.bgmscriptdecay, e.bgmscriptsustain * e.bgmscriptvolume, e.bgmscriptrelease, trel);
+#else
+		return GetReleaseAmplitude(e.bgmscriptdecay, e.bgmscriptsustain, e.bgmscriptrelease, trel) * e.bgmscriptvolume;
+#endif
+	}
+}
+
+float GetTimeForAmplitude(entity e, float amp)
+{
+	if(e.bgmscriptstate)
+		return GetAttackTime(e.bgmscriptattack, amp / e.bgmscriptvolume);
+	else
+	{
+#ifdef CONSTANT_SPEED_DECAY
+		return GetReleaseTime(e.bgmscriptdecay, e.bgmscriptsustain * e.bgmscriptvolume, e.bgmscriptrelease, amp);
+#else
+		return GetReleaseTime(e.bgmscriptdecay, e.bgmscriptsustain, e.bgmscriptrelease, amp / e.bgmscriptvolume);
+#endif
+	}
+}
+
+float BGMScript(entity e)
+{
+	float t;
+	float amp, vel;
+
+	if(e.bgmscript == "")
+		return 1;
+	
+	if(cvar("bgmvolume") <= 0)
+		return -1;
+
+	e.just_toggled = FALSE;
+
+	t = gettime(GETTIME_CDTRACK);
+	if(t < 0)
+		return -1;
+
+	if(t < e.bgmscripttime)
+	{
+		//print("reset ", e.bgmscript, "\n");
+		amp = GetCurrentAmplitude(e, e.bgmscripttime - e.bgmscriptstatetime + drawframetime);
+
+		e.bgmscriptline = e.bgmscriptline0;
+		e.bgmscripttime = t;
+
+		// treat this as a stop event for all notes, to prevent sticking keys
+		e.bgmscriptstate = FALSE;
+		e.bgmscriptvolume = 1;
+		e.bgmscriptstatetime = t - GetTimeForAmplitude(e, amp);
+	}
+
+	// find the CURRENT line
+	for(;;)
+	{
+		tokenize_sane(bufstr_get(bgmscriptbuf, e.bgmscriptline));
+		if(stof(argv(1)) >= t || argv(0) != e.bgmscript)
+		{
+			e.bgmscripttime = t;
+			return GetCurrentAmplitude(e, t - e.bgmscriptstatetime);
+		}
+		else if(t >= stof(argv(1)))
+		{
+			e.bgmscriptline += 1;
+			e.bgmscripttime = stof(argv(1));
+
+			amp = GetCurrentAmplitude(e, e.bgmscripttime - e.bgmscriptstatetime);
+
+			// time code reached!
+			vel = stof(argv(2));
+			if(vel > 0)
+			{
+				e.just_toggled = e.bgmscriptstate = TRUE;
+				e.bgmscriptvolume = vel;
+			}
+			else
+				e.just_toggled = e.bgmscriptstate = FALSE;
+
+			e.bgmscriptstatetime = e.bgmscripttime - GetTimeForAmplitude(e, amp);
+		}
+	}
+}
+

Copied: branches/nexuiz-2.0/data/qcsrc/client/bgmscript.qh (from rev 6531, trunk/data/qcsrc/client/bgmscript.qh)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/bgmscript.qh	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/client/bgmscript.qh	2009-04-19 11:12:15 UTC (rev 6532)
@@ -0,0 +1,10 @@
+.string bgmscript;
+.float bgmscriptattack;
+.float bgmscriptdecay;
+.float bgmscriptsustain;
+.float bgmscriptrelease;
+
+.float just_toggled;
+
+void BGMScript_InitEntity(entity e);
+float BGMScript(entity e);

Modified: branches/nexuiz-2.0/data/qcsrc/client/casings.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/casings.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/client/casings.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -12,7 +12,7 @@
 	self.renderflags = 0;
 	self.alpha = bound(0, self.cnt - time, 1);
 
-	if(self.alpha == 0)
+	if(self.alpha < ALPHA_MIN_VISIBLE)
 		remove(self);
 	else
 		R_AddEntity(self);

Modified: branches/nexuiz-2.0/data/qcsrc/client/csqc_builtins.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/csqc_builtins.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/client/csqc_builtins.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -279,3 +279,5 @@
 entity(vector org, float rad) findradius = #22;
 
 string(float uselocaltime, string format, ...) strftime = #478;
+float(float timer) gettime = #519;
+#define GETTIME_CDTRACK 4

Modified: branches/nexuiz-2.0/data/qcsrc/client/gibs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/gibs.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/client/gibs.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -37,7 +37,7 @@
 	self.renderflags = 0;
 	self.alpha = bound(0, self.nextthink - time, 1);
 
-	if(self.alpha == 0)
+	if(self.alpha < ALPHA_MIN_VISIBLE)
 		remove(self);
 	else
 		R_AddEntity(self);

Modified: branches/nexuiz-2.0/data/qcsrc/client/interpolate.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/interpolate.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/client/interpolate.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -2,7 +2,7 @@
 .vector iorigin1, iorigin2;
 .vector ivelocity1, ivelocity2;
 .vector iforward1, iforward2;
-.vector iright1, iright2;
+.vector iup1, iup2;
 .float itime1, itime2;
 void InterpolateOrigin_Note()
 {
@@ -25,9 +25,9 @@
 	{
 		fixedmakevectors(self.angles);
 		self.iforward1 = self.iforward2;
-		self.iright1 = self.iright2;
+		self.iup1 = self.iup2;
 		self.iforward2 = v_forward;
-		self.iright2 = v_right;
+		self.iup2 = v_up;
 	}
 
 	if(self.iflags & IFLAG_VELOCITY)
@@ -59,7 +59,7 @@
 }
 void InterpolateOrigin_Do()
 {
-	vector forward, right;
+	vector forward, up;
 	if(self.itime1 && self.itime2 && self.itime1 != self.itime2)
 	{
 		float f;
@@ -68,8 +68,8 @@
 		if(self.iflags & IFLAG_ANGLES)
 		{
 			forward = (1 - f) * self.iforward1 + f * self.iforward2;
-			right = (1 - f) * self.iright1 + f * self.iright2;
-			self.angles = fixedvectoangles2(forward, right);
+			up = (1 - f) * self.iup1 + f * self.iup2;
+			self.angles = fixedvectoangles2(forward, up);
 		}
 		if(self.iflags & IFLAG_VELOCITY)
 			self.velocity = (1 - f) * self.ivelocity1 + f * self.ivelocity2;
@@ -79,7 +79,7 @@
 {
 	self.origin = self.iorigin2;
 	if(self.iflags & IFLAG_ANGLES)
-		self.angles = fixedvectoangles2(self.iforward2, self.iright2);
+		self.angles = fixedvectoangles2(self.iforward2, self.iup2);
 	if(self.iflags & IFLAG_VELOCITY)
 		self.velocity = self.ivelocity2;
 }

Modified: branches/nexuiz-2.0/data/qcsrc/client/main.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/main.qh	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/client/main.qh	2009-04-19 11:12:15 UTC (rev 6532)
@@ -151,3 +151,5 @@
 vector camera_direction;
 
 void centerprint(string strMessage);
+
+#define ALPHA_MIN_VISIBLE 0.003

Modified: branches/nexuiz-2.0/data/qcsrc/client/particles.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/particles.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/client/particles.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -42,12 +42,11 @@
 .vector velocity; // particle velocity
 .float waterlevel; // direction jitter
 .float count; // count multiplier
-.float glow_color; // palette color
 .float impulse; // density
 .string noise; // sound
 .float atten;
 .float volume;
-.float absolute;
+.float absolute; // 1 = count per second is absolute, 2 = only spawn at toggle
 .vector movedir; // trace direction
 
 void Draw_PointParticles()
@@ -58,7 +57,21 @@
 	vector o;
 	o = self.origin;
 	sz = self.maxs - self.mins;
-	n = self.impulse * drawframetime;
+	n = BGMScript(self);
+	if(self.absolute == 2)
+	{
+		if(n >= 0)
+			n = self.just_toggled ? self.impulse : 0;
+		else
+			n = self.impulse * drawframetime;
+	}
+	else
+	{
+		n *= self.impulse * drawframetime;
+		if(self.just_toggled)
+			if(n < 1)
+				n = 1;
+	}
 	if(n == 0)
 		return;
 	fail = 0;
@@ -74,15 +87,18 @@
 			{
 				traceline(p, p + normalize(self.movedir) * 4096, 0, world);
 				p = trace_endpos;
-				pointparticles(self.cnt, p, trace_plane_normal * vlen(self.movedir) + self.velocity + randomvec() * self.waterlevel, self.count, self.glow_color);
+				pointparticles(self.cnt, p, trace_plane_normal * vlen(self.movedir) + self.velocity + randomvec() * self.waterlevel, self.count);
 			}
 			else
-				pointparticles(self.cnt, p, self.velocity + randomvec() * self.waterlevel, self.count, self.glow_color);
+			{
+				pointparticles(self.cnt, p, self.velocity + randomvec() * self.waterlevel, self.count);
+			}
 			if(self.noise != "")
 			{
 				self.origin = p;
 				sound(self, CHAN_AUTO, self.noise, VOL_BASE * self.volume, self.atten);
 			}
+			self.just_toggled = 0;
 		}
 		else if(self.absolute)
 		{
@@ -98,16 +114,22 @@
 	if(self.noise)
 		strunzone(self.noise);
 	self.noise = string_null;
+	if(self.bgmscript)
+		strunzone(self.bgmscript);
+	self.bgmscript = string_null;
 }
 
 void Ent_PointParticles()
 {
-	float f;
+	float f, i;
 	vector v;
 	f = ReadByte();
 	if(f & 2)
 	{
-		self.impulse = ReadCoord(); // density (<0: point, >0: volume)
+		i = ReadCoord(); // density (<0: point, >0: volume)
+		if(i && !self.impulse && self.cnt) // self.cnt check is so it only happens if the ent already existed
+			self.just_toggled = 1;
+		self.impulse = i;
 	}
 	if(f & 4)
 	{
@@ -118,38 +140,70 @@
 	if(f & 1)
 	{
 		self.modelindex = ReadShort();
-		if(self.modelindex)
+		if(f & 0x80)
 		{
-			self.mins_x = ReadCoord();
-			self.mins_y = ReadCoord();
-			self.mins_z = ReadCoord();
-			self.maxs_x = ReadCoord();
-			self.maxs_y = ReadCoord();
-			self.maxs_z = ReadCoord();
+			if(self.modelindex)
+			{
+				self.mins_x = ReadCoord();
+				self.mins_y = ReadCoord();
+				self.mins_z = ReadCoord();
+				self.maxs_x = ReadCoord();
+				self.maxs_y = ReadCoord();
+				self.maxs_z = ReadCoord();
+			}
+			else
+			{
+				self.mins    = '0 0 0';
+				self.maxs_x = ReadCoord();
+				self.maxs_y = ReadCoord();
+				self.maxs_z = ReadCoord();
+			}
 		}
 		else
 		{
-			self.mins    = '0 0 0';
-			self.maxs_x = ReadCoord();
-			self.maxs_y = ReadCoord();
-			self.maxs_z = ReadCoord();
+			self.mins = self.maxs = '0 0 0';
 		}
 
 		self.cnt = ReadShort(); // effect number
 
-		self.velocity = decompressShortVector(ReadShort());
-		self.movedir = decompressShortVector(ReadShort());
-		self.waterlevel = ReadCoord();
-		self.count = ReadCoord();
-		self.glow_color = ReadByte();
+		if(f & 0x20)
+		{
+			self.velocity = decompressShortVector(ReadShort());
+			self.movedir = decompressShortVector(ReadShort());
+		}
+		else
+		{
+			self.velocity = self.movedir = '0 0 0';
+		}
+		if(f & 0x40)
+		{
+			self.waterlevel = ReadShort() / 16.0;
+			self.count = ReadByte() / 16.0;
+		}
+		else
+		{
+			self.waterlevel = 0;
+			self.count = 1;
+		}
 		if(self.noise)
 			strunzone(self.noise);
+		if(self.bgmscript)
+			strunzone(self.bgmscript);
 		self.noise = strzone(ReadString());
 		if(self.noise != "")
 		{
 			self.atten = ReadByte() / 64.0;
 			self.volume = ReadByte() / 255.0;
 		}
+		self.bgmscript = strzone(ReadString());
+		if(self.bgmscript != "")
+		{
+			self.bgmscriptattack = ReadByte() / 64.0;
+			self.bgmscriptdecay = ReadByte() / 64.0;
+			self.bgmscriptsustain = ReadByte() / 255.0;
+			self.bgmscriptrelease = ReadByte() / 64.0;
+		}
+		BGMScript_InitEntity(self);
 	}
 
 	if(f & 2)
@@ -162,6 +216,9 @@
 		}
 	}
 
+	if(f & 0x10)
+		self.absolute = 2;
+
 	setorigin(self, self.origin);
 	setsize(self, self.mins, self.maxs);
 	self.solid = SOLID_NOT;
@@ -169,6 +226,7 @@
 	self.entremove = Ent_PointParticles_Remove;
 }
 
+.float glow_color; // palette index
 void Draw_Rain()
 {
     te_particlerain(self.origin + self.mins, self.origin + self.maxs, self.velocity, self.count * drawframetime, self.glow_color);

Modified: branches/nexuiz-2.0/data/qcsrc/client/progs.src
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/progs.src	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/client/progs.src	2009-04-19 11:12:15 UTC (rev 6532)
@@ -15,6 +15,7 @@
 waypointsprites.qh
 movetypes.qh
 prandom.qh
+bgmscript.qh
 
 main.qh
 
@@ -35,6 +36,7 @@
 damage.qc
 casings.qc
 effects.qc
+wall.qc
 
 Main.qc
 View.qc
@@ -43,6 +45,7 @@
 waypointsprites.qc
 movetypes.qc
 prandom.qc
+bgmscript.qc
 
 ../common/util.qc
 ../common/gamecommand.qc

Copied: branches/nexuiz-2.0/data/qcsrc/client/wall.qc (from rev 6531, trunk/data/qcsrc/client/wall.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/wall.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/client/wall.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -0,0 +1,108 @@
+.float lip;
+
+void Ent_Wall_Draw()
+{
+	float f;
+	vector save;
+
+	InterpolateOrigin_Do();
+
+	save = self.origin;
+	f = BGMScript(self);
+	if(f >= 0)
+	{
+		if(self.lip < 0) // < 0: alpha goes from 1 to 1-|lip| when toggled (toggling subtracts lip)
+			self.alpha = 1 + self.lip * f;
+		else // > 0: alpha goes from 1-|lip| to 1 when toggled (toggling adds lip)
+			self.alpha = 1 - self.lip * (1 - f);
+		self.origin = self.origin + self.movedir * f;
+	}
+	else
+		self.alpha = 1;
+
+	if(self.alpha >= ALPHA_MIN_VISIBLE)
+		R_AddEntity(self);
+
+	self.origin = save;
+}
+
+void Ent_Wall_Remove()
+{
+	if(self.bgmscript)
+		strunzone(self.bgmscript);
+	self.bgmscript = string_null;
+}
+
+void Ent_Wall()
+{
+	float f;
+	InterpolateOrigin_Undo();
+	self.iflags = IFLAG_ANGLES;
+
+	f = ReadByte();
+
+	if(f & 1)
+	{
+		if(f & 0x40)
+			self.colormap = ReadShort();
+		else
+			self.colormap = 0;
+	}
+
+	if(f & 2)
+	{
+		self.origin_x = ReadCoord();
+		self.origin_y = ReadCoord();
+		self.origin_z = ReadCoord();
+	}
+
+	if(f & 4)
+	{
+		if(f & 0x10)
+		{
+			self.angles_x = ReadAngle();
+			self.angles_y = ReadAngle();
+			self.angles_z = ReadAngle();
+		}
+		else
+			self.angles = '0 0 0';
+	}
+
+	if(f & 8)
+	{
+		self.modelindex = ReadShort();
+		self.solid = ReadByte();
+		self.scale = ReadByte() / 16.0;
+		if(f & 0x20)
+		{
+			self.mins_x = ReadCoord();
+			self.mins_y = ReadCoord();
+			self.mins_z = ReadCoord();
+			self.maxs_x = ReadCoord();
+			self.maxs_y = ReadCoord();
+			self.maxs_z = ReadCoord();
+		}
+		else
+			self.mins = self.maxs = '0 0 0';
+		if(self.bgmscript)
+			strunzone(self.bgmscript);
+		self.bgmscript = strzone(ReadString());
+		if(self.bgmscript != "")
+		{
+			self.bgmscriptattack = ReadByte() / 64.0;
+			self.bgmscriptdecay = ReadByte() / 64.0;
+			self.bgmscriptsustain = ReadByte() / 255.0;
+			self.bgmscriptrelease = ReadByte() / 64.0;
+			self.movedir_x = ReadCoord();
+			self.movedir_y = ReadCoord();
+			self.movedir_z = ReadCoord();
+			self.lip = ReadByte() / 255.0;
+		}
+		BGMScript_InitEntity(self);
+	}
+
+	InterpolateOrigin_Note();
+
+	self.entremove = Ent_Wall_Remove;
+	self.draw = Ent_Wall_Draw;
+}

Modified: branches/nexuiz-2.0/data/qcsrc/common/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2009-04-19 11:12:15 UTC (rev 6532)
@@ -76,6 +76,7 @@
 const float ENT_CLIENT_MAPVOTE = 17;
 const float ENT_CLIENT_CLIENTDATA = 18;
 const float ENT_CLIENT_RANDOMSEED = 19;
+const float ENT_CLIENT_WALL = 20;
 
 const float SPRITERULE_DEFAULT = 0;
 const float SPRITERULE_TEAMPLAY = 1;

Modified: branches/nexuiz-2.0/data/qcsrc/menu/menu.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/menu.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/menu/menu.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -451,7 +451,10 @@
 		if(par.focused)
 			par.setFocus(par, wnd);
 	}
+}
 
+void m_setpointerfocus(entity wnd)
+{
 	if(wnd.instanceOfContainer)
 	{
 		entity focus = wnd.preferredFocusedGrandChild(wnd);
@@ -488,6 +491,7 @@
 		{
 			m_hide();
 			m_activate_window(e);
+			m_setpointerfocus(e);
 			m_display();
 		}
 	}

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -125,15 +125,16 @@
 		float good, found;
 		ent = find(world, targetname, spot.target);
 		while(ent) {
-			found = 1;
 			if(ent.classname == "target_objective")
 			{
+				found = 1;
 				if(ent.health < 0 || ent.health >= ASSAULT_VALUE_INACTIVE)
 					return -1;
 				good = 1;
 			}
 			else if(ent.classname == "trigger_race_checkpoint")
 			{
+				found = 1;
 				if(self.classname == "player") // spectators may spawn everywhere
 				{
 					if(g_race_qualifying)
@@ -158,9 +159,6 @@
 				}
 				good = 1;
 			}
-			else
-			{
-			}
 			ent = find(ent, targetname, spot.target);
 		}
 
@@ -1315,7 +1313,7 @@
 		ctf_clientconnect();
 	}*/
 
-	if(teams_matter)
+	if(teams_matter || sv_cheats)
 		attach_entcs();
 
 	bot_relinkplayerlist();
@@ -1372,7 +1370,7 @@
 
 	bot_clientdisconnect();
 
-	if(teams_matter)
+	if(self.entcs)
 		detach_entcs();
 	
 	if(cvar("sv_eventlog"))

Modified: branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/server/clientcommands.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -145,14 +145,14 @@
 	} else if(argv(0) == "reportcvar") { // old system
 		if(substring(argv(2), 0, 1) == "$") // undefined cvar: use the default value on the server then
 		{
-			s = strcat(substring(s, argv_start_index(0), argv_end_index(1)), " \"", cvar_defstring(argv(1)), "\"");
+			s = strcat(substring(s, argv_start_index(0), argv_end_index(1) - argv_start_index(0)), " \"", cvar_defstring(argv(1)), "\"");
 			tokens = tokenize_sane(s);
 		}
 		GetCvars(1);
 	} else if(argv(0) == "sentcvar") { // new system
 		if(tokens == 2) // undefined cvar: use the default value on the server then
 		{
-			s = strcat(substring(s, argv_start_index(0), argv_end_index(1)), " \"", cvar_defstring(argv(1)), "\"");
+			s = strcat(substring(s, argv_start_index(0), argv_end_index(1) - argv_start_index(0)), " \"", cvar_defstring(argv(1)), "\"");
 			tokens = tokenize_sane(s);
 		}
 		GetCvars(1);

Modified: branches/nexuiz-2.0/data/qcsrc/server/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/server/constants.qh	2009-04-19 11:12:15 UTC (rev 6532)
@@ -1,4 +1,4 @@
-string CVAR_CHECK_DEFAULT = "779a1c2f508f65a13bad23ce1758beb8";
+string CVAR_CHECK_DEFAULT = "cfaa3e6ce44a23e5563db2d3ee7c53e4";
 string CVAR_CHECK_WEAPONS = "00219e78f5d78d7d8a1600c4f4c73aa5";
 
 float	FALSE					= 0;

Modified: branches/nexuiz-2.0/data/qcsrc/server/ent_cs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/ent_cs.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/server/ent_cs.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -32,7 +32,8 @@
 		return FALSE;
 	if(other.classname == "player")
 		if(o.team != other.team)
-			return FALSE;
+			if(!sv_cheats)
+				return FALSE;
 	return TRUE;
 }
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/extensions.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/extensions.qh	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/server/extensions.qh	2009-04-19 11:12:15 UTC (rev 6532)
@@ -776,6 +776,14 @@
 //description:
 //some timers to query...
 
+//DP_QC_GETTIME_CDTRACK
+//idea: div0
+//darkplaces implementation: div0
+//constant definitions:
+float GETTIME_CDTRACK = 4;
+//description:
+//returns the playing time of the current cdtrack when passed to gettime()
+
 //DP_QC_MINMAXBOUND
 //idea: LordHavoc
 //darkplaces implementation: LordHavoc

Copied: branches/nexuiz-2.0/data/qcsrc/server/g_models.qc (from rev 6531, trunk/data/qcsrc/server/g_models.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_models.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_models.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -0,0 +1,147 @@
+.float modelscale;
+
+void g_model_setcolormaptoactivator (void)
+{
+	if(teams_matter)
+	{
+		if(activator.team)
+			self.colormap = (activator.team - 1) * 0x11;
+		else
+			self.colormap = 0x00;
+	}
+	else
+		self.colormap = floor(random() * 256);
+	self.colormap |= 1024; // RENDER_COLORMAPPED
+}
+
+void g_clientmodel_setcolormaptoactivator (void)
+{
+	g_model_setcolormaptoactivator();
+	self.SendFlags |= 1;
+}
+
+void g_model_dropbyspawnflags()
+{
+	if(self.spawnflags & 3 == 1) // ALIGN_ORIGIN
+	{
+		traceline(self.origin, self.origin - '0 0 4096', MOVE_NOMONSTERS, self);
+		setorigin(self, trace_endpos);
+	}
+	else if(self.spawnflags & 3 == 2) // ALIGN_BOTTOM
+	{
+		tracebox(self.origin, self.mins, self.maxs, self.origin - '0 0 4096', MOVE_NOMONSTERS, self);
+		setorigin(self, trace_endpos);
+	}
+	else if(self.spawnflags & 3 == 3) // ALIGN_ORIGIN | ALIGN_BOTTOM
+	{
+		traceline(self.origin, self.origin - '0 0 4096', MOVE_NOMONSTERS, self);
+		setorigin(self, trace_endpos - '0 0 1' * self.mins_z);
+	}
+}
+
+void g_clientmodel_dropbyspawnflags()
+{
+	vector o0;
+	o0 = self.origin;
+	g_model_dropbyspawnflags();
+	if(self.origin != o0)
+		self.SendFlags |= 2;
+}
+
+float g_clientmodel_genericsendentity (entity to, float sf)
+{
+	sf = sf & 0x0F;
+	if(self.angles != '0 0 0')
+		sf |= 0x10;
+	if(self.solid && (self.mins != '0 0 0' || self.maxs != '0 0 0'))
+		sf |= 0x20;
+	if(self.colormap != 0)
+		sf |= 0x40;
+	
+	WriteByte(MSG_ENTITY, ENT_CLIENT_WALL);
+	WriteByte(MSG_ENTITY, sf);
+
+	if(sf & 1)
+	{
+		if(sf & 0x40)
+			WriteShort(MSG_ENTITY, self.colormap);
+	}
+
+	if(sf & 2)
+	{
+		WriteCoord(MSG_ENTITY, self.origin_x);
+		WriteCoord(MSG_ENTITY, self.origin_y);
+		WriteCoord(MSG_ENTITY, self.origin_z);
+	}
+
+	if(sf & 4)
+	{
+		if(sf & 0x10)
+		{
+			WriteAngle(MSG_ENTITY, self.angles_x);
+			WriteAngle(MSG_ENTITY, self.angles_y);
+			WriteAngle(MSG_ENTITY, self.angles_z);
+		}
+	}
+
+	if(sf & 8)
+	{
+		WriteShort(MSG_ENTITY, self.modelindex);
+		WriteByte(MSG_ENTITY, self.solid);
+		WriteByte(MSG_ENTITY, floor(self.scale * 16));
+		if(sf & 0x20)
+		{
+			WriteCoord(MSG_ENTITY, self.mins_x);
+			WriteCoord(MSG_ENTITY, self.mins_y);
+			WriteCoord(MSG_ENTITY, self.mins_z);
+			WriteCoord(MSG_ENTITY, self.maxs_x);
+			WriteCoord(MSG_ENTITY, self.maxs_y);
+			WriteCoord(MSG_ENTITY, self.maxs_z);
+		}
+		WriteString(MSG_ENTITY, self.bgmscript);
+		if(self.bgmscript != "")
+		{
+			WriteByte(MSG_ENTITY, floor(self.bgmscriptattack * 64));
+			WriteByte(MSG_ENTITY, floor(self.bgmscriptdecay * 64));
+			WriteByte(MSG_ENTITY, floor(self.bgmscriptsustain * 255));
+			WriteByte(MSG_ENTITY, floor(self.bgmscriptrelease * 64));
+			WriteCoord(MSG_ENTITY, self.movedir_x);
+			WriteCoord(MSG_ENTITY, self.movedir_y);
+			WriteCoord(MSG_ENTITY, self.movedir_z);
+			WriteByte(MSG_ENTITY, floor(self.lip * 255));
+		}
+	}
+
+	return TRUE;
+}
+
+
+#define G_MODEL_INIT(sol) \
+	SetBrushEntityModel(); \
+	if(!self.scale) self.scale = self.modelscale; \
+	self.use = g_model_setcolormaptoactivator; \
+	InitializeEntity(self, g_model_dropbyspawnflags, INITPRIO_DROPTOFLOOR); \
+	if(!self.solid) self.solid = (sol); else if(self.solid < 0) self.solid = SOLID_NOT;
+
+#define G_CLIENTMODEL_INIT(sol) \
+	SetBrushEntityModelNoLOD(); \
+	if(!self.scale) self.scale = self.modelscale; \
+	self.use = g_clientmodel_setcolormaptoactivator; \
+	InitializeEntity(self, g_clientmodel_dropbyspawnflags, INITPRIO_DROPTOFLOOR); \
+	if(!self.solid) self.solid = (sol); else if(self.solid < 0) self.solid = SOLID_NOT; \
+	if(!self.bgmscriptsustain) self.bgmscriptsustain = 1; else if(self.bgmscriptsustain < 0) self.bgmscriptsustain = 0; \
+	Net_LinkEntity(self, TRUE, 0, g_clientmodel_genericsendentity);
+
+// non-solid model entities:
+void spawnfunc_misc_gamemodel()         { G_MODEL_INIT      (SOLID_NOT) } // model entity
+void spawnfunc_misc_clientmodel()       { G_CLIENTMODEL_INIT(SOLID_NOT) } // model entity
+void spawnfunc_misc_models()            { G_MODEL_INIT      (SOLID_NOT) } // DEPRECATED old compat entity with confusing name, do not use
+
+// non-solid brush entities:
+void spawnfunc_func_illusionary()       { G_MODEL_INIT      (SOLID_NOT) } // Q1 name (WARNING: MISPREDICTED)
+void spawnfunc_func_clientillusionary() { G_CLIENTMODEL_INIT(SOLID_NOT) } // brush entity
+void spawnfunc_func_static()            { G_MODEL_INIT      (SOLID_NOT) } // DEPRECATED old alias name from some other game
+
+// solid brush entities
+void spawnfunc_func_wall()              { G_MODEL_INIT      (SOLID_BSP) } // Q1 name
+void spawnfunc_func_clientwall()        { G_CLIENTMODEL_INIT(SOLID_BSP) } // brush entity (WARNING: MISPREDICTED)

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_subs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_subs.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_subs.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -669,6 +669,20 @@
 		setsize(self, self.mins, self.maxs);
 }
 
+void SetBrushEntityModelNoLOD()
+{
+ 	if(self.model != "")
+ 	{
+ 		precache_model(self.model);
+ 		setmodel(self, self.model); // no precision needed
+ 	}
+	setorigin(self, self.origin);
+	if(self.scale)
+		setsize(self, self.mins * self.scale, self.maxs * self.scale);
+	else
+		setsize(self, self.mins, self.maxs);
+}
+
 /*
 ================
 InitTrigger
@@ -681,15 +695,8 @@
 		self.movedir = normalize(self.movedir);
 	else
 	{
-		if (self.angles == '0 -1 0')
-			self.movedir = '0 0 1';
-		else if (self.angles == '0 -2 0')
-			self.movedir = '0 0 -1';
-		else
-		{
-			makevectors (self.angles);
-			self.movedir = v_forward;
-		}
+		makevectors (self.angles);
+		self.movedir = v_forward;
 	}
 
 	self.angles = '0 0 0';

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -554,9 +554,26 @@
 	self.effects = EF_STARDUST;
 }
 
+.string bgmscript;
+.float bgmscriptattack;
+.float bgmscriptdecay;
+.float bgmscriptsustain;
+.float bgmscriptrelease;
 float pointparticles_SendEntity(entity to, float fl)
 {
 	WriteByte(MSG_ENTITY, ENT_CLIENT_POINTPARTICLES);
+
+	// optional features to save space
+	fl = fl & 0x0F;
+	if(self.spawnflags & 2)
+		fl |= 0x10; // absolute count on toggle-on
+	if(self.movedir != '0 0 0' || self.velocity != '0 0 0')
+		fl |= 0x20; // 4 bytes - saves CPU
+	if(self.waterlevel || self.count != 1)
+		fl |= 0x40; // 4 bytes - obscure features almost never used
+	if(self.mins != '0 0 0' || self.maxs != '0 0 0')
+		fl |= 0x80; // 14 bytes - saves lots of space
+
 	WriteByte(MSG_ENTITY, fl);
 	if(fl & 2)
 	{
@@ -576,32 +593,51 @@
 		if(self.model != "null")
 		{
 			WriteShort(MSG_ENTITY, self.modelindex);
-			WriteCoord(MSG_ENTITY, self.mins_x);
-			WriteCoord(MSG_ENTITY, self.mins_y);
-			WriteCoord(MSG_ENTITY, self.mins_z);
-			WriteCoord(MSG_ENTITY, self.maxs_x);
-			WriteCoord(MSG_ENTITY, self.maxs_y);
-			WriteCoord(MSG_ENTITY, self.maxs_z);
+			if(fl & 0x80)
+			{
+				WriteCoord(MSG_ENTITY, self.mins_x);
+				WriteCoord(MSG_ENTITY, self.mins_y);
+				WriteCoord(MSG_ENTITY, self.mins_z);
+				WriteCoord(MSG_ENTITY, self.maxs_x);
+				WriteCoord(MSG_ENTITY, self.maxs_y);
+				WriteCoord(MSG_ENTITY, self.maxs_z);
+			}
 		}
 		else
 		{
 			WriteShort(MSG_ENTITY, 0);
-			WriteCoord(MSG_ENTITY, self.maxs_x);
-			WriteCoord(MSG_ENTITY, self.maxs_y);
-			WriteCoord(MSG_ENTITY, self.maxs_z);
+			if(fl & 0x80)
+			{
+				WriteCoord(MSG_ENTITY, self.maxs_x);
+				WriteCoord(MSG_ENTITY, self.maxs_y);
+				WriteCoord(MSG_ENTITY, self.maxs_z);
+			}
 		}
 		WriteShort(MSG_ENTITY, self.cnt);
-		WriteShort(MSG_ENTITY, compressShortVector(self.velocity));
-		WriteShort(MSG_ENTITY, compressShortVector(self.movedir));
-		WriteCoord(MSG_ENTITY, self.waterlevel);
-		WriteCoord(MSG_ENTITY, self.count);
-		WriteByte(MSG_ENTITY, self.glow_color);
+		if(fl & 0x20)
+		{
+			WriteShort(MSG_ENTITY, compressShortVector(self.velocity));
+			WriteShort(MSG_ENTITY, compressShortVector(self.movedir));
+		}
+		if(fl & 0x40)
+		{
+			WriteShort(MSG_ENTITY, self.waterlevel * 16.0);
+			WriteByte(MSG_ENTITY, self.count * 16.0);
+		}
 		WriteString(MSG_ENTITY, self.noise);
 		if(self.noise != "")
 		{
 			WriteByte(MSG_ENTITY, floor(self.atten * 64));
 			WriteByte(MSG_ENTITY, floor(self.volume * 255));
 		}
+		WriteString(MSG_ENTITY, self.bgmscript);
+		if(self.bgmscript != "")
+		{
+			WriteByte(MSG_ENTITY, floor(self.bgmscriptattack * 64));
+			WriteByte(MSG_ENTITY, floor(self.bgmscriptdecay * 64));
+			WriteByte(MSG_ENTITY, floor(self.bgmscriptsustain * 255));
+			WriteByte(MSG_ENTITY, floor(self.bgmscriptrelease * 64));
+		}
 	}
 	return 1;
 }
@@ -636,6 +672,11 @@
 		setmodel(self, self.model);
 	if(self.noise != "")
 		precache_sound (self.noise);
+	
+	if(!self.bgmscriptsustain)
+		self.bgmscriptsustain = 1;
+	else if(self.bgmscriptsustain < 0)
+		self.bgmscriptsustain = 0;
 
 	if(!self.atten)
 		self.atten = ATTN_NORM;
@@ -643,6 +684,10 @@
 		self.atten = 0;
 	if(!self.volume)
 		self.volume = 1;
+	if(!self.count)
+		self.count = 1;
+	if(!self.impulse)
+		self.impulse = 1;
 
 	if(!self.modelindex)
 	{

Modified: branches/nexuiz-2.0/data/qcsrc/server/gamecommand.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/gamecommand.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/server/gamecommand.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -900,7 +900,9 @@
 				if(trace_startsolid)
 				{
 					rint(42); // do an engine breakpoint on VM_rint so you can get the trace that errnoeously returns startsolid
+					tracebox(start, PL_MIN, PL_MAX, end, MOVE_NOMONSTERS, world);
 					tracebox(p, PL_MIN, PL_MAX, p, MOVE_NOMONSTERS, world);
+
 					tracebox(p, PL_MIN + '0.1 0.1 0.1', PL_MAX - '0.1 0.1 0.1', p, MOVE_NOMONSTERS, world);
 					if(trace_startsolid)
 						error(strcat("trace_endpos much in solid when tracing from ", vtos(start), " to ", vtos(end), " endpos ", vtos(trace_endpos), "\n"));

Modified: branches/nexuiz-2.0/data/qcsrc/server/progs.src
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/progs.src	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/server/progs.src	2009-04-19 11:12:15 UTC (rev 6532)
@@ -83,6 +83,7 @@
 sv_stats.qc
 
 g_triggers.qc
+g_models.qc
 
 cl_weaponsystem.qc
 w_common.qc

Modified: branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -214,6 +214,12 @@
 		return;
 	}
 
+	// support special -1 and -2 angle from radiant
+	if (self.angles == '0 -1 0')
+		self.angles = '-90 0 0';
+	else if (self.angles == '0 -2 0')
+		self.angles = '+90 0 0';
+
 	if(self.originjitter_x != 0)
 		self.origin_x = self.origin_x + (random() * 2 - 1) * self.originjitter_x;
 	if(self.originjitter_y != 0)

Modified: branches/nexuiz-2.0/data/qcsrc/server/t_items.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2009-04-19 11:12:15 UTC (rev 6532)
@@ -989,76 +989,6 @@
 // compatibility:
 void spawnfunc_item_quad (void) {self.classname = "item_strength";spawnfunc_item_strength();}
 
-void spawnfunc_misc_models (void)
-{
-	// exists as alias name for 2.4.2 compat
-	SetBrushEntityModel();
-}
-
-void spawnfunc_func_static (void)
-{
-	// exists as alias name for having it with brushes
-	SetBrushEntityModel();
-}
-
-void func_wall_use (void)
-{
-	if(teams_matter)
-	{
-		if(activator.team)
-			self.colormap = (activator.team - 1) * 0x11;
-		else
-			self.colormap = 0x00;
-	}
-	else
-		self.colormap = floor(random() * 256);
-	self.colormap |= 1024; // RENDER_COLORMAPPED
-}
-
-void spawnfunc_func_wall (void)
-{
-	SetBrushEntityModel();
-	if(!self.solid)
-		self.solid = SOLID_BSP;
-	self.use = func_wall_use;
-}
-
-void spawnfunc_func_illusionary (void)
-{
-	SetBrushEntityModel();
-	self.use = func_wall_use;
-}
-
-void gamemodel_drop()
-{
-	if(self.spawnflags & 3 == 1) // ALIGN_ORIGIN
-	{
-		traceline(self.origin, self.origin - '0 0 4096', MOVE_NOMONSTERS, self);
-		setorigin(self, trace_endpos);
-	}
-	else if(self.spawnflags & 3 == 2) // ALIGN_BOTTOM
-	{
-		tracebox(self.origin, self.mins, self.maxs, self.origin - '0 0 4096', MOVE_NOMONSTERS, self);
-		setorigin(self, trace_endpos);
-	}
-	else if(self.spawnflags & 3 == 3) // ALIGN_ORIGIN | ALIGN_BOTTOM
-	{
-		traceline(self.origin, self.origin - '0 0 4096', MOVE_NOMONSTERS, self);
-		setorigin(self, trace_endpos - '0 0 1' * self.mins_z);
-	}
-}
-
-.float modelscale;
-void spawnfunc_misc_gamemodel (void)
-{
-	if(!self.scale)
-		self.scale = self.modelscale;
-	SetBrushEntityModel();
-	self.use = func_wall_use;
-
-	InitializeEntity(self, gamemodel_drop, INITPRIO_DROPTOFLOOR);
-}
-
 float target_item_func_set(float a, float b)
 {
 	if(b == 0)

Modified: branches/nexuiz-2.0/data/scripts/entities.def
===================================================================
--- branches/nexuiz-2.0/data/scripts/entities.def	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/data/scripts/entities.def	2009-04-19 11:12:15 UTC (rev 6532)
@@ -73,7 +73,7 @@
 
 /*QUAKED func_door (0 .5 .8) ? START_OPEN - DOOR_DONT_LINK - - TOGGLE
 Normal sliding door entity. By default, the door will activate when player walks close to it or when damage is inflicted to it.
-If DOOR_DONT_LINK is not set, the door will be linked with all doors it touches.
+If DOOR_DONT_LINK is not set, the door will be linked with all doors it touches. Note however that for linked doors to work properly, it is necessary that ALL linked doors have SOME volume of common area (that is, there must be a point that is part of ALL doors).
 -------- KEYS --------
 message: is printed when the door is touched if it is a trigger door and it hasn't been fired yet, or death message if dmg is set
 message2: death message when someone gets pushed into this (default: "was thrown into a world of hurt by"). The # character is replaced by the attacker name if present (and it instead does not get appended to the end)
@@ -582,7 +582,7 @@
 */
 
 /*QUAKED misc_laser (.5 .5 .5) (-8 -8 -8) (8 8 8) START_ON FINITE
-Laser beam emitter
+Laser beam emitter. Note that for the laser to be deadly, it has to start OUTSIDE the player's collision box. To ensure this, you may want to put this entity inside the walls (or directly on their surface), or cover it with a playerclip brush.
 -------- KEYS --------
 target: target_position the laser targets (may be another entity, preferably target_position, possibly controlled by misc_follow)
 mdl: name of particle effect for the beam end point (see effectinfo.txt; default is laser_deadly if dmg is set, and none if not)
@@ -647,18 +647,13 @@
 anglesjitter: a vector in the order "pitch yaw roll" describing a random angles change on this entity on initial spawn. The value 180 180 180 makes the angles entirely random and uniformly distributed (among euler angles). This corresponds to the "angles" field. Works on any non-q3map2-only entity.
 anglejitter: a float describing a random yaw angle change on this entity on initial spawn. The value 180 makes the yaw angle entirely random (maybe good for items). This corresponds to the "angle" field. Works on any non-q3map2-only entity.
 gametypefilter: either a + sign and a comma separated list of game types or the aliases "teams" and "noteams" to ONLY show the entity in the listed game types, or a - sign and a comma separated list of game types or the aliases "teams" and "noteams" to NOT show the entity in the listed game types. The syntax is the same as in sbar_columns_set strings. Works on any non-q3map2-only entity.
--------- Q3MAP2 KEYS --------
-_frame: frame of model to include (set equal to frame if _castshadows is set)
-_castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
-targetname: if targeted by a misc_model, its brushes get inserted into this
-_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
 -------- SPAWNFLAGS --------
 ALIGN_ORIGN: align the origin to the surface below the model
 ALIGN_BOTTOM: align the bottom of the model to the surface below it
 */
 
 /*QUAKED func_illusionary (0 .5 .8) ? 
-NOTE: THIS ENTITY IS BROKEN REGARDING CLIENT AND PROJECTILE PREDICTION. DO NOT USE IT. USE NONSOLID SHADERS INSTEAD.
+NOTE: THIS ENTITY IS BROKEN REGARDING CLIENT AND PROJECTILE PREDICTION. DO NOT USE IT. USE NONSOLID SHADERS OR FUNC_CLIENTILLUSIONARY INSTEAD.
 A non-solid brush entity. Use func_wall if you want it solid.
 The keys below actually apply to most brush entities as they are engine features; however, they are described here as they aren't overridden by game code in misc_models. Its q3map2 keys below will work on any brush entity!
 -------- KEYS --------
@@ -690,7 +685,7 @@
 */
 
 /*QUAKED func_wall (0 .5 .8) ? 
-A solid brush entity. Use func_illusionary if you want it solid.
+A solid brush entity. Use func_clientillusionary if you want it non-solid.
 The keys below actually apply to most brush entities as they are engine features; however, they are described here as they aren't overridden by game code in misc_models. Its q3map2 keys below will work on any brush entity!
 -------- KEYS --------
 movetype: way in which it moves: one of 0 = NONE, 1 = ANGLENOCLIP, 2 = ANGLECLIP, 3 = WALK, 4 = STEP, 5 = FLY, 6 = TOSS, 7 = PUSH, 8 = NOCLIP, 9 = FLYMISSILE, 10 = BOUNCE, 11 = BOUNCEMISSILE
@@ -721,6 +716,90 @@
 _celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
 */
 
+/*QUAKED misc_clientmodel (0 .5 .8) (-8 -8 -8) (8 8 8) ALIGN_ORIGIN ALIGN_BOTTOM
+A way to load models from a map by the engine (e.g. self-animated zym models) on client side.
+Is non-solid by default.
+-------- KEYS --------
+scale: scale factor of the model (range: 0.0625 to 15.9375)
+colormap: 1024 + 16 * pantscolor + shirtcolor
+angles: initial looking direction
+targetname: when invoking it by a button etc., it changes the color to the initiator of the action (e.g. the one pressing a button). In Onslaught, this can be used to color control points for team who owns them. In other game types, this can be used as a fun feature. Works only with _shirt and _pants textures.
+bgmscript: emitter class from the BGM script
+bgmscriptattack: attack time of the effect strength (0 to 3.9)
+bgmscriptdecay: decay time of the effect strength (0 to 3.9)
+bgmscriptsustain: sustain level of the effect strength (0.1 to 1, set to -1 to disable sustain)
+bgmscriptrelease: release time of the effect strength (0 to 3.9)
+movedir: vector by which the entity moves when "pressed" by the bgmscript
+lip: alpha change when "pressed" by the bgmscript (if > 0, it fades in when pressed, if < 0, it fades out when pressed)
+originjitter: a vector describing a random offset this entity will be moved on initial spawn. This corresponds to the "origin" field. Works on any non-q3map2-only entity.
+anglesjitter: a vector in the order "pitch yaw roll" describing a random angles change on this entity on initial spawn. The value 180 180 180 makes the angles entirely random and uniformly distributed (among euler angles). This corresponds to the "angles" field. Works on any non-q3map2-only entity.
+anglejitter: a float describing a random yaw angle change on this entity on initial spawn. The value 180 makes the yaw angle entirely random (maybe good for items). This corresponds to the "angle" field. Works on any non-q3map2-only entity.
+gametypefilter: either a + sign and a comma separated list of game types or the aliases "teams" and "noteams" to ONLY show the entity in the listed game types, or a - sign and a comma separated list of game types or the aliases "teams" and "noteams" to NOT show the entity in the listed game types. The syntax is the same as in sbar_columns_set strings. Works on any non-q3map2-only entity.
+-------- SPAWNFLAGS --------
+ALIGN_ORIGN: align the origin to the surface below the model
+ALIGN_BOTTOM: align the bottom of the model to the surface below it
+*/
+
+/*QUAKED func_clientillusionary (0 .5 .8) ? 
+A client-side non-solid brush entity. Use func_wall if you want it solid.
+-------- KEYS --------
+scale: scale factor of the model (range: 0.0625 to 15.9375)
+colormap: 1024 + 16 * pantscolor + shirtcolor
+angles: initial looking direction
+targetname: when invoking it by a button etc., it changes the color to the initiator of the action (e.g. the one pressing a button). In Onslaught, this can be used to color control points for team who owns them. In other game types, this can be used as a fun feature. Works only with _shirt and _pants textures.
+bgmscript: emitter class from the BGM script
+bgmscriptattack: attack time of the effect strength (0 to 3.9)
+bgmscriptdecay: decay time of the effect strength (0 to 3.9)
+bgmscriptsustain: sustain level of the effect strength (0.1 to 1, set to -1 to disable sustain)
+bgmscriptrelease: release time of the effect strength (0 to 3.9)
+movedir: vector by which the entity moves when "pressed" by the bgmscript
+lip: alpha change when "pressed" by the bgmscript (if > 0, it fades in when pressed, if < 0, it fades out when pressed)
+originjitter: a vector describing a random offset this entity will be moved on initial spawn. This corresponds to the "origin" field. Works on any non-q3map2-only entity.
+anglesjitter: a vector in the order "pitch yaw roll" describing a random angles change on this entity on initial spawn. The value 180 180 180 makes the angles entirely random and uniformly distributed (among euler angles). This corresponds to the "angles" field. Works on any non-q3map2-only entity.
+anglejitter: a float describing a random yaw angle change on this entity on initial spawn. The value 180 makes the yaw angle entirely random (maybe good for items). This corresponds to the "angle" field. Works on any non-q3map2-only entity.
+gametypefilter: either a + sign and a comma separated list of game types or the aliases "teams" and "noteams" to ONLY show the entity in the listed game types, or a - sign and a comma separated list of game types or the aliases "teams" and "noteams" to NOT show the entity in the listed game types. The syntax is the same as in sbar_columns_set strings. Works on any non-q3map2-only entity.
+-------- Q3MAP2 KEYS --------
+_castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_clone: copies brushes from entity with identical _clonename. Still needs a single brush that will get replaced.
+_clonename: template name so one can clone from it
+min: override automatically found minimum coordinate bounds
+max: override automatically found maximum coordinate bounds
+targetname: if targeted by a misc_model, its brushes get inserted into this
+_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+*/
+
+/*QUAKED func_clientwall (0 .5 .8) ? 
+NOTE: THIS ENTITY IS IN MOST USE CASES BROKEN REGARDING CLIENT AND PROJECTILE PREDICTION. DO NOT USE IT. USE FUNC_WALL INSTEAD.
+A client-side solid brush entity. Use func_clientillusionary if you want it non-solid.
+-------- KEYS --------
+solid: solidity: one of 1 = TRIGGER, 2 = BBOX, 3 = SLIDEBOX, 4 = BSP, 5 = CORPSE (default: 4, any other value causes prediction problems and should not be used until further notice)
+scale: scale factor of the model (range: 0.0625 to 15.9375)
+colormap: 1024 + 16 * pantscolor + shirtcolor
+angles: initial looking direction
+targetname: when invoking it by a button etc., it changes the color to the initiator of the action (e.g. the one pressing a button). In Onslaught, this can be used to color control points for team who owns them. In other game types, this can be used as a fun feature. Works only with _shirt and _pants textures.
+bgmscript: emitter class from the BGM script
+bgmscriptattack: attack time of the effect strength (0 to 3.9)
+bgmscriptdecay: decay time of the effect strength (0 to 3.9)
+bgmscriptsustain: sustain level of the effect strength (0.1 to 1, set to -1 to disable sustain)
+bgmscriptrelease: release time of the effect strength (0 to 3.9)
+movedir: vector by which the entity moves when "pressed" by the bgmscript
+lip: alpha change when "pressed" by the bgmscript (if > 0, it fades in when pressed, if < 0, it fades out when pressed)
+originjitter: a vector describing a random offset this entity will be moved on initial spawn. This corresponds to the "origin" field. Works on any non-q3map2-only entity.
+anglesjitter: a vector in the order "pitch yaw roll" describing a random angles change on this entity on initial spawn. The value 180 180 180 makes the angles entirely random and uniformly distributed (among euler angles). This corresponds to the "angles" field. Works on any non-q3map2-only entity.
+anglejitter: a float describing a random yaw angle change on this entity on initial spawn. The value 180 makes the yaw angle entirely random (maybe good for items). This corresponds to the "angle" field. Works on any non-q3map2-only entity.
+gametypefilter: either a + sign and a comma separated list of game types or the aliases "teams" and "noteams" to ONLY show the entity in the listed game types, or a - sign and a comma separated list of game types or the aliases "teams" and "noteams" to NOT show the entity in the listed game types. The syntax is the same as in sbar_columns_set strings. Works on any non-q3map2-only entity.
+-------- Q3MAP2 KEYS --------
+_castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_clone: copies brushes from entity with identical _clonename. Still needs a single brush that will get replaced.
+_clonename: template name so one can clone from it
+min: override automatically found minimum coordinate bounds
+max: override automatically found maximum coordinate bounds
+targetname: if targeted by a misc_model, its brushes get inserted into this
+_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+*/
+
 /*QUAKED misc_teleporter_dest (1 .5 .25) (-16 -16 -24) (16 16 45) 
 Teleport destination location point for trigger_teleport entities. Do not let it touch the floor, but place it slightly higher (like, 16 units above) for better flow when jumping through it.
 -------- KEYS --------
@@ -1133,7 +1212,7 @@
 race_place: if target points to the trigger_race_checkpoint with cnt 0 (finish line), this sets which place the spawn corresponds to; the special value 0 stands for spawns for players who come in later (have to be behind the ones with race_place set to an actual place), and -1 marks the spawnpoint for qualifying mode only
 */
 
-/*QUAKED func_pointparticles (.5 .5 .5) ? START_ON
+/*QUAKED func_pointparticles (.5 .5 .5) ? START_ON IMPULSE
 A brush that emits particles.
 -------- KEYS --------
 mdl: particle effect name from effectinfo.txt
@@ -1142,15 +1221,26 @@
 waterlevel: extra velocity jitter amount
 count: particle count multiplier (per spawned particle)
 movedir: when set, trace direction (particles will then be emitted from the surface the trace hits); the length of the vector is used as strength of taking the normal of the trace into account
-glow_color: particle palette color
 noise: sound to play when the particle is emitted
 atten: distance attenuation of the sound (a value from 0.1 to 3.9), default is 0.5; set to -1 for no attenuation (global sound)
 volume: volume of the sound
 targetname: name to target this (then its state is toggled)
+bgmscript: emitter class from the BGM script
+bgmscriptattack: attack time of the effect strength (0 to 3.9)
+bgmscriptdecay: decay time of the effect strength (0 to 3.9)
+bgmscriptsustain: sustain level of the effect strength (0.1 to 1, set to -1 to disable sustain)
+bgmscriptrelease: release time of the effect strength (0 to 3.9)
 -------- SPAWNFLAGS --------
 START_ON: when targeted, the particle emitter will start switched on
+IMPULSE: only send the full amount of impulse particles when the entity is triggered
 -------- NOTES --------
-Use trigger_monoflop if you want the particles to turn off for a while, then turn back on
+Use trigger_monoflop if you want the particles to turn off for a while, then turn back on.
+A BGM script is a .bgs file named like the map, in the maps directory. Its format is lines of the form
+  <emitter class> <time since start of background music> <0 if the emitters are to be switched off, >0 and <=1 if they are to be switched on>
+e.g.
+  smokers 4.7 1
+  smokers 4.9 0
+The lines MUST be sorted by emitter class as primary key, and by the time since start of the BGM as secondary key.
 */
 
 /*QUAKED trigger_flipflop (.5 .5 .5) (-8 -8 -8) (8 8 8) START_ON

Copied: branches/nexuiz-2.0/data/sound/cdtracks/ninesix.ogg (from rev 6531, trunk/data/sound/cdtracks/ninesix.ogg)
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/sound/cdtracks/sixtyfour_.ogg
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/sound/cdtracks/sixtyfour_revisited.ogg (from rev 6531, trunk/data/sound/cdtracks/sixtyfour_revisited.ogg)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/misc/mediasource/music (from rev 6531, trunk/misc/mediasource/music)

Modified: branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def
===================================================================
--- branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/misc/netradiant-NexuizPack/nexuiz.game/data/entities.def	2009-04-19 11:12:15 UTC (rev 6532)
@@ -73,7 +73,7 @@
 
 /*QUAKED func_door (0 .5 .8) ? START_OPEN - DOOR_DONT_LINK - - TOGGLE
 Normal sliding door entity. By default, the door will activate when player walks close to it or when damage is inflicted to it.
-If DOOR_DONT_LINK is not set, the door will be linked with all doors it touches.
+If DOOR_DONT_LINK is not set, the door will be linked with all doors it touches. Note however that for linked doors to work properly, it is necessary that ALL linked doors have SOME volume of common area (that is, there must be a point that is part of ALL doors).
 -------- KEYS --------
 message: is printed when the door is touched if it is a trigger door and it hasn't been fired yet, or death message if dmg is set
 message2: death message when someone gets pushed into this (default: "was thrown into a world of hurt by"). The # character is replaced by the attacker name if present (and it instead does not get appended to the end)
@@ -582,7 +582,7 @@
 */
 
 /*QUAKED misc_laser (.5 .5 .5) (-8 -8 -8) (8 8 8) START_ON FINITE
-Laser beam emitter
+Laser beam emitter. Note that for the laser to be deadly, it has to start OUTSIDE the player's collision box. To ensure this, you may want to put this entity inside the walls (or directly on their surface), or cover it with a playerclip brush.
 -------- KEYS --------
 target: target_position the laser targets (may be another entity, preferably target_position, possibly controlled by misc_follow)
 mdl: name of particle effect for the beam end point (see effectinfo.txt; default is laser_deadly if dmg is set, and none if not)
@@ -647,18 +647,13 @@
 anglesjitter: a vector in the order "pitch yaw roll" describing a random angles change on this entity on initial spawn. The value 180 180 180 makes the angles entirely random and uniformly distributed (among euler angles). This corresponds to the "angles" field. Works on any non-q3map2-only entity.
 anglejitter: a float describing a random yaw angle change on this entity on initial spawn. The value 180 makes the yaw angle entirely random (maybe good for items). This corresponds to the "angle" field. Works on any non-q3map2-only entity.
 gametypefilter: either a + sign and a comma separated list of game types or the aliases "teams" and "noteams" to ONLY show the entity in the listed game types, or a - sign and a comma separated list of game types or the aliases "teams" and "noteams" to NOT show the entity in the listed game types. The syntax is the same as in sbar_columns_set strings. Works on any non-q3map2-only entity.
--------- Q3MAP2 KEYS --------
-_frame: frame of model to include (set equal to frame if _castshadows is set)
-_castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
-targetname: if targeted by a misc_model, its brushes get inserted into this
-_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
 -------- SPAWNFLAGS --------
 ALIGN_ORIGN: align the origin to the surface below the model
 ALIGN_BOTTOM: align the bottom of the model to the surface below it
 */
 
 /*QUAKED func_illusionary (0 .5 .8) ? 
-NOTE: THIS ENTITY IS BROKEN REGARDING CLIENT AND PROJECTILE PREDICTION. DO NOT USE IT. USE NONSOLID SHADERS INSTEAD.
+NOTE: THIS ENTITY IS BROKEN REGARDING CLIENT AND PROJECTILE PREDICTION. DO NOT USE IT. USE NONSOLID SHADERS OR FUNC_CLIENTILLUSIONARY INSTEAD.
 A non-solid brush entity. Use func_wall if you want it solid.
 The keys below actually apply to most brush entities as they are engine features; however, they are described here as they aren't overridden by game code in misc_models. Its q3map2 keys below will work on any brush entity!
 -------- KEYS --------
@@ -690,7 +685,7 @@
 */
 
 /*QUAKED func_wall (0 .5 .8) ? 
-A solid brush entity. Use func_illusionary if you want it solid.
+A solid brush entity. Use func_clientillusionary if you want it non-solid.
 The keys below actually apply to most brush entities as they are engine features; however, they are described here as they aren't overridden by game code in misc_models. Its q3map2 keys below will work on any brush entity!
 -------- KEYS --------
 movetype: way in which it moves: one of 0 = NONE, 1 = ANGLENOCLIP, 2 = ANGLECLIP, 3 = WALK, 4 = STEP, 5 = FLY, 6 = TOSS, 7 = PUSH, 8 = NOCLIP, 9 = FLYMISSILE, 10 = BOUNCE, 11 = BOUNCEMISSILE
@@ -721,6 +716,90 @@
 _celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
 */
 
+/*QUAKED misc_clientmodel (0 .5 .8) (-8 -8 -8) (8 8 8) ALIGN_ORIGIN ALIGN_BOTTOM
+A way to load models from a map by the engine (e.g. self-animated zym models) on client side.
+Is non-solid by default.
+-------- KEYS --------
+scale: scale factor of the model (range: 0.0625 to 15.9375)
+colormap: 1024 + 16 * pantscolor + shirtcolor
+angles: initial looking direction
+targetname: when invoking it by a button etc., it changes the color to the initiator of the action (e.g. the one pressing a button). In Onslaught, this can be used to color control points for team who owns them. In other game types, this can be used as a fun feature. Works only with _shirt and _pants textures.
+bgmscript: emitter class from the BGM script
+bgmscriptattack: attack time of the effect strength (0 to 3.9)
+bgmscriptdecay: decay time of the effect strength (0 to 3.9)
+bgmscriptsustain: sustain level of the effect strength (0.1 to 1, set to -1 to disable sustain)
+bgmscriptrelease: release time of the effect strength (0 to 3.9)
+movedir: vector by which the entity moves when "pressed" by the bgmscript
+lip: alpha change when "pressed" by the bgmscript (if > 0, it fades in when pressed, if < 0, it fades out when pressed)
+originjitter: a vector describing a random offset this entity will be moved on initial spawn. This corresponds to the "origin" field. Works on any non-q3map2-only entity.
+anglesjitter: a vector in the order "pitch yaw roll" describing a random angles change on this entity on initial spawn. The value 180 180 180 makes the angles entirely random and uniformly distributed (among euler angles). This corresponds to the "angles" field. Works on any non-q3map2-only entity.
+anglejitter: a float describing a random yaw angle change on this entity on initial spawn. The value 180 makes the yaw angle entirely random (maybe good for items). This corresponds to the "angle" field. Works on any non-q3map2-only entity.
+gametypefilter: either a + sign and a comma separated list of game types or the aliases "teams" and "noteams" to ONLY show the entity in the listed game types, or a - sign and a comma separated list of game types or the aliases "teams" and "noteams" to NOT show the entity in the listed game types. The syntax is the same as in sbar_columns_set strings. Works on any non-q3map2-only entity.
+-------- SPAWNFLAGS --------
+ALIGN_ORIGN: align the origin to the surface below the model
+ALIGN_BOTTOM: align the bottom of the model to the surface below it
+*/
+
+/*QUAKED func_clientillusionary (0 .5 .8) ? 
+A client-side non-solid brush entity. Use func_wall if you want it solid.
+-------- KEYS --------
+scale: scale factor of the model (range: 0.0625 to 15.9375)
+colormap: 1024 + 16 * pantscolor + shirtcolor
+angles: initial looking direction
+targetname: when invoking it by a button etc., it changes the color to the initiator of the action (e.g. the one pressing a button). In Onslaught, this can be used to color control points for team who owns them. In other game types, this can be used as a fun feature. Works only with _shirt and _pants textures.
+bgmscript: emitter class from the BGM script
+bgmscriptattack: attack time of the effect strength (0 to 3.9)
+bgmscriptdecay: decay time of the effect strength (0 to 3.9)
+bgmscriptsustain: sustain level of the effect strength (0.1 to 1, set to -1 to disable sustain)
+bgmscriptrelease: release time of the effect strength (0 to 3.9)
+movedir: vector by which the entity moves when "pressed" by the bgmscript
+lip: alpha change when "pressed" by the bgmscript (if > 0, it fades in when pressed, if < 0, it fades out when pressed)
+originjitter: a vector describing a random offset this entity will be moved on initial spawn. This corresponds to the "origin" field. Works on any non-q3map2-only entity.
+anglesjitter: a vector in the order "pitch yaw roll" describing a random angles change on this entity on initial spawn. The value 180 180 180 makes the angles entirely random and uniformly distributed (among euler angles). This corresponds to the "angles" field. Works on any non-q3map2-only entity.
+anglejitter: a float describing a random yaw angle change on this entity on initial spawn. The value 180 makes the yaw angle entirely random (maybe good for items). This corresponds to the "angle" field. Works on any non-q3map2-only entity.
+gametypefilter: either a + sign and a comma separated list of game types or the aliases "teams" and "noteams" to ONLY show the entity in the listed game types, or a - sign and a comma separated list of game types or the aliases "teams" and "noteams" to NOT show the entity in the listed game types. The syntax is the same as in sbar_columns_set strings. Works on any non-q3map2-only entity.
+-------- Q3MAP2 KEYS --------
+_castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_clone: copies brushes from entity with identical _clonename. Still needs a single brush that will get replaced.
+_clonename: template name so one can clone from it
+min: override automatically found minimum coordinate bounds
+max: override automatically found maximum coordinate bounds
+targetname: if targeted by a misc_model, its brushes get inserted into this
+_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+*/
+
+/*QUAKED func_clientwall (0 .5 .8) ? 
+NOTE: THIS ENTITY IS IN MOST USE CASES BROKEN REGARDING CLIENT AND PROJECTILE PREDICTION. DO NOT USE IT. USE FUNC_WALL INSTEAD.
+A client-side solid brush entity. Use func_clientillusionary if you want it non-solid.
+-------- KEYS --------
+solid: solidity: one of 1 = TRIGGER, 2 = BBOX, 3 = SLIDEBOX, 4 = BSP, 5 = CORPSE (default: 4, any other value causes prediction problems and should not be used until further notice)
+scale: scale factor of the model (range: 0.0625 to 15.9375)
+colormap: 1024 + 16 * pantscolor + shirtcolor
+angles: initial looking direction
+targetname: when invoking it by a button etc., it changes the color to the initiator of the action (e.g. the one pressing a button). In Onslaught, this can be used to color control points for team who owns them. In other game types, this can be used as a fun feature. Works only with _shirt and _pants textures.
+bgmscript: emitter class from the BGM script
+bgmscriptattack: attack time of the effect strength (0 to 3.9)
+bgmscriptdecay: decay time of the effect strength (0 to 3.9)
+bgmscriptsustain: sustain level of the effect strength (0.1 to 1, set to -1 to disable sustain)
+bgmscriptrelease: release time of the effect strength (0 to 3.9)
+movedir: vector by which the entity moves when "pressed" by the bgmscript
+lip: alpha change when "pressed" by the bgmscript (if > 0, it fades in when pressed, if < 0, it fades out when pressed)
+originjitter: a vector describing a random offset this entity will be moved on initial spawn. This corresponds to the "origin" field. Works on any non-q3map2-only entity.
+anglesjitter: a vector in the order "pitch yaw roll" describing a random angles change on this entity on initial spawn. The value 180 180 180 makes the angles entirely random and uniformly distributed (among euler angles). This corresponds to the "angles" field. Works on any non-q3map2-only entity.
+anglejitter: a float describing a random yaw angle change on this entity on initial spawn. The value 180 makes the yaw angle entirely random (maybe good for items). This corresponds to the "angle" field. Works on any non-q3map2-only entity.
+gametypefilter: either a + sign and a comma separated list of game types or the aliases "teams" and "noteams" to ONLY show the entity in the listed game types, or a - sign and a comma separated list of game types or the aliases "teams" and "noteams" to NOT show the entity in the listed game types. The syntax is the same as in sbar_columns_set strings. Works on any non-q3map2-only entity.
+-------- Q3MAP2 KEYS --------
+_castshadows: Allows per-entity control over shadow casting. Defaults to 0 on entities, 1 on world. 0 = no shadow casting. 1 = cast shadows on world. > 1 = cast shadows on entities with _rs (or _receiveshadows) with the corresponding value, AND world. Negative values imply same, but DO NOT cast shadows on world.
+_receiveshadows: Allows per-entity control over shadow reception. Defaults to 1 on everything (world shadows). 0 = receives NO shadows. > 1 = receive shadows only from corresponding keyed entities (see above) and world. < 1 = receive shadows ONLY from corresponding keyed entities.
+_clone: copies brushes from entity with identical _clonename. Still needs a single brush that will get replaced.
+_clonename: template name so one can clone from it
+min: override automatically found minimum coordinate bounds
+max: override automatically found maximum coordinate bounds
+targetname: if targeted by a misc_model, its brushes get inserted into this
+_celshader: Sets the cel shader used for this geometry. Note: omit the "textures/" prefix.
+*/
+
 /*QUAKED misc_teleporter_dest (1 .5 .25) (-16 -16 -24) (16 16 45) 
 Teleport destination location point for trigger_teleport entities. Do not let it touch the floor, but place it slightly higher (like, 16 units above) for better flow when jumping through it.
 -------- KEYS --------
@@ -1133,7 +1212,7 @@
 race_place: if target points to the trigger_race_checkpoint with cnt 0 (finish line), this sets which place the spawn corresponds to; the special value 0 stands for spawns for players who come in later (have to be behind the ones with race_place set to an actual place), and -1 marks the spawnpoint for qualifying mode only
 */
 
-/*QUAKED func_pointparticles (.5 .5 .5) ? START_ON
+/*QUAKED func_pointparticles (.5 .5 .5) ? START_ON IMPULSE
 A brush that emits particles.
 -------- KEYS --------
 mdl: particle effect name from effectinfo.txt
@@ -1142,15 +1221,26 @@
 waterlevel: extra velocity jitter amount
 count: particle count multiplier (per spawned particle)
 movedir: when set, trace direction (particles will then be emitted from the surface the trace hits); the length of the vector is used as strength of taking the normal of the trace into account
-glow_color: particle palette color
 noise: sound to play when the particle is emitted
 atten: distance attenuation of the sound (a value from 0.1 to 3.9), default is 0.5; set to -1 for no attenuation (global sound)
 volume: volume of the sound
 targetname: name to target this (then its state is toggled)
+bgmscript: emitter class from the BGM script
+bgmscriptattack: attack time of the effect strength (0 to 3.9)
+bgmscriptdecay: decay time of the effect strength (0 to 3.9)
+bgmscriptsustain: sustain level of the effect strength (0.1 to 1, set to -1 to disable sustain)
+bgmscriptrelease: release time of the effect strength (0 to 3.9)
 -------- SPAWNFLAGS --------
 START_ON: when targeted, the particle emitter will start switched on
+IMPULSE: only send the full amount of impulse particles when the entity is triggered
 -------- NOTES --------
-Use trigger_monoflop if you want the particles to turn off for a while, then turn back on
+Use trigger_monoflop if you want the particles to turn off for a while, then turn back on.
+A BGM script is a .bgs file named like the map, in the maps directory. Its format is lines of the form
+  <emitter class> <time since start of background music> <0 if the emitters are to be switched off, >0 and <=1 if they are to be switched on>
+e.g.
+  smokers 4.7 1
+  smokers 4.9 0
+The lines MUST be sorted by emitter class as primary key, and by the time since start of the BGM as secondary key.
 */
 
 /*QUAKED trigger_flipflop (.5 .5 .5) (-8 -8 -8) (8 8 8) START_ON

Modified: branches/nexuiz-2.0/misc/tools/bsptool.pl
===================================================================
--- branches/nexuiz-2.0/misc/tools/bsptool.pl	2009-04-19 10:21:01 UTC (rev 6531)
+++ branches/nexuiz-2.0/misc/tools/bsptool.pl	2009-04-19 11:12:15 UTC (rev 6532)
@@ -304,7 +304,7 @@
 		for(@entitylines)
 		{
 			last if $_ eq '}';
-			/^\s*"gridsize"\s+"(.*)"$/
+			/^\s*"_?gridsize"\s+"(.*)"$/
 				and $gridsize = $1;
 		}
 		my @scale = map { 1 / $_ } split / /, $gridsize;
@@ -364,7 +364,7 @@
 		{
 			my $l = $entitylines[$_];
 			last if $l eq '}';
-			if($l =~ /^\s*"gridsize"\s+"(.*)"$/)
+			if($l =~ /^\s*"_?gridsize"\s+"(.*)"$/)
 			{
 				$gridsize = $1;
 				$gridsizeindex = $_;

Copied: branches/nexuiz-2.0/misc/tools/midi2bgs.pl (from rev 6531, trunk/misc/tools/midi2bgs.pl)
===================================================================
--- branches/nexuiz-2.0/misc/tools/midi2bgs.pl	                        (rev 0)
+++ branches/nexuiz-2.0/misc/tools/midi2bgs.pl	2009-04-19 11:12:15 UTC (rev 6532)
@@ -0,0 +1,133 @@
+#!/usr/bin/perl
+
+# converter from Type 1 MIDI files to BGS files that control particle effects on maps
+# usage:
+#   perl midi2bgs.pl filename.mid tracknumber channelnumber offset notepattern > filename.bgs
+# track and channel numbers -1 include all events
+# in patterns, %1$s inserts the note name, %2$d inserts the track number, and %3$d inserts the channel number
+# example:
+#   perl midi2bgs.pl filename.mid -1 10 0.3 'note_%1$s_%3$d_%2$d' > filename.bgs
+
+use strict;
+use warnings;
+use MIDI;
+use MIDI::Opus;
+
+my ($filename, $trackno, $channelno, $offset, $notepattern) = @ARGV;
+$notepattern = '%1$s'
+	unless defined $notepattern;
+defined $offset
+	or die "usage: $0 filename.mid {trackno|-1} {channelno|-1} offset [notepattern]\n";
+
+my $opus = MIDI::Opus->new({from_file => $filename});
+my $ticksperquarter = $opus->ticks();
+my $tracks = $opus->tracks_r();
+my @tempi = (); # list of start tick, time per tick pairs (calculated as seconds per quarter / ticks per quarter)
+my $tick;
+
+$tick = 0;
+for($tracks->[0]->events())
+{   
+    $tick += $_->[1];
+    if($_->[0] eq 'set_tempo')
+    {   
+        push @tempi, [$_->[1], $_->[2] * 0.000001 / $ticksperquarter];
+    }
+}
+sub tick2sec($)
+{
+    my ($tick) = @_;
+    my $sec = 0;
+    my $curtempo = [0, 0.5 / $ticksperquarter];
+    for(@tempi)
+    {
+        if($_->[0] < $tick)
+        {
+			# this event is in the past
+			# we add the full time since the last one then
+			$sec += ($_->[0] - $curtempo->[0]) * $curtempo->[1];
+        }   
+        else
+        {
+			# if this event is in the future, we break
+			last;
+        }
+		$curtempo = $_;
+    }
+	$sec += ($tick - $curtempo->[0]) * $curtempo->[1];
+	return $sec + $offset;
+}
+
+my @notes = ('c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b');
+my @notenames = ();
+for my $octave (0..11)
+{
+	for(@notes)
+	{
+		if($octave <= 3)
+		{
+			push @notenames, uc($_) . ',' x (3 - $octave);
+		}
+		else
+		{
+			push @notenames, lc($_) . "'" x ($octave - 4);
+		}
+	}
+}
+
+# merge all to a single track
+my @allmidievents = ();
+my $sequence = 0;
+for my $track(0..@$tracks-1)
+{
+	$tick = 0;
+	for($tracks->[$track]->events())
+	{
+		my ($command, $delta, @data) = @$_;
+		$tick += $delta;
+		push @allmidievents, [$command, $tick, $sequence++, $track, @data];
+	}
+}
+ at allmidievents = sort { $a->[1] <=> $b->[1] or $a->[2] <=> $b->[2] } @allmidievents;
+
+my @outevents = (); # format: name, time in seconds, velocity
+$tick = 0;
+
+my %notecounters;
+my %notecounters_converted;
+for(@allmidievents)
+{
+	my $t = tick2sec $_->[1];
+	my $track = $_->[3];
+	next
+		unless $trackno < 0 || $trackno == $track;
+	if($_->[0] eq 'note_on')
+	{
+		my $chan = $_->[4];
+		my $note = sprintf $notepattern, $notenames[$_->[5]], $trackno, $channelno;
+		my $velocity = $_->[6] / 127.0;
+		push @outevents, [$note, $t, $velocity]
+			if($channelno < 0 || $channelno == $chan);
+		++$notecounters_converted{$note}
+			unless $notecounters{$chan}{$_->[5]};
+		$notecounters{$chan}{$_->[5]} = 1;
+	}
+	elsif($_->[0] eq 'note_off')
+	{
+		my $chan = $_->[4];
+		my $note = sprintf $notepattern, $notenames[$_->[5]], $trackno, $channelno;
+		my $velocity = $_->[6] / 127.0;
+		--$notecounters_converted{$note}
+			if $notecounters{$chan}{$_->[5]};
+		$notecounters{$chan}{$_->[5]} = 0;
+		if($notecounters_converted{$note} == 0)
+		{
+			push @outevents, [$note, $t, 0]
+				if($channelno < 0 || $channelno == $chan);
+		}
+	}
+}
+for(sort { $a->[0] cmp $b->[0] or $a->[1] <=> $b->[1] } @outevents)
+{
+    printf "%s %13.6f %13.6f\n", @$_;
+}



More information about the nexuiz-commits mailing list