r4863 - in branches/nexuiz-2.0: . data data/gfx data/maps data/models data/models/turrets data/models/turrets/radiant data/models/weapons data/qcsrc/common data/qcsrc/menu/nexuiz data/qcsrc/server data/qcsrc/server/tturrets/include data/qcsrc/server/tturrets/system data/qcsrc/server/tturrets/units data/scripts data/textures

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Oct 24 05:45:14 EDT 2008


Author: div0
Date: 2008-10-24 05:45:12 -0400 (Fri, 24 Oct 2008)
New Revision: 4863

Added:
   branches/nexuiz-2.0/data/gfx/inv_weapon12.tga
   branches/nexuiz-2.0/data/gfx/inv_weapon13.tga
   branches/nexuiz-2.0/data/maps/turret_test.bsp
   branches/nexuiz-2.0/data/maps/turret_test.map
   branches/nexuiz-2.0/data/maps/turret_test.waypoints
   branches/nexuiz-2.0/data/models/tagrocket.md3
   branches/nexuiz-2.0/data/models/tagrocket.tga
   branches/nexuiz-2.0/data/models/turrets/r_fx1_1.tga
   branches/nexuiz-2.0/data/models/turrets/r_fx1_2.tga
   branches/nexuiz-2.0/data/models/turrets/r_fx1_3.tga
   branches/nexuiz-2.0/data/models/turrets/r_fx1_4.tga
   branches/nexuiz-2.0/data/models/turrets/r_fx1_5.tga
   branches/nexuiz-2.0/data/models/turrets/radiant/walker.md3
   branches/nexuiz-2.0/data/models/turrets/walker_base.tga
   branches/nexuiz-2.0/data/models/turrets/walker_base_gloss.tga
   branches/nexuiz-2.0/data/models/turrets/walker_base_glow.tga
   branches/nexuiz-2.0/data/models/turrets/walker_base_norm.tga
   branches/nexuiz-2.0/data/models/turrets/walker_body.md3
   branches/nexuiz-2.0/data/models/turrets/walker_head_minigun.md3
   branches/nexuiz-2.0/data/models/turrets/walker_mghead.md3
   branches/nexuiz-2.0/data/models/turrets/walker_minigun.tga
   branches/nexuiz-2.0/data/models/turrets/walker_props.md3
   branches/nexuiz-2.0/data/models/turrets/walker_spawn.md3
   branches/nexuiz-2.0/data/models/turrets/white.tga
   branches/nexuiz-2.0/data/models/weapons/g_hlac.md3
   branches/nexuiz-2.0/data/models/weapons/g_seeker.md3
   branches/nexuiz-2.0/data/models/weapons/v_hlac.md3
   branches/nexuiz-2.0/data/models/weapons/v_seeker.md3
   branches/nexuiz-2.0/data/models/weapons/w_hlac.zym
   branches/nexuiz-2.0/data/models/weapons/w_seeker.zym
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets.qh
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_aimprocs.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_damage.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_misc.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_scoreprocs.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_checkpoint.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_common.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_flac.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hellion.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hk.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_machinegun.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_mlrs.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_phaser.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_plasma.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_targettrigger.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_tessla.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_hlac.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc
   branches/nexuiz-2.0/data/textures/hlac.tga
   branches/nexuiz-2.0/data/textures/seeker.tga
   branches/nexuiz-2.0/data/unit_walker.cfg
Removed:
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turret_tturrets.qh
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turret_tturrets_early.qh
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_aimprocs.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_damage.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_main.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_misc.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_scoreprocs.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_common.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_flac.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_fusionreactor.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_hellion.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_hk.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_machinegun.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_mlrs.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_phaser.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_plasma.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_targettrigger.qc
   branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_tessla.qc
   branches/nexuiz-2.0/data/unit_minigun.cfg
Modified:
   branches/nexuiz-2.0/.patchsets
   branches/nexuiz-2.0/data/build-compat-pack.sh
   branches/nexuiz-2.0/data/defaultNexuiz.cfg
   branches/nexuiz-2.0/data/effectinfo.txt
   branches/nexuiz-2.0/data/models/turrets/c512.md3
   branches/nexuiz-2.0/data/qcsrc/common/constants.qh
   branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/weaponslist.c
   branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc
   branches/nexuiz-2.0/data/qcsrc/server/g_hook.qc
   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/miscfunctions.qc
   branches/nexuiz-2.0/data/qcsrc/server/mode_onslaught.qc
   branches/nexuiz-2.0/data/qcsrc/server/portals.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_halflife.qc
   branches/nexuiz-2.0/data/qcsrc/server/t_items.qc
   branches/nexuiz-2.0/data/qcsrc/server/t_jumppads.qc
   branches/nexuiz-2.0/data/qcsrc/server/t_plats.qc
   branches/nexuiz-2.0/data/qcsrc/server/target_spawn.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_crylink.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_electro.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_grenadelauncher.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_hagar.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_hook.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_minstanex.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_nex.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_porto.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_shotgun.qc
   branches/nexuiz-2.0/data/qcsrc/server/w_uzi.qc
   branches/nexuiz-2.0/data/scripts/entities.def
   branches/nexuiz-2.0/data/scripts/turrets.def
   branches/nexuiz-2.0/data/scripts/turrets.shader
   branches/nexuiz-2.0/data/turrets.cfg
   branches/nexuiz-2.0/data/unit_hellion.cfg
   branches/nexuiz-2.0/data/unit_hk.cfg
   branches/nexuiz-2.0/data/unit_machinegun.cfg
   branches/nexuiz-2.0/data/unit_mlrs.cfg
   branches/nexuiz-2.0/data/unit_plasma.cfg
   branches/nexuiz-2.0/data/unit_plasma2.cfg
   branches/nexuiz-2.0/data/weapons.cfg
Log:
r4824 | div0 | 2008-10-23 08:05:13 +0200 (Thu, 23 Oct 2008) | 2 lines
fix turrets for onslaught: default them to have no team and attack nobody if not powered, make them not shoot at control point (that's the players' job!)
r4825 | div0 | 2008-10-23 08:23:23 +0200 (Thu, 23 Oct 2008) | 2 lines
reverse the logic of the turrets flag
r4826 | tzork | 2008-10-23 08:39:27 +0200 (Thu, 23 Oct 2008) | 1 line
Another round of turret updates.
r4827 | div0 | 2008-10-23 10:47:24 +0200 (Thu, 23 Oct 2008) | 2 lines
do not spawn near out-of-power nodes
r4828 | div0 | 2008-10-23 11:18:57 +0200 (Thu, 23 Oct 2008) | 2 lines
fix handling of isolated CPs
r4829 | tzork | 2008-10-23 11:38:00 +0200 (Thu, 23 Oct 2008) | 1 line
The walker is back.
r4830 | tzork | 2008-10-23 12:48:56 +0200 (Thu, 23 Oct 2008) | 1 line
HLAC and Tag Seeker weapons.
r4831 | tzork | 2008-10-23 12:53:23 +0200 (Thu, 23 Oct 2008) | 1 line
oops configs and inv icons is nice to have too.
r4832 | tzork | 2008-10-23 13:06:48 +0200 (Thu, 23 Oct 2008) | 1 line
r4833 | tzork | 2008-10-23 13:14:52 +0200 (Thu, 23 Oct 2008) | 2 lines
Oops forgot turret_unit_walker.qc
ONS - Turrets linked to unowned nodes deactivate
r4834 | tzork | 2008-10-23 13:33:00 +0200 (Thu, 23 Oct 2008) | 1 line
make walker validate its .target as a walker_checkpoint before trying to use it.
r4835 | div0 | 2008-10-23 14:03:50 +0200 (Thu, 23 Oct 2008) | 9 lines
trigger_relay_if - to help with entity factories that create a limited number of objects (to not spam the server).
A factory is now:
- a target_spawn
- a trigger_relay_if targeting the target_spawn
- a trigger_multivibrator targeting the trigger_relay_if
For later, what about making a target_spawnfactory entity that creates all these.
r4836 | tzork | 2008-10-23 14:22:48 +0200 (Thu, 23 Oct 2008) | 1 line
basic TFL_DMG_DEATH_NORESPAWN support (.damage_flags). 
r4837 | div0 | 2008-10-23 14:26:25 +0200 (Thu, 23 Oct 2008) | 2 lines
add limiting to target_spawn (now can refuse to spawn more than a given count)
r4838 | div0 | 2008-10-23 14:37:46 +0200 (Thu, 23 Oct 2008) | 2 lines
seeker now honors IT_UNLIMITED_AMMO too
r4839 | div0 | 2008-10-23 14:58:59 +0200 (Thu, 23 Oct 2008) | 2 lines
fix the death messages of seeker
r4840 | div0 | 2008-10-23 15:01:13 +0200 (Thu, 23 Oct 2008) | 2 lines
HLAC: use projectiledeathtype properly
r4841 | div0 | 2008-10-23 15:11:27 +0200 (Thu, 23 Oct 2008) | 2 lines
add some missing cvars for hlac and seeker; fix newlines in constants.qh; slightly tune down seeker
r4842 | div0 | 2008-10-23 15:16:37 +0200 (Thu, 23 Oct 2008) | 2 lines
move weapon slots
r4843 | div0 | 2008-10-23 15:17:45 +0200 (Thu, 23 Oct 2008) | 2 lines
move the spawn funcs of hlac and seeker
r4844 | div0 | 2008-10-23 15:31:40 +0200 (Thu, 23 Oct 2008) | 2 lines
new compat pack
r4845 | div0 | 2008-10-23 15:35:10 +0200 (Thu, 23 Oct 2008) | 2 lines
remove some tgas from the compat pack
r4846 | tzork | 2008-10-23 15:45:43 +0200 (Thu, 23 Oct 2008) | 1 line
Walker & hlac texture updates.
r4847 | div0 | 2008-10-23 17:55:27 +0200 (Thu, 23 Oct 2008) | 2 lines
fix missing precaches
r4848 | div0 | 2008-10-24 08:17:05 +0200 (Fri, 24 Oct 2008) | 2 lines
offhand hook fixes
r4849 | div0 | 2008-10-24 08:18:18 +0200 (Fri, 24 Oct 2008) | 2 lines
fix spacing :P
r4850 | div0 | 2008-10-24 08:21:24 +0200 (Fri, 24 Oct 2008) | 2 lines
fix IT_UNLIMITED_AMMO
r4851 | div0 | 2008-10-24 08:37:10 +0200 (Fri, 24 Oct 2008) | 2 lines
unlimited ammo revisited: distinguish between superweapons and normal weapons
r4852 | div0 | 2008-10-24 09:09:33 +0200 (Fri, 24 Oct 2008) | 2 lines
explicitly set dphitcontentsmask on players
r4853 | div0 | 2008-10-24 09:35:00 +0200 (Fri, 24 Oct 2008) | 2 lines
rocket launcher now detonates in the think function, should fix problems with shortly pressed buttons
r4854 | tzork | 2008-10-24 09:46:23 +0200 (Fri, 24 Oct 2008) | 1 line
Better inactive turrets handling. cvar for enforcing target re-scan at minimum intervals (g_turrets_targetscan_mindelay). Some helpfully comments in turrets.cfg. g_turrets_aimidle_delay controls how long turrets aim where the last known enemy was before returning to "idle aim". 
r4855 | div0 | 2008-10-24 09:48:04 +0200 (Fri, 24 Oct 2008) | 2 lines
change "player" checks to "iscreature" checks so one can have e.g. crates that push buttons
r4856 | tzork | 2008-10-24 09:54:17 +0200 (Fri, 24 Oct 2008) | 1 line
renamed src files. to much turrets/turret_something/tturret... ;)
r4857 | div0 | 2008-10-24 09:57:55 +0200 (Fri, 24 Oct 2008) | 2 lines
create portals below creatures, not walkers
r4858 | div0 | 2008-10-24 10:01:55 +0200 (Fri, 24 Oct 2008) | 2 lines
func_door fixes
r4859 | div0 | 2008-10-24 10:03:21 +0200 (Fri, 24 Oct 2008) | 2 lines
more door fixes
r4860 | div0 | 2008-10-24 11:06:45 +0200 (Fri, 24 Oct 2008) | 2 lines
more fixes - now we can have a companion cube :P
r4861 | div0 | 2008-10-24 11:25:09 +0200 (Fri, 24 Oct 2008) | 2 lines
add SUB_Friction (currently only used by target_spawn)
r4862 | div0 | 2008-10-24 11:28:09 +0200 (Fri, 24 Oct 2008) | 2 lines
fix SUB_Friction to only apply when onground

Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/.patchsets	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,2 +1,2 @@
 master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-4822
+revisions_applied = 1-4862

Modified: branches/nexuiz-2.0/data/build-compat-pack.sh
===================================================================
--- branches/nexuiz-2.0/data/build-compat-pack.sh	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/build-compat-pack.sh	2008-10-24 09:45:12 UTC (rev 4863)
@@ -16,6 +16,8 @@
 	gfx/final_rage_mini.tga
 	gfx/inv_weapon10.tga
 	gfx/inv_weapon11.tga
+	gfx/inv_weapon12.tga
+	gfx/inv_weapon13.tga
 	gfx/inv_weapon9.tga
 	gfx/reslimed_mini.tga
 	gfx/runningman_1on1remix_mini.tga
@@ -72,15 +74,58 @@
 	models/sprites/race-finish.tga
 	models/sprites/redbase.tga
 	models/sprites/waypoint.tga
+    models/tagrocket.md3
+    models/tagrocket.tga
+	models/turrets/base-gib1.md3
+	models/turrets/base-gib2.md3
+	models/turrets/base-gib3.md3
+	models/turrets/base-gib4.md3
+	models/turrets/base.md3
+	models/turrets/c512.md3
+	models/turrets/c8.md3
+	models/turrets/flac.md3
+	models/turrets/fusion_top.md3
+	models/turrets/fusreac.md3
+	models/turrets/head-gib1.md3
+	models/turrets/head-gib2.md3
+	models/turrets/head-gib3.md3
+	models/turrets/head-gib4.md3
+	models/turrets/hellion.md3
+	models/turrets/hk.md3
+	models/turrets/hunter2.md3
+	models/turrets/machinegun.md3
+	models/turrets/mlrs.md3
+	models/turrets/mlrs_rocket.md3
+	models/turrets/pd_proj.md3
+	models/turrets/phaser_beam.md3
+	models/turrets/phaser.md3
+	models/turrets/plasmad.md3
+	models/turrets/plasma.md3
+	models/turrets/reactor.md3
+	models/turrets/rocket.md3
+	models/turrets/tesla_base.md3
+	models/turrets/tesla_head.md3
+	models/turrets/tesla.md3
+	models/turrets/walker_body.md3
+	models/turrets/walker_head_minigun.md3
+	models/turrets/walker_mghead.md3
+	models/turrets/walker_props.md3
+	models/turrets/walker_spawn.md3
+    models/weapons/g_hlac.md3
 	models/weapons/g_hookgun.md3
 	models/weapons/g_minstanex.md3
 	models/weapons/g_porto.md3
+    models/weapons/g_seeker.md3
+    models/weapons/v_hlac.md3
 	models/weapons/v_hookgun.md3
 	models/weapons/v_minstanex.md3
 	models/weapons/v_porto.md3
+    models/weapons/v_seeker.md3
+    models/weapons/w_hlac.zym
 	models/weapons/w_hookgun.zym
 	models/weapons/w_minstanex.zym
 	models/weapons/w_porto.zym
+    models/weapons/w_seeker.zym
 	particles/particlefont.tga
 	sound/announcer/male/airshot.ogg
 	sound/announcer/male/headshot.ogg

Modified: branches/nexuiz-2.0/data/defaultNexuiz.cfg
===================================================================
--- branches/nexuiz-2.0/data/defaultNexuiz.cfg	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/defaultNexuiz.cfg	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1112,15 +1112,15 @@
 
 alias allready "sv_cmd allready"
 
-seta cl_weaponpriority "9 8 11 7 6 5 4 3 2 1 10 12" // default porto and hook as LOW priority, use the weapon key numbers otherwise
+seta cl_weaponpriority "14 13 9 8 11 7 6 5 4 3 2 1 10 12" // default porto and hook as LOW priority, use the weapon key numbers otherwise
 seta cl_weaponpriority_useforcycling 0
 // impulse 200, 210, 220:
-seta cl_weaponpriority0 "9 8 4"      // explosives    (RL Hagar Mortar)
+seta cl_weaponpriority0 "14 9 8 4"   // explosives    (RL Hagar Mortar)
 // impulse 201, 211, 221:
-seta cl_weaponpriority1 "7 6 5 1"    // energy        (Nex Crylink Electro Laser)
+seta cl_weaponpriority1 "13 7 6 5 1" // energy        (Nex Crylink Electro Laser)
 seta cl_weaponpriority2 "7 3"        // hitscan exact (Nex MG)
 seta cl_weaponpriority3 "7 3 2"      // hitscan all   (Nex MG Shotgun)
-seta cl_weaponpriority4 "8 6 5 2"    // spam          (Hagar Crylink Electro Shotgun)
+seta cl_weaponpriority4 "13 8 6 5 2" // spam          (Hagar Crylink Electro Shotgun)
 seta cl_weaponpriority5 "1 12 10"    // for moving    (Laser Hook Port-O-Launch)
 seta cl_weaponpriority6 ""
 seta cl_weaponpriority7 ""
@@ -1144,6 +1144,8 @@
 set g_weaponreplace_10 ""
 set g_weaponreplace_11 ""
 set g_weaponreplace_12 ""
+set g_weaponreplace_13 ""
+set g_weaponreplace_14 ""
 
 seta sv_status_privacy 1 // hide IP addresses from "status" replies shown to clients
 

Modified: branches/nexuiz-2.0/data/effectinfo.txt
===================================================================
--- branches/nexuiz-2.0/data/effectinfo.txt	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/effectinfo.txt	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,2545 +1,2570 @@
-// item respawn effect
-// flare particle and light
-// used in qcsrc/server/bots.qc:		//te_wizspike(start)
-// used in qcsrc/server/bots.qc:				te_wizspike(org)
-// used in qcsrc/server/bots.qc:	//te_wizspike(e.origin)
-// used in qcsrc/server/bots.qc:		//te_wizspike(e.nearestwaypoint.wpnearestpoint)
-effect TE_WIZSPIKE
-countabsolute 1
-type static
-color 0x63F2EA 0x63f2EA
-size 20 20
-alpha 128 128 128
-lightradius 200
-lightradiusfade 200
-lightcolor 0.4 0.9 0.9
-// cloud of particles which expand rapidly and then slow to form a ball
-effect TE_WIZSPIKE
-count 100
-type static
-color 0x63F2EA 0x63f2EA
-size 2 2
-alpha 64 64 64
-airfriction 2
-liquidfriction 2
-originjitter 16 16 16
-velocityjitter 32 32 32
-
-// laser impact
-// decal
-// used in qcsrc/server/bots.qc:		//te_knightspike(end)
-// used in qcsrc/server/bots.qc:			te_knightspike(start)
-// used in qcsrc/server/bots.qc:						te_knightspike(org)
-// used in qcsrc/server/bots.qc:		te_knightspike(org)
-effect TE_KNIGHTSPIKE
-countabsolute 1
-type decal
-tex 47 47
-size 24 24
-alpha 256 256 0
-originjitter 16 16 16
-lightradius 200
-lightradiusfade 1000
-lightcolor 4 0.2 0.2
-// flare effect
-effect TE_KNIGHTSPIKE
-countabsolute 1
-type static
-tex 39 39
-color 0xFF2010 0xFF2010
-alpha 256 256 1024
-size 24 24
-// sparks that rapidly expand and rapidly slow down to form an interesting spherical effect
-effect TE_KNIGHTSPIKE
-count 256
-type spark
-color 0x800000 0xFF8020
-alpha 256 256 1024
-size 4 4
-//bounce 1.5
-airfriction 6
-liquidfriction 6
-//originjitter 32 32 32
-velocityjitter 256 256 256
-
-// machinegun bullet impact
-// bullet impact decal
-// used nowhere in code
-effect TE_SPIKE
-countabsolute 1
-type decal
-tex 56 59
-size 5 5
-alpha 256 256 0
-originjitter 6 6 6
-// dust/smoke drifting away from the impact
-effect TE_SPIKE
-count 8
-type smoke
-tex 0 8
-color 0x101010 0x101010
-size 3 3
-sizeincrease 3
-alpha 255 255 256
-originjitter 0 0 0
-velocityjitter 8 8 8
-// dust/smoke staying at the impact
-effect TE_SPIKE
-count 1
-type smoke
-tex 0 8
-color 0x505050 0x505050
-size 4 4
-sizeincrease 4
-alpha 255 255 128
-originjitter 0 0 0
-velocityjitter 0 0 0
-// bouncing sparks
-effect TE_SPIKE
-count 20
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 0 256 256
-gravity 1
-bounce 1.5
-velocityoffset 0 0 80
-velocityjitter 64 64 64
-
-// electro combo explosion
-// decal
-// used nowhere in code
-effect TE_SPIKEQUAD
-countabsolute 1
-type decal
-tex 59 59
-size 64 64
-alpha 256 256 0
-originjitter 34 34 34
-lightradius 400
-lightradiusfade 200
-lightcolor 2 2.5 3
-// flare effect
-effect TE_SPIKEQUAD
-countabsolute 1
-type static
-tex 38 38
-color 0x80C0FF 0x80C0FF
-size 48 48
-alpha 256 256 128
-// large sparks
-effect TE_SPIKEQUAD
-count 20
-type static
-color 0x2030FF 0x80C0FF
-size 32 32
-alpha 256 256 256
-//gravity 1
-bounce 1.5
-airfriction 4
-liquidfriction 16
-//velocityoffset 0 0 120
-velocityjitter 512 512 512
-
-// quake effect
-// decal
-// used nowhere in code
-effect TE_SUPERSPIKE
-countabsolute 1
-type decal
-tex 56 59
-size 3 3
-alpha 256 256 0
-originjitter 6 6 6
-// dust/smoke drifting away from the impact
-effect TE_SUPERSPIKE
-count 8
-type smoke
-tex 0 8
-color 0x101010 0x101010
-size 3 3
-sizeincrease 3
-alpha 255 255 256
-originjitter 0 0 0
-velocityjitter 8 8 8
-// dust/smoke staying at the impact
-effect TE_SUPERSPIKE
-count 1
-type smoke
-tex 0 8
-color 0x505050 0x505050
-size 4 4
-sizeincrease 4
-alpha 255 255 128
-originjitter 0 0 0
-velocityjitter 0 0 0
-// sparks that disappear on impact
-effect TE_SUPERSPIKE
-count 30
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 0 256 768
-gravity 1
-bounce -1
-velocityoffset 0 0 80
-velocityjitter 64 64 64
-
-// quake effect
-// decal
-// used nowhere in code
-effect TE_SUPERSPIKEQUAD
-countabsolute 1
-type decal
-tex 56 59
-size 3 3
-alpha 256 256 0
-originjitter 6 6 6
-lightradius 100
-lightradiusfade 500
-lightcolor 0.15 0.15 1.5
-// dust/smoke drifting away from the impact
-effect TE_SUPERSPIKEQUAD
-count 8
-type smoke
-tex 0 8
-color 0x101010 0x101010
-size 3 3
-sizeincrease 3
-alpha 255 255 256
-originjitter 0 0 0
-velocityjitter 8 8 8
-// dust/smoke staying at the impact
-effect TE_SUPERSPIKEQUAD
-count 1
-type smoke
-tex 0 8
-color 0x505050 0x505050
-size 4 4
-sizeincrease 4
-alpha 255 255 128
-originjitter 0 0 0
-velocityjitter 0 0 0
-// sparks that disappear on impact
-effect TE_SUPERSPIKEQUAD
-count 30
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 0 256 768
-gravity 1
-bounce -1
-velocityoffset 0 0 80
-velocityjitter 64 64 64
-
-// shotgun pellet impact
-// decal
-// used in qcsrc/server/bots.qc:			//te_gunshot(org)
-// used in qcsrc/server/bots.qc:					te_gunshot(org)
-// used in qcsrc/server/bots.qc:					te_gunshot(org)
-// used in qcsrc/server/bots.qc:						te_gunshot(org)
-// used in qcsrc/server/bots.qc:		//te_gunshot(end)
-effect TE_GUNSHOT
-countabsolute 1
-type decal
-tex 56 59
-size 3 3
-alpha 256 256 0
-originjitter 6 6 6
-// dust/smoke drifting away from the impact
-effect TE_GUNSHOT
-count 4
-type smoke
-tex 0 8
-color 0x101010 0x101010
-size 3 3
-sizeincrease 3
-alpha 128 128 64
-originjitter 0 0 0
-velocityjitter 8 8 8
-// dust/smoke staying at the impact
-effect TE_GUNSHOT
-count 1
-type smoke
-tex 0 8
-color 0x505050 0x505050
-size 4 4
-sizeincrease 4
-alpha 128 128 64
-originjitter 0 0 0
-velocityjitter 0 0 0
-// bouncing sparks
-effect TE_GUNSHOT
-count 10
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 0 64 64
-gravity 1
-bounce 1.5
-velocityoffset 0 0 80
-velocityjitter 64 64 64
-
-// crylink impact effect
-// decal
-// used nowhere in code
-effect TE_GUNSHOTQUAD
-countabsolute 1
-type decal
-tex 47 47
-size 8 8
-alpha 256 256 0
-originjitter 12 12 12
-//lightradius 100
-//lightradiusfade 300
-//lightcolor 0.5 0.5 0.5
-// purple flare effect
-effect TE_GUNSHOTQUAD
-countabsolute 1
-type static
-tex 39 39
-color 0x504060 0x504060
-size 8 8
-alpha 256 256 512
-// purple sparks
-effect TE_GUNSHOTQUAD
-count 12
-type spark
-color 0xA040C0 0xFFFFFF
-size 1 1
-alpha 128 128 384
-gravity 1
-bounce 1.5
-velocityoffset 0 0 80
-velocityjitter 128 128 128
-
-// mortar/hagar explosion (smaller than rocket)
-// decal
-// used nowhere in code
-effect TE_EXPLOSION
-countabsolute 1
-type decal
-tex 8 16
-size 48 48
-alpha 256 256 0
-originjitter 40 40 40
-lightradius 350
-lightradiusfade 700
-lightcolor 4 2 0.5
-// flare effect
-effect TE_EXPLOSION
-countabsolute 1
-type static
-tex 35 37
-color 0x404040 0x404040
-size 48 48
-alpha 192 192 64
-// fire effect which expands then slows
-effect TE_EXPLOSION
-notunderwater
-count 128
-type static
-tex 48 55
-color 0x902010 0xFFD080
-size 16 16
-alpha 128 128 256
-bounce 1.5
-airfriction 4
-liquidfriction 4
-originjitter 8 8 8
-velocityjitter 256 256 256
-// underwater bubbles
-effect TE_EXPLOSION
-underwater
-count 32
-type bubble
-tex 62 62
-color 0x404040 0x808080
-size 3 3
-alpha 128 256 64
-gravity -0.125
-bounce 1.5
-liquidfriction 0.25
-originjitter 16 16 16
-velocityjitter 96 96 96
-// bouncing sparks
-effect TE_EXPLOSION
-notunderwater
-count 32
-type spark
-color 0x903010 0xFFD030
-size 2 2
-alpha 256 256 384
-gravity 1
-airfriction 0.2
-bounce 1.5
-liquidfriction 0.8
-velocityoffset 0 0 80
-velocityjitter 256 256 256
-
-// quake effect
-// decal
-// used nowhere in code
-effect TE_EXPLOSIONQUAD
-countabsolute 1
-type decal
-tex 8 16
-size 48 48
-alpha 256 256 0
-originjitter 40 40 40
-lightradius 350
-lightradiusfade 700
-lightcolor 4 2 8
-// smoke cloud
-effect TE_EXPLOSIONQUAD
-notunderwater
-count 32
-type smoke
-color 0x202020 0x404040
-tex 0 8
-size 12 12
-alpha 32 32 64
-velocityjitter 48 48 48
-// underwater bubbles
-effect TE_EXPLOSIONQUAD
-underwater
-count 32
-type bubble
-tex 62 62
-color 0x404040 0x808080
-size 3 3
-alpha 128 256 64
-gravity -0.125
-bounce 1.5
-liquidfriction 0.25
-originjitter 16 16 16
-velocityjitter 96 96 96
-// sparks which go through walls
-effect TE_EXPLOSIONQUAD
-notunderwater
-count 128
-type spark
-color 0x903010 0xFFD030
-size 1 1
-alpha 0 256 512
-gravity 1
-airfriction 0.2
-liquidfriction 0.8
-velocityoffset 0 0 80
-velocityjitter 256 256 256
-
-// quake effect
-// decal
-// used in qcsrc/server/keyhunt.qc:	te_tarexplosion(lostkey.origin)
-effect TE_TAREXPLOSION
-countabsolute 1
-type decal
-tex 8 16
-size 48 48
-alpha 256 256 0
-originjitter 40 40 40
-lightradius 600
-lightradiusfade 1200
-lightcolor 1.6 0.8 2
-// smoke cloud
-effect TE_TAREXPLOSION
-notunderwater
-count 32
-type smoke
-color 0x202020 0x404040
-tex 0 8
-size 12 12
-alpha 32 32 64
-velocityjitter 48 48 48
-// underwater bubbles
-effect TE_TAREXPLOSION
-underwater
-count 32
-type bubble
-tex 62 62
-color 0x404040 0x808080
-size 3 3
-alpha 128 256 64
-gravity -0.125
-bounce 1.5
-liquidfriction 0.25
-originjitter 16 16 16
-velocityjitter 96 96 96
-// sparks which go through walls
-effect TE_TAREXPLOSION
-notunderwater
-count 128
-type spark
-color 0x903010 0xFFD030
-size 1 1
-alpha 0 256 512
-gravity 1
-airfriction 0.2
-liquidfriction 0.8
-velocityoffset 0 0 80
-velocityjitter 256 256 256
-
-// bloody impact effect indicating damage
-// used nowhere in code
-effect TE_BLOOD
-count 0.333
-type blood
-tex 24 32
-size 8 8
-alpha 256 256 64
-bounce -1
-airfriction 1
-liquidfriction 4
-velocityjitter 64 64 64
-velocitymultiplier 1
-
-// sparks (quake effect)
-// used in qcsrc/server/antilag.qc:		te_spark(antilag_takebackorigin(e, time - e.antilag_debug), '0 0 0', 32)
-// used in qcsrc/server/g_triggers.qc:	self.mdl = "TE_SPARK"
-effect TE_SPARK
-count 1
-type spark
-tex 40 40
-color 0x8f4333 0xfff31b
-size 0.4 0.6
-alpha 64 256 768
-gravity 1
-bounce -1
-velocityoffset 0 0 80
-velocityjitter 64 64 64
-velocitymultiplier 1
-
-// nex impact
-// decal
-// used in qcsrc/server/bots.qc:		te_plasmaburn(org)
-effect TE_PLASMABURN
-countabsolute 1
-type decal
-tex 47 47
-size 24 24
-alpha 256 256 0
-originjitter 16 16 16
-lightradius 200
-lightradiusfade 400
-lightcolor 1 1 1
-// flare effect
-effect TE_PLASMABURN
-countabsolute 1
-type static
-tex 37 37
-color 0x80C0FF 0x80C0FF
-size 8 8
-alpha 256 256 512
-// small sparks which form a sphere as they slow down
-effect TE_PLASMABURN
-count 256
-type spark
-color 0x2030FF 0x80C0FF
-size 1 2
-alpha 256 256 1024
-bounce 2
-airfriction 8
-liquidfriction 8
-velocityjitter 128 128 128
-
-// quake effect
-// used in qcsrc/server/bots.qc:	//te_smallflash((e.absmin + e.absmax) * 0.5)
-// used in qcsrc/server/bots.qc:		//te_smallflash((e.absmin + e.absmax) * 0.5)
-effect TE_SMALLFLASH
-lightradius 200
-lightradiusfade 1000
-lightcolor 2 2 2
-
-// quake effect
-// used nowhere in code
-effect TE_FLAMEJET
-count 1
-type smoke
-color 0x6f0f00 0xe3974f
-size 4 4
-alpha 64 128 384
-gravity -1
-bounce 1.1
-airfriction 1
-liquidfriction 4
-velocityjitter 128 128 128
-velocitymultiplier 1
-
-// quake effect
-// used nowhere in code
-effect TE_LAVASPLASH
-count 64
-type alphastatic
-color 0x6f0f00 0xe3974f
-size 12 12
-alpha 256 256 256
-gravity 0.05
-originoffset 0 0 32
-originjitter 128 128 32
-velocityoffset 0 0 256
-velocityjitter 128 128 0
-
-// player teleport effect
-// used nowhere in code
-effect TE_TELEPORT
-count 112
-type static
-color 0xA0A0A0 0xFFFFFF
-size 10 10
-alpha 64 128 256
-airfriction 1
-liquidfriction 4
-originoffset 0 0 28
-originjitter 16 16 28
-velocityjitter 0 0 256
-
-// nex beam
-// used in qcsrc/server/w_minstanex.qc:	trailparticles(world, particleeffectnum("TE_TEI_G3"), w_shotorg, trace_endpos)
-effect TE_TEI_G3
-countabsolute 1
-type beam
-tex 60 60
-color 0xFFFFFF 0xFFFFFF
-size 4 4
-alpha 128 128 256
-// experimental
-effect TE_TEI_G3
-trailspacing 2
-type static
-color 0x202020 0x404040
-size 1 1
-alpha 256 256 512
-airfriction -4
-//liquidfriction -4
-velocityjitter 8 8 8
-type smoke
-
-// smoke effect
-// used nowhere in code
-effect TE_TEI_SMOKE
-count 0.333
-type smoke
-color 0x202020 0x404040
-tex 0 8
-size 5 5
-alpha 256 256 512
-originjitter 1.5 1.5 1.5
-velocityjitter 6 6 6
-velocitymultiplier 1
-
-// rocket explosion (bigger than mortar and hagar)
-// decal
-// used nowhere in code
-effect TE_TEI_BIGEXPLOSION
-countabsolute 1
-type decal
-tex 8 16
-size 72 72
-alpha 256 256 0
-originjitter 40 40 40
-lightradius 500
-lightradiusfade 500
-lightcolor 4 2 0.5
-// flare effect
-effect TE_TEI_BIGEXPLOSION
-countabsolute 1
-type static
-tex 35 37
-color 0x404040 0x404040
-size 72 72
-alpha 192 192 64
-// fire effect
-effect TE_TEI_BIGEXPLOSION
-notunderwater
-count 256
-type static
-tex 48 55
-color 0x902010 0xFFD080
-size 16 16
-alpha 128 128 256
-bounce 1.5
-airfriction 4
-liquidfriction 4
-originjitter 8 8 8
-velocityjitter 512 512 512
-// underwater bubbles
-effect TE_TEI_BIGEXPLOSION
-underwater
-count 64
-type bubble
-tex 62 62
-color 0x404040 0x808080
-size 3 3
-alpha 128 256 64
-gravity -0.125
-bounce 1.5
-liquidfriction 0.25
-originjitter 16 16 16
-velocityjitter 144 144 144
-// bouncing sparks
-effect TE_TEI_BIGEXPLOSION
-notunderwater
-count 128
-type spark
-color 0x903010 0xFFD030
-size 2 2
-alpha 256 256 384
-gravity 1
-airfriction 0.2
-bounce 1.5
-liquidfriction 0.8
-velocityoffset 0 0 80
-velocityjitter 384 384 384
-
-// electro explosion
-// decal
-// used nowhere in code
-effect TE_TEI_PLASMAHIT
-countabsolute 1
-type decal
-tex 59 59
-size 32 32
-alpha 256 256 0
-originjitter 20 20 20
-lightradius 200
-lightradiusfade 600
-lightcolor 2.4 4.8 8
-// flare effect
-effect TE_TEI_PLASMAHIT
-countabsolute 1
-type static
-tex 38 38
-color 0x80C0FF 0x80C0FF
-size 32 32
-alpha 256 256 512
-// cloud of bouncing sparks
-effect TE_TEI_PLASMAHIT
-count 1
-type spark
-color 0x2030FF 0x80C0FF
-size 2 4
-alpha 256 256 1024
-//gravity 1
-bounce 1.5
-//velocityoffset 0 0 120
-velocityjitter 512 512 512
-
-
-
-
-
-
-
-
-
-//////////////////////////////////////////////////
-// New effects in 2.4
-//////////////////////////////////////////////////
-
-
-
-// bloody impact effect indicating damage
-// used in qcsrc/server/cl_player.qc:		pointparticles(particleeffectnum("blood"), hitloc, force, bound(0, damage, 200))
-// used in qcsrc/server/cl_player.qc:		pointparticles(particleeffectnum("blood"), hitloc, force, bound(0, damage, 200))
-// used in qcsrc/server/g_violence.qc:		pointparticles(particleeffectnum("blood"), self.origin + '0 0 1', '0 0 30', 10)
-effect blood
-count 0.333
-type blood
-tex 24 32
-size 8 8
-alpha 256 256 64
-bounce -1
-airfriction 1
-liquidfriction 4
-velocityjitter 64 64 64
-velocitymultiplier 1
-
-
-
-// player teleport effect
-// used in qcsrc/server/t_teleporters.qc:	pointparticles(particleeffectnum("teleport"), player.origin, '0 0 0', 1)
-// used in qcsrc/server/t_teleporters.qc:	pointparticles(particleeffectnum("teleport"), to + v_forward * 32, '0 0 0', 1)
-effect teleport
-count 112
-type static
-color 0xA0A0A0 0xFFFFFF
-size 10 10
-alpha 64 128 256
-airfriction 1
-liquidfriction 4
-originoffset 0 0 28
-originjitter 16 16 28
-velocityjitter 0 0 256
-
-
-
-// normal super gory blood trail (used by gibs)
-// used nowhere in code
-effect TR_BLOOD
-trailspacing 16
-type blood
-color 0xFFFFFF 0xFFFFFF
-tex 24 32
-size 8 8
-alpha 384 384 192
-bounce -1
-airfriction 1
-liquidfriction 4
-velocityjitter 64 64 64
-velocitymultiplier 0.5
-
-
-
-// thinner blood trail (used by quake zombies)
-// used nowhere in code
-effect TR_SLIGHTBLOOD
-trailspacing 32
-type blood
-color 0xFFFFFF 0xFFFFFF
-tex 24 32
-size 8 8
-alpha 384 384 192
-bounce -1
-airfriction 1
-liquidfriction 4
-velocityjitter 64 64 64
-velocitymultiplier 0.5
-
-
-
-// func_stardust effect, used in some maps to indicate teleporters
-// used in qcsrc/server/assault.qc:		//self.effects = EF_STARDUST
-// used in qcsrc/server/g_triggers.qc:	self.effects = EF_STARDUST
-// used in qcsrc/server/portals.qc:	portal.effects = EF_STARDUST | EF_BLUE
-effect EF_STARDUST
-count 75
-type static
-color 0xfff368 0xfff368
-size 1.0 2.0
-alpha 64 128 128
-gravity -0.1
-airfriction 0.2
-liquidfriction 0.8
-originjitter 16 16 64
-velocityjitter 32 32 0
-//lightradius 200
-//lighttime 0
-//lightcolor 0.4 0.9 0.9
-
-
-// flare particle and light
-// used in qcsrc/server/t_items.qc:	//pointparticles(particleeffectnum("item_respawn"), self.origin + self.mins_z * '0 0 1' + '0 0 48', '0 0 0', 1)
-// used in qcsrc/server/t_items.qc:	pointparticles(particleeffectnum("item_respawn"), self.origin + 0.5 * (self.mins + self.maxs), '0 0 0', 1)
-effect item_respawn
-countabsolute 1
-type static
-color 0x63F2EA 0x63f2EA
-size 32 32
-alpha 128 128 128
-// cloud of particles which expand rapidly and then slow to form a ball
-effect item_respawn
-count 64
-type spark
-tex 41 41
-color 0x63F2EA 0x63f2EA
-size 2 2
-alpha 256 256 1280
-//originjitter 24 24 24
-velocityjitter 256 256 256
-
-
-
-// used in qcsrc/server/t_jumppads.qc:			pointparticles(particleeffectnum("jumppad_activate"), other.origin, other.velocity, 1)
-effect jumppad_activate
-lightradius 200
-lightradiusfade 2000
-lightcolor 2 2 2
-
-
-
-// used in qcsrc/server/w_laser.qc:	pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
-effect laser_muzzleflash
-count 1
-type smoke
-color 0xFFFFFF 0xFFFFFF
-tex 0 8
-size 5 5
-alpha 64 64 128
-airfriction 12
-originjitter 1.5 1.5 1.5
-velocityjitter 6 6 6
-velocitymultiplier 0.01
-lightradius 200
-lightradiusfade 2000
-lightcolor 3 0.1 0.1
-
-
-
-// decal
-// used in qcsrc/server/w_laser.qc:	pointparticles(particleeffectnum("laser_impact"), org2, normal * 1000, 1)
-effect laser_impact
-countabsolute 1
-type decal
-tex 47 47
-size 24 24
-alpha 256 256 0
-originjitter 16 16 16
-lightradius 200
-lightradiusfade 500
-lightcolor 8 0.4 0.4
-// flare effect
-effect laser_impact
-countabsolute 1
-type static
-tex 39 39
-color 0xFF2010 0xFF2010
-alpha 256 256 1024
-size 24 24
-// sparks that rapidly expand and rapidly slow down to form an interesting spherical effect
-effect laser_impact
-count 256
-type spark
-color 0x800000 0xFF8020
-alpha 256 256 1024
-size 4 4
-//bounce 1.5
-airfriction 6
-liquidfriction 6
-//originjitter 32 32 32
-velocityjitter 256 256 256
-effect laser_impact
-count 8
-type smoke
-tex 48 55
-color 0x800000 0xFF8020
-size 12 12
-alpha 128 256 256
-originjitter 1 1 1
-velocitymultiplier 0.01
-velocityjitter 16 16 16
-sizeincrease 6
-
-
-
-// used in qcsrc/server/w_shotgun.qc:	pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, cvar("g_balance_shotgun_primary_ammo"))
-// used in qcsrc/server/w_shotgun.qc:	pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, cvar("g_balance_shotgun_secondary_ammo"))
-effect shotgun_muzzleflash
-count 3
-type smoke
-color 0x202020 0x404040
-tex 0 8
-size 5 5
-alpha 256 256 512
-originjitter 1.5 1.5 1.5
-velocityjitter 6 6 6
-velocitymultiplier 0.01
-lightradius 200
-lightradiusfade 2000
-lightcolor 2 1.5 0.2
-sizeincrease 12
-velocitymultiplier 0.05
-effect shotgun_muzzleflash
-count 10
-type spark
-tex 40 40
-color 0xFFFDD9 0xff5a00
-size 2 2
-alpha 0 128 1024
-originjitter 1 1 1
-velocityjitter 444 444 444
-velocitymultiplier 1.7
-gravity 0.3
-airfriction 5
-
-
-
-// shotgun pellet impact
-// decal
-// used in qcsrc/server/w_common.qc:				pointparticles(particleeffectnum("shotgun_impact"), trace_endpos, trace_plane_normal * 1000, 1)
-effect shotgun_impact
-countabsolute 1
-type decal
-tex 56 59
-size 3 3
-alpha 256 256 0
-originjitter 6 6 6
-//lightradius 30
-//lightradiusfade 90
-//lightcolor 1 1 1
-// dust/smoke drifting away from the impact
-effect shotgun_impact
-count 5
-type smoke
-tex 0 8
-color 0xFFFFFF 0xA37443
-size 7 7
-alpha 0 64 32
-originjitter 1 1 1
-airfriction 7
-liquidfriction 16
-velocityjitter 100 100 100
-sizeincrease 12
-velocitymultiplier 0.25
-// dust/smoke staying at the impact
-effect shotgun_impact
-count 1
-type smoke
-tex 0 8
-color 0xFFFFFF 0xFFFFFF
-size 17 17
-alpha 64 64 32
-sizeincrease 4
-// sparks
-effect shotgun_impact
-notunderwater
-count 20
-type spark
-tex 40 40
-color 0xFDFFD9 0xFDFFD9
-size 0.6 0.6
-alpha 256 256 768
-gravity 1
-bounce 1
-airfriction 5
-originjitter 1 1 1
-velocityjitter 400 400 400
-velocitymultiplier 0.1
-
-
-
-// used in qcsrc/server/w_uzi.qc:	pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
-effect uzi_muzzleflash
-count 2
-type static
-color 0x202020 0x404040
-tex 0 8
-size 5 5
-alpha 256 256 512
-originjitter 1.5 1.5 1.5
-velocityjitter 1 1 1
-velocitymultiplier 0.03
-lightradius 200
-lightradiusfade 2000
-lightcolor 2 1.5 0.2
-gravity -0.1
-effect uzi_muzzleflash
-count 20
-type spark
-tex 40 40
-color 0xFFFDD9 0xFFFDD9
-size 2 2
-alpha 0 128 1024
-originjitter 1 1 1
-velocityjitter 300 300 300
-velocitymultiplier 0.5
-airfriction 12
-
-
-// decal
-// used in qcsrc/server/cl_client.qc:	//pointparticles(particleeffectnum("machinegun_impact"), self.origin + self.view_ofs + '0 0 7', '0 0 0', 1)
-// used in qcsrc/server/w_common.qc:				pointparticles(particleeffectnum("machinegun_impact"), trace_endpos, trace_plane_normal * 1000, 1)
-effect machinegun_impact
-countabsolute 1
-type decal
-tex 56 59
-size 5 5
-alpha 256 256 0
-originjitter 6 6 6
-lightradius 80
-lightradiusfade 800
-lightcolor 6 3.6 0.6
-// dust/smoke drifting away from the impact
-effect machinegun_impact
-count 5
-type smoke
-tex 0 8
-color 0xFFFFFF 0xA37443
-size 7 7
-alpha 0 64 32
-originjitter 1 1 1
-airfriction 7
-liquidfriction 16
-velocityjitter 100 100 100
-sizeincrease 12
-velocitymultiplier 0.25
-// dust/smoke staying at the impact
-effect machinegun_impact
-count 1
-type smoke
-tex 0 8
-color 0xFFFFFF 0xFFFFFF
-size 17 17
-alpha 64 64 32
-sizeincrease 4
-// sparks
-effect machinegun_impact
-notunderwater
-count 20
-type spark
-tex 40 40
-color 0xFDFFD9 0xFDFFD9
-size 0.3 0.3
-alpha 256 256 768
-gravity 1
-bounce 1
-airfriction 5
-originjitter 1 1 1
-velocityjitter 400 400 400
-velocitymultiplier 0.1
-
-
-
-// used in qcsrc/server/w_grenadelauncher.qc:	pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
-// used in qcsrc/server/w_grenadelauncher.qc:	pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
-// used in qcsrc/server/w_porto.qc:	//pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
-effect grenadelauncher_muzzleflash
-count 3
-type smoke
-color 0x202020 0x404040
-tex 0 8
-size 5 5
-alpha 256 256 512
-originjitter 1.5 1.5 1.5
-airfriction 12
-velocityjitter 20 20 20
-velocitymultiplier 0.03
-lightradius 200
-lightradiusfade 2000
-lightcolor 2 1.5 0.2
-effect grenadelauncher_muzzleflash
-count 30
-type spark
-tex 40 40
-color 0xFFFDD9 0xFFFDD9
-size 3 3
-alpha 0 128 1024
-originjitter 1 1 1
-velocityjitter 300 300 300
-velocitymultiplier 0.5
-airfriction 12
-
-
-
-// hagar trail
-// smoke
-// used in qcsrc/server/w_hagar.qc:	missile.modelflags = MF_GRENADE
-// used in qcsrc/server/w_hagar.qc:	missile.modelflags = MF_GRENADE
-// used in qcsrc/server/w_porto.qc:	gren.modelflags = MF_GRENADE
-effect TR_GRENADE
-trailspacing 6
-type alphastatic
-color 0x303030 0x000000
-tex 0 8
-size 1 2
-bounce 1
-sizeincrease 2
-alpha 100 200 280
-originjitter 1 1 1
-velocityjitter 1 1 1
-velocitymultiplier -0.02
-//gravity -0.11
-// fire
-effect TR_GRENADE
-notunderwater
-trailspacing 2
-type static
-color 0xffdf72 0x811200
-tex 48 55
-size 1 2
-sizeincrease -15
-alpha 100 144 988
-airfriction 8
-velocityjitter 32 32 32
-velocitymultiplier -1.0
-// bubbles
-effect TR_GRENADE
-underwater
-trailspacing 8
-type bubble
-tex 62 62
-color 0x404040 0x808080
-size 1 1
-alpha 256 256 256
-gravity -0.125
-bounce 1.5
-liquidfriction 4
-velocityjitter 16 16 16
-
-
-
-// mortar trail
-// smoke
-// used in qcsrc/server/w_grenadelauncher.qc:	gren.modelflags = MF_TRACER2
-// used in qcsrc/server/w_grenadelauncher.qc:	gren.modelflags = MF_TRACER2
-// used in qcsrc/server/w_hook.qc:	gren.modelflags = MF_TRACER2
-effect TR_KNIGHTSPIKE // used for MF_TRACER2
-notunderwater
-trailspacing 5
-type alphastatic
-color 0x303030 0x000000
-tex 0 8
-size 3 3
-bounce 1
-sizeincrease 11
-alpha 100 200 400
-originjitter 2 2 2
-velocityjitter 3 3 3
-velocitymultiplier -0.02
-gravity -0.11
-//marker
-effect TR_KNIGHTSPIKE // used for MF_TRACER2
-type alphastatic
-color 0xFF0000 0xFF0000
-tex 62 62
-size 1 1 
-sizeincrease -0.1
-trailspacing 1
-alpha 256 256 720
-// bubbles
-effect TR_KNIGHTSPIKE // used for MF_TRACER2
-underwater
-trailspacing 16
-type bubble
-tex 62 62
-color 0x404040 0x808080
-size 1 1
-alpha 256 256 256
-gravity -0.125
-bounce 1.5
-liquidfriction 4
-velocityjitter 16 16 16
-
-
-
-// decal
-// used in qcsrc/server/w_grenadelauncher.qc:	pointparticles(particleeffectnum("grenade_explode"), org2, '0 0 0', 1)
-// used in qcsrc/server/w_grenadelauncher.qc:	pointparticles(particleeffectnum("grenade_explode"), org2, '0 0 0', 1)
-effect grenade_explode
-countabsolute 1
-type decal
-tex 8 16
-size 48 48
-alpha 256 256 0
-originjitter 40 40 40
-lightradius 250
-lightradiusfade 400
-lightcolor 8 4 1
-// fire effect which expands then slows
-effect grenade_explode
-notunderwater
-count 80
-type static
-tex 48 55
-color 0xe03f00 0x5e0000
-size 16 26
-sizeincrease 20
-alpha 128 228 356
-bounce 4.5
-airfriction 8
-liquidfriction 8
-originjitter 8 8 8
-velocityjitter 256 256 256
-// fire effect which make brigt dot inside
-effect grenade_explode
-notunderwater
-count 30
-type static
-tex 48 55
-color 0xe03f00 0xffdf92
-size 6 16
-sizeincrease 40
-alpha 228 328 756
-bounce 1
-airfriction 8
-liquidfriction 8
-originjitter 8 8 8
-velocityjitter 256 256 256
-// smoke
-effect grenade_explode
-type alphastatic
-notunderwater
-tex 0 8
-count 20
-size 20 40
-sizeincrease 34
-alpha 500 600 556
-velocityjitter 256 256 256
-airfriction 5
-color 0x000000 0x111111
-bounce 6
-// underwater bubbles
-effect grenade_explode
-underwater
-count 32
-type bubble
-tex 62 62
-color 0x404040 0x808080
-size 3 3
-alpha 128 256 64
-gravity -0.125
-bounce 1.5
-liquidfriction 0.25
-originjitter 16 16 16
-velocityjitter 96 96 96
-// bouncing sparks
-effect grenade_explode
-notunderwater
-count 16
-type spark
-color 0x903010 0xFFD030
-size 2 2
-tex 40 40
-alpha 256 256 384
-gravity 1
-airfriction 0.2
-bounce 1.5
-liquidfriction 0.8
-velocityoffset 0 0 80
-velocityjitter 256 256 256
-
-
-
-// used in qcsrc/server/w_electro.qc:	pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
-// used in qcsrc/server/w_electro.qc:	pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
-effect electro_muzzleflash
-count 1
-type smoke
-color 0x202020 0x404040
-tex 0 8
-size 5 5
-alpha 256 256 512
-originjitter 1.5 1.5 1.5
-velocityjitter 6 6 6
-velocitymultiplier 0.01
-lightradius 200
-lightradiusfade 2000
-lightcolor 2 1.5 0.2
-effect electro_muzzleflash
-count 30
-type spark
-tex 31 31
-color 0xD9FDFF 0xD9FDFF
-size 3 3
-alpha 0 128 1024
-originjitter 1 1 1
-velocityjitter 300 300 300
-velocitymultiplier 0.5
-airfriction 12
-
-
-
-// electro trail
-// glowing vapor trail
-// used nowhere in code
-effect TR_NEXUIZPLASMA
-trailspacing 2
-type static
-color 0x283880 0x283880
-size 3 3
-tex 62 62
-alpha 256 256 968
-//velocityjitter 16 16 16
-lightradius 90
-lighttime 0
-lightcolor 1.5 3 6
-velocitymultiplier -0.1
-// bright sparks
-effect TR_NEXUIZPLASMA
-trailspacing 6
-count 3
-type snow
-tex 42 42
-color 0x629dff 0x0018ff
-size 2 4
-sizeincrease -20
-alpha 444 512 1866
-bounce 1
-velocityoffset 0 0 15
-airfriction 12
-originjitter 1 1 1
-velocityjitter 50 50 50
-
-
-
-// decal
-// used in qcsrc/server/w_electro.qc:		pointparticles(particleeffectnum("electro_impact"), org2, '0 0 0', 1)
-effect electro_impact
-countabsolute 1
-type decal
-tex 59 59
-size 32 32
-alpha 256 256 0
-originjitter 20 20 20
-lightradius 250
-lightradiusfade 250
-lightcolor 3.125 4.375 10
-// flare effect
-effect electro_impact
-countabsolute 1
-type static
-tex 38 38
-color 0x80C0FF 0x80C0FF
-size 12 32
-alpha 256 256 512
-// cloud of bouncing sparks
-effect electro_impact
-count 60
-type smoke
-tex 42 42
-color 0x629dff 0x0018ff
-size 36 36
-sizeincrease -50
-alpha 256 256 1024
-bounce 2
-gravity -0.3
-airfriction 6
-originjitter 1 1 1
-velocityjitter 512 512 512
-// inner cloud of smoke
-effect electro_impact
-count 60
-type smoke
-color 0x629dff 0x0018ff
-tex 0 8
-size 20 24
-sizeincrease 50
-alpha 200 256 512
-airfriction 30
-originjitter 20 20 20
-velocityjitter 320 320 320
-
-// decal
-// used in qcsrc/server/w_electro.qc:		pointparticles(particleeffectnum("electro_ballexplode"), org2, '0 0 0', 1)
-effect electro_ballexplode
-countabsolute 1
-type decal
-tex 59 59
-size 32 32
-alpha 256 256 0
-originjitter 20 20 20
-lightradius 250
-lightradiusfade 250
-lightcolor 3.125 4.375 10
-// flare effect
-effect electro_ballexplode
-countabsolute 1
-type static
-tex 38 38
-color 0x80C0FF 0x80C0FF
-size 32 32
-alpha 256 256 512
-// cloud of bouncing sparks
-effect electro_ballexplode
-count 128
-type spark
-tex 41 41
-color 0xFDFFD9 0xFDFFD9
-size 16 16
-alpha 256 256 1024
-bounce 2
-//airfriction 2
-originjitter 1 1 1
-velocityjitter 512 512 512
-// inner cloud of smoke
-effect electro_ballexplode
-count 16
-type smoke
-color 0x202020 0x404040
-tex 0 8
-size 24 24
-alpha 256 256 512
-originjitter 20 20 20
-velocityjitter 32 32 32
-
-
-
-// decal
-// used in qcsrc/server/w_electro.qc:	pointparticles(particleeffectnum("electro_combo"), org2, '0 0 0', 1)
-effect electro_combo
-countabsolute 1
-type decal
-tex 59 59
-size 64 64
-alpha 256 256 0
-originjitter 34 34 34
-lightradius 400
-lightradiusfade 300
-lightcolor 4 5 6
-// flare effect
-effect electro_combo
-countabsolute 1
-type static
-tex 38 38
-color 0x80C0FF 0x80C0FF
-size 48 48
-alpha 128 128 64
-// large sparks
-effect electro_combo
-count 20
-type static
-color 0x2030FF 0x80C0FF
-size 32 32
-alpha 256 256 256
-bounce 2
-airfriction 6
-liquidfriction 16
-//velocityoffset 0 0 120
-velocityjitter 512 512 512
-effect electro_combo
-count 64
-type spark
-tex 41 41
-color 0xFDFFD9 0xFDFFD9
-size 16 16
-alpha 444 512 866
-bounce 2
-//airfriction 2
-originjitter 1 1 1
-velocityjitter 512 512 512
-// inner cloud of smoke
-effect electro_combo
-count 0.25
-type smoke
-color 0x202020 0x404040
-tex 0 8
-size 24 24
-alpha 256 256 256
-originjitter 20 20 20
-velocityjitter 32 32 32
-
-
-
-// used in qcsrc/server/w_crylink.qc:	pointparticles(particleeffectnum("crylink_muzzleflash"), w_shotorg, w_shotdir * 1000, shots)
-// used in qcsrc/server/w_crylink.qc:	pointparticles(particleeffectnum("crylink_muzzleflash"), w_shotorg, w_shotdir * 1000, shots)
-effect crylink_muzzleflash
-count 1
-type smoke
-color 0x202020 0x404040
-tex 0 8
-size 5 5
-alpha 128 128 256
-originjitter 1.5 1.5 1.5
-velocityjitter 6 6 6
-velocitymultiplier 0.01
-lightradius 200
-lightradiusfade 2000
-lightcolor 2 1.5 0.2
-effect crylink_muzzleflash
-count 10
-type spark
-tex 40 40
-color 0xA080C0 0xA080C0
-size 3 3
-alpha 0 128 1024
-originjitter 1 1 1
-velocityjitter 200 200 200
-velocitymultiplier 0.3
-airfriction 12
-
-
-
-// crylink impact effect
-// decal
-// used in qcsrc/server/w_crylink.qc:	pointparticles(particleeffectnum("crylink_impact"), self.origin, '0 0 0', 1)
-effect crylink_impact
-countabsolute 1
-type decal
-tex 47 47
-size 8 8
-alpha 256 256 0
-originjitter 12 12 12
-//lightradius 60
-//lightradiusfade 300
-//lightcolor 3.2 0.4 4
-// purple flare effect
-effect crylink_impact
-countabsolute 1
-type static
-tex 39 39
-color 0x504060 0x504060
-size 8 8
-alpha 256 256 512
-// purple sparks
-effect crylink_impact
-count 20
-type spark
-tex 41 41
-color 0xA040C0 0xA040C0
-bounce 2
-size 4 4
-alpha 256 256 1024
-velocityjitter 256 256 256
-// purple splash
-effect crylink_impact
-count 3
-type static
-color 0xE070FF 0xE070FF
-size 8 8
-alpha 256 256 512
-velocityjitter 8 8 8
-// purple splash
-effect crylink_impact
-count 3
-type static
-color 0xE070FF 0xE070FF
-size 8 8
-alpha 256 256 1024
-velocityjitter 32 32 32
-
-
-
-// used in qcsrc/server/w_minstanex.qc:	pointparticles(particleeffectnum("nex_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
-// used in qcsrc/server/w_nex.qc:	pointparticles(particleeffectnum("nex_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
-effect nex_muzzleflash
-count 10
-type smoke
-color 0x202020 0x404040
-tex 0 8
-size 16 16
-alpha 128 128 192
-originjitter 4 4 4
-velocityjitter 24 24 24
-velocitymultiplier 0.02
-lightradius 200
-lightradiusfade 200
-lightcolor 2 2.5 3
-effect nex_muzzleflash
-count 150
-type spark
-tex 41 41
-color 0xD9FDFF 0xD9FDFF
-size 3 3
-alpha 0 128 1024
-originjitter 1 1 1
-velocityjitter 600 600 600
-velocitymultiplier 0.5
-airfriction 9
-
-
-
-//// nex beam
-//effect nex_beam
-//countabsolute 1
-//type beam
-//tex 60 60
-//color 0xFFFFFF 0xFFFFFF
-//size 6 6
-//alpha 128 128 192
-// nex beam: ring smoke
-// used in qcsrc/server/w_nex.qc:	trailparticles(world, particleeffectnum("nex_beam"), w_shotorg, trace_endpos)
-effect nex_beam
-trailspacing 32
-color 0x1680A0 0x1680A0
-size 4 4
-tex 32 32
-alpha 64 128 64
-airfriction 5
-sizeincrease 2
-type static
-// nex beam: drifting smoke
-effect nex_beam
-trailspacing 6
-color 0x5080A0 0x5080A0
-size 1 1
-tex 0 8
-alpha 32 64 32
-airfriction 9
-sizeincrease 8
-velocityjitter 64 64 64
-type static
-// nex beam: bright core
-effect nex_beam
-trailspacing 6
-color 0x80CDFF 0x80CDFF
-size 4 4
-//tex 48 55
-alpha 256 256 1280
-type static
-//sparks
-effect nex_beam
-trailspacing 8
-color 0x1680A0 0x1680A0
-size 1 1
-tex 63 63
-alpha 64 128 80
-airfriction 5
-gravity -0.01
-type snow
-
-// nex impact
-// decal
-// used in qcsrc/server/w_minstanex.qc:		pointparticles(particleeffectnum("nex_impact"), trace_endpos - w_shotdir * 6, '0 0 0', 1)
-// used in qcsrc/server/w_nex.qc:		pointparticles(particleeffectnum("nex_impact"), trace_endpos - w_shotdir * 6, '0 0 0', 1)
-effect nex_impact
-countabsolute 1
-type decal
-tex 47 47
-size 24 24
-alpha 256 256 0
-originjitter 16 16 16
-lightradius 200
-lightradiusfade 250
-lightcolor 4 6 8
-// shockwave
-effect nex_impact
-countabsolute 1
-type static
-tex 34 34
-size 16 16
-alpha 100 100 300
-sizeincrease 200
-
-
-// flare effect
-effect nex_impact
-countabsolute 1
-type static
-tex 37 37
-color 0x80C0FF 0x80C0FF
-size 8 8
-alpha 256 256 256
-// small sparks which form a sphere as they slow down
-//effect nex_impact
-//count 256
-//type spark
-//color 0x2030FF 0x80C0FF
-//size 1 2
-//alpha 256 256 512
-//bounce 2
-//airfriction 8
-//liquidfriction 8
-//velocityjitter 384 384 384
-// small sparks which glow brightly but live briefly
-effect nex_impact
-count 128
-type spark
-tex 41 41
-color 0xD9FDFF 0xD9FDFF
-size 4 4
-alpha 0 128 512
-bounce 2
-velocityjitter 600 600 600
-velocitymultiplier 0.5
-airfriction 9
-
-
-
-// used in qcsrc/server/w_hagar.qc:	pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
-// used in qcsrc/server/w_hagar.qc:	pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
-effect hagar_muzzleflash
-count 4
-type smoke
-color 0x202020 0x404040
-tex 0 8
-size 5 5
-alpha 256 256 512
-originjitter 1.5 1.5 1.5
-velocityjitter 6 6 6
-velocitymultiplier 0.01
-lightradius 200
-lightradiusfade 2000
-lightcolor 2 1.5 0.2
-effect hagar_muzzleflash
-count 30
-type spark
-tex 40 40
-color 0xFFFDD9 0xFFFDD9
-size 3 3
-alpha 0 128 1024
-originjitter 1 1 1
-velocityjitter 300 300 300
-velocitymultiplier 0.5
-airfriction 12
-
-
-
-// used in qcsrc/server/w_hagar.qc:		pointparticles(particleeffectnum("hagar_bounce"), self.origin, self.velocity, 1)
-effect hagar_bounce
-count 4
-type smoke
-color 0x202020 0x404040
-tex 0 8
-size 5 5
-alpha 256 256 256
-originjitter 1.5 1.5 1.5
-velocityjitter 6 6 6
-velocitymultiplier 0.01
-lightradius 60
-lightradiusfade 300
-lightcolor 2 1.5 0.2
-effect hagar_bounce
-count 30
-type spark
-tex 40 40
-color 0xFFFDD9 0xFFFDD9
-size 3 3
-alpha 0 256 256
-gravity 1
-bounce 1.5
-originjitter 1 1 1
-velocityjitter 600 600 600
-velocitymultiplier 0.5
-airfriction 12
-
-
-
-// decal
-// used in qcsrc/server/w_hagar.qc:	pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1)
-// used in qcsrc/server/w_hagar.qc:	pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1)
-effect hagar_explode
-countabsolute 1
-type decal
-tex 8 16
-size 28 38
-alpha 256 256 0
-originjitter 40 40 40
-lightradius 250
-lightradiusfade 400
-lightcolor 8 4 1
-// fire effect which make bright dot inside
-effect hagar_explode
-notunderwater
-count 12
-type smoke
-tex 48 55
-color 0xffe955 0xff5a00
-size 16 26
-sizeincrease 5
-alpha 128 256 456
-bounce 1.5
-airfriction 8
-liquidfriction 8
-originjitter 8 8 8
-velocityjitter 156 156 156
-// fire effect which expands then slows
-effect hagar_explode
-notunderwater
-count 24
-type static
-tex 48 55
-color 0x8f0d00 0xff5a00
-size 20 26
-sizeincrease 15
-alpha 128 256 456
-bounce 1.5
-airfriction 12
-liquidfriction 8
-originjitter 8 8 8
-velocityjitter 256 256 256
-
-// smoke
-effect hagar_explode
-type alphastatic
-notunderwater
-tex 0 8
-count 20
-size 20 40
-sizeincrease 20
-alpha 500 600 556
-velocityjitter 244 244 244
-airfriction 5
-color 0x000000 0x111111
-bounce 2
-
-// underwater bubbles
-effect hagar_explode
-underwater
-count 32
-type bubble
-tex 62 62
-color 0x404040 0x808080
-size 3 3
-alpha 128 256 64
-gravity -0.125
-bounce 1.5
-liquidfriction 0.25
-originjitter 16 16 16
-velocityjitter 96 96 96
-// bouncing sparks
-effect hagar_explode
-notunderwater
-count 16
-type spark
-color 0x903010 0xFFD030
-size 2 2
-tex 40 40
-alpha 256 256 384
-gravity 1
-airfriction 0.2
-bounce 1.5
-liquidfriction 0.8
-velocityoffset 0 0 80
-velocityjitter 256 256 256
-
-
-
-// used in qcsrc/server/w_rocketlauncher.qc:	pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
-effect rocketlauncher_muzzleflash
-count 20
-type smoke
-color 0x202020 0x404040
-tex 0 8
-size 1 1
-sizeincrease 20
-alpha 256 256 256
-airfriction 2
-originjitter 1.5 1.5 1.5
-velocityjitter 40 40 40
-velocitymultiplier -0.13
-//lightradius 200
-//lightradiusfade 2000
-//lightcolor 2 1.5 0.2
-effect rocketlauncher_muzzleflash
-count 30
-type spark
-tex 40 40
-color 0xFFFDD9 0xFFFDD9
-size 3 3
-alpha 0 128 1024
-originjitter 1 1 1
-velocityjitter 300 300 300
-velocitymultiplier 0.5
-airfriction 12
-
-
-
-// rocket trail
-// smoke
-// used nowhere in code
-effect TR_ROCKET
-trailspacing 5
-type alphastatic
-color 0x303030 0x000000
-tex 0 8
-size 1 4
-bounce 1
-sizeincrease 11
-alpha 200 300 200
-lightradius 150
-lighttime 0
-lightcolor 6 3 1
-originjitter 2 2 2
-velocityjitter 3 3 3
-velocitymultiplier -0.02
-//gravity -0.11
-// fire
-effect TR_ROCKET
-notunderwater
-trailspacing 2
-type static
-color 0xffdf72 0x811200
-tex 48 55
-size 7 7
-sizeincrease -30
-alpha 100 144 588
-airfriction 8
-velocityjitter 32 32 32
-velocitymultiplier -1.5
-// bubbles
-effect TR_ROCKET
-underwater
-trailspacing 8
-type bubble
-tex 62 62
-color 0x404040 0x808080
-size 1 1
-alpha 256 256 256
-gravity -0.125
-bounce 1.5
-liquidfriction 4
-velocityjitter 16 16 16
-// sparks
-effect TR_ROCKET
-trailspacing 10
-type spark
-tex 40 40
-color 0xFFFDD9 0xFFFDD9
-size 1 1
-alpha 444 512 1866
-//gravity 1
-bounce 1
-//velocityoffset 0 0 15
-airfriction 5
-originjitter 1 1 1
-velocityjitter 100 100 100
-velocitymultiplier -0.31
-
-// rocket explosion (bigger than mortar and hagar)
-// decal
-// used in qcsrc/server/cl_player.qc:				pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1)
-// used in qcsrc/server/portals.qc:		pointparticles(particleeffectnum("rocket_explode"), portal.origin + v_forward * 16, v_forward * 1024, 4)
-// used in qcsrc/server/w_rocketlauncher.qc:	pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1)
-effect rocket_explode
-countabsolute 1
-type decal
-tex 8 16
-size 72 72
-alpha 256 256 0
-originjitter 40 40 40
-lightradius 400
-lightradiusfade 750
-lightcolor 8 4 1
-// fire effect
-effect rocket_explode
-notunderwater
-count 64
-type static
-tex 48 55
-color 0x8f0d00 0xff5a00
-size 33 44
-sizeincrease 45
-alpha 200 256 512
-bounce 1.5
-airfriction 8
-liquidfriction 8
-originjitter 8 8 8
-velocityjitter 512 512 512
-// fire effect 2
-effect rocket_explode
-notunderwater
-count 28
-type smoke
-tex 48 55
-color 0xea691b 0xeed05a
-size 33 44
-sizeincrease 55
-alpha 200 256 612
-bounce 2.5
-airfriction 19
-liquidfriction 19
-originjitter 8 8 8
-velocityjitter 912 912 912
-// smoke
-effect rocket_explode
-type alphastatic
-notunderwater
-tex 0 8
-count 64
-size 20 40
-sizeincrease 44
-alpha 400 500 456
-velocityjitter 444 444 444
-airfriction 5
-color 0x000000 0x111111
-bounce 2
-// underwater bubbles
-effect rocket_explode
-underwater
-count 64
-type bubble
-tex 62 62
-color 0x404040 0x808080
-size 3 3
-alpha 128 256 64
-gravity -0.125
-bounce 1.5
-liquidfriction 0.25
-originjitter 16 16 16
-velocityjitter 144 144 144
-// bouncing sparks
-effect rocket_explode
-notunderwater
-count 64
-type spark
-tex 40 40
-color 0xffa800 0xffedaf
-size 1 1
-sizeincrease 2
-alpha 44 256 384
-gravity 1
-airfriction -1
-bounce 1.5
-liquidfriction 0.8
-velocityoffset 0 0 80
-originjitter 16 16 16
-velocityjitter 224 224 324
-
-
-
-// used in qcsrc/server/g_hook.qc:	pointparticles(particleeffectnum("grapple_muzzleflash"), org, '0 0 0', 1)
-effect grapple_muzzleflash
-lightradius 160
-lightradiusfade 800
-lightcolor 1 0 0
-
-
-
-// used in qcsrc/server/g_hook.qc:	pointparticles(particleeffectnum("grapple_impact"), self.origin, '0 0 0', 1)
-effect grapple_impact
-lightradius 160
-lightradiusfade 800
-lightcolor 1 0 0
-
-
-
-// used nowhere in code
-effect nex242_misc_laser_beam
-countabsolute 1
-type beam
-tex 60 60
-size 1 1
-alpha 256 256 64
-color 0xff0000 0xff0000
-sizeincrease 1
-
-// used nowhere in code
-effect nex242_misc_laser_beam_end
-count 1
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 128 256 768
-gravity 1
-bounce -1
-velocityjitter 64 64 64
-velocitymultiplier 100
-
-
-
-// used nowhere in code
-effect nex242_misc_laser_beam_fast
-countabsolute 1
-type beam
-tex 60 60
-size 1 1
-alpha 256 256 640
-color 0xff0000 0xff0000
-sizeincrease 0.1
-
-// used nowhere in code
-effect nex242_misc_laser_beam_fast_end
-count 1
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 128 256 768
-gravity 1
-bounce -1
-velocityjitter 64 64 64
-velocitymultiplier 100
-
-// additional laser colors (mike)
-// used nowhere in code
-effect nex242_misc_laser_green_beam
-countabsolute 1
-type beam
-tex 60 60
-size 1 1
-alpha 256 256 64
-color 0x00ff00 0x00ff00
-sizeincrease 1
-
-// used nowhere in code
-effect nex242_misc_laser_green_beam_end
-count 1
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 128 256 768
-gravity 1
-bounce -1
-velocityjitter 64 64 64
-velocitymultiplier 100
-
-// used nowhere in code
-effect nex242_misc_laser_blue_beam
-countabsolute 1
-type beam
-tex 60 60
-size 1 1
-alpha 256 256 64
-color 0x0000ff 0x0000ff
-sizeincrease 1
-
-// used nowhere in code
-effect nex242_misc_laser_blue_beam_end
-count 1
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 128 256 768
-gravity 1
-bounce -1
-velocityjitter 64 64 64
-velocitymultiplier 100
-
-// used nowhere in code
-effect nex242_misc_laser_yellow_beam
-countabsolute 1
-type beam
-tex 60 60
-size 1 1
-alpha 256 256 64
-color 0xffff00 0xffff00
-sizeincrease 1
-
-// used nowhere in code
-effect nex242_misc_laser_yellow_beam_end
-count 1
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 128 256 768
-gravity 1
-bounce -1
-velocityjitter 64 64 64
-velocitymultiplier 100
-
-// used nowhere in code
-effect nex242_misc_laser_cyan_beam
-countabsolute 1
-type beam
-tex 60 60
-size 1 1
-alpha 256 256 64
-color 0x00ffff 0x00ffff
-sizeincrease 1
-
-// used nowhere in code
-effect nex242_misc_laser_cyan_beam_end
-count 1
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 128 256 768
-gravity 1
-bounce -1
-velocityjitter 64 64 64
-velocitymultiplier 100
-
-// used nowhere in code
-effect nex242_misc_laser_magenta_beam
-countabsolute 1
-type beam
-tex 60 60
-size 1 1
-alpha 256 256 64
-color 0xff00ff 0xff00ff
-sizeincrease 1
-
-// used nowhere in code
-effect nex242_misc_laser_magenta_beam_end
-count 1
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 128 256 768
-gravity 1
-bounce -1
-velocityjitter 64 64 64
-velocitymultiplier 100
-
-// used nowhere in code
-effect nex242_misc_laser_white_beam
-countabsolute 1
-type beam
-tex 60 60
-size 1 1
-alpha 256 256 64
-color 0xffffff 0xffffff
-sizeincrease 1
-
-// used nowhere in code
-effect nex242_misc_laser_white_beam_end
-count 1
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 128 256 768
-gravity 1
-bounce -1
-velocityjitter 64 64 64
-velocitymultiplier 100
-
-// used nowhere in code
-effect nex242_misc_laser_black_beam
-countabsolute 1
-type beam
-tex 60 60
-size 1 1
-alpha 256 256 64
-color 0x000000 0x000000
-sizeincrease 1
-
-// used nowhere in code
-effect nex242_misc_laser_black_beam_end
-count 1
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 128 256 768
-gravity 1
-bounce -1
-velocityjitter 64 64 64
-velocitymultiplier 100
-
-// used nowhere in code
-effect nex242_misc_laser_orange_beam
-countabsolute 1
-type beam
-tex 60 60
-size 1 1
-alpha 256 256 64
-color 0xff6600 0xff6600
-sizeincrease 1
-
-// used nowhere in code
-effect nex242_misc_laser_orange_beam_end
-count 1
-type spark
-color 0x8f4333 0xfff31b
-size 0.4 0.4
-alpha 128 256 768
-gravity 1
-bounce -1
-velocityjitter 64 64 64
-velocitymultiplier 100
-
-
-
-
-// bigger crylink impact effect
-// decal
-// used in qcsrc/server/w_crylink.qc:	pointparticles(particleeffectnum("crylink_impactbig"), self.origin, '0 0 0', 1)
-effect crylink_impactbig
-countabsolute 1
-type decal
-tex 47 47
-size 24 24
-alpha 256 256 0
-originjitter 12 12 12
-//lightradius 200
-//lightradiusfade 800
-//lightcolor 3.2 0.4 4
-// purple flare effect
-effect crylink_impactbig
-countabsolute 1
-type static
-tex 39 39
-color 0x504060 0x504060
-size 24 24
-alpha 256 256 512
-// purple sparks
-effect crylink_impactbig
-count 80
-type spark
-tex 41 41
-color 0xA040C0 0xA040C0
-bounce 2
-size 6 6
-alpha 256 256 1024
-velocityjitter 512 512 512
-// purple splash
-effect crylink_impactbig
-count 3
-type static
-color 0xE070FF 0xE070FF
-size 16 16
-alpha 256 256 512
-velocityjitter 32 32 32
-// purple splash
-effect crylink_impactbig
-count 6
-type static
-color 0xE070FF 0xE070FF
-size 16 16
-alpha 256 256 1024
-velocityjitter 256 256 256
-
-// Zero-violence effects
-
-// impact effect indicating damage
-// used in qcsrc/server/cl_player.qc:		pointparticles(particleeffectnum("damage_hit"), hitloc, force, bound(0, damage, 200))
-effect damage_hit
-count 1
-type static
-color 0x20FF30 0x80FFC0
-size 1 1
-alpha 256 256 256
-gravity -0.4
-bounce 1.5
-airfriction 8
-liquidfriction 16
-//velocityoffset 0 0 120
-velocityjitter 16 16 16
-
-// effect for removing player model
-// "teleport"
-// used in qcsrc/server/cl_player.qc:			pointparticles(particleeffectnum("damage_dissolve"), self.origin, force, 1)
-effect damage_dissolve
-count 96
-type static
-color 0x66FF66 0xFFFFFF
-size 10 10
-alpha 64 128 128
-airfriction 1
-liquidfriction 4
-originoffset 0 0 28
-originjitter 16 16 28
-velocityjitter 0 0 256
-// flare
-effect damage_dissolve
-countabsolute 1
-type static
-tex 38 38
-color 0x00FF00 0x99FF99
-size 32 32
-alpha 256 256 196
-// large sparks
-effect damage_dissolve
-count 20
-type static
-color 0x00FF00 0x99FF99
-size 16 16
-alpha 256 256 256
-//gravity 1
-bounce 1.5
-airfriction 4
-liquidfriction 16
-//velocityoffset 0 0 120
-velocityjitter 512 512 512
-
-// decal
-// used in qcsrc/server/g_triggers.qc:			self.cnt = particleeffectnum("laser_deadly")
-effect laser_deadly
-countabsolute 1
-type decal
-tex 56 59
-size 5 5
-alpha 256 256 0
-originjitter 6 6 6
-// dust/smoke drifting away from the impact
-effect laser_deadly
-count 0.05 // 50 per second
-type smoke
-tex 48 55
-color 0xFFFFFF 0xFFFFFF
-size 3 3
-alpha 0 64 64
-originjitter 1 1 1
-airfriction 7
-liquidfriction 16
-velocityjitter 15 15 15
-sizeincrease 2
-velocitymultiplier 20
-// sparks
-effect laser_deadly
-notunderwater
-count 0.05 // 50 per second
-type spark
-tex 40 40
-color 0xFDFFD9 0xFDFFD9
-size 0.6 0.6
-alpha 256 256 768
-gravity 1
-bounce 1
-airfriction 5
-originjitter 1 1 1
-velocityjitter 100 100 100
-velocitymultiplier 100
-
-
-//torch
-//fire
-// used nowhere in code
-effect torch_small
-//notunderwater
-count 16
-type smoke
-tex 48 55
-size 1 11
-alpha 200 256 512
-gravity -0.5
-color 0x8f0d00 0xff5a00
-//bounce 1
-sizeincrease -1
-originjitter 5 5 5
-velocityjitter 1 1 50
-// smoke
-effect torch_small
-type alphastatic
-count 8
-tex 0 8
-size 5 10
-sizeincrease 5
-alpha 200 256 200
-color 0x000000 0x111111
-gravity -0.3
-originjitter 3 3 3
-velocityjitter 11 11 50
-//bounce 1
-
-//fountain01
-// used nowhere in code
-effect fountain01
-count 32
-tex 0 8
-size 10 15
-alpha 0 100 100
-gravity 0.6
-bounce 1
-sizeincrease 20
-type snow
-bounce 1
-originjitter 5 5 5
-velocityjitter 81 81 150
-color 0x7cbaff 0xcfd1ff
-velocitymultiplier 2
-
-
-
-// decal
-// used in qcsrc/server/w_hook.qc:	pointparticles(particleeffectnum("hookbomb_explode"), org2, '0 0 0', 1)
-effect hookbomb_explode
-countabsolute 1
-type decal
-tex 8 16
-size 96 96
-alpha 256 256 0
-originjitter 40 40 40
-lightradius 1600
-lightradiusfade 800
-lightcolor 1 4 8
-// fire effect which make brigt dot inside
-effect hookbomb_explode
-notunderwater
-count 100
-type static
-tex 48 55
-color 0x003fe0 0x92dfff
-size 12 32
-sizeincrease 80
-alpha 512 328 756
-bounce 1
-airfriction 8
-liquidfriction 8
-originjitter 8 8 8
-velocityjitter 1024 1024 1024
-// smoke
-effect hookbomb_explode
-type alphastatic
-notunderwater
-tex 0 8
-count 160
-size 80 160
-sizeincrease 300
-alpha 500 600 556
-velocityoffset 0 0 0
-velocityjitter 256 256 256
-airfriction 0
-color 0x000000 0x111111
-bounce 6
-// underwater bubbles
-effect hookbomb_explode
-underwater
-count 60
-type bubble
-tex 62 62
-color 0x404040 0x808080
-size 3 3
-alpha 128 256 64
-gravity -0.125
-bounce 1.5
-liquidfriction 0.0625
-originjitter 16 16 16
-velocityjitter 192 192 192
+// item respawn effect
+// flare particle and light
+// used in qcsrc/server/bots.qc:		//te_wizspike(start)
+// used in qcsrc/server/bots.qc:				te_wizspike(org)
+// used in qcsrc/server/bots.qc:	//te_wizspike(e.origin)
+// used in qcsrc/server/bots.qc:		//te_wizspike(e.nearestwaypoint.wpnearestpoint)
+effect TE_WIZSPIKE
+countabsolute 1
+type static
+color 0x63F2EA 0x63f2EA
+size 20 20
+alpha 128 128 128
+lightradius 200
+lightradiusfade 200
+lightcolor 0.4 0.9 0.9
+// cloud of particles which expand rapidly and then slow to form a ball
+effect TE_WIZSPIKE
+count 100
+type static
+color 0x63F2EA 0x63f2EA
+size 2 2
+alpha 64 64 64
+airfriction 2
+liquidfriction 2
+originjitter 16 16 16
+velocityjitter 32 32 32
+
+// laser impact
+// decal
+// used in qcsrc/server/bots.qc:		//te_knightspike(end)
+// used in qcsrc/server/bots.qc:			te_knightspike(start)
+// used in qcsrc/server/bots.qc:						te_knightspike(org)
+// used in qcsrc/server/bots.qc:		te_knightspike(org)
+effect TE_KNIGHTSPIKE
+countabsolute 1
+type decal
+tex 47 47
+size 24 24
+alpha 256 256 0
+originjitter 16 16 16
+lightradius 200
+lightradiusfade 1000
+lightcolor 4 0.2 0.2
+// flare effect
+effect TE_KNIGHTSPIKE
+countabsolute 1
+type static
+tex 39 39
+color 0xFF2010 0xFF2010
+alpha 256 256 1024
+size 24 24
+// sparks that rapidly expand and rapidly slow down to form an interesting spherical effect
+effect TE_KNIGHTSPIKE
+count 256
+type spark
+color 0x800000 0xFF8020
+alpha 256 256 1024
+size 4 4
+//bounce 1.5
+airfriction 6
+liquidfriction 6
+//originjitter 32 32 32
+velocityjitter 256 256 256
+
+// machinegun bullet impact
+// bullet impact decal
+// used nowhere in code
+effect TE_SPIKE
+countabsolute 1
+type decal
+tex 56 59
+size 5 5
+alpha 256 256 0
+originjitter 6 6 6
+// dust/smoke drifting away from the impact
+effect TE_SPIKE
+count 8
+type smoke
+tex 0 8
+color 0x101010 0x101010
+size 3 3
+sizeincrease 3
+alpha 255 255 256
+originjitter 0 0 0
+velocityjitter 8 8 8
+// dust/smoke staying at the impact
+effect TE_SPIKE
+count 1
+type smoke
+tex 0 8
+color 0x505050 0x505050
+size 4 4
+sizeincrease 4
+alpha 255 255 128
+originjitter 0 0 0
+velocityjitter 0 0 0
+// bouncing sparks
+effect TE_SPIKE
+count 20
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 0 256 256
+gravity 1
+bounce 1.5
+velocityoffset 0 0 80
+velocityjitter 64 64 64
+
+// electro combo explosion
+// decal
+// used nowhere in code
+effect TE_SPIKEQUAD
+countabsolute 1
+type decal
+tex 59 59
+size 64 64
+alpha 256 256 0
+originjitter 34 34 34
+lightradius 400
+lightradiusfade 200
+lightcolor 2 2.5 3
+// flare effect
+effect TE_SPIKEQUAD
+countabsolute 1
+type static
+tex 38 38
+color 0x80C0FF 0x80C0FF
+size 48 48
+alpha 256 256 128
+// large sparks
+effect TE_SPIKEQUAD
+count 20
+type static
+color 0x2030FF 0x80C0FF
+size 32 32
+alpha 256 256 256
+//gravity 1
+bounce 1.5
+airfriction 4
+liquidfriction 16
+//velocityoffset 0 0 120
+velocityjitter 512 512 512
+
+// quake effect
+// decal
+// used nowhere in code
+effect TE_SUPERSPIKE
+countabsolute 1
+type decal
+tex 56 59
+size 3 3
+alpha 256 256 0
+originjitter 6 6 6
+// dust/smoke drifting away from the impact
+effect TE_SUPERSPIKE
+count 8
+type smoke
+tex 0 8
+color 0x101010 0x101010
+size 3 3
+sizeincrease 3
+alpha 255 255 256
+originjitter 0 0 0
+velocityjitter 8 8 8
+// dust/smoke staying at the impact
+effect TE_SUPERSPIKE
+count 1
+type smoke
+tex 0 8
+color 0x505050 0x505050
+size 4 4
+sizeincrease 4
+alpha 255 255 128
+originjitter 0 0 0
+velocityjitter 0 0 0
+// sparks that disappear on impact
+effect TE_SUPERSPIKE
+count 30
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 0 256 768
+gravity 1
+bounce -1
+velocityoffset 0 0 80
+velocityjitter 64 64 64
+
+// quake effect
+// decal
+// used nowhere in code
+effect TE_SUPERSPIKEQUAD
+countabsolute 1
+type decal
+tex 56 59
+size 3 3
+alpha 256 256 0
+originjitter 6 6 6
+lightradius 100
+lightradiusfade 500
+lightcolor 0.15 0.15 1.5
+// dust/smoke drifting away from the impact
+effect TE_SUPERSPIKEQUAD
+count 8
+type smoke
+tex 0 8
+color 0x101010 0x101010
+size 3 3
+sizeincrease 3
+alpha 255 255 256
+originjitter 0 0 0
+velocityjitter 8 8 8
+// dust/smoke staying at the impact
+effect TE_SUPERSPIKEQUAD
+count 1
+type smoke
+tex 0 8
+color 0x505050 0x505050
+size 4 4
+sizeincrease 4
+alpha 255 255 128
+originjitter 0 0 0
+velocityjitter 0 0 0
+// sparks that disappear on impact
+effect TE_SUPERSPIKEQUAD
+count 30
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 0 256 768
+gravity 1
+bounce -1
+velocityoffset 0 0 80
+velocityjitter 64 64 64
+
+// shotgun pellet impact
+// decal
+// used in qcsrc/server/bots.qc:			//te_gunshot(org)
+// used in qcsrc/server/bots.qc:					te_gunshot(org)
+// used in qcsrc/server/bots.qc:					te_gunshot(org)
+// used in qcsrc/server/bots.qc:						te_gunshot(org)
+// used in qcsrc/server/bots.qc:		//te_gunshot(end)
+effect TE_GUNSHOT
+countabsolute 1
+type decal
+tex 56 59
+size 3 3
+alpha 256 256 0
+originjitter 6 6 6
+// dust/smoke drifting away from the impact
+effect TE_GUNSHOT
+count 4
+type smoke
+tex 0 8
+color 0x101010 0x101010
+size 3 3
+sizeincrease 3
+alpha 128 128 64
+originjitter 0 0 0
+velocityjitter 8 8 8
+// dust/smoke staying at the impact
+effect TE_GUNSHOT
+count 1
+type smoke
+tex 0 8
+color 0x505050 0x505050
+size 4 4
+sizeincrease 4
+alpha 128 128 64
+originjitter 0 0 0
+velocityjitter 0 0 0
+// bouncing sparks
+effect TE_GUNSHOT
+count 10
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 0 64 64
+gravity 1
+bounce 1.5
+velocityoffset 0 0 80
+velocityjitter 64 64 64
+
+// crylink impact effect
+// decal
+// used nowhere in code
+effect TE_GUNSHOTQUAD
+countabsolute 1
+type decal
+tex 47 47
+size 8 8
+alpha 256 256 0
+originjitter 12 12 12
+//lightradius 100
+//lightradiusfade 300
+//lightcolor 0.5 0.5 0.5
+// purple flare effect
+effect TE_GUNSHOTQUAD
+countabsolute 1
+type static
+tex 39 39
+color 0x504060 0x504060
+size 8 8
+alpha 256 256 512
+// purple sparks
+effect TE_GUNSHOTQUAD
+count 12
+type spark
+color 0xA040C0 0xFFFFFF
+size 1 1
+alpha 128 128 384
+gravity 1
+bounce 1.5
+velocityoffset 0 0 80
+velocityjitter 128 128 128
+
+// mortar/hagar explosion (smaller than rocket)
+// decal
+// used nowhere in code
+effect TE_EXPLOSION
+countabsolute 1
+type decal
+tex 8 16
+size 48 48
+alpha 256 256 0
+originjitter 40 40 40
+lightradius 350
+lightradiusfade 700
+lightcolor 4 2 0.5
+// flare effect
+effect TE_EXPLOSION
+countabsolute 1
+type static
+tex 35 37
+color 0x404040 0x404040
+size 48 48
+alpha 192 192 64
+// fire effect which expands then slows
+effect TE_EXPLOSION
+notunderwater
+count 128
+type static
+tex 48 55
+color 0x902010 0xFFD080
+size 16 16
+alpha 128 128 256
+bounce 1.5
+airfriction 4
+liquidfriction 4
+originjitter 8 8 8
+velocityjitter 256 256 256
+// underwater bubbles
+effect TE_EXPLOSION
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 3
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 16 16 16
+velocityjitter 96 96 96
+// bouncing sparks
+effect TE_EXPLOSION
+notunderwater
+count 32
+type spark
+color 0x903010 0xFFD030
+size 2 2
+alpha 256 256 384
+gravity 1
+airfriction 0.2
+bounce 1.5
+liquidfriction 0.8
+velocityoffset 0 0 80
+velocityjitter 256 256 256
+
+// quake effect
+// decal
+// used nowhere in code
+effect TE_EXPLOSIONQUAD
+countabsolute 1
+type decal
+tex 8 16
+size 48 48
+alpha 256 256 0
+originjitter 40 40 40
+lightradius 350
+lightradiusfade 700
+lightcolor 4 2 8
+// smoke cloud
+effect TE_EXPLOSIONQUAD
+notunderwater
+count 32
+type smoke
+color 0x202020 0x404040
+tex 0 8
+size 12 12
+alpha 32 32 64
+velocityjitter 48 48 48
+// underwater bubbles
+effect TE_EXPLOSIONQUAD
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 3
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 16 16 16
+velocityjitter 96 96 96
+// sparks which go through walls
+effect TE_EXPLOSIONQUAD
+notunderwater
+count 128
+type spark
+color 0x903010 0xFFD030
+size 1 1
+alpha 0 256 512
+gravity 1
+airfriction 0.2
+liquidfriction 0.8
+velocityoffset 0 0 80
+velocityjitter 256 256 256
+
+// quake effect
+// decal
+// used in qcsrc/server/keyhunt.qc:	te_tarexplosion(lostkey.origin)
+effect TE_TAREXPLOSION
+countabsolute 1
+type decal
+tex 8 16
+size 48 48
+alpha 256 256 0
+originjitter 40 40 40
+lightradius 600
+lightradiusfade 1200
+lightcolor 1.6 0.8 2
+// smoke cloud
+effect TE_TAREXPLOSION
+notunderwater
+count 32
+type smoke
+color 0x202020 0x404040
+tex 0 8
+size 12 12
+alpha 32 32 64
+velocityjitter 48 48 48
+// underwater bubbles
+effect TE_TAREXPLOSION
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 3
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 16 16 16
+velocityjitter 96 96 96
+// sparks which go through walls
+effect TE_TAREXPLOSION
+notunderwater
+count 128
+type spark
+color 0x903010 0xFFD030
+size 1 1
+alpha 0 256 512
+gravity 1
+airfriction 0.2
+liquidfriction 0.8
+velocityoffset 0 0 80
+velocityjitter 256 256 256
+
+// bloody impact effect indicating damage
+// used nowhere in code
+effect TE_BLOOD
+count 0.333
+type blood
+tex 24 32
+size 8 8
+alpha 256 256 64
+bounce -1
+airfriction 1
+liquidfriction 4
+velocityjitter 64 64 64
+velocitymultiplier 1
+
+// sparks (quake effect)
+// used in qcsrc/server/antilag.qc:		te_spark(antilag_takebackorigin(e, time - e.antilag_debug), '0 0 0', 32)
+// used in qcsrc/server/g_triggers.qc:	self.mdl = "TE_SPARK"
+effect TE_SPARK
+count 1
+type spark
+tex 40 40
+color 0x8f4333 0xfff31b
+size 0.4 0.6
+alpha 64 256 768
+gravity 1
+bounce -1
+velocityoffset 0 0 80
+velocityjitter 64 64 64
+velocitymultiplier 1
+
+// nex impact
+// decal
+// used in qcsrc/server/bots.qc:		te_plasmaburn(org)
+effect TE_PLASMABURN
+countabsolute 1
+type decal
+tex 47 47
+size 24 24
+alpha 256 256 0
+originjitter 16 16 16
+lightradius 200
+lightradiusfade 400
+lightcolor 1 1 1
+// flare effect
+effect TE_PLASMABURN
+countabsolute 1
+type static
+tex 37 37
+color 0x80C0FF 0x80C0FF
+size 8 8
+alpha 256 256 512
+// small sparks which form a sphere as they slow down
+effect TE_PLASMABURN
+count 256
+type spark
+color 0x2030FF 0x80C0FF
+size 1 2
+alpha 256 256 1024
+bounce 2
+airfriction 8
+liquidfriction 8
+velocityjitter 128 128 128
+
+// quake effect
+// used in qcsrc/server/bots.qc:	//te_smallflash((e.absmin + e.absmax) * 0.5)
+// used in qcsrc/server/bots.qc:		//te_smallflash((e.absmin + e.absmax) * 0.5)
+effect TE_SMALLFLASH
+lightradius 200
+lightradiusfade 1000
+lightcolor 2 2 2
+
+// quake effect
+// used nowhere in code
+effect TE_FLAMEJET
+count 1
+type smoke
+color 0x6f0f00 0xe3974f
+size 4 4
+alpha 64 128 384
+gravity -1
+bounce 1.1
+airfriction 1
+liquidfriction 4
+velocityjitter 128 128 128
+velocitymultiplier 1
+
+// quake effect
+// used nowhere in code
+effect TE_LAVASPLASH
+count 64
+type alphastatic
+color 0x6f0f00 0xe3974f
+size 12 12
+alpha 256 256 256
+gravity 0.05
+originoffset 0 0 32
+originjitter 128 128 32
+velocityoffset 0 0 256
+velocityjitter 128 128 0
+
+// player teleport effect
+// used nowhere in code
+effect TE_TELEPORT
+count 112
+type static
+color 0xA0A0A0 0xFFFFFF
+size 10 10
+alpha 64 128 256
+airfriction 1
+liquidfriction 4
+originoffset 0 0 28
+originjitter 16 16 28
+velocityjitter 0 0 256
+
+// nex beam
+// used in qcsrc/server/w_minstanex.qc:	trailparticles(world, particleeffectnum("TE_TEI_G3"), w_shotorg, trace_endpos)
+effect TE_TEI_G3
+countabsolute 1
+type beam
+tex 60 60
+color 0xFFFFFF 0xFFFFFF
+size 4 4
+alpha 128 128 256
+// experimental
+effect TE_TEI_G3
+trailspacing 2
+type static
+color 0x202020 0x404040
+size 1 1
+alpha 256 256 512
+airfriction -4
+//liquidfriction -4
+velocityjitter 8 8 8
+type smoke
+
+// smoke effect
+// used nowhere in code
+effect TE_TEI_SMOKE
+count 0.333
+type smoke
+color 0x202020 0x404040
+tex 0 8
+size 5 5
+alpha 256 256 512
+originjitter 1.5 1.5 1.5
+velocityjitter 6 6 6
+velocitymultiplier 1
+
+// rocket explosion (bigger than mortar and hagar)
+// decal
+// used nowhere in code
+effect TE_TEI_BIGEXPLOSION
+countabsolute 1
+type decal
+tex 8 16
+size 72 72
+alpha 256 256 0
+originjitter 40 40 40
+lightradius 500
+lightradiusfade 500
+lightcolor 4 2 0.5
+// flare effect
+effect TE_TEI_BIGEXPLOSION
+countabsolute 1
+type static
+tex 35 37
+color 0x404040 0x404040
+size 72 72
+alpha 192 192 64
+// fire effect
+effect TE_TEI_BIGEXPLOSION
+notunderwater
+count 256
+type static
+tex 48 55
+color 0x902010 0xFFD080
+size 16 16
+alpha 128 128 256
+bounce 1.5
+airfriction 4
+liquidfriction 4
+originjitter 8 8 8
+velocityjitter 512 512 512
+// underwater bubbles
+effect TE_TEI_BIGEXPLOSION
+underwater
+count 64
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 3
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 16 16 16
+velocityjitter 144 144 144
+// bouncing sparks
+effect TE_TEI_BIGEXPLOSION
+notunderwater
+count 128
+type spark
+color 0x903010 0xFFD030
+size 2 2
+alpha 256 256 384
+gravity 1
+airfriction 0.2
+bounce 1.5
+liquidfriction 0.8
+velocityoffset 0 0 80
+velocityjitter 384 384 384
+
+// electro explosion
+// decal
+// used nowhere in code
+effect TE_TEI_PLASMAHIT
+countabsolute 1
+type decal
+tex 59 59
+size 32 32
+alpha 256 256 0
+originjitter 20 20 20
+lightradius 200
+lightradiusfade 600
+lightcolor 2.4 4.8 8
+// flare effect
+effect TE_TEI_PLASMAHIT
+countabsolute 1
+type static
+tex 38 38
+color 0x80C0FF 0x80C0FF
+size 32 32
+alpha 256 256 512
+// cloud of bouncing sparks
+effect TE_TEI_PLASMAHIT
+count 1
+type spark
+color 0x2030FF 0x80C0FF
+size 2 4
+alpha 256 256 1024
+//gravity 1
+bounce 1.5
+//velocityoffset 0 0 120
+velocityjitter 512 512 512
+
+
+
+
+
+
+
+
+
+//////////////////////////////////////////////////
+// New effects in 2.4
+//////////////////////////////////////////////////
+
+
+
+// bloody impact effect indicating damage
+// used in qcsrc/server/cl_player.qc:		pointparticles(particleeffectnum("blood"), hitloc, force, bound(0, damage, 200))
+// used in qcsrc/server/cl_player.qc:		pointparticles(particleeffectnum("blood"), hitloc, force, bound(0, damage, 200))
+// used in qcsrc/server/g_violence.qc:		pointparticles(particleeffectnum("blood"), self.origin + '0 0 1', '0 0 30', 10)
+effect blood
+count 0.333
+type blood
+tex 24 32
+size 8 8
+alpha 256 256 64
+bounce -1
+airfriction 1
+liquidfriction 4
+velocityjitter 64 64 64
+velocitymultiplier 1
+
+
+
+// player teleport effect
+// used in qcsrc/server/t_teleporters.qc:	pointparticles(particleeffectnum("teleport"), player.origin, '0 0 0', 1)
+// used in qcsrc/server/t_teleporters.qc:	pointparticles(particleeffectnum("teleport"), to + v_forward * 32, '0 0 0', 1)
+effect teleport
+count 112
+type static
+color 0xA0A0A0 0xFFFFFF
+size 10 10
+alpha 64 128 256
+airfriction 1
+liquidfriction 4
+originoffset 0 0 28
+originjitter 16 16 28
+velocityjitter 0 0 256
+
+
+
+// normal super gory blood trail (used by gibs)
+// used nowhere in code
+effect TR_BLOOD
+trailspacing 16
+type blood
+color 0xFFFFFF 0xFFFFFF
+tex 24 32
+size 8 8
+alpha 384 384 192
+bounce -1
+airfriction 1
+liquidfriction 4
+velocityjitter 64 64 64
+velocitymultiplier 0.5
+
+
+
+// thinner blood trail (used by quake zombies)
+// used nowhere in code
+effect TR_SLIGHTBLOOD
+trailspacing 32
+type blood
+color 0xFFFFFF 0xFFFFFF
+tex 24 32
+size 8 8
+alpha 384 384 192
+bounce -1
+airfriction 1
+liquidfriction 4
+velocityjitter 64 64 64
+velocitymultiplier 0.5
+
+
+
+// func_stardust effect, used in some maps to indicate teleporters
+// used in qcsrc/server/assault.qc:		//self.effects = EF_STARDUST
+// used in qcsrc/server/g_triggers.qc:	self.effects = EF_STARDUST
+// used in qcsrc/server/portals.qc:	portal.effects = EF_STARDUST | EF_BLUE
+effect EF_STARDUST
+count 75
+type static
+color 0xfff368 0xfff368
+size 1.0 2.0
+alpha 64 128 128
+gravity -0.1
+airfriction 0.2
+liquidfriction 0.8
+originjitter 16 16 64
+velocityjitter 32 32 0
+//lightradius 200
+//lighttime 0
+//lightcolor 0.4 0.9 0.9
+
+
+// flare particle and light
+// used in qcsrc/server/t_items.qc:	//pointparticles(particleeffectnum("item_respawn"), self.origin + self.mins_z * '0 0 1' + '0 0 48', '0 0 0', 1)
+// used in qcsrc/server/t_items.qc:	pointparticles(particleeffectnum("item_respawn"), self.origin + 0.5 * (self.mins + self.maxs), '0 0 0', 1)
+effect item_respawn
+countabsolute 1
+type static
+color 0x63F2EA 0x63f2EA
+size 32 32
+alpha 128 128 128
+// cloud of particles which expand rapidly and then slow to form a ball
+effect item_respawn
+count 64
+type spark
+tex 41 41
+color 0x63F2EA 0x63f2EA
+size 2 2
+alpha 256 256 1280
+//originjitter 24 24 24
+velocityjitter 256 256 256
+
+
+
+// used in qcsrc/server/t_jumppads.qc:			pointparticles(particleeffectnum("jumppad_activate"), other.origin, other.velocity, 1)
+effect jumppad_activate
+lightradius 200
+lightradiusfade 2000
+lightcolor 2 2 2
+
+
+
+// used in qcsrc/server/w_laser.qc:	pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+effect laser_muzzleflash
+count 1
+type smoke
+color 0xFFFFFF 0xFFFFFF
+tex 0 8
+size 5 5
+alpha 64 64 128
+airfriction 12
+originjitter 1.5 1.5 1.5
+velocityjitter 6 6 6
+velocitymultiplier 0.01
+lightradius 200
+lightradiusfade 2000
+lightcolor 3 0.1 0.1
+
+
+
+// decal
+// used in qcsrc/server/w_laser.qc:	pointparticles(particleeffectnum("laser_impact"), org2, normal * 1000, 1)
+effect laser_impact
+countabsolute 1
+type decal
+tex 47 47
+size 24 24
+alpha 256 256 0
+originjitter 16 16 16
+lightradius 200
+lightradiusfade 500
+lightcolor 8 0.4 0.4
+// flare effect
+effect laser_impact
+countabsolute 1
+type static
+tex 39 39
+color 0xFF2010 0xFF2010
+alpha 256 256 1024
+size 24 24
+// sparks that rapidly expand and rapidly slow down to form an interesting spherical effect
+effect laser_impact
+count 256
+type spark
+color 0x800000 0xFF8020
+alpha 256 256 1024
+size 4 4
+//bounce 1.5
+airfriction 6
+liquidfriction 6
+//originjitter 32 32 32
+velocityjitter 256 256 256
+effect laser_impact
+count 8
+type smoke
+tex 48 55
+color 0x800000 0xFF8020
+size 12 12
+alpha 128 256 256
+originjitter 1 1 1
+velocitymultiplier 0.01
+velocityjitter 16 16 16
+sizeincrease 6
+
+
+
+// used in qcsrc/server/w_shotgun.qc:	pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, cvar("g_balance_shotgun_primary_ammo"))
+// used in qcsrc/server/w_shotgun.qc:	pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, cvar("g_balance_shotgun_secondary_ammo"))
+effect shotgun_muzzleflash
+count 3
+type smoke
+color 0x202020 0x404040
+tex 0 8
+size 5 5
+alpha 256 256 512
+originjitter 1.5 1.5 1.5
+velocityjitter 6 6 6
+velocitymultiplier 0.01
+lightradius 200
+lightradiusfade 2000
+lightcolor 2 1.5 0.2
+sizeincrease 12
+velocitymultiplier 0.05
+effect shotgun_muzzleflash
+count 10
+type spark
+tex 40 40
+color 0xFFFDD9 0xff5a00
+size 2 2
+alpha 0 128 1024
+originjitter 1 1 1
+velocityjitter 444 444 444
+velocitymultiplier 1.7
+gravity 0.3
+airfriction 5
+
+
+
+// shotgun pellet impact
+// decal
+// used in qcsrc/server/w_common.qc:				pointparticles(particleeffectnum("shotgun_impact"), trace_endpos, trace_plane_normal * 1000, 1)
+effect shotgun_impact
+countabsolute 1
+type decal
+tex 56 59
+size 3 3
+alpha 256 256 0
+originjitter 6 6 6
+//lightradius 30
+//lightradiusfade 90
+//lightcolor 1 1 1
+// dust/smoke drifting away from the impact
+effect shotgun_impact
+count 5
+type smoke
+tex 0 8
+color 0xFFFFFF 0xA37443
+size 7 7
+alpha 0 64 32
+originjitter 1 1 1
+airfriction 7
+liquidfriction 16
+velocityjitter 100 100 100
+sizeincrease 12
+velocitymultiplier 0.25
+// dust/smoke staying at the impact
+effect shotgun_impact
+count 1
+type smoke
+tex 0 8
+color 0xFFFFFF 0xFFFFFF
+size 17 17
+alpha 64 64 32
+sizeincrease 4
+// sparks
+effect shotgun_impact
+notunderwater
+count 20
+type spark
+tex 40 40
+color 0xFDFFD9 0xFDFFD9
+size 0.6 0.6
+alpha 256 256 768
+gravity 1
+bounce 1
+airfriction 5
+originjitter 1 1 1
+velocityjitter 400 400 400
+velocitymultiplier 0.1
+
+
+
+// used in qcsrc/server/w_uzi.qc:	pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+effect uzi_muzzleflash
+count 2
+type static
+color 0x202020 0x404040
+tex 0 8
+size 5 5
+alpha 256 256 512
+originjitter 1.5 1.5 1.5
+velocityjitter 1 1 1
+velocitymultiplier 0.03
+lightradius 200
+lightradiusfade 2000
+lightcolor 2 1.5 0.2
+gravity -0.1
+effect uzi_muzzleflash
+count 20
+type spark
+tex 40 40
+color 0xFFFDD9 0xFFFDD9
+size 2 2
+alpha 0 128 1024
+originjitter 1 1 1
+velocityjitter 300 300 300
+velocitymultiplier 0.5
+airfriction 12
+
+
+// decal
+// used in qcsrc/server/cl_client.qc:	//pointparticles(particleeffectnum("machinegun_impact"), self.origin + self.view_ofs + '0 0 7', '0 0 0', 1)
+// used in qcsrc/server/w_common.qc:				pointparticles(particleeffectnum("machinegun_impact"), trace_endpos, trace_plane_normal * 1000, 1)
+effect machinegun_impact
+countabsolute 1
+type decal
+tex 56 59
+size 5 5
+alpha 256 256 0
+originjitter 6 6 6
+lightradius 80
+lightradiusfade 800
+lightcolor 6 3.6 0.6
+// dust/smoke drifting away from the impact
+effect machinegun_impact
+count 5
+type smoke
+tex 0 8
+color 0xFFFFFF 0xA37443
+size 7 7
+alpha 0 64 32
+originjitter 1 1 1
+airfriction 7
+liquidfriction 16
+velocityjitter 100 100 100
+sizeincrease 12
+velocitymultiplier 0.25
+// dust/smoke staying at the impact
+effect machinegun_impact
+count 1
+type smoke
+tex 0 8
+color 0xFFFFFF 0xFFFFFF
+size 17 17
+alpha 64 64 32
+sizeincrease 4
+// sparks
+effect machinegun_impact
+notunderwater
+count 20
+type spark
+tex 40 40
+color 0xFDFFD9 0xFDFFD9
+size 0.3 0.3
+alpha 256 256 768
+gravity 1
+bounce 1
+airfriction 5
+originjitter 1 1 1
+velocityjitter 400 400 400
+velocitymultiplier 0.1
+
+
+
+// used in qcsrc/server/w_grenadelauncher.qc:	pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+// used in qcsrc/server/w_grenadelauncher.qc:	pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+// used in qcsrc/server/w_porto.qc:	//pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+effect grenadelauncher_muzzleflash
+count 3
+type smoke
+color 0x202020 0x404040
+tex 0 8
+size 5 5
+alpha 256 256 512
+originjitter 1.5 1.5 1.5
+airfriction 12
+velocityjitter 20 20 20
+velocitymultiplier 0.03
+lightradius 200
+lightradiusfade 2000
+lightcolor 2 1.5 0.2
+effect grenadelauncher_muzzleflash
+count 30
+type spark
+tex 40 40
+color 0xFFFDD9 0xFFFDD9
+size 3 3
+alpha 0 128 1024
+originjitter 1 1 1
+velocityjitter 300 300 300
+velocitymultiplier 0.5
+airfriction 12
+
+
+
+// hagar trail
+// smoke
+// used in qcsrc/server/w_hagar.qc:	missile.modelflags = MF_GRENADE
+// used in qcsrc/server/w_hagar.qc:	missile.modelflags = MF_GRENADE
+// used in qcsrc/server/w_porto.qc:	gren.modelflags = MF_GRENADE
+effect TR_GRENADE
+trailspacing 6
+type alphastatic
+color 0x303030 0x000000
+tex 0 8
+size 1 2
+bounce 1
+sizeincrease 2
+alpha 100 200 280
+originjitter 1 1 1
+velocityjitter 1 1 1
+velocitymultiplier -0.02
+//gravity -0.11
+// fire
+effect TR_GRENADE
+notunderwater
+trailspacing 2
+type static
+color 0xffdf72 0x811200
+tex 48 55
+size 1 2
+sizeincrease -15
+alpha 100 144 988
+airfriction 8
+velocityjitter 32 32 32
+velocitymultiplier -1.0
+// bubbles
+effect TR_GRENADE
+underwater
+trailspacing 8
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+
+
+
+// mortar trail
+// smoke
+// used in qcsrc/server/w_grenadelauncher.qc:	gren.modelflags = MF_TRACER2
+// used in qcsrc/server/w_grenadelauncher.qc:	gren.modelflags = MF_TRACER2
+// used in qcsrc/server/w_hook.qc:	gren.modelflags = MF_TRACER2
+effect TR_KNIGHTSPIKE // used for MF_TRACER2
+notunderwater
+trailspacing 5
+type alphastatic
+color 0x303030 0x000000
+tex 0 8
+size 3 3
+bounce 1
+sizeincrease 11
+alpha 100 200 400
+originjitter 2 2 2
+velocityjitter 3 3 3
+velocitymultiplier -0.02
+gravity -0.11
+//marker
+effect TR_KNIGHTSPIKE // used for MF_TRACER2
+type alphastatic
+color 0xFF0000 0xFF0000
+tex 62 62
+size 1 1 
+sizeincrease -0.1
+trailspacing 1
+alpha 256 256 720
+// bubbles
+effect TR_KNIGHTSPIKE // used for MF_TRACER2
+underwater
+trailspacing 16
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+
+
+
+// decal
+// used in qcsrc/server/w_grenadelauncher.qc:	pointparticles(particleeffectnum("grenade_explode"), org2, '0 0 0', 1)
+// used in qcsrc/server/w_grenadelauncher.qc:	pointparticles(particleeffectnum("grenade_explode"), org2, '0 0 0', 1)
+effect grenade_explode
+countabsolute 1
+type decal
+tex 8 16
+size 48 48
+alpha 256 256 0
+originjitter 40 40 40
+lightradius 250
+lightradiusfade 400
+lightcolor 8 4 1
+// fire effect which expands then slows
+effect grenade_explode
+notunderwater
+count 80
+type static
+tex 48 55
+color 0xe03f00 0x5e0000
+size 16 26
+sizeincrease 20
+alpha 128 228 356
+bounce 4.5
+airfriction 8
+liquidfriction 8
+originjitter 8 8 8
+velocityjitter 256 256 256
+// fire effect which make brigt dot inside
+effect grenade_explode
+notunderwater
+count 30
+type static
+tex 48 55
+color 0xe03f00 0xffdf92
+size 6 16
+sizeincrease 40
+alpha 228 328 756
+bounce 1
+airfriction 8
+liquidfriction 8
+originjitter 8 8 8
+velocityjitter 256 256 256
+// smoke
+effect grenade_explode
+type alphastatic
+notunderwater
+tex 0 8
+count 20
+size 20 40
+sizeincrease 34
+alpha 500 600 556
+velocityjitter 256 256 256
+airfriction 5
+color 0x000000 0x111111
+bounce 6
+// underwater bubbles
+effect grenade_explode
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 3
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 16 16 16
+velocityjitter 96 96 96
+// bouncing sparks
+effect grenade_explode
+notunderwater
+count 16
+type spark
+color 0x903010 0xFFD030
+size 2 2
+tex 40 40
+alpha 256 256 384
+gravity 1
+airfriction 0.2
+bounce 1.5
+liquidfriction 0.8
+velocityoffset 0 0 80
+velocityjitter 256 256 256
+
+
+
+// used in qcsrc/server/w_electro.qc:	pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+// used in qcsrc/server/w_electro.qc:	pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+effect electro_muzzleflash
+count 1
+type smoke
+color 0x202020 0x404040
+tex 0 8
+size 5 5
+alpha 256 256 512
+originjitter 1.5 1.5 1.5
+velocityjitter 6 6 6
+velocitymultiplier 0.01
+lightradius 200
+lightradiusfade 2000
+lightcolor 2 1.5 0.2
+effect electro_muzzleflash
+count 30
+type spark
+tex 31 31
+color 0xD9FDFF 0xD9FDFF
+size 3 3
+alpha 0 128 1024
+originjitter 1 1 1
+velocityjitter 300 300 300
+velocitymultiplier 0.5
+airfriction 12
+
+
+
+// electro trail
+// glowing vapor trail
+// used nowhere in code
+effect TR_NEXUIZPLASMA
+trailspacing 2
+type static
+color 0x283880 0x283880
+size 3 3
+tex 62 62
+alpha 256 256 968
+//velocityjitter 16 16 16
+lightradius 90
+lighttime 0
+lightcolor 1.5 3 6
+velocitymultiplier -0.1
+// bright sparks
+effect TR_NEXUIZPLASMA
+trailspacing 6
+count 3
+type snow
+tex 42 42
+color 0x629dff 0x0018ff
+size 2 4
+sizeincrease -20
+alpha 444 512 1866
+bounce 1
+velocityoffset 0 0 15
+airfriction 12
+originjitter 1 1 1
+velocityjitter 50 50 50
+
+
+
+// decal
+// used in qcsrc/server/w_electro.qc:		pointparticles(particleeffectnum("electro_impact"), org2, '0 0 0', 1)
+effect electro_impact
+countabsolute 1
+type decal
+tex 59 59
+size 32 32
+alpha 256 256 0
+originjitter 20 20 20
+lightradius 250
+lightradiusfade 250
+lightcolor 3.125 4.375 10
+// flare effect
+effect electro_impact
+countabsolute 1
+type static
+tex 38 38
+color 0x80C0FF 0x80C0FF
+size 12 32
+alpha 256 256 512
+// cloud of bouncing sparks
+effect electro_impact
+count 60
+type smoke
+tex 42 42
+color 0x629dff 0x0018ff
+size 36 36
+sizeincrease -50
+alpha 256 256 1024
+bounce 2
+gravity -0.3
+airfriction 6
+originjitter 1 1 1
+velocityjitter 512 512 512
+// inner cloud of smoke
+effect electro_impact
+count 60
+type smoke
+color 0x629dff 0x0018ff
+tex 0 8
+size 20 24
+sizeincrease 50
+alpha 200 256 512
+airfriction 30
+originjitter 20 20 20
+velocityjitter 320 320 320
+
+// decal
+// used in qcsrc/server/w_electro.qc:		pointparticles(particleeffectnum("electro_ballexplode"), org2, '0 0 0', 1)
+effect electro_ballexplode
+countabsolute 1
+type decal
+tex 59 59
+size 32 32
+alpha 256 256 0
+originjitter 20 20 20
+lightradius 250
+lightradiusfade 250
+lightcolor 3.125 4.375 10
+// flare effect
+effect electro_ballexplode
+countabsolute 1
+type static
+tex 38 38
+color 0x80C0FF 0x80C0FF
+size 32 32
+alpha 256 256 512
+// cloud of bouncing sparks
+effect electro_ballexplode
+count 128
+type spark
+tex 41 41
+color 0xFDFFD9 0xFDFFD9
+size 16 16
+alpha 256 256 1024
+bounce 2
+//airfriction 2
+originjitter 1 1 1
+velocityjitter 512 512 512
+// inner cloud of smoke
+effect electro_ballexplode
+count 16
+type smoke
+color 0x202020 0x404040
+tex 0 8
+size 24 24
+alpha 256 256 512
+originjitter 20 20 20
+velocityjitter 32 32 32
+
+
+
+// decal
+// used in qcsrc/server/w_electro.qc:	pointparticles(particleeffectnum("electro_combo"), org2, '0 0 0', 1)
+effect electro_combo
+countabsolute 1
+type decal
+tex 59 59
+size 64 64
+alpha 256 256 0
+originjitter 34 34 34
+lightradius 400
+lightradiusfade 300
+lightcolor 4 5 6
+// flare effect
+effect electro_combo
+countabsolute 1
+type static
+tex 38 38
+color 0x80C0FF 0x80C0FF
+size 48 48
+alpha 128 128 64
+// large sparks
+effect electro_combo
+count 20
+type static
+color 0x2030FF 0x80C0FF
+size 32 32
+alpha 256 256 256
+bounce 2
+airfriction 6
+liquidfriction 16
+//velocityoffset 0 0 120
+velocityjitter 512 512 512
+effect electro_combo
+count 64
+type spark
+tex 41 41
+color 0xFDFFD9 0xFDFFD9
+size 16 16
+alpha 444 512 866
+bounce 2
+//airfriction 2
+originjitter 1 1 1
+velocityjitter 512 512 512
+// inner cloud of smoke
+effect electro_combo
+count 0.25
+type smoke
+color 0x202020 0x404040
+tex 0 8
+size 24 24
+alpha 256 256 256
+originjitter 20 20 20
+velocityjitter 32 32 32
+
+
+
+// used in qcsrc/server/w_crylink.qc:	pointparticles(particleeffectnum("crylink_muzzleflash"), w_shotorg, w_shotdir * 1000, shots)
+// used in qcsrc/server/w_crylink.qc:	pointparticles(particleeffectnum("crylink_muzzleflash"), w_shotorg, w_shotdir * 1000, shots)
+effect crylink_muzzleflash
+count 1
+type smoke
+color 0x202020 0x404040
+tex 0 8
+size 5 5
+alpha 128 128 256
+originjitter 1.5 1.5 1.5
+velocityjitter 6 6 6
+velocitymultiplier 0.01
+lightradius 200
+lightradiusfade 2000
+lightcolor 2 1.5 0.2
+effect crylink_muzzleflash
+count 10
+type spark
+tex 40 40
+color 0xA080C0 0xA080C0
+size 3 3
+alpha 0 128 1024
+originjitter 1 1 1
+velocityjitter 200 200 200
+velocitymultiplier 0.3
+airfriction 12
+
+
+
+// crylink impact effect
+// decal
+// used in qcsrc/server/w_crylink.qc:	pointparticles(particleeffectnum("crylink_impact"), self.origin, '0 0 0', 1)
+effect crylink_impact
+countabsolute 1
+type decal
+tex 47 47
+size 8 8
+alpha 256 256 0
+originjitter 12 12 12
+//lightradius 60
+//lightradiusfade 300
+//lightcolor 3.2 0.4 4
+// purple flare effect
+effect crylink_impact
+countabsolute 1
+type static
+tex 39 39
+color 0x504060 0x504060
+size 8 8
+alpha 256 256 512
+// purple sparks
+effect crylink_impact
+count 20
+type spark
+tex 41 41
+color 0xA040C0 0xA040C0
+bounce 2
+size 4 4
+alpha 256 256 1024
+velocityjitter 256 256 256
+// purple splash
+effect crylink_impact
+count 3
+type static
+color 0xE070FF 0xE070FF
+size 8 8
+alpha 256 256 512
+velocityjitter 8 8 8
+// purple splash
+effect crylink_impact
+count 3
+type static
+color 0xE070FF 0xE070FF
+size 8 8
+alpha 256 256 1024
+velocityjitter 32 32 32
+
+
+
+// used in qcsrc/server/w_minstanex.qc:	pointparticles(particleeffectnum("nex_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+// used in qcsrc/server/w_nex.qc:	pointparticles(particleeffectnum("nex_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+effect nex_muzzleflash
+count 10
+type smoke
+color 0x202020 0x404040
+tex 0 8
+size 16 16
+alpha 128 128 192
+originjitter 4 4 4
+velocityjitter 24 24 24
+velocitymultiplier 0.02
+lightradius 200
+lightradiusfade 200
+lightcolor 2 2.5 3
+effect nex_muzzleflash
+count 150
+type spark
+tex 41 41
+color 0xD9FDFF 0xD9FDFF
+size 3 3
+alpha 0 128 1024
+originjitter 1 1 1
+velocityjitter 600 600 600
+velocitymultiplier 0.5
+airfriction 9
+
+
+
+//// nex beam
+//effect nex_beam
+//countabsolute 1
+//type beam
+//tex 60 60
+//color 0xFFFFFF 0xFFFFFF
+//size 6 6
+//alpha 128 128 192
+// nex beam: ring smoke
+// used in qcsrc/server/w_nex.qc:	trailparticles(world, particleeffectnum("nex_beam"), w_shotorg, trace_endpos)
+effect nex_beam
+trailspacing 32
+color 0x1680A0 0x1680A0
+size 4 4
+tex 32 32
+alpha 64 128 64
+airfriction 5
+sizeincrease 2
+type static
+// nex beam: drifting smoke
+effect nex_beam
+trailspacing 6
+color 0x5080A0 0x5080A0
+size 1 1
+tex 0 8
+alpha 32 64 32
+airfriction 9
+sizeincrease 8
+velocityjitter 64 64 64
+type static
+// nex beam: bright core
+effect nex_beam
+trailspacing 6
+color 0x80CDFF 0x80CDFF
+size 4 4
+//tex 48 55
+alpha 256 256 1280
+type static
+//sparks
+effect nex_beam
+trailspacing 8
+color 0x1680A0 0x1680A0
+size 1 1
+tex 63 63
+alpha 64 128 80
+airfriction 5
+gravity -0.01
+type snow
+
+// nex impact
+// decal
+// used in qcsrc/server/w_minstanex.qc:		pointparticles(particleeffectnum("nex_impact"), trace_endpos - w_shotdir * 6, '0 0 0', 1)
+// used in qcsrc/server/w_nex.qc:		pointparticles(particleeffectnum("nex_impact"), trace_endpos - w_shotdir * 6, '0 0 0', 1)
+effect nex_impact
+countabsolute 1
+type decal
+tex 47 47
+size 24 24
+alpha 256 256 0
+originjitter 16 16 16
+lightradius 200
+lightradiusfade 250
+lightcolor 4 6 8
+// shockwave
+effect nex_impact
+countabsolute 1
+type static
+tex 34 34
+size 16 16
+alpha 100 100 300
+sizeincrease 200
+
+
+// flare effect
+effect nex_impact
+countabsolute 1
+type static
+tex 37 37
+color 0x80C0FF 0x80C0FF
+size 8 8
+alpha 256 256 256
+// small sparks which form a sphere as they slow down
+//effect nex_impact
+//count 256
+//type spark
+//color 0x2030FF 0x80C0FF
+//size 1 2
+//alpha 256 256 512
+//bounce 2
+//airfriction 8
+//liquidfriction 8
+//velocityjitter 384 384 384
+// small sparks which glow brightly but live briefly
+effect nex_impact
+count 128
+type spark
+tex 41 41
+color 0xD9FDFF 0xD9FDFF
+size 4 4
+alpha 0 128 512
+bounce 2
+velocityjitter 600 600 600
+velocitymultiplier 0.5
+airfriction 9
+
+
+
+// used in qcsrc/server/w_hagar.qc:	pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+// used in qcsrc/server/w_hagar.qc:	pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+effect hagar_muzzleflash
+count 4
+type smoke
+color 0x202020 0x404040
+tex 0 8
+size 5 5
+alpha 256 256 512
+originjitter 1.5 1.5 1.5
+velocityjitter 6 6 6
+velocitymultiplier 0.01
+lightradius 200
+lightradiusfade 2000
+lightcolor 2 1.5 0.2
+effect hagar_muzzleflash
+count 30
+type spark
+tex 40 40
+color 0xFFFDD9 0xFFFDD9
+size 3 3
+alpha 0 128 1024
+originjitter 1 1 1
+velocityjitter 300 300 300
+velocitymultiplier 0.5
+airfriction 12
+
+
+
+// used in qcsrc/server/w_hagar.qc:		pointparticles(particleeffectnum("hagar_bounce"), self.origin, self.velocity, 1)
+effect hagar_bounce
+count 4
+type smoke
+color 0x202020 0x404040
+tex 0 8
+size 5 5
+alpha 256 256 256
+originjitter 1.5 1.5 1.5
+velocityjitter 6 6 6
+velocitymultiplier 0.01
+lightradius 60
+lightradiusfade 300
+lightcolor 2 1.5 0.2
+effect hagar_bounce
+count 30
+type spark
+tex 40 40
+color 0xFFFDD9 0xFFFDD9
+size 3 3
+alpha 0 256 256
+gravity 1
+bounce 1.5
+originjitter 1 1 1
+velocityjitter 600 600 600
+velocitymultiplier 0.5
+airfriction 12
+
+
+
+// decal
+// used in qcsrc/server/w_hagar.qc:	pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1)
+// used in qcsrc/server/w_hagar.qc:	pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1)
+effect hagar_explode
+countabsolute 1
+type decal
+tex 8 16
+size 28 38
+alpha 256 256 0
+originjitter 40 40 40
+lightradius 250
+lightradiusfade 400
+lightcolor 8 4 1
+// fire effect which make bright dot inside
+effect hagar_explode
+notunderwater
+count 12
+type smoke
+tex 48 55
+color 0xffe955 0xff5a00
+size 16 26
+sizeincrease 5
+alpha 128 256 456
+bounce 1.5
+airfriction 8
+liquidfriction 8
+originjitter 8 8 8
+velocityjitter 156 156 156
+// fire effect which expands then slows
+effect hagar_explode
+notunderwater
+count 24
+type static
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 20 26
+sizeincrease 15
+alpha 128 256 456
+bounce 1.5
+airfriction 12
+liquidfriction 8
+originjitter 8 8 8
+velocityjitter 256 256 256
+
+// smoke
+effect hagar_explode
+type alphastatic
+notunderwater
+tex 0 8
+count 20
+size 20 40
+sizeincrease 20
+alpha 500 600 556
+velocityjitter 244 244 244
+airfriction 5
+color 0x000000 0x111111
+bounce 2
+
+// underwater bubbles
+effect hagar_explode
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 3
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 16 16 16
+velocityjitter 96 96 96
+// bouncing sparks
+effect hagar_explode
+notunderwater
+count 16
+type spark
+color 0x903010 0xFFD030
+size 2 2
+tex 40 40
+alpha 256 256 384
+gravity 1
+airfriction 0.2
+bounce 1.5
+liquidfriction 0.8
+velocityoffset 0 0 80
+velocityjitter 256 256 256
+
+
+
+// used in qcsrc/server/w_rocketlauncher.qc:	pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1)
+effect rocketlauncher_muzzleflash
+count 20
+type smoke
+color 0x202020 0x404040
+tex 0 8
+size 1 1
+sizeincrease 20
+alpha 256 256 256
+airfriction 2
+originjitter 1.5 1.5 1.5
+velocityjitter 40 40 40
+velocitymultiplier -0.13
+//lightradius 200
+//lightradiusfade 2000
+//lightcolor 2 1.5 0.2
+effect rocketlauncher_muzzleflash
+count 30
+type spark
+tex 40 40
+color 0xFFFDD9 0xFFFDD9
+size 3 3
+alpha 0 128 1024
+originjitter 1 1 1
+velocityjitter 300 300 300
+velocitymultiplier 0.5
+airfriction 12
+
+
+
+// rocket trail
+// smoke
+// used nowhere in code
+effect TR_ROCKET
+trailspacing 5
+type alphastatic
+color 0x303030 0x000000
+tex 0 8
+size 1 4
+bounce 1
+sizeincrease 11
+alpha 200 300 200
+lightradius 150
+lighttime 0
+lightcolor 6 3 1
+originjitter 2 2 2
+velocityjitter 3 3 3
+velocitymultiplier -0.02
+//gravity -0.11
+// fire
+effect TR_ROCKET
+notunderwater
+trailspacing 2
+type static
+color 0xffdf72 0x811200
+tex 48 55
+size 7 7
+sizeincrease -30
+alpha 100 144 588
+airfriction 8
+velocityjitter 32 32 32
+velocitymultiplier -1.5
+// bubbles
+effect TR_ROCKET
+underwater
+trailspacing 8
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+// sparks
+effect TR_ROCKET
+trailspacing 10
+type spark
+tex 40 40
+color 0xFFFDD9 0xFFFDD9
+size 1 1
+alpha 444 512 1866
+//gravity 1
+bounce 1
+//velocityoffset 0 0 15
+airfriction 5
+originjitter 1 1 1
+velocityjitter 100 100 100
+velocitymultiplier -0.31
+
+// rocket explosion (bigger than mortar and hagar)
+// decal
+// used in qcsrc/server/cl_player.qc:				pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1)
+// used in qcsrc/server/portals.qc:		pointparticles(particleeffectnum("rocket_explode"), portal.origin + v_forward * 16, v_forward * 1024, 4)
+// used in qcsrc/server/w_rocketlauncher.qc:	pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1)
+effect rocket_explode
+countabsolute 1
+type decal
+tex 8 16
+size 72 72
+alpha 256 256 0
+originjitter 40 40 40
+lightradius 400
+lightradiusfade 750
+lightcolor 8 4 1
+// fire effect
+effect rocket_explode
+notunderwater
+count 64
+type static
+tex 48 55
+color 0x8f0d00 0xff5a00
+size 33 44
+sizeincrease 45
+alpha 200 256 512
+bounce 1.5
+airfriction 8
+liquidfriction 8
+originjitter 8 8 8
+velocityjitter 512 512 512
+// fire effect 2
+effect rocket_explode
+notunderwater
+count 28
+type smoke
+tex 48 55
+color 0xea691b 0xeed05a
+size 33 44
+sizeincrease 55
+alpha 200 256 612
+bounce 2.5
+airfriction 19
+liquidfriction 19
+originjitter 8 8 8
+velocityjitter 912 912 912
+// smoke
+effect rocket_explode
+type alphastatic
+notunderwater
+tex 0 8
+count 64
+size 20 40
+sizeincrease 44
+alpha 400 500 456
+velocityjitter 444 444 444
+airfriction 5
+color 0x000000 0x111111
+bounce 2
+// underwater bubbles
+effect rocket_explode
+underwater
+count 64
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 3
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 16 16 16
+velocityjitter 144 144 144
+// bouncing sparks
+effect rocket_explode
+notunderwater
+count 64
+type spark
+tex 40 40
+color 0xffa800 0xffedaf
+size 1 1
+sizeincrease 2
+alpha 44 256 384
+gravity 1
+airfriction -1
+bounce 1.5
+liquidfriction 0.8
+velocityoffset 0 0 80
+originjitter 16 16 16
+velocityjitter 224 224 324
+
+
+
+// used in qcsrc/server/g_hook.qc:	pointparticles(particleeffectnum("grapple_muzzleflash"), org, '0 0 0', 1)
+effect grapple_muzzleflash
+lightradius 160
+lightradiusfade 800
+lightcolor 1 0 0
+
+
+
+// used in qcsrc/server/g_hook.qc:	pointparticles(particleeffectnum("grapple_impact"), self.origin, '0 0 0', 1)
+effect grapple_impact
+lightradius 160
+lightradiusfade 800
+lightcolor 1 0 0
+
+
+
+// used nowhere in code
+effect nex242_misc_laser_beam
+countabsolute 1
+type beam
+tex 60 60
+size 1 1
+alpha 256 256 64
+color 0xff0000 0xff0000
+sizeincrease 1
+
+// used nowhere in code
+effect nex242_misc_laser_beam_end
+count 1
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 128 256 768
+gravity 1
+bounce -1
+velocityjitter 64 64 64
+velocitymultiplier 100
+
+
+
+// used nowhere in code
+effect nex242_misc_laser_beam_fast
+countabsolute 1
+type beam
+tex 60 60
+size 1 1
+alpha 256 256 640
+color 0xff0000 0xff0000
+sizeincrease 0.1
+
+// used nowhere in code
+effect nex242_misc_laser_beam_fast_end
+count 1
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 128 256 768
+gravity 1
+bounce -1
+velocityjitter 64 64 64
+velocitymultiplier 100
+
+// additional laser colors (mike)
+// used nowhere in code
+effect nex242_misc_laser_green_beam
+countabsolute 1
+type beam
+tex 60 60
+size 1 1
+alpha 256 256 64
+color 0x00ff00 0x00ff00
+sizeincrease 1
+
+// used nowhere in code
+effect nex242_misc_laser_green_beam_end
+count 1
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 128 256 768
+gravity 1
+bounce -1
+velocityjitter 64 64 64
+velocitymultiplier 100
+
+// used nowhere in code
+effect nex242_misc_laser_blue_beam
+countabsolute 1
+type beam
+tex 60 60
+size 1 1
+alpha 256 256 64
+color 0x0000ff 0x0000ff
+sizeincrease 1
+
+// used nowhere in code
+effect nex242_misc_laser_blue_beam_end
+count 1
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 128 256 768
+gravity 1
+bounce -1
+velocityjitter 64 64 64
+velocitymultiplier 100
+
+// used nowhere in code
+effect nex242_misc_laser_yellow_beam
+countabsolute 1
+type beam
+tex 60 60
+size 1 1
+alpha 256 256 64
+color 0xffff00 0xffff00
+sizeincrease 1
+
+// used nowhere in code
+effect nex242_misc_laser_yellow_beam_end
+count 1
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 128 256 768
+gravity 1
+bounce -1
+velocityjitter 64 64 64
+velocitymultiplier 100
+
+// used nowhere in code
+effect nex242_misc_laser_cyan_beam
+countabsolute 1
+type beam
+tex 60 60
+size 1 1
+alpha 256 256 64
+color 0x00ffff 0x00ffff
+sizeincrease 1
+
+// used nowhere in code
+effect nex242_misc_laser_cyan_beam_end
+count 1
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 128 256 768
+gravity 1
+bounce -1
+velocityjitter 64 64 64
+velocitymultiplier 100
+
+// used nowhere in code
+effect nex242_misc_laser_magenta_beam
+countabsolute 1
+type beam
+tex 60 60
+size 1 1
+alpha 256 256 64
+color 0xff00ff 0xff00ff
+sizeincrease 1
+
+// used nowhere in code
+effect nex242_misc_laser_magenta_beam_end
+count 1
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 128 256 768
+gravity 1
+bounce -1
+velocityjitter 64 64 64
+velocitymultiplier 100
+
+// used nowhere in code
+effect nex242_misc_laser_white_beam
+countabsolute 1
+type beam
+tex 60 60
+size 1 1
+alpha 256 256 64
+color 0xffffff 0xffffff
+sizeincrease 1
+
+// used nowhere in code
+effect nex242_misc_laser_white_beam_end
+count 1
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 128 256 768
+gravity 1
+bounce -1
+velocityjitter 64 64 64
+velocitymultiplier 100
+
+// used nowhere in code
+effect nex242_misc_laser_black_beam
+countabsolute 1
+type beam
+tex 60 60
+size 1 1
+alpha 256 256 64
+color 0x000000 0x000000
+sizeincrease 1
+
+// used nowhere in code
+effect nex242_misc_laser_black_beam_end
+count 1
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 128 256 768
+gravity 1
+bounce -1
+velocityjitter 64 64 64
+velocitymultiplier 100
+
+// used nowhere in code
+effect nex242_misc_laser_orange_beam
+countabsolute 1
+type beam
+tex 60 60
+size 1 1
+alpha 256 256 64
+color 0xff6600 0xff6600
+sizeincrease 1
+
+// used nowhere in code
+effect nex242_misc_laser_orange_beam_end
+count 1
+type spark
+color 0x8f4333 0xfff31b
+size 0.4 0.4
+alpha 128 256 768
+gravity 1
+bounce -1
+velocityjitter 64 64 64
+velocitymultiplier 100
+
+
+
+
+// bigger crylink impact effect
+// decal
+// used in qcsrc/server/w_crylink.qc:	pointparticles(particleeffectnum("crylink_impactbig"), self.origin, '0 0 0', 1)
+effect crylink_impactbig
+countabsolute 1
+type decal
+tex 47 47
+size 24 24
+alpha 256 256 0
+originjitter 12 12 12
+//lightradius 200
+//lightradiusfade 800
+//lightcolor 3.2 0.4 4
+// purple flare effect
+effect crylink_impactbig
+countabsolute 1
+type static
+tex 39 39
+color 0x504060 0x504060
+size 24 24
+alpha 256 256 512
+// purple sparks
+effect crylink_impactbig
+count 80
+type spark
+tex 41 41
+color 0xA040C0 0xA040C0
+bounce 2
+size 6 6
+alpha 256 256 1024
+velocityjitter 512 512 512
+// purple splash
+effect crylink_impactbig
+count 3
+type static
+color 0xE070FF 0xE070FF
+size 16 16
+alpha 256 256 512
+velocityjitter 32 32 32
+// purple splash
+effect crylink_impactbig
+count 6
+type static
+color 0xE070FF 0xE070FF
+size 16 16
+alpha 256 256 1024
+velocityjitter 256 256 256
+
+// Zero-violence effects
+
+// impact effect indicating damage
+// used in qcsrc/server/cl_player.qc:		pointparticles(particleeffectnum("damage_hit"), hitloc, force, bound(0, damage, 200))
+effect damage_hit
+count 1
+type static
+color 0x20FF30 0x80FFC0
+size 1 1
+alpha 256 256 256
+gravity -0.4
+bounce 1.5
+airfriction 8
+liquidfriction 16
+//velocityoffset 0 0 120
+velocityjitter 16 16 16
+
+// effect for removing player model
+// "teleport"
+// used in qcsrc/server/cl_player.qc:			pointparticles(particleeffectnum("damage_dissolve"), self.origin, force, 1)
+effect damage_dissolve
+count 96
+type static
+color 0x66FF66 0xFFFFFF
+size 10 10
+alpha 64 128 128
+airfriction 1
+liquidfriction 4
+originoffset 0 0 28
+originjitter 16 16 28
+velocityjitter 0 0 256
+// flare
+effect damage_dissolve
+countabsolute 1
+type static
+tex 38 38
+color 0x00FF00 0x99FF99
+size 32 32
+alpha 256 256 196
+// large sparks
+effect damage_dissolve
+count 20
+type static
+color 0x00FF00 0x99FF99
+size 16 16
+alpha 256 256 256
+//gravity 1
+bounce 1.5
+airfriction 4
+liquidfriction 16
+//velocityoffset 0 0 120
+velocityjitter 512 512 512
+
+// decal
+// used in qcsrc/server/g_triggers.qc:			self.cnt = particleeffectnum("laser_deadly")
+effect laser_deadly
+countabsolute 1
+type decal
+tex 56 59
+size 5 5
+alpha 256 256 0
+originjitter 6 6 6
+// dust/smoke drifting away from the impact
+effect laser_deadly
+count 0.05 // 50 per second
+type smoke
+tex 48 55
+color 0xFFFFFF 0xFFFFFF
+size 3 3
+alpha 0 64 64
+originjitter 1 1 1
+airfriction 7
+liquidfriction 16
+velocityjitter 15 15 15
+sizeincrease 2
+velocitymultiplier 20
+// sparks
+effect laser_deadly
+notunderwater
+count 0.05 // 50 per second
+type spark
+tex 40 40
+color 0xFDFFD9 0xFDFFD9
+size 0.6 0.6
+alpha 256 256 768
+gravity 1
+bounce 1
+airfriction 5
+originjitter 1 1 1
+velocityjitter 100 100 100
+velocitymultiplier 100
+
+
+//torch
+//fire
+// used nowhere in code
+effect torch_small
+//notunderwater
+count 16
+type smoke
+tex 48 55
+size 1 11
+alpha 200 256 512
+gravity -0.5
+color 0x8f0d00 0xff5a00
+//bounce 1
+sizeincrease -1
+originjitter 5 5 5
+velocityjitter 1 1 50
+// smoke
+effect torch_small
+type alphastatic
+count 8
+tex 0 8
+size 5 10
+sizeincrease 5
+alpha 200 256 200
+color 0x000000 0x111111
+gravity -0.3
+originjitter 3 3 3
+velocityjitter 11 11 50
+//bounce 1
+
+//fountain01
+// used nowhere in code
+effect fountain01
+count 32
+tex 0 8
+size 10 15
+alpha 0 100 100
+gravity 0.6
+bounce 1
+sizeincrease 20
+type snow
+bounce 1
+originjitter 5 5 5
+velocityjitter 81 81 150
+color 0x7cbaff 0xcfd1ff
+velocitymultiplier 2
+
+
+
+// decal
+// used in qcsrc/server/w_hook.qc:	pointparticles(particleeffectnum("hookbomb_explode"), org2, '0 0 0', 1)
+effect hookbomb_explode
+countabsolute 1
+type decal
+tex 8 16
+size 96 96
+alpha 256 256 0
+originjitter 40 40 40
+lightradius 1600
+lightradiusfade 800
+lightcolor 1 4 8
+// fire effect which make brigt dot inside
+effect hookbomb_explode
+notunderwater
+count 100
+type static
+tex 48 55
+color 0x003fe0 0x92dfff
+size 12 32
+sizeincrease 80
+alpha 512 328 756
+bounce 1
+airfriction 8
+liquidfriction 8
+originjitter 8 8 8
+velocityjitter 1024 1024 1024
+// smoke
+effect hookbomb_explode
+type alphastatic
+notunderwater
+tex 0 8
+count 160
+size 80 160
+sizeincrease 300
+alpha 500 600 556
+velocityoffset 0 0 0
+velocityjitter 256 256 256
+airfriction 0
+color 0x000000 0x111111
+bounce 6
+// underwater bubbles
+effect hookbomb_explode
+underwater
+count 60
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 3
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.0625
+originjitter 16 16 16
+velocityjitter 192 192 192
+
+
+// smoke
+effect EF_MGTURRETTRAIL
+notunderwater
+trailspacing 2
+type smoke
+color 0xd0d0a0 0xfffff0
+tex 0 8
+size 6 2
+alpha 16 32 16
+// bubbles
+effect EF_MGTURRETTRAIL
+underwater
+trailspacing 16
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+

Copied: branches/nexuiz-2.0/data/gfx/inv_weapon12.tga (from rev 4862, trunk/data/gfx/inv_weapon12.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/gfx/inv_weapon13.tga (from rev 4862, trunk/data/gfx/inv_weapon13.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/maps/turret_test.bsp (from rev 4862, trunk/data/maps/turret_test.bsp)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/maps/turret_test.map (from rev 4862, trunk/data/maps/turret_test.map)
===================================================================
--- branches/nexuiz-2.0/data/maps/turret_test.map	                        (rev 0)
+++ branches/nexuiz-2.0/data/maps/turret_test.map	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,3095 @@
+// entity 0
+{
+"_blocksize" "1024"
+"classname" "worldspawn"
+"shot_force" "15"
+// brush 0
+{
+( 1024 1024 -32 ) ( 1024 1024 0 ) ( 2048 2048 0 ) dsi/cretebase -64 0 0 0.500000 0.500000 0 0 0
+( -1024 1024 -32 ) ( -1024 1024 0 ) ( 1024 1024 0 ) dsi/cretebase -64 0 0 0.500000 0.500000 0 0 0
+( -1024 0 0 ) ( -1024 320 0 ) ( -704 320 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -704 320 -32 ) ( -1024 320 -32 ) ( -1024 0 -32 ) dsi/cretebase -64 0 0 0.500000 0.500000 0 0 0
+( -640 2048 0 ) ( -960 2048 0 ) ( -960 2048 -32 ) dsi/cretebase -64 0 0 0.500000 0.500000 0 0 0
+( -1024 1024 0 ) ( -1024 1024 -32 ) ( -2048 2048 -32 ) dsi/cretebase -64 0 0 0.500000 0.500000 0 0 0
+}
+// brush 1
+{
+( -5568 1344 1792 ) ( -5568 1024 1792 ) ( -5600 1024 1792 ) dsi/cretebase4 384 0 0 0.500000 0.500000 0 0 0
+( -5568 2048 -416 ) ( -5568 2048 -96 ) ( -5600 2048 -96 ) dsi/cretebase4 384 0 0 0.500000 0.500000 0 0 0
+( -5632 416 -352 ) ( -5632 416 -32 ) ( -5632 96 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -5568 -2048 1824 ) ( -5568 -1728 1824 ) ( -5568 -1728 1504 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -5568 -2048 -32 ) ( -5568 -2048 -352 ) ( -5600 -2048 -352 ) dsi/cretebase4 384 0 0 0.500000 0.500000 0 0 0
+( -5568 -32 0 ) ( -5568 288 0 ) ( -5600 288 0 ) dsi/cretebase4 384 0 0 0.500000 0.500000 0 0 0
+}
+// brush 2
+{
+( -5568 2176 1792 ) ( -5568 2048 1792 ) ( -5568 2048 768 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -1888 2112 1024 ) ( -2048 2112 1024 ) ( -2048 2112 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 2048 1792 1792 ) ( 2048 1920 1792 ) ( 2048 1920 768 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -2080 2048 1024 ) ( -1920 2048 1024 ) ( -1920 2048 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -2048 2048 1792 ) ( -2048 2176 1792 ) ( -1888 2176 1792 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -1888 2176 0 ) ( -2048 2176 0 ) ( -2048 2048 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 3
+{
+( 2048 2048 1792 ) ( 2048 -96 1792 ) ( 2048 -96 768 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 2336 2048 1024 ) ( 2048 2048 1024 ) ( 2048 2048 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 2112 -96 1024 ) ( 2112 2048 1024 ) ( 2112 2048 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 2112 -2048 1024 ) ( 2400 -2048 1024 ) ( 2400 -2048 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 2048 -96 1792 ) ( 2048 2048 1792 ) ( 2336 2048 1792 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 2336 2048 0 ) ( 2048 2048 0 ) ( 2048 -96 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 4
+{
+( 1024 1024 0 ) ( 1024 1024 -32 ) ( 2048 2048 -32 ) dsi/cretebase -128 0 0 0.500000 0.500000 0 0 0
+( 2048 640 0 ) ( 2048 960 0 ) ( 2048 960 -32 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 320 704 -32 ) ( 320 1024 -32 ) ( 0 1024 -32 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 0 1024 0 ) ( 320 1024 0 ) ( 320 704 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 1024 1024 -32 ) ( 1024 1024 0 ) ( 1024 -1024 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 1024 -1024 -32 ) ( 1024 -1024 0 ) ( 2048 -2048 0 ) dsi/cretebase -128 0 0 0.500000 0.500000 0 0 0
+}
+// brush 5
+{
+( -1024 -1024 -32 ) ( -1024 -1024 0 ) ( -2048 -2048 0 ) dsi/cretebase -128 0 0 0.500000 0.500000 0 0 0
+( 1024 -1024 -32 ) ( 1024 -1024 0 ) ( -1024 -1024 0 ) dsi/cretebase 128 0 0 0.500000 0.500000 0 0 0
+( 1024 0 0 ) ( 1024 -320 0 ) ( 704 -320 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 704 -320 -32 ) ( 1024 -320 -32 ) ( 1024 0 -32 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 640 -2048 0 ) ( 960 -2048 0 ) ( 960 -2048 -32 ) dsi/cretebase 128 0 0 0.500000 0.500000 0 0 0
+( 1024 -1024 0 ) ( 1024 -1024 -32 ) ( 2048 -2048 -32 ) dsi/cretebase -128 0 0 0.500000 0.500000 0 0 0
+}
+// brush 6
+{
+( 960 -576 -32 ) ( 1024 -512 -32 ) ( 1024 -512 0 ) common/caulk 0 192 0 0.500000 0.500000 0 0 0
+( -1024 1024 -32 ) ( -960 960 -32 ) ( -1024 1024 0 ) common/caulk 0 192 0 0.500000 0.500000 0 0 0
+( 0 -1024 0 ) ( 320 -1024 0 ) ( 320 -1024 -32 ) dsi/cretebase4 0 192 0 0.500000 0.500000 0 0 0
+( 0 -1024 0 ) ( 0 -704 0 ) ( 320 -704 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 320 -704 -32 ) ( 0 -704 -32 ) ( 0 -1024 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 7
+{
+( 960 -576 -32 ) ( 1024 -512 -32 ) ( 1024 -512 0 ) common/caulk 0 192 0 0.500000 0.500000 0 0 0
+( -960 960 -32 ) ( -1024 1024 -32 ) ( -1024 1024 0 ) common/caulk 0 192 0 0.500000 0.500000 0 0 0
+( 1024 -1056 0 ) ( 1024 -736 0 ) ( 1024 -736 -32 ) dsi/cretebase4 0 192 0 0.500000 0.500000 0 0 0
+( 0 -1024 0 ) ( 0 -704 0 ) ( 320 -704 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 320 -704 -32 ) ( 0 -704 -32 ) ( 0 -1024 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 8
+{
+( 576 960 -32 ) ( 512 1024 -32 ) ( 512 1024 0 ) common/caulk 0 192 0 0.500000 0.500000 0 0 0
+( 1024 1024 -32 ) ( 960 960 -32 ) ( 1024 1024 0 ) common/caulk 0 192 0 0.500000 0.500000 0 0 0
+( 0 -1024 0 ) ( 0 -704 0 ) ( 320 -704 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 320 -704 -32 ) ( 0 -704 -32 ) ( 0 -1024 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 384 1024 0 ) ( 64 1024 0 ) ( 64 1024 -32 ) dsi/cretebase4 0 192 0 0.500000 0.500000 0 0 0
+}
+// brush 9
+{
+( 576 960 -32 ) ( 512 1024 -32 ) ( 512 1024 0 ) common/caulk 0 192 0 0.500000 0.500000 0 0 0
+( 960 960 -32 ) ( 1024 1024 -32 ) ( 1024 1024 0 ) common/caulk 0 192 0 0.500000 0.500000 0 0 0
+( 1024 -1056 0 ) ( 1024 -736 0 ) ( 1024 -736 -32 ) dsi/cretebase4 0 192 0 0.500000 0.500000 0 0 0
+( 0 -1024 0 ) ( 0 -704 0 ) ( 320 -704 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 320 -704 -32 ) ( 0 -704 -32 ) ( 0 -1024 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 10
+{
+( -320 704 -32 ) ( 0 704 -32 ) ( 0 1024 -32 ) dsi/cretebase4 -128 128 0 0.500000 0.500000 0 0 0
+( 0 1024 0 ) ( 0 704 0 ) ( -320 704 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -1024 1056 0 ) ( -1024 736 0 ) ( -1024 736 -32 ) dsi/cretebase4 0 192 0 0.500000 0.500000 0 0 0
+( -960 -960 -32 ) ( -1024 -1024 -32 ) ( -1024 -1024 0 ) common/caulk -128 192 0 0.500000 0.500000 0 0 0
+( -576 -960 -32 ) ( -512 -1024 -32 ) ( -512 -1024 0 ) common/caulk -128 192 0 0.500000 0.500000 0 0 0
+}
+// brush 11
+{
+( -960 576 -32 ) ( -1024 512 -32 ) ( -1024 512 0 ) common/caulk -128 192 0 0.500000 0.500000 0 0 0
+( -1024 1024 -32 ) ( -960 960 -32 ) ( -1024 1024 0 ) common/caulk -128 192 0 0.500000 0.500000 0 0 0
+( 1024 0 0 ) ( 704 0 0 ) ( 704 320 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 704 320 -32 ) ( 704 0 -32 ) ( 1024 0 -32 ) dsi/cretebase4 -128 128 0 0.500000 0.500000 0 0 0
+( -1024 384 0 ) ( -1024 64 0 ) ( -1024 64 -32 ) dsi/cretebase4 0 192 0 0.500000 0.500000 0 0 0
+}
+// brush 12
+{
+( 640 320 0 ) ( 640 448 0 ) ( 384 576 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 640 448 192 ) ( 640 320 192 ) ( 384 448 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 640 320 192 ) ( 640 320 0 ) ( 384 448 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 640 352 64 ) ( 640 480 64 ) ( 640 480 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 640 448 0 ) ( 640 448 192 ) ( 384 576 192 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 384 576 64 ) ( 384 448 64 ) ( 384 448 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 13
+{
+( 384 -448 64 ) ( 384 -576 64 ) ( 384 -576 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 640 -320 0 ) ( 640 -320 192 ) ( 384 -448 192 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 640 -416 64 ) ( 640 -288 64 ) ( 640 -288 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 640 -448 192 ) ( 640 -448 0 ) ( 384 -576 0 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 640 -320 192 ) ( 640 -448 192 ) ( 384 -576 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 640 -448 0 ) ( 640 -320 0 ) ( 384 -448 0 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 14
+{
+( 640 64 64 ) ( 640 -64 64 ) ( 640 -64 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 896 128 0 ) ( 896 128 192 ) ( 640 64 192 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 896 -128 0 ) ( 896 -128 192 ) ( 896 128 192 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 896 -128 192 ) ( 896 -128 0 ) ( 640 -64 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 640 -64 192 ) ( 640 64 192 ) ( 704 64 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 704 64 0 ) ( 640 64 0 ) ( 640 -64 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 15
+{
+( 1088 -64 0 ) ( 1152 -64 0 ) ( 1152 64 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 1152 64 192 ) ( 1152 -64 192 ) ( 1088 -64 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 896 128 192 ) ( 896 128 0 ) ( 1152 64 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 896 128 0 ) ( 896 128 192 ) ( 896 -128 192 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 896 -128 0 ) ( 896 -128 192 ) ( 1152 -64 192 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 1152 -64 64 ) ( 1152 64 64 ) ( 1152 64 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 16
+{
+( 416 -448 256 ) ( 416 -448 320 ) ( 640 -64 320 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 320 -448 192 ) ( 320 -448 320 ) ( 416 -448 320 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 320 -448 320 ) ( 320 -448 192 ) ( 576 -64 192 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 640 -64 320 ) ( 576 -64 320 ) ( 576 -64 256 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 416 -448 320 ) ( 384 -384 320 ) ( 576 -64 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 352 -448 192 ) ( 416 -448 192 ) ( 640 -64 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 17
+{
+( 192 -576 256 ) ( 192 -576 320 ) ( 416 -448 320 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 192 -512 256 ) ( 192 -512 320 ) ( 192 -576 320 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 320 -448 192 ) ( 320 -448 320 ) ( 192 -512 320 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 320 -448 320 ) ( 320 -448 192 ) ( 416 -448 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 192 -576 320 ) ( 128 -576 320 ) ( 352 -448 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 128 -576 192 ) ( 192 -576 192 ) ( 416 -448 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 18
+{
+( 192 -576 320 ) ( 192 -512 320 ) ( 192 -512 256 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 128 -576 256 ) ( 192 -576 256 ) ( 192 -576 192 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 128 -512 256 ) ( 128 -576 256 ) ( 128 -576 192 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 192 -512 256 ) ( 128 -512 256 ) ( 128 -512 192 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 128 -576 256 ) ( 128 -512 256 ) ( 192 -512 320 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 128 -576 192 ) ( 192 -576 192 ) ( 192 -512 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 19
+{
+( 416 448 256 ) ( 192 576 256 ) ( 192 576 192 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 192 576 320 ) ( 192 512 320 ) ( 192 512 256 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 320 448 320 ) ( 320 448 192 ) ( 192 512 192 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 320 448 192 ) ( 320 448 320 ) ( 416 448 320 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 352 448 320 ) ( 128 576 320 ) ( 192 576 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 416 448 192 ) ( 192 576 192 ) ( 128 576 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 20
+{
+( 576 -64 192 ) ( 576 -32 192 ) ( 576 -64 320 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 640 -64 256 ) ( 640 64 256 ) ( 640 64 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 576 -64 256 ) ( 640 -64 256 ) ( 640 -64 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 640 64 256 ) ( 576 64 256 ) ( 576 64 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 640 64 320 ) ( 640 -64 320 ) ( 576 -64 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 576 -64 192 ) ( 640 -64 192 ) ( 640 64 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 21
+{
+( 640 -304 192 ) ( 704 -304 128 ) ( 640 -448 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 704 -256 192 ) ( 704 -256 128 ) ( 704 -448 192 ) common/caulk -128 64 0 0.500000 0.500000 0 0 0
+( 896 -384 0 ) ( 896 -256 0 ) ( 640 -320 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 896 -384 192 ) ( 896 -384 0 ) ( 640 -448 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 896 -256 0 ) ( 896 -256 192 ) ( 640 -320 192 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 640 -320 64 ) ( 640 -448 64 ) ( 640 -448 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 22
+{
+( 640 448 192 ) ( 704 448 128 ) ( 640 304 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 704 448 192 ) ( 704 448 128 ) ( 704 256 192 ) common/caulk -128 64 0 0.500000 0.500000 0 0 0
+( 640 448 64 ) ( 640 320 64 ) ( 640 320 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 896 384 0 ) ( 896 384 192 ) ( 640 448 192 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 896 256 192 ) ( 896 256 0 ) ( 640 320 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 896 256 0 ) ( 896 384 0 ) ( 640 448 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 23
+{
+( 640 64 320 ) ( 416 448 320 ) ( 416 448 256 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 320 448 320 ) ( 320 448 192 ) ( 416 448 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 320 448 192 ) ( 320 448 320 ) ( 576 64 320 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 576 64 256 ) ( 576 64 320 ) ( 640 64 320 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 320 448 320 ) ( 384 448 320 ) ( 640 64 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 640 64 192 ) ( 416 448 192 ) ( 352 448 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 24
+{
+( -512 1024 0 ) ( -512 896 0 ) ( 128 448 0 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( -512 896 192 ) ( -512 1024 192 ) ( 128 576 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( -512 896 0 ) ( -512 896 192 ) ( 128 448 192 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -512 1024 192 ) ( -512 1024 0 ) ( 128 576 0 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 128 544 0 ) ( 128 480 0 ) ( 128 544 192 ) common/caulk -128 64 0 0.500000 0.500000 0 0 0
+( -512 1040 0 ) ( -512 1104 0 ) ( -512 1040 192 ) common/caulk -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 25
+{
+( -640 1120 64 ) ( -640 992 64 ) ( -640 992 0 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( -640 1120 0 ) ( -640 992 0 ) ( -512 896 0 ) dsi/cretebase -128 192 0 0.500000 0.500000 0 0 0
+( -640 992 0 ) ( -640 992 64 ) ( -512 896 192 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -640 1120 64 ) ( -640 1120 0 ) ( -512 1024 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( -640 992 64 ) ( -640 1120 64 ) ( -512 1024 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( -512 896 0 ) ( -512 832 0 ) ( -512 832 192 ) common/caulk 0 64 0 0.500000 0.500000 0 0 0
+}
+// brush 26
+{
+( -544 -1024 192 ) ( -544 -896 192 ) ( 128 -448 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( -544 -1024 0 ) ( -544 -1024 192 ) ( 128 -576 192 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( -544 -896 192 ) ( -544 -896 0 ) ( 128 -448 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -544 -896 0 ) ( -544 -1024 0 ) ( 128 -576 0 ) dsi/cretebase 128 -64 0 0.500000 0.500000 0 0 0
+( 128 544 0 ) ( 128 480 0 ) ( 128 544 192 ) common/caulk -128 64 0 0.500000 0.500000 0 0 0
+( -544 -64 0 ) ( -544 0 0 ) ( -544 -64 192 ) common/caulk -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 27
+{
+( -576 576 0 ) ( -640 576 0 ) ( -640 448 0 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( -768 448 192 ) ( -768 576 192 ) ( -640 576 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( -896 448 96 ) ( -640 448 96 ) ( -640 448 64 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -640 576 96 ) ( -896 576 96 ) ( -896 576 64 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 384 480 64 ) ( 384 608 64 ) ( 384 608 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 128 448 0 ) ( 128 512 0 ) ( 128 512 192 ) common/caulk -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 28
+{
+( -768 -576 192 ) ( -768 -448 192 ) ( -640 -448 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( -896 -576 96 ) ( -640 -576 96 ) ( -640 -576 64 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( -640 -448 96 ) ( -896 -448 96 ) ( -896 -448 64 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -640 -448 0 ) ( -896 -448 0 ) ( -896 -576 0 ) dsi/cretebase 128 -64 0 0.500000 0.500000 0 0 0
+( 384 -544 64 ) ( 384 -416 64 ) ( 384 -416 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 128 480 0 ) ( 128 544 0 ) ( 128 544 192 ) common/caulk -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 29
+{
+( -576 -448 0 ) ( -576 -576 0 ) ( -576 -576 -32 ) dsi/cretebase 0 -64 0 0.500000 0.500000 0 0 0
+( 672 1024 0 ) ( -672 1024 0 ) ( -672 1024 -32 ) dsi/cretebase 0 -64 0 0.500000 0.500000 0 0 0
+( -544 192 0 ) ( -544 320 0 ) ( -544 320 -32 ) dsi/cretebase 0 -64 0 0.500000 0.500000 0 0 0
+( -608 -1024 0 ) ( 736 -1024 0 ) ( 736 -1024 -32 ) dsi/cretebase 0 -64 0 0.500000 0.500000 0 0 0
+( -640 192 0 ) ( -640 320 0 ) ( 704 320 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 704 320 -32 ) ( -640 320 -32 ) ( -640 192 -32 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 30
+{
+( -544 320 0 ) ( -544 192 0 ) ( -544 320 -32 ) common/caulk -128 192 0 0.500000 0.500000 0 0 0
+( -960 576 -32 ) ( -1024 512 -32 ) ( -1024 512 0 ) common/caulk -128 192 0 0.500000 0.500000 0 0 0
+( 1056 1024 0 ) ( 736 1024 0 ) ( 736 1024 -32 ) dsi/cretebase4 0 192 0 0.500000 0.500000 0 0 0
+( 1024 0 0 ) ( 704 0 0 ) ( 704 320 0 ) dsi/cretebase 0 192 0 0.500000 0.500000 0 0 0
+( 704 320 -32 ) ( 704 0 -32 ) ( 1024 0 -32 ) dsi/cretebase4 -128 128 0 0.500000 0.500000 0 0 0
+}
+// brush 31
+{
+( -576 -576 0 ) ( -576 -448 0 ) ( -576 -576 -32 ) common/caulk -128 192 0 0.500000 0.500000 0 0 0
+( -960 576 -32 ) ( -1024 512 -32 ) ( -1024 512 0 ) common/caulk -128 192 0 0.500000 0.500000 0 0 0
+( -960 960 -32 ) ( -1024 1024 -32 ) ( -1024 1024 0 ) common/caulk -128 192 0 0.500000 0.500000 0 0 0
+( 1056 1024 0 ) ( 736 1024 0 ) ( 736 1024 -32 ) dsi/cretebase4 0 192 0 0.500000 0.500000 0 0 0
+( 1024 0 0 ) ( 704 0 0 ) ( 704 320 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 704 320 -32 ) ( 704 0 -32 ) ( 1024 0 -32 ) dsi/cretebase4 -128 128 0 0.500000 0.500000 0 0 0
+}
+// brush 32
+{
+( -544 320 0 ) ( -544 192 0 ) ( -544 320 -32 ) dsi/cretebase4 0 192 0 0.500000 0.500000 0 0 0
+( -384 -1024 0 ) ( -64 -1024 0 ) ( -64 -1024 -32 ) dsi/cretebase4 0 192 0 0.500000 0.500000 0 0 0
+( -320 704 -32 ) ( 0 704 -32 ) ( 0 1024 -32 ) dsi/cretebase4 -128 128 0 0.500000 0.500000 0 0 0
+( 0 1024 0 ) ( 0 704 0 ) ( -320 704 0 ) dsi/cretebase 0 -64 0 0.500000 0.500000 0 0 0
+( -576 -960 -32 ) ( -512 -1024 -32 ) ( -512 -1024 0 ) common/caulk -128 192 0 0.500000 0.500000 0 0 0
+}
+// brush 33
+{
+( -576 -576 0 ) ( -576 -448 0 ) ( -576 -576 -32 ) dsi/cretebase4 0 192 0 0.500000 0.500000 0 0 0
+( -384 -1024 0 ) ( -64 -1024 0 ) ( -64 -1024 -32 ) dsi/cretebase4 0 192 0 0.500000 0.500000 0 0 0
+( -320 704 -32 ) ( 0 704 -32 ) ( 0 1024 -32 ) dsi/cretebase4 -128 128 0 0.500000 0.500000 0 0 0
+( 0 1024 0 ) ( 0 704 0 ) ( -320 704 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -1024 -1024 -32 ) ( -960 -960 -32 ) ( -1024 -1024 0 ) common/caulk -128 192 0 0.500000 0.500000 0 0 0
+( -576 -960 -32 ) ( -512 -1024 -32 ) ( -512 -1024 0 ) common/caulk -128 192 0 0.500000 0.500000 0 0 0
+}
+// brush 34
+{
+( -544 -896 0 ) ( -544 -1024 0 ) ( -544 -1024 192 ) common/caulk 0 64 0 0.500000 0.500000 0 0 0
+( -672 -1120 0 ) ( -672 -992 0 ) ( -672 -992 64 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( -672 -992 0 ) ( -672 -1120 0 ) ( -544 -1024 0 ) dsi/cretebase -64 64 0 0.500000 0.500000 0 0 0
+( -672 -1120 64 ) ( -672 -992 64 ) ( -544 -896 192 ) dsi/cretebase4 0 64 0 0.500000 0.500000 0 0 0
+( -672 -992 64 ) ( -672 -992 0 ) ( -544 -896 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -672 -1120 0 ) ( -672 -1120 64 ) ( -544 -1024 192 ) dsi/cretebase -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 35
+{
+( -867 -757 0 ) ( -867 -757 192 ) ( -822 -712 192 ) dsi/cretebase 272 64 0 0.500000 0.500000 0 0 0
+( -912 -776 0 ) ( -912 -776 192 ) ( -848 -776 192 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -957 -757 0 ) ( -957 -757 192 ) ( -912 -802 192 ) dsi/cretebase -64 0 0 0.500000 0.500000 0 0 0
+( -976 -712 32 ) ( -976 -712 224 ) ( -976 -776 224 ) dsi/cretebase -64 0 0 0.500000 0.500000 0 0 0
+( -957 -667 32 ) ( -957 -667 224 ) ( -1002 -712 224 ) dsi/cretebase -64 0 0 0.500000 0.500000 0 0 0
+( -912 -648 32 ) ( -912 -648 224 ) ( -976 -648 224 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -867 -667 32 ) ( -867 -667 224 ) ( -912 -622 224 ) dsi/cretebase 272 64 0 0.500000 0.500000 0 0 0
+( -848 -712 0 ) ( -848 -712 192 ) ( -848 -648 192 ) dsi/cretebase 272 64 0 0.500000 0.500000 0 0 0
+( -976 -776 0 ) ( -848 -776 0 ) ( -848 -648 0 ) dsi/cretebase -96 176 0 0.500000 0.500000 0 0 0
+( -864 -648 128 ) ( -864 -776 128 ) ( -992 -776 128 ) dsi/cretebase4 -288 176 0 0.500000 0.500000 0 0 0
+}
+// brush 36
+{
+( -496 -16 -32 ) ( -528 -16 -32 ) ( -528 -16 0 ) common/caulk 0 0 0 0.500000 0.500000 0 0 0
+( -512 16 -32 ) ( -496 16 -32 ) ( -512 16 0 ) common/caulk 0 0 0 0.500000 0.500000 0 0 0
+( -576 -576 0 ) ( -576 -448 0 ) ( -576 -576 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -1024 320 0 ) ( -1024 0 0 ) ( -1024 0 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 64 -448 -32 ) ( -192 -448 -32 ) ( -192 -1608 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -192 -1608 0 ) ( -192 -448 0 ) ( 64 -448 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 37
+{
+( -528 -16 -32 ) ( -496 -16 -32 ) ( -528 -16 0 ) common/caulk 0 0 0 0.500000 0.500000 0 0 0
+( -544 320 0 ) ( -544 192 0 ) ( -544 320 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 1024 -1056 0 ) ( 1024 -736 0 ) ( 1024 -736 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 1024 -512 -32 ) ( 960 -576 -32 ) ( 1024 -512 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -512 -1024 -32 ) ( -768 -768 -32 ) ( -512 -1024 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 0 -1024 0 ) ( 320 -1024 0 ) ( 320 -1024 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 64 -448 -32 ) ( -192 -448 -32 ) ( -192 -1608 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -192 -1608 0 ) ( -192 -448 0 ) ( 64 -448 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 38
+{
+( -496 -16 -32 ) ( -528 -16 -32 ) ( -528 -16 0 ) common/caulk 0 0 0 0.500000 0.500000 0 0 0
+( -512 16 -32 ) ( -496 16 -32 ) ( -512 16 0 ) common/caulk 0 0 0 0.500000 0.500000 0 0 0
+( -544 320 0 ) ( -544 192 0 ) ( -544 320 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 1024 -1056 0 ) ( 1024 -736 0 ) ( 1024 -736 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 64 -448 -32 ) ( -192 -448 -32 ) ( -192 -1608 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -192 -1608 0 ) ( -192 -448 0 ) ( 64 -448 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 39
+{
+( -496 16 -32 ) ( -512 16 -32 ) ( -512 16 0 ) common/caulk 0 0 0 0.500000 0.500000 0 0 0
+( -576 -576 0 ) ( -576 -448 0 ) ( -576 -576 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -1024 512 -32 ) ( -960 576 -32 ) ( -1024 512 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -1024 320 0 ) ( -1024 0 0 ) ( -1024 0 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 64 -448 -32 ) ( -192 -448 -32 ) ( -192 -1608 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -192 -1608 0 ) ( -192 -448 0 ) ( 64 -448 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 40
+{
+( -496 16 -32 ) ( -512 16 -32 ) ( -512 16 0 ) common/caulk 0 0 0 0.500000 0.500000 0 0 0
+( -544 320 0 ) ( -544 192 0 ) ( -544 320 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 1024 -1056 0 ) ( 1024 -736 0 ) ( 1024 -736 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 512 1024 -32 ) ( 576 960 -32 ) ( 512 1024 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 384 1024 0 ) ( 64 1024 0 ) ( 64 1024 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -1024 512 -32 ) ( -960 576 -32 ) ( -1024 512 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 64 -448 -32 ) ( -192 -448 -32 ) ( -192 -1608 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -192 -1608 0 ) ( -192 -448 0 ) ( 64 -448 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 41
+{
+( 512 64 192 ) ( 528 80 192 ) ( 512 64 208 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 528 -80 192 ) ( 512 -64 192 ) ( 528 -80 208 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 512 -160 208 ) ( 512 -160 192 ) ( 512 160 192 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 512 160 208 ) ( 512 160 192 ) ( 576 64 192 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 576 -64 208 ) ( 576 64 208 ) ( 576 64 80 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 512 -160 192 ) ( 512 -160 208 ) ( 576 -64 208 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 560 -64 208 ) ( 560 64 208 ) ( 576 64 208 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 576 64 192 ) ( 560 64 192 ) ( 560 -64 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 42
+{
+( 640 64 176 ) ( 416 448 176 ) ( 640 64 192 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 384 192 176 ) ( 640 64 176 ) ( 640 320 176 ) dsi/cretebase4 64 64 0 0.500000 0.500000 0 0 0
+( 640 64 192 ) ( 384 192 192 ) ( 384 448 192 ) dsi/cretebase4 64 64 0 0.500000 0.500000 0 0 0
+( 640 64 176 ) ( 640 64 192 ) ( 640 320 192 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 384 448 192 ) ( 384 448 176 ) ( 640 320 176 ) dsi/cretebase4 -128 -32 0 0.500000 0.500000 0 0 0
+}
+// brush 43
+{
+( 704 304 112 ) ( 704 272 112 ) ( 704 304 128 ) common/caulk -128 64 0 0.500000 0.500000 0 0 0
+( 640 320 192 ) ( 640 304 192 ) ( 640 304 176 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 704 304 112 ) ( 704 304 128 ) ( 640 320 192 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 704 80 128 ) ( 704 80 112 ) ( 640 64 176 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 704 304 128 ) ( 704 80 128 ) ( 640 64 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 704 80 112 ) ( 704 304 112 ) ( 640 320 176 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 44
+{
+( 704 272 112 ) ( 704 304 112 ) ( 704 304 128 ) common/caulk -128 -64 0 0.500000 0.500000 0 0 0
+( 896 256 112 ) ( 896 256 128 ) ( 640 320 128 ) dsi/cretebase -128 -64 0 0.500000 0.500000 0 0 0
+( 896 256 128 ) ( 896 256 112 ) ( 896 128 112 ) dsi/cretebase -128 -64 0 0.500000 0.500000 0 0 0
+( 896 128 128 ) ( 896 128 112 ) ( 640 64 112 ) dsi/cretebase -128 -64 0 0.500000 0.500000 0 0 0
+( 640 304 128 ) ( 640 320 128 ) ( 656 320 128 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 656 320 112 ) ( 640 320 112 ) ( 640 304 112 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 45
+{
+( 640 -320 176 ) ( 384 -448 176 ) ( 384 -448 192 ) dsi/cretebase4 -128 -32 0 0.500000 0.500000 0 0 0
+( 640 -320 192 ) ( 640 -64 192 ) ( 640 -64 176 ) dsi/cretebase 64 64 0 0.500000 0.500000 0 0 0
+( 384 -448 192 ) ( 384 -192 192 ) ( 640 -64 192 ) dsi/cretebase4 64 -128 0 0.500000 0.500000 0 0 0
+( 640 -320 176 ) ( 640 -64 176 ) ( 384 -192 176 ) dsi/cretebase4 64 -128 0 0.500000 0.500000 0 0 0
+( 640 -64 192 ) ( 416 -448 176 ) ( 640 -64 176 ) dsi/cretebase 64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 46
+{
+( 640 -320 176 ) ( 704 -304 112 ) ( 704 -80 112 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 640 -64 192 ) ( 704 -80 128 ) ( 704 -304 128 ) dsi/cretebase4 -64 -192 0 0.500000 0.500000 0 0 0
+( 640 -64 176 ) ( 704 -80 112 ) ( 704 -80 128 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 640 -320 192 ) ( 704 -304 128 ) ( 704 -304 112 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 640 -304 176 ) ( 640 -304 192 ) ( 640 -320 192 ) dsi/cretebase 64 64 0 0.500000 0.500000 0 0 0
+( 704 -304 128 ) ( 704 -272 112 ) ( 704 -304 112 ) common/caulk 64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 47
+{
+( 640 -304 112 ) ( 640 -320 112 ) ( 656 -320 112 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 656 -320 128 ) ( 640 -320 128 ) ( 640 -304 128 ) dsi/cretebase4 -64 -192 0 0.500000 0.500000 0 0 0
+( 640 -64 112 ) ( 896 -128 112 ) ( 896 -128 128 ) dsi/cretebase -128 -64 0 0.500000 0.500000 0 0 0
+( 896 -128 112 ) ( 896 -256 112 ) ( 896 -256 128 ) dsi/cretebase 64 -64 0 0.500000 0.500000 0 0 0
+( 640 -320 128 ) ( 896 -256 128 ) ( 896 -256 112 ) dsi/cretebase -128 -64 0 0.500000 0.500000 0 0 0
+( 704 -304 128 ) ( 704 -304 112 ) ( 704 -272 112 ) common/caulk 64 -64 0 0.500000 0.500000 0 0 0
+}
+// brush 48
+{
+( 816 464 0 ) ( 816 416 0 ) ( 816 464 128 ) common/caulk -64 0 0 0.500000 0.500000 0 0 0
+( 864 384 0 ) ( 816 384 0 ) ( 816 384 128 ) common/caulk -64 0 0 0.500000 0.500000 0 0 0
+( 832 432 128 ) ( 896 432 128 ) ( 832 256 128 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 704 448 128 ) ( 704 448 192 ) ( 704 256 192 ) common/caulk -128 64 0 0.500000 0.500000 0 0 0
+( 896 384 0 ) ( 896 384 192 ) ( 640 448 192 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 896 256 0 ) ( 896 384 0 ) ( 640 448 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 49
+{
+( 832 448 0 ) ( 816 448 0 ) ( 816 384 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 816 512 128 ) ( 832 512 128 ) ( 832 384 128 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 816 384 128 ) ( 832 384 128 ) ( 832 384 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 832 384 128 ) ( 832 448 128 ) ( 832 448 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 816 528 128 ) ( 816 528 0 ) ( 832 512 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 816 528 0 ) ( 816 528 128 ) ( 816 384 128 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 50
+{
+( 832 384 0 ) ( 848 368 0 ) ( 832 384 128 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 816 384 0 ) ( 864 384 0 ) ( 816 384 128 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 832 432 128 ) ( 896 432 128 ) ( 832 256 128 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 704 448 128 ) ( 704 448 192 ) ( 704 256 192 ) common/caulk -128 64 0 0.500000 0.500000 0 0 0
+( 896 288 64 ) ( 896 416 64 ) ( 896 416 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 896 256 192 ) ( 896 256 0 ) ( 640 320 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 896 256 0 ) ( 896 384 0 ) ( 640 448 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 51
+{
+( 640 -448 0 ) ( 896 -384 0 ) ( 896 -256 0 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 640 -448 192 ) ( 896 -384 192 ) ( 896 -384 0 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 704 -256 192 ) ( 704 -448 192 ) ( 704 -448 128 ) common/caulk -128 64 0 0.500000 0.500000 0 0 0
+( 832 -256 128 ) ( 896 -432 128 ) ( 832 -432 128 ) dsi/cretebase4 192 0 0 0.500000 0.500000 0 0 0
+( 816 -384 128 ) ( 816 -384 0 ) ( 864 -384 0 ) common/caulk 192 0 0 0.500000 0.500000 0 0 0
+( 816 -464 128 ) ( 816 -416 0 ) ( 816 -464 0 ) common/caulk -64 0 0 0.500000 0.500000 0 0 0
+}
+// brush 52
+{
+( 816 -384 128 ) ( 816 -528 128 ) ( 816 -528 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 832 -512 0 ) ( 816 -528 0 ) ( 816 -528 128 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 832 -448 0 ) ( 832 -448 128 ) ( 832 -384 128 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 832 -384 0 ) ( 832 -384 128 ) ( 816 -384 128 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 832 -384 128 ) ( 832 -512 128 ) ( 816 -512 128 ) dsi/cretebase4 192 0 0 0.500000 0.500000 0 0 0
+( 816 -384 0 ) ( 816 -448 0 ) ( 832 -448 0 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 53
+{
+( 640 -448 0 ) ( 896 -384 0 ) ( 896 -256 0 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 640 -320 0 ) ( 896 -256 0 ) ( 896 -256 192 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 896 -416 0 ) ( 896 -416 64 ) ( 896 -288 64 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 704 -256 192 ) ( 704 -448 192 ) ( 704 -448 128 ) common/caulk -128 64 0 0.500000 0.500000 0 0 0
+( 832 -256 128 ) ( 896 -432 128 ) ( 832 -432 128 ) dsi/cretebase4 192 0 0 0.500000 0.500000 0 0 0
+( 816 -384 128 ) ( 864 -384 0 ) ( 816 -384 0 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 832 -384 128 ) ( 848 -368 0 ) ( 832 -384 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 54
+{
+( 640 64 320 ) ( 640 -320 320 ) ( 640 -320 304 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 656 64 320 ) ( 640 64 320 ) ( 640 64 304 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 768 -320 320 ) ( 768 64 320 ) ( 768 64 304 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 624 -64 320 ) ( 640 -64 320 ) ( 640 -64 304 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 640 -320 320 ) ( 640 64 320 ) ( 656 64 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 656 64 304 ) ( 640 64 304 ) ( 640 -320 304 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 55
+{
+( 416 448 320 ) ( 416 448 448 ) ( 752 64 448 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 432 448 320 ) ( 432 448 448 ) ( 416 448 448 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 432 448 448 ) ( 432 448 320 ) ( 768 64 320 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 752 64 512 ) ( 768 64 512 ) ( 768 64 320 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 768 64 512 ) ( 752 64 512 ) ( 416 448 448 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 432 448 320 ) ( 416 448 320 ) ( 752 64 320 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 56
+{
+( 752 64 448 ) ( 752 -64 448 ) ( 752 -64 320 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 768 64 448 ) ( 752 64 448 ) ( 752 64 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 768 -64 512 ) ( 768 64 512 ) ( 768 64 384 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 752 -64 448 ) ( 768 -64 448 ) ( 768 -64 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 752 -64 512 ) ( 752 64 512 ) ( 768 64 512 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 768 64 320 ) ( 752 64 320 ) ( 752 -64 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 57
+{
+( 416 -448 320 ) ( 432 -448 320 ) ( 768 -64 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 752 -64 512 ) ( 768 -64 512 ) ( 432 -448 448 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 432 -448 448 ) ( 432 -448 320 ) ( 416 -448 320 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 432 -448 320 ) ( 432 -448 448 ) ( 768 -64 448 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 768 -64 512 ) ( 752 -64 512 ) ( 752 -64 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 416 -448 448 ) ( 416 -448 320 ) ( 752 -64 320 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 58
+{
+( 432 448 304 ) ( 768 64 304 ) ( 432 448 320 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 544 448 304 ) ( 416 448 304 ) ( 640 64 304 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 416 448 320 ) ( 544 448 320 ) ( 768 64 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 624 64 320 ) ( 640 64 320 ) ( 640 64 304 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 432 448 320 ) ( 416 448 320 ) ( 416 448 304 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 416 448 304 ) ( 416 448 320 ) ( 640 64 320 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 59
+{
+( 768 -64 304 ) ( 432 -448 304 ) ( 768 -64 320 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 416 -448 320 ) ( 416 -448 304 ) ( 640 -64 304 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 656 -64 320 ) ( 640 -64 320 ) ( 640 -64 304 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 400 -448 320 ) ( 416 -448 320 ) ( 416 -448 304 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 544 -448 320 ) ( 416 -448 320 ) ( 640 -64 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 416 -448 304 ) ( 544 -448 304 ) ( 768 -64 304 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 60
+{
+( 192 512 192 ) ( 192 576 192 ) ( 128 576 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 128 512 256 ) ( 128 576 256 ) ( 192 576 320 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 128 512 192 ) ( 128 512 256 ) ( 192 512 256 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 128 576 256 ) ( 128 512 256 ) ( 128 512 192 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 192 576 192 ) ( 192 576 256 ) ( 128 576 256 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 192 512 256 ) ( 192 512 320 ) ( 192 576 320 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+}
+// brush 61
+{
+( 1296 384 0 ) ( 1296 528 0 ) ( 1280 528 0 ) dsi/cretebase -32 96 0 0.500000 0.500000 0 0 0
+( 1280 528 128 ) ( 1296 528 128 ) ( 1296 384 128 ) dsi/cretebase4 -224 32 0 0.500000 0.500000 0 0 0
+( 1280 512 0 ) ( 1280 512 128 ) ( 1280 384 128 ) dsi/cretebase 32 64 0 0.500000 0.500000 0 0 0
+( 1280 384 128 ) ( 1296 384 128 ) ( 1296 384 0 ) dsi/cretebase -224 64 0 0.500000 0.500000 0 0 0
+( 1296 384 128 ) ( 1296 528 128 ) ( 1296 528 0 ) dsi/cretebase 32 64 0 0.500000 0.500000 0 0 0
+( 1280 512 128 ) ( 1280 512 0 ) ( 1296 528 0 ) dsi/cretebase -160 64 0 0.500000 0.500000 0 0 0
+}
+// brush 62
+{
+( 960 528 0 ) ( 816 528 0 ) ( 816 512 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 816 512 128 ) ( 816 528 128 ) ( 960 528 128 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 832 512 0 ) ( 832 512 128 ) ( 960 512 128 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 960 528 128 ) ( 816 528 128 ) ( 816 528 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 832 512 128 ) ( 832 512 0 ) ( 816 528 0 ) dsi/cretebase -128 64 0 0.500000 0.500000 0 0 0
+( 1296 528 128 ) ( 1296 528 0 ) ( 1280 512 0 ) dsi/cretebase -160 64 0 0.500000 0.500000 0 0 0
+}
+// brush 63
+{
+( 1296 -528 0 ) ( 1280 -512 0 ) ( 1280 -512 128 ) dsi/cretebase 96 64 0 0.500000 0.500000 0 0 0
+( 1296 -528 0 ) ( 1296 -528 128 ) ( 1296 -384 128 ) dsi/cretebase 32 64 0 0.500000 0.500000 0 0 0
+( 1296 -384 0 ) ( 1296 -384 128 ) ( 1280 -384 128 ) dsi/cretebase 32 64 0 0.500000 0.500000 0 0 0
+( 1280 -384 128 ) ( 1280 -512 128 ) ( 1280 -512 0 ) dsi/cretebase 32 64 0 0.500000 0.500000 0 0 0
+( 1296 -384 128 ) ( 1296 -528 128 ) ( 1280 -528 128 ) dsi/cretebase4 32 32 0 0.500000 0.500000 0 0 0
+( 1280 -528 0 ) ( 1296 -528 0 ) ( 1296 -384 0 ) dsi/cretebase 224 96 0 0.500000 0.500000 0 0 0
+}
+// brush 64
+{
+( 1280 -512 0 ) ( 1296 -528 0 ) ( 1296 -528 128 ) dsi/cretebase 96 64 0 0.500000 0.500000 0 0 0
+( 816 -528 0 ) ( 832 -512 0 ) ( 832 -512 128 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 816 -528 0 ) ( 816 -528 128 ) ( 960 -528 128 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 960 -512 128 ) ( 832 -512 128 ) ( 832 -512 0 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( 960 -528 128 ) ( 816 -528 128 ) ( 816 -512 128 ) dsi/cretebase4 192 0 0 0.500000 0.500000 0 0 0
+( 816 -512 0 ) ( 816 -528 0 ) ( 960 -528 0 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 65
+{
+( 304 608 336 ) ( 304 480 336 ) ( 176 480 336 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 176 480 320 ) ( 304 480 320 ) ( 304 608 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 304 544 320 ) ( 304 544 336 ) ( 304 608 336 ) dsi/cretebase 128 96 0 0.500000 0.500000 0 0 0
+( 285 589 320 ) ( 285 589 336 ) ( 240 634 336 ) dsi/cretebase 128 96 0 0.500000 0.500000 0 0 0
+( 240 608 320 ) ( 240 608 336 ) ( 176 608 336 ) dsi/cretebase 128 96 0 0.500000 0.500000 0 0 0
+( 195 589 320 ) ( 195 589 336 ) ( 150 544 336 ) dsi/cretebase 128 96 0 0.500000 0.500000 0 0 0
+( 176 544 320 ) ( 176 544 336 ) ( 176 480 336 ) dsi/cretebase 128 96 0 0.500000 0.500000 0 0 0
+( 195 499 320 ) ( 195 499 336 ) ( 240 454 336 ) dsi/cretebase 128 96 0 0.500000 0.500000 0 0 0
+( 240 480 320 ) ( 240 480 336 ) ( 304 480 336 ) dsi/cretebase 128 96 0 0.500000 0.500000 0 0 0
+( 285 499 320 ) ( 285 499 336 ) ( 330 544 336 ) dsi/cretebase 128 96 0 0.500000 0.500000 0 0 0
+}
+// brush 66
+{
+( 285 -589 320 ) ( 285 -589 336 ) ( 330 -544 336 ) dsi/cretebase 0 96 0 0.500000 0.500000 0 0 0
+( 240 -608 320 ) ( 240 -608 336 ) ( 304 -608 336 ) dsi/cretebase 128 96 0 0.500000 0.500000 0 0 0
+( 195 -589 320 ) ( 195 -589 336 ) ( 240 -634 336 ) dsi/cretebase 0 96 0 0.500000 0.500000 0 0 0
+( 176 -544 320 ) ( 176 -544 336 ) ( 176 -608 336 ) dsi/cretebase 0 96 0 0.500000 0.500000 0 0 0
+( 195 -499 320 ) ( 195 -499 336 ) ( 150 -544 336 ) dsi/cretebase 0 96 0 0.500000 0.500000 0 0 0
+( 240 -480 320 ) ( 240 -480 336 ) ( 176 -480 336 ) dsi/cretebase 128 96 0 0.500000 0.500000 0 0 0
+( 285 -499 320 ) ( 285 -499 336 ) ( 240 -454 336 ) dsi/cretebase 0 96 0 0.500000 0.500000 0 0 0
+( 304 -544 320 ) ( 304 -544 336 ) ( 304 -480 336 ) dsi/cretebase 0 96 0 0.500000 0.500000 0 0 0
+( 176 -608 320 ) ( 304 -608 320 ) ( 304 -480 320 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 304 -480 336 ) ( 304 -608 336 ) ( 176 -608 336 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 67
+{
+( 224 -448 176 ) ( 192 -448 176 ) ( 224 -448 192 ) common/caulk 64 128 0 0.500000 0.500000 0 0 0
+( 80 -480 176 ) ( 128 -448 176 ) ( 80 -480 192 ) common/caulk 64 128 0 0.500000 0.500000 0 0 0
+( 208 -384 192 ) ( 208 -512 192 ) ( 80 -512 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 80 -512 176 ) ( 208 -512 176 ) ( 208 -384 176 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 208 -448 176 ) ( 208 -448 192 ) ( 208 -384 192 ) dsi/cretebase -192 -192 0 0.500000 0.500000 0 0 0
+( 189 -403 176 ) ( 189 -403 192 ) ( 144 -358 192 ) dsi/cretebase -192 -192 0 0.500000 0.500000 0 0 0
+}
+// brush 68
+{
+( 224 -448 176 ) ( 192 -448 176 ) ( 224 -448 192 ) common/caulk 64 128 0 0.500000 0.500000 0 0 0
+( 128 -448 176 ) ( 80 -480 176 ) ( 80 -480 192 ) common/caulk 64 128 0 0.500000 0.500000 0 0 0
+( 208 -384 192 ) ( 208 -512 192 ) ( 80 -512 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 80 -512 176 ) ( 208 -512 176 ) ( 208 -384 176 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 189 -403 176 ) ( 189 -403 192 ) ( 144 -358 192 ) dsi/cretebase -192 -192 0 0.500000 0.500000 0 0 0
+( 144 -384 176 ) ( 144 -384 192 ) ( 80 -384 192 ) dsi/cretebase 64 -192 0 0.500000 0.500000 0 0 0
+( 99 -403 176 ) ( 99 -403 192 ) ( 54 -448 192 ) dsi/cretebase -192 -192 0 0.500000 0.500000 0 0 0
+( 80 -448 176 ) ( 80 -448 192 ) ( 80 -512 192 ) dsi/cretebase -192 -192 0 0.500000 0.500000 0 0 0
+}
+// brush 69
+{
+( 192 -448 176 ) ( 224 -448 176 ) ( 224 -448 192 ) common/caulk 64 128 0 0.500000 0.500000 0 0 0
+( 128 -448 176 ) ( 80 -480 176 ) ( 80 -480 192 ) common/caulk 64 128 0 0.500000 0.500000 0 0 0
+( 208 -384 192 ) ( 208 -512 192 ) ( 80 -512 192 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 80 -512 176 ) ( 208 -512 176 ) ( 208 -384 176 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 80 -448 176 ) ( 80 -448 192 ) ( 80 -512 192 ) dsi/cretebase -192 -192 0 0.500000 0.500000 0 0 0
+( 99 -493 176 ) ( 99 -493 192 ) ( 144 -538 192 ) dsi/cretebase -192 -192 0 0.500000 0.500000 0 0 0
+}
+// brush 70
+{
+( 144 358 192 ) ( 189 403 192 ) ( 189 403 176 ) dsi/cretebase -128 -192 0 0.500000 0.500000 0 0 0
+( 208 384 192 ) ( 208 448 192 ) ( 208 448 176 ) dsi/cretebase -128 -192 0 0.500000 0.500000 0 0 0
+( 208 384 176 ) ( 208 512 176 ) ( 80 512 176 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 80 512 192 ) ( 208 512 192 ) ( 208 384 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 80 480 192 ) ( 128 448 176 ) ( 80 480 176 ) common/caulk -192 128 0 0.500000 0.500000 0 0 0
+( 224 448 192 ) ( 192 448 176 ) ( 224 448 176 ) common/caulk -192 128 0 0.500000 0.500000 0 0 0
+}
+// brush 71
+{
+( 80 512 192 ) ( 80 448 192 ) ( 80 448 176 ) dsi/cretebase -128 -192 0 0.500000 0.500000 0 0 0
+( 54 448 192 ) ( 99 403 192 ) ( 99 403 176 ) dsi/cretebase -128 -192 0 0.500000 0.500000 0 0 0
+( 80 384 192 ) ( 144 384 192 ) ( 144 384 176 ) dsi/cretebase -192 -192 0 0.500000 0.500000 0 0 0
+( 144 358 192 ) ( 189 403 192 ) ( 189 403 176 ) dsi/cretebase -128 -192 0 0.500000 0.500000 0 0 0
+( 208 384 176 ) ( 208 512 176 ) ( 80 512 176 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 80 512 192 ) ( 208 512 192 ) ( 208 384 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 80 480 192 ) ( 80 480 176 ) ( 128 448 176 ) common/caulk -192 128 0 0.500000 0.500000 0 0 0
+( 224 448 192 ) ( 192 448 176 ) ( 224 448 176 ) common/caulk -192 128 0 0.500000 0.500000 0 0 0
+}
+// brush 72
+{
+( 144 538 192 ) ( 99 493 192 ) ( 99 493 176 ) dsi/cretebase -128 -192 0 0.500000 0.500000 0 0 0
+( 80 512 192 ) ( 80 448 192 ) ( 80 448 176 ) dsi/cretebase -128 -192 0 0.500000 0.500000 0 0 0
+( 208 384 176 ) ( 208 512 176 ) ( 80 512 176 ) dsi/cretebase4 -64 64 0 0.500000 0.500000 0 0 0
+( 80 512 192 ) ( 208 512 192 ) ( 208 384 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( 80 480 192 ) ( 80 480 176 ) ( 128 448 176 ) common/caulk -192 128 0 0.500000 0.500000 0 0 0
+( 224 448 192 ) ( 224 448 176 ) ( 192 448 176 ) common/caulk -192 128 0 0.500000 0.500000 0 0 0
+}
+// brush 73
+{
+( -1024 1024 -32 ) ( -1024 1024 0 ) ( -2048 2048 0 ) dsi/cretebase -128 0 0 0.500000 0.500000 0 0 0
+( -1024 -1024 -32 ) ( -1024 -1024 0 ) ( -1024 1024 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( 0 -1024 0 ) ( -320 -1024 0 ) ( -320 -704 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -320 -704 -32 ) ( -320 -1024 -32 ) ( 0 -1024 -32 ) dsi/cretebase 128 64 0 0.500000 0.500000 0 0 0
+( -2048 -640 0 ) ( -2048 -960 0 ) ( -2048 -960 -32 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -1024 -1024 0 ) ( -1024 -1024 -32 ) ( -2048 -2048 -32 ) dsi/cretebase -128 0 0 0.500000 0.500000 0 0 0
+}
+// brush 74
+{
+( -5088 2048 -32 ) ( -5568 2048 -32 ) ( -5568 1280 -32 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -5568 1280 0 ) ( -5568 2048 0 ) ( -5088 2048 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -4768 -2048 0 ) ( -4288 -2048 0 ) ( -4288 -2048 -32 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -2048 1248 0 ) ( -2048 2016 0 ) ( -2048 2016 -32 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -5088 2048 0 ) ( -5568 2048 0 ) ( -5568 2048 -32 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -5568 2048 0 ) ( -5568 1280 0 ) ( -5568 1280 -32 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 75
+{
+( -5440 -592 128 ) ( -5376 -592 64 ) ( -5440 -624 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -5568 -496 64 ) ( -5568 -592 64 ) ( -5568 -592 0 ) dsi/cretebase -64 64 0 0.500000 0.500000 0 0 0
+( -5376 -624 64 ) ( -5376 -528 64 ) ( -5376 -528 0 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -5952 -624 64 ) ( -4800 -624 64 ) ( -4800 -624 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5568 -592 128 ) ( -5568 -496 128 ) ( -4416 -496 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -4416 -496 0 ) ( -5568 -496 0 ) ( -5568 -592 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -4544 -464 64 ) ( -5696 -464 64 ) ( -5696 -464 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+}
+// brush 76
+{
+( -5440 -336 128 ) ( -5376 -336 64 ) ( -5440 -368 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -5568 -240 64 ) ( -5568 -336 64 ) ( -5568 -336 0 ) dsi/cretebase -64 64 0 0.500000 0.500000 0 0 0
+( -4416 -336 64 ) ( -5568 -336 64 ) ( -5568 -336 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5376 -368 64 ) ( -5376 -272 64 ) ( -5376 -272 0 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -5952 -368 64 ) ( -4800 -368 64 ) ( -4800 -368 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5568 -336 128 ) ( -5568 -240 128 ) ( -4416 -240 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -4416 -240 0 ) ( -5568 -240 0 ) ( -5568 -336 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 77
+{
+( -5440 -208 128 ) ( -5376 -208 64 ) ( -5440 -240 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -5568 -112 64 ) ( -5568 -208 64 ) ( -5568 -208 0 ) dsi/cretebase -64 64 0 0.500000 0.500000 0 0 0
+( -4544 -208 64 ) ( -5696 -208 64 ) ( -5696 -208 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5376 -240 64 ) ( -5376 -144 64 ) ( -5376 -144 0 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -5824 -240 64 ) ( -4672 -240 64 ) ( -4672 -240 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5568 -208 128 ) ( -5568 -112 128 ) ( -4416 -112 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -4416 -112 0 ) ( -5568 -112 0 ) ( -5568 -208 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 78
+{
+( -5440 -80 128 ) ( -5376 -80 64 ) ( -5440 -112 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -4416 16 0 ) ( -5568 16 0 ) ( -5568 -80 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -5568 -80 128 ) ( -5568 16 128 ) ( -4416 16 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -5952 -112 64 ) ( -4800 -112 64 ) ( -4800 -112 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5376 -112 64 ) ( -5376 -16 64 ) ( -5376 -16 0 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -4416 -80 64 ) ( -5568 -80 64 ) ( -5568 -80 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5568 16 64 ) ( -5568 -80 64 ) ( -5568 -80 0 ) dsi/cretebase -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 79
+{
+( -5440 48 128 ) ( -5376 48 64 ) ( -5440 16 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -4416 144 0 ) ( -5568 144 0 ) ( -5568 48 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -5568 48 128 ) ( -5568 144 128 ) ( -4416 144 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -5824 16 64 ) ( -4672 16 64 ) ( -4672 16 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5376 16 64 ) ( -5376 112 64 ) ( -5376 112 0 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -4544 48 64 ) ( -5696 48 64 ) ( -5696 48 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5568 144 64 ) ( -5568 48 64 ) ( -5568 48 0 ) dsi/cretebase -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 80
+{
+( -5440 176 128 ) ( -5376 176 64 ) ( -5440 144 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -5568 272 64 ) ( -5568 176 64 ) ( -5568 176 0 ) dsi/cretebase -64 64 0 0.500000 0.500000 0 0 0
+( -4416 176 64 ) ( -5568 176 64 ) ( -5568 176 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5376 144 64 ) ( -5376 240 64 ) ( -5376 240 0 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -5952 144 64 ) ( -4800 144 64 ) ( -4800 144 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5568 176 128 ) ( -5568 272 128 ) ( -4416 272 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -4416 272 0 ) ( -5568 272 0 ) ( -5568 176 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 81
+{
+( -5440 304 128 ) ( -5376 304 64 ) ( -5440 272 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -4416 400 0 ) ( -5568 400 0 ) ( -5568 304 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -5568 304 128 ) ( -5568 400 128 ) ( -4416 400 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -5824 272 64 ) ( -4672 272 64 ) ( -4672 272 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5376 272 64 ) ( -5376 368 64 ) ( -5376 368 0 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -4544 304 64 ) ( -5696 304 64 ) ( -5696 304 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5568 400 64 ) ( -5568 304 64 ) ( -5568 304 0 ) dsi/cretebase -64 64 0 0.500000 0.500000 0 0 0
+}
+// brush 82
+{
+( -4416 528 0 ) ( -5568 528 0 ) ( -5568 432 0 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -5568 432 128 ) ( -5568 528 128 ) ( -4416 528 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -5952 400 64 ) ( -4800 400 64 ) ( -4800 400 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+( -5376 400 64 ) ( -5376 496 64 ) ( -5376 496 0 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -5568 528 64 ) ( -5568 432 64 ) ( -5568 432 0 ) dsi/cretebase -64 64 0 0.500000 0.500000 0 0 0
+( -5440 432 128 ) ( -5376 432 64 ) ( -5440 400 128 ) dsi/cretebase4 384 -64 0 0.500000 0.500000 0 0 0
+( -4416 560 64 ) ( -5568 560 64 ) ( -5568 560 0 ) dsi/cretebase 0 64 0 0.500000 0.500000 0 0 0
+}
+// brush 83
+{
+( -3384 912 0 ) ( -3368 928 0 ) ( -3384 912 48 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -3384 656 0 ) ( -3400 672 0 ) ( -3384 656 48 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -3240 976 0 ) ( -3448 976 0 ) ( -3448 752 0 ) dsi/cretebase 112 -224 0 0.500000 0.500000 0 0 0
+( -3448 752 32 ) ( -3448 976 32 ) ( -3240 976 32 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3448 592 48 ) ( -3240 592 48 ) ( -3240 592 0 ) dsi/cretebase 112 0 0 0.500000 0.500000 0 0 0
+( -3064 752 48 ) ( -3064 976 48 ) ( -3064 976 0 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -3240 976 48 ) ( -3448 976 48 ) ( -3448 976 0 ) dsi/cretebase 112 0 0 0.500000 0.500000 0 0 0
+( -3448 976 48 ) ( -3448 752 48 ) ( -3448 752 0 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -3192 976 0 ) ( -3128 912 0 ) ( -3192 976 48 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -3128 656 0 ) ( -3192 592 0 ) ( -3128 656 48 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 84
+{
+( -3096 848 96 ) ( -3080 848 96 ) ( -3096 720 96 ) dsi/cretebase 112 -224 0 0.500000 0.500000 0 0 0
+( -3064 848 32 ) ( -3096 848 32 ) ( -3096 720 32 ) dsi/cretebase3 112 -224 0 0.500000 0.500000 0 0 0
+( -3096 736 32 ) ( -3096 736 64 ) ( -3064 720 64 ) dsi/cretebase3 112 0 0 0.500000 0.500000 0 0 0
+( -3064 720 64 ) ( -3064 848 64 ) ( -3064 848 32 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3096 832 64 ) ( -3096 832 32 ) ( -3064 848 32 ) dsi/cretebase3 112 0 0 0.500000 0.500000 0 0 0
+( -3096 736 576 ) ( -3096 736 544 ) ( -3096 832 544 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 85
+{
+( -3064 848 160 ) ( -3096 848 160 ) ( -3096 720 160 ) dsi/cretebase 112 -224 0 0.500000 0.500000 0 0 0
+( -3096 720 576 ) ( -3096 848 576 ) ( -3064 848 576 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3096 736 32 ) ( -3096 736 64 ) ( -3064 720 64 ) dsi/cretebase4 208 0 0 0.500000 0.500000 0 0 0
+( -3064 720 64 ) ( -3064 848 64 ) ( -3064 848 32 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3096 832 64 ) ( -3096 832 32 ) ( -3064 848 32 ) dsi/cretebase4 208 0 0 0.500000 0.500000 0 0 0
+( -3096 736 576 ) ( -3096 736 544 ) ( -3096 832 544 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 86
+{
+( -3080 736 96 ) ( -3064 736 96 ) ( -3080 592 96 ) common/caulk 112 -224 0 0.500000 0.500000 0 0 0
+( -3080 704 32 ) ( -3096 736 32 ) ( -3208 624 32 ) dsi/cretebase3 112 -224 0 0.500000 0.500000 0 0 0
+( -3064 720 64 ) ( -3064 720 32 ) ( -3192 592 32 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3064 720 32 ) ( -3064 720 64 ) ( -3096 736 64 ) dsi/cretebase 112 0 0 0.500000 0.500000 0 0 0
+( -3096 736 32 ) ( -3096 736 64 ) ( -3208 624 64 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3208 624 544 ) ( -3208 624 576 ) ( -3192 592 576 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 87
+{
+( -3064 736 96 ) ( -3080 736 96 ) ( -3080 592 96 ) common/caulk 112 -224 0 0.500000 0.500000 0 0 0
+( -3080 736 160 ) ( -3064 736 160 ) ( -3080 592 160 ) common/caulk 112 -224 0 0.500000 0.500000 0 0 0
+( -3064 720 64 ) ( -3064 720 32 ) ( -3192 592 32 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3064 720 32 ) ( -3064 720 64 ) ( -3096 736 64 ) dsi/cretebase 112 0 0 0.500000 0.500000 0 0 0
+( -3096 736 32 ) ( -3096 736 64 ) ( -3208 624 64 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3208 624 544 ) ( -3208 624 576 ) ( -3192 592 576 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 88
+{
+( -3080 976 96 ) ( -3064 976 96 ) ( -3080 832 96 ) common/caulk 112 -224 0 0.500000 0.500000 0 0 0
+( -3096 832 32 ) ( -3080 864 32 ) ( -3192 976 32 ) dsi/cretebase3 112 -224 0 0.500000 0.500000 0 0 0
+( -3096 832 64 ) ( -3096 832 32 ) ( -3208 944 32 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3064 848 64 ) ( -3064 848 32 ) ( -3096 832 32 ) dsi/cretebase 112 0 0 0.500000 0.500000 0 0 0
+( -3064 848 32 ) ( -3064 848 64 ) ( -3192 976 64 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3208 944 576 ) ( -3208 944 544 ) ( -3192 976 544 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 89
+{
+( -3064 976 96 ) ( -3080 976 96 ) ( -3080 832 96 ) common/caulk 112 -224 0 0.500000 0.500000 0 0 0
+( -3080 976 160 ) ( -3064 976 160 ) ( -3080 832 160 ) common/caulk 112 -224 0 0.500000 0.500000 0 0 0
+( -3096 832 64 ) ( -3096 832 32 ) ( -3208 944 32 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3064 848 64 ) ( -3064 848 32 ) ( -3096 832 32 ) dsi/cretebase 112 0 0 0.500000 0.500000 0 0 0
+( -3064 848 32 ) ( -3064 848 64 ) ( -3192 976 64 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3208 944 576 ) ( -3208 944 544 ) ( -3192 976 544 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 90
+{
+( -3064 736 160 ) ( -3080 736 160 ) ( -3080 592 160 ) common/caulk 112 -224 0 0.500000 0.500000 0 0 0
+( -3096 736 576 ) ( -3080 704 576 ) ( -3192 592 576 ) dsi/cretebase3 112 -224 0 0.500000 0.500000 0 0 0
+( -3064 720 64 ) ( -3064 720 32 ) ( -3192 592 32 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3064 720 32 ) ( -3064 720 64 ) ( -3096 736 64 ) dsi/cretebase 112 0 0 0.500000 0.500000 0 0 0
+( -3096 736 32 ) ( -3096 736 64 ) ( -3208 624 64 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3208 624 544 ) ( -3208 624 576 ) ( -3192 592 576 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 91
+{
+( -3064 976 160 ) ( -3080 976 160 ) ( -3080 832 160 ) common/caulk 112 -224 0 0.500000 0.500000 0 0 0
+( -3080 864 576 ) ( -3096 832 576 ) ( -3208 944 576 ) dsi/cretebase3 112 -224 0 0.500000 0.500000 0 0 0
+( -3096 832 64 ) ( -3096 832 32 ) ( -3208 944 32 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3064 848 64 ) ( -3064 848 32 ) ( -3096 832 32 ) dsi/cretebase 112 0 0 0.500000 0.500000 0 0 0
+( -3064 848 32 ) ( -3064 848 64 ) ( -3192 976 64 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3208 944 576 ) ( -3208 944 544 ) ( -3192 976 544 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 92
+{
+( -3224 976 96 ) ( -3192 976 96 ) ( -3224 944 96 ) dsi/cretebase 112 -224 0 0.500000 0.500000 0 0 0
+( -3192 976 32 ) ( -3320 976 32 ) ( -3320 944 32 ) dsi/cretebase3 112 -224 0 0.500000 0.500000 0 0 0
+( -3304 944 32 ) ( -3304 944 64 ) ( -3208 944 64 ) dsi/cretebase3 112 0 0 0.500000 0.500000 0 0 0
+( -3208 944 544 ) ( -3208 944 576 ) ( -3192 976 576 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3192 976 576 ) ( -3320 976 576 ) ( -3320 976 544 ) dsi/cretebase3 112 0 0 0.500000 0.500000 0 0 0
+( -3304 944 64 ) ( -3304 944 32 ) ( -3320 976 32 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+}
+// brush 93
+{
+( -3224 624 96 ) ( -3192 624 96 ) ( -3224 592 96 ) dsi/cretebase 112 -224 0 0.500000 0.500000 0 0 0
+( -3192 624 32 ) ( -3320 624 32 ) ( -3320 592 32 ) dsi/cretebase3 112 -224 0 0.500000 0.500000 0 0 0
+( -3320 592 64 ) ( -3192 592 64 ) ( -3192 592 32 ) dsi/cretebase3 112 0 0 0.500000 0.500000 0 0 0
+( -3208 624 576 ) ( -3208 624 544 ) ( -3192 592 544 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3208 624 32 ) ( -3208 624 64 ) ( -3304 624 64 ) dsi/cretebase3 112 0 0 0.500000 0.500000 0 0 0
+( -3304 624 32 ) ( -3304 624 64 ) ( -3320 592 64 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+}
+// brush 94
+{
+( -3224 976 160 ) ( -3240 976 160 ) ( -3240 944 160 ) dsi/cretebase 112 -224 0 0.500000 0.500000 0 0 0
+( -3208 944 576 ) ( -3320 944 576 ) ( -3320 976 576 ) dsi/cretebase3 112 -224 0 0.500000 0.500000 0 0 0
+( -3304 944 160 ) ( -3320 944 576 ) ( -3208 944 576 ) dsi/cretebase3 112 0 0 0.500000 0.500000 0 0 0
+( -3208 944 544 ) ( -3208 944 576 ) ( -3192 976 576 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3192 976 576 ) ( -3320 976 576 ) ( -3320 976 544 ) dsi/cretebase3 112 0 0 0.500000 0.500000 0 0 0
+( -3320 976 576 ) ( -3320 944 576 ) ( -3304 944 160 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+}
+// brush 95
+{
+( -3224 624 160 ) ( -3240 624 160 ) ( -3240 592 160 ) dsi/cretebase 112 -224 0 0.500000 0.500000 0 0 0
+( -3320 592 576 ) ( -3320 624 576 ) ( -3208 624 576 ) dsi/cretebase3 112 -224 0 0.500000 0.500000 0 0 0
+( -3320 592 64 ) ( -3192 592 64 ) ( -3192 592 32 ) dsi/cretebase3 112 0 0 0.500000 0.500000 0 0 0
+( -3208 624 576 ) ( -3208 624 544 ) ( -3192 592 544 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -3208 624 576 ) ( -3320 624 576 ) ( -3304 624 160 ) dsi/cretebase3 112 0 0 0.500000 0.500000 0 0 0
+( -3304 624 160 ) ( -3320 624 576 ) ( -3320 592 576 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+}
+// brush 96
+{
+( -3288 976 96 ) ( -3304 944 96 ) ( -3288 976 160 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -3304 944 64 ) ( -3304 944 32 ) ( -3320 976 32 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+( -3192 976 576 ) ( -3320 976 576 ) ( -3320 976 544 ) dsi/cretebase3 112 0 0 0.500000 0.500000 0 0 0
+( -3240 976 160 ) ( -3224 976 160 ) ( -3240 944 160 ) dsi/cretebase 112 -96 0 0.500000 0.500000 0 0 0
+( -3192 976 96 ) ( -3224 976 96 ) ( -3224 944 96 ) common/caulk 112 -224 0 0.500000 0.500000 0 0 0
+}
+// brush 97
+{
+( -3304 624 96 ) ( -3288 592 96 ) ( -3304 624 160 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -3192 624 96 ) ( -3224 624 96 ) ( -3224 592 96 ) common/caulk 112 -224 0 0.500000 0.500000 0 0 0
+( -3240 624 160 ) ( -3224 624 160 ) ( -3240 592 160 ) dsi/cretebase 112 -96 0 0.500000 0.500000 0 0 0
+( -3320 592 64 ) ( -3192 592 64 ) ( -3192 592 32 ) dsi/cretebase3 112 0 0 0.500000 0.500000 0 0 0
+( -3304 624 32 ) ( -3304 624 64 ) ( -3320 592 64 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+}
+// brush 98
+{
+( -3320 768 576 ) ( -3320 800 576 ) ( -3320 768 592 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+( -3128 656 576 ) ( -3192 592 576 ) ( -3128 656 624 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+( -3192 976 576 ) ( -3128 912 576 ) ( -3192 976 624 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+( -3240 976 624 ) ( -3448 976 624 ) ( -3448 976 576 ) dsi/cretebase 112 128 0 0.500000 0.500000 0 0 0
+( -3064 752 624 ) ( -3064 976 624 ) ( -3064 976 576 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+( -3448 592 624 ) ( -3240 592 624 ) ( -3240 592 576 ) dsi/cretebase 112 128 0 0.500000 0.500000 0 0 0
+( -3448 752 592 ) ( -3448 976 592 ) ( -3240 976 592 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3240 976 576 ) ( -3448 976 576 ) ( -3448 752 576 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+}
+// brush 99
+{
+( -3288 528 576 ) ( -3160 528 576 ) ( -3192 592 576 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3160 528 592 ) ( -3288 528 592 ) ( -3320 592 592 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3288 528 592 ) ( -3160 528 592 ) ( -3160 528 576 ) dsi/cretebase 112 128 0 0.500000 0.500000 0 0 0
+( -3160 528 576 ) ( -3160 528 592 ) ( -3192 592 592 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3192 592 592 ) ( -3320 592 592 ) ( -3320 592 576 ) dsi/cretebase4 208 0 0 0.500000 0.500000 0 0 0
+( -3288 528 592 ) ( -3288 528 576 ) ( -3320 592 576 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+}
+// brush 100
+{
+( -3064 848 592 ) ( -3064 720 592 ) ( -3064 720 576 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3000 880 576 ) ( -3000 880 592 ) ( -3064 848 592 ) dsi/cretebase4 208 0 0 0.500000 0.500000 0 0 0
+( -3000 880 592 ) ( -3000 880 576 ) ( -3000 688 576 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+( -3000 688 592 ) ( -3000 688 576 ) ( -3064 720 576 ) dsi/cretebase4 208 0 0 0.500000 0.500000 0 0 0
+( -3064 720 592 ) ( -3064 848 592 ) ( -3000 848 592 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3000 848 576 ) ( -3064 848 576 ) ( -3064 720 576 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+}
+// brush 101
+{
+( -3288 1040 576 ) ( -3288 1040 592 ) ( -3320 976 592 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+( -3160 1040 592 ) ( -3288 1040 592 ) ( -3288 1040 576 ) dsi/cretebase 112 128 0 0.500000 0.500000 0 0 0
+( -3160 1040 592 ) ( -3160 1040 576 ) ( -3192 976 576 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3320 976 592 ) ( -3192 976 592 ) ( -3192 976 576 ) dsi/cretebase4 208 0 0 0.500000 0.500000 0 0 0
+( -3288 1040 592 ) ( -3160 1040 592 ) ( -3192 976 592 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3160 1040 576 ) ( -3288 1040 576 ) ( -3320 976 576 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+}
+// brush 102
+{
+( -3064 848 576 ) ( -3032 912 576 ) ( -3160 1040 576 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3032 912 592 ) ( -3064 848 592 ) ( -3192 976 592 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3064 848 592 ) ( -3064 848 576 ) ( -3192 976 576 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3000 880 592 ) ( -3000 880 576 ) ( -3064 848 576 ) dsi/cretebase4 208 0 0 0.500000 0.500000 0 0 0
+( -3000 880 576 ) ( -3000 880 592 ) ( -3160 1040 592 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+( -3192 976 592 ) ( -3192 976 576 ) ( -3160 1040 576 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+}
+// brush 103
+{
+( -3192 592 576 ) ( -3192 592 592 ) ( -3160 528 592 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+( -3064 720 576 ) ( -3064 720 592 ) ( -3192 592 592 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+( -3000 688 576 ) ( -3000 688 592 ) ( -3064 720 592 ) dsi/cretebase 112 128 0 0.500000 0.500000 0 0 0
+( -3000 688 592 ) ( -3000 688 576 ) ( -3160 528 576 ) dsi/cretebase 224 128 0 0.500000 0.500000 0 0 0
+( -3064 720 592 ) ( -3032 656 592 ) ( -3160 528 592 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3032 656 576 ) ( -3064 720 576 ) ( -3192 592 576 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+}
+// brush 104
+{
+( -3144 1024 768 ) ( -3144 960 768 ) ( -3208 960 768 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3208 960 592 ) ( -3144 960 592 ) ( -3144 1024 592 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3144 992 592 ) ( -3144 992 784 ) ( -3144 1024 784 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3153 1015 592 ) ( -3153 1015 784 ) ( -3176 1038 784 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3176 1024 592 ) ( -3176 1024 784 ) ( -3208 1024 784 ) dsi/cretebase4 208 0 0 0.500000 0.500000 0 0 0
+( -3199 1015 576 ) ( -3199 1015 768 ) ( -3222 992 768 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3208 992 576 ) ( -3208 992 768 ) ( -3208 960 768 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3199 969 576 ) ( -3199 969 768 ) ( -3176 946 768 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3176 960 576 ) ( -3176 960 768 ) ( -3144 960 768 ) dsi/cretebase4 208 0 0 0.500000 0.500000 0 0 0
+( -3153 969 592 ) ( -3153 969 784 ) ( -3130 992 784 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+}
+// brush 105
+{
+( -3025 761 592 ) ( -3025 761 784 ) ( -3002 784 784 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3048 752 576 ) ( -3048 752 768 ) ( -3016 752 768 ) dsi/cretebase4 208 0 0 0.500000 0.500000 0 0 0
+( -3071 761 576 ) ( -3071 761 768 ) ( -3048 738 768 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3080 784 576 ) ( -3080 784 768 ) ( -3080 752 768 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3071 807 576 ) ( -3071 807 768 ) ( -3094 784 768 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3048 816 576 ) ( -3048 816 768 ) ( -3080 816 768 ) dsi/cretebase4 208 0 0 0.500000 0.500000 0 0 0
+( -3025 807 592 ) ( -3025 807 784 ) ( -3048 830 784 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3016 784 592 ) ( -3016 784 784 ) ( -3016 816 784 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3080 752 592 ) ( -3016 752 592 ) ( -3016 816 592 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3016 816 768 ) ( -3016 752 768 ) ( -3080 752 768 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+}
+// brush 106
+{
+( -3144 608 768 ) ( -3144 544 768 ) ( -3208 544 768 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3208 544 592 ) ( -3144 544 592 ) ( -3144 608 592 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3144 576 592 ) ( -3144 576 784 ) ( -3144 608 784 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3153 599 592 ) ( -3153 599 784 ) ( -3176 622 784 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3176 608 592 ) ( -3176 608 784 ) ( -3208 608 784 ) dsi/cretebase4 208 0 0 0.500000 0.500000 0 0 0
+( -3199 599 576 ) ( -3199 599 768 ) ( -3222 576 768 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3208 576 576 ) ( -3208 576 768 ) ( -3208 544 768 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3199 553 576 ) ( -3199 553 768 ) ( -3176 530 768 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -3176 544 576 ) ( -3176 544 768 ) ( -3144 544 768 ) dsi/cretebase4 208 0 0 0.500000 0.500000 0 0 0
+( -3153 553 592 ) ( -3153 553 784 ) ( -3130 576 784 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+}
+// brush 107
+{
+( -3000 848 768 ) ( -3064 848 768 ) ( -3064 720 768 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3064 720 784 ) ( -3064 848 784 ) ( -3000 848 784 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3000 688 784 ) ( -3000 688 768 ) ( -3064 720 768 ) dsi/cretebase4 208 384 0 0.500000 0.500000 0 0 0
+( -3000 880 784 ) ( -3000 880 768 ) ( -3000 688 768 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -3000 880 768 ) ( -3000 880 784 ) ( -3064 848 784 ) dsi/cretebase4 208 384 0 0.500000 0.500000 0 0 0
+( -3064 848 784 ) ( -3064 720 784 ) ( -3064 720 768 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 108
+{
+( -3192 976 784 ) ( -3192 976 768 ) ( -3160 1040 768 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -3000 880 768 ) ( -3000 880 784 ) ( -3160 1040 784 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -3000 880 784 ) ( -3000 880 768 ) ( -3064 848 768 ) dsi/cretebase4 208 384 0 0.500000 0.500000 0 0 0
+( -3064 848 784 ) ( -3064 848 768 ) ( -3192 976 768 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -3032 912 784 ) ( -3064 848 784 ) ( -3192 976 784 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3064 848 768 ) ( -3032 912 768 ) ( -3160 1040 768 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+}
+// brush 109
+{
+( -3032 656 768 ) ( -3064 720 768 ) ( -3192 592 768 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3064 720 784 ) ( -3032 656 784 ) ( -3160 528 784 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 0 0 0
+( -3000 688 784 ) ( -3000 688 768 ) ( -3160 528 768 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -3000 688 768 ) ( -3000 688 784 ) ( -3064 720 784 ) dsi/cretebase 112 0 0 0.500000 0.500000 0 0 0
+( -3064 720 768 ) ( -3064 720 784 ) ( -3192 592 784 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -3192 592 768 ) ( -3192 592 784 ) ( -3160 528 784 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 110
+{
+( -3328 832 472 ) ( -3328 736 472 ) ( -3328 736 456 ) dsi/cretebase4 320 272 0 0.500000 0.500000 134217728 0 0
+( -3320 832 472 ) ( -3328 832 472 ) ( -3328 832 456 ) dsi/cretebase4 208 272 0 0.500000 0.500000 134217728 0 0
+( -3320 736 464 ) ( -3320 832 464 ) ( -3320 832 448 ) dsi/cretebase4 320 272 0 0.500000 0.500000 134217728 0 0
+( -3328 736 472 ) ( -3320 736 472 ) ( -3320 736 456 ) dsi/cretebase4 208 272 0 0.500000 0.500000 134217728 0 0
+( -3328 744 512 ) ( -3328 840 512 ) ( -3320 840 512 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+( -3320 832 504 ) ( -3328 832 504 ) ( -3328 736 504 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+}
+// brush 111
+{
+( -3320 832 440 ) ( -3328 832 440 ) ( -3328 736 440 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+( -3328 744 448 ) ( -3328 840 448 ) ( -3320 840 448 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+( -3328 736 408 ) ( -3320 736 408 ) ( -3320 736 392 ) dsi/cretebase4 208 144 0 0.500000 0.500000 134217728 0 0
+( -3320 736 400 ) ( -3320 832 400 ) ( -3320 832 384 ) dsi/cretebase4 320 144 0 0.500000 0.500000 134217728 0 0
+( -3320 832 408 ) ( -3328 832 408 ) ( -3328 832 392 ) dsi/cretebase4 208 144 0 0.500000 0.500000 134217728 0 0
+( -3328 832 408 ) ( -3328 736 408 ) ( -3328 736 392 ) dsi/cretebase4 320 144 0 0.500000 0.500000 134217728 0 0
+}
+// brush 112
+{
+( -3328 832 344 ) ( -3328 736 344 ) ( -3328 736 328 ) dsi/cretebase4 320 16 0 0.500000 0.500000 134217728 0 0
+( -3320 832 344 ) ( -3328 832 344 ) ( -3328 832 328 ) dsi/cretebase4 208 16 0 0.500000 0.500000 134217728 0 0
+( -3320 736 336 ) ( -3320 832 336 ) ( -3320 832 320 ) dsi/cretebase4 320 16 0 0.500000 0.500000 134217728 0 0
+( -3328 736 344 ) ( -3320 736 344 ) ( -3320 736 328 ) dsi/cretebase4 208 16 0 0.500000 0.500000 134217728 0 0
+( -3328 744 384 ) ( -3328 840 384 ) ( -3320 840 384 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+( -3320 832 376 ) ( -3328 832 376 ) ( -3328 736 376 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+}
+// brush 113
+{
+( -3320 832 312 ) ( -3328 832 312 ) ( -3328 736 312 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+( -3328 744 320 ) ( -3328 840 320 ) ( -3320 840 320 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+( -3328 736 280 ) ( -3320 736 280 ) ( -3320 736 264 ) dsi/cretebase4 208 -112 0 0.500000 0.500000 134217728 0 0
+( -3320 736 272 ) ( -3320 832 272 ) ( -3320 832 256 ) dsi/cretebase4 320 -112 0 0.500000 0.500000 134217728 0 0
+( -3320 832 280 ) ( -3328 832 280 ) ( -3328 832 264 ) dsi/cretebase4 208 -112 0 0.500000 0.500000 134217728 0 0
+( -3328 832 280 ) ( -3328 736 280 ) ( -3328 736 264 ) dsi/cretebase4 320 -112 0 0.500000 0.500000 134217728 0 0
+}
+// brush 114
+{
+( -3328 832 216 ) ( -3328 736 216 ) ( -3328 736 200 ) dsi/cretebase4 320 -240 0 0.500000 0.500000 134217728 0 0
+( -3320 832 216 ) ( -3328 832 216 ) ( -3328 832 200 ) dsi/cretebase4 208 -240 0 0.500000 0.500000 134217728 0 0
+( -3320 736 208 ) ( -3320 832 208 ) ( -3320 832 192 ) dsi/cretebase4 320 -240 0 0.500000 0.500000 134217728 0 0
+( -3328 736 216 ) ( -3320 736 216 ) ( -3320 736 200 ) dsi/cretebase4 208 -240 0 0.500000 0.500000 134217728 0 0
+( -3328 744 256 ) ( -3328 840 256 ) ( -3320 840 256 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+( -3320 832 248 ) ( -3328 832 248 ) ( -3328 736 248 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+}
+// brush 115
+{
+( -3320 832 184 ) ( -3328 832 184 ) ( -3328 736 184 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+( -3328 744 192 ) ( -3328 840 192 ) ( -3320 840 192 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+( -3328 736 152 ) ( -3320 736 152 ) ( -3320 736 136 ) dsi/cretebase4 208 -368 0 0.500000 0.500000 134217728 0 0
+( -3320 736 144 ) ( -3320 832 144 ) ( -3320 832 128 ) dsi/cretebase4 320 -368 0 0.500000 0.500000 134217728 0 0
+( -3320 832 152 ) ( -3328 832 152 ) ( -3328 832 136 ) dsi/cretebase4 208 -368 0 0.500000 0.500000 134217728 0 0
+( -3328 832 152 ) ( -3328 736 152 ) ( -3328 736 136 ) dsi/cretebase4 320 -368 0 0.500000 0.500000 134217728 0 0
+}
+// brush 116
+{
+( -3328 832 88 ) ( -3328 736 88 ) ( -3328 736 72 ) dsi/cretebase4 320 -496 0 0.500000 0.500000 134217728 0 0
+( -3320 832 88 ) ( -3328 832 88 ) ( -3328 832 72 ) dsi/cretebase4 208 -496 0 0.500000 0.500000 134217728 0 0
+( -3320 736 80 ) ( -3320 832 80 ) ( -3320 832 64 ) dsi/cretebase4 320 -496 0 0.500000 0.500000 134217728 0 0
+( -3328 736 88 ) ( -3320 736 88 ) ( -3320 736 72 ) dsi/cretebase4 208 -496 0 0.500000 0.500000 134217728 0 0
+( -3328 744 128 ) ( -3328 840 128 ) ( -3320 840 128 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+( -3320 832 120 ) ( -3328 832 120 ) ( -3328 736 120 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+}
+// brush 117
+{
+( -3320 832 56 ) ( -3328 832 56 ) ( -3328 736 56 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+( -3328 744 64 ) ( -3328 840 64 ) ( -3320 840 64 ) dsi/cretebase4 208 -224 0 0.500000 0.500000 134217728 0 0
+( -3328 736 24 ) ( -3320 736 24 ) ( -3320 736 8 ) dsi/cretebase4 208 -112 0 0.500000 0.500000 134217728 0 0
+( -3320 736 16 ) ( -3320 832 16 ) ( -3320 832 0 ) dsi/cretebase4 320 -112 0 0.500000 0.500000 134217728 0 0
+( -3320 832 24 ) ( -3328 832 24 ) ( -3328 832 8 ) dsi/cretebase4 208 -112 0 0.500000 0.500000 134217728 0 0
+( -3328 832 24 ) ( -3328 736 24 ) ( -3328 736 8 ) dsi/cretebase4 320 -112 0 0.500000 0.500000 134217728 0 0
+}
+// brush 118
+{
+( -3320 720 32 ) ( -3328 736 32 ) ( -3320 720 592 ) dsi/cretebase 224 128 0 0.500000 0.500000 134217728 0 0
+( -3328 736 576 ) ( -3320 736 592 ) ( -3328 720 576 ) dsi/cretebase 224 128 0 0.500000 0.500000 134217728 0 0
+( -3320 736 32 ) ( -3336 736 32 ) ( -3336 720 32 ) dsi/cretebase4 208 -80 0 0.500000 0.500000 134217728 0 0
+( -3320 720 96 ) ( -3320 736 96 ) ( -3320 736 80 ) dsi/cretebase4 320 144 0 0.500000 0.500000 134217728 0 0
+( -3320 736 592 ) ( -3336 736 592 ) ( -3336 736 576 ) dsi/cretebase4 208 144 0 0.500000 0.500000 134217728 0 0
+}
+// brush 119
+{
+( -3328 832 32 ) ( -3320 848 32 ) ( -3328 832 592 ) dsi/cretebase 224 128 0 0.500000 0.500000 134217728 0 0
+( -3328 848 576 ) ( -3320 848 592 ) ( -3328 832 576 ) dsi/cretebase 224 128 0 0.500000 0.500000 134217728 0 0
+( -3320 832 96 ) ( -3320 848 96 ) ( -3320 848 80 ) dsi/cretebase4 320 144 0 0.500000 0.500000 134217728 0 0
+( -3336 832 592 ) ( -3320 832 592 ) ( -3320 832 576 ) dsi/cretebase4 208 144 0 0.500000 0.500000 134217728 0 0
+( -3320 848 32 ) ( -3336 848 32 ) ( -3336 832 32 ) dsi/cretebase4 208 -80 0 0.500000 0.500000 134217728 0 0
+}
+// brush 120
+{
+( -3710 -1164 0 ) ( -3702 -1143 0 ) ( -3710 -1164 48 ) dsi/cretebase 128 0 0 0.500000 0.500000 0 0 0
+( -3606 -1398 0 ) ( -3627 -1390 0 ) ( -3606 -1398 48 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+( -3605 -1047 0 ) ( -3795 -1132 0 ) ( -3704 -1336 0 ) dsi/cretebase 176 -128 0 0.500000 0.500000 0 0 0
+( -3704 -1336 32 ) ( -3795 -1132 32 ) ( -3605 -1047 32 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3639 -1483 48 ) ( -3449 -1398 48 ) ( -3449 -1398 0 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -3353 -1180 48 ) ( -3444 -976 48 ) ( -3444 -976 0 ) dsi/cretebase 128 0 0 0.500000 0.500000 0 0 0
+( -3605 -1047 48 ) ( -3795 -1132 48 ) ( -3795 -1132 0 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -3795 -1132 48 ) ( -3704 -1336 48 ) ( -3704 -1336 0 ) dsi/cretebase 128 0 0 0.500000 0.500000 0 0 0
+( -3561 -1028 0 ) ( -3476 -1060 0 ) ( -3561 -1028 48 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+( -3372 -1294 0 ) ( -3405 -1378 0 ) ( -3372 -1294 48 ) dsi/cretebase 128 0 0 0.500000 0.500000 0 0 0
+}
+// brush 121
+{
+( -3421 -1105 96 ) ( -3406 -1099 96 ) ( -3369 -1222 96 ) dsi/cretebase 176 -128 0 0.500000 0.500000 0 0 0
+( -3392 -1092 32 ) ( -3421 -1105 32 ) ( -3369 -1222 32 ) dsi/cretebase3 176 -128 0 0.500000 0.500000 0 0 0
+( -3376 -1208 32 ) ( -3376 -1208 64 ) ( -3340 -1209 64 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -3340 -1209 64 ) ( -3392 -1092 64 ) ( -3392 -1092 32 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+( -3415 -1120 64 ) ( -3415 -1120 32 ) ( -3392 -1092 32 ) dsi/cretebase3 336 0 0 0.500000 0.500000 0 0 0
+( -3376 -1208 576 ) ( -3376 -1208 544 ) ( -3415 -1120 544 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+}
+// brush 122
+{
+( -3392 -1092 160 ) ( -3421 -1105 160 ) ( -3369 -1222 160 ) dsi/cretebase 176 -128 0 0.500000 0.500000 0 0 0
+( -3369 -1222 576 ) ( -3421 -1105 576 ) ( -3392 -1092 576 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3376 -1208 32 ) ( -3376 -1208 64 ) ( -3340 -1209 64 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -3340 -1209 64 ) ( -3392 -1092 64 ) ( -3392 -1092 32 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+( -3415 -1120 64 ) ( -3415 -1120 32 ) ( -3392 -1092 32 ) dsi/cretebase4 432 0 0 0.500000 0.500000 0 0 0
+( -3376 -1208 576 ) ( -3376 -1208 544 ) ( -3415 -1120 544 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+}
+// brush 123
+{
+( -3361 -1201 96 ) ( -3346 -1195 96 ) ( -3302 -1333 96 ) common/caulk 176 -128 0 0.500000 0.500000 0 0 0
+( -3348 -1231 32 ) ( -3376 -1208 32 ) ( -3432 -1356 32 ) dsi/cretebase3 176 -128 0 0.500000 0.500000 0 0 0
+( -3340 -1209 64 ) ( -3340 -1209 32 ) ( -3405 -1378 32 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+( -3340 -1209 32 ) ( -3340 -1209 64 ) ( -3376 -1208 64 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -3376 -1208 32 ) ( -3376 -1208 64 ) ( -3432 -1356 64 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+( -3432 -1356 544 ) ( -3432 -1356 576 ) ( -3405 -1378 576 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+}
+// brush 124
+{
+( -3346 -1195 96 ) ( -3361 -1201 96 ) ( -3302 -1333 96 ) common/caulk 176 -128 0 0.500000 0.500000 0 0 0
+( -3361 -1201 160 ) ( -3346 -1195 160 ) ( -3302 -1333 160 ) common/caulk 176 -128 0 0.500000 0.500000 0 0 0
+( -3340 -1209 64 ) ( -3340 -1209 32 ) ( -3405 -1378 32 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+( -3340 -1209 32 ) ( -3340 -1209 64 ) ( -3376 -1208 64 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -3376 -1208 32 ) ( -3376 -1208 64 ) ( -3432 -1356 64 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+( -3432 -1356 544 ) ( -3432 -1356 576 ) ( -3405 -1378 576 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+}
+// brush 125
+{
+( -3459 -982 96 ) ( -3444 -976 96 ) ( -3400 -1114 96 ) common/caulk 176 -128 0 0.500000 0.500000 0 0 0
+( -3415 -1120 32 ) ( -3413 -1084 32 ) ( -3561 -1028 32 ) dsi/cretebase3 176 -128 0 0.500000 0.500000 0 0 0
+( -3415 -1120 64 ) ( -3415 -1120 32 ) ( -3562 -1063 32 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -3392 -1092 64 ) ( -3392 -1092 32 ) ( -3415 -1120 32 ) dsi/cretebase 336 0 0 0.500000 0.500000 0 0 0
+( -3392 -1092 32 ) ( -3392 -1092 64 ) ( -3561 -1028 64 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -3562 -1063 576 ) ( -3562 -1063 544 ) ( -3561 -1028 544 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+}
+// brush 126
+{
+( -3444 -976 96 ) ( -3459 -982 96 ) ( -3400 -1114 96 ) common/caulk 176 -128 0 0.500000 0.500000 0 0 0
+( -3459 -982 160 ) ( -3444 -976 160 ) ( -3400 -1114 160 ) common/caulk 176 -128 0 0.500000 0.500000 0 0 0
+( -3415 -1120 64 ) ( -3415 -1120 32 ) ( -3562 -1063 32 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -3392 -1092 64 ) ( -3392 -1092 32 ) ( -3415 -1120 32 ) dsi/cretebase 336 0 0 0.500000 0.500000 0 0 0
+( -3392 -1092 32 ) ( -3392 -1092 64 ) ( -3561 -1028 64 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -3562 -1063 576 ) ( -3562 -1063 544 ) ( -3561 -1028 544 ) dsi/cretebase 128 0 0 0.500000 0.500000 0 0 0
+}
+// brush 127
+{
+( -3346 -1195 160 ) ( -3361 -1201 160 ) ( -3302 -1333 160 ) common/caulk 176 -128 0 0.500000 0.500000 0 0 0
+( -3376 -1208 576 ) ( -3348 -1231 576 ) ( -3405 -1378 576 ) dsi/cretebase3 176 -128 0 0.500000 0.500000 0 0 0
+( -3340 -1209 64 ) ( -3340 -1209 32 ) ( -3405 -1378 32 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+( -3340 -1209 32 ) ( -3340 -1209 64 ) ( -3376 -1208 64 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -3376 -1208 32 ) ( -3376 -1208 64 ) ( -3432 -1356 64 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+( -3432 -1356 544 ) ( -3432 -1356 576 ) ( -3405 -1378 576 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+}
+// brush 128
+{
+( -3444 -976 160 ) ( -3459 -982 160 ) ( -3400 -1114 160 ) common/caulk 176 -128 0 0.500000 0.500000 0 0 0
+( -3413 -1084 576 ) ( -3415 -1120 576 ) ( -3562 -1063 576 ) dsi/cretebase3 176 -128 0 0.500000 0.500000 0 0 0
+( -3415 -1120 64 ) ( -3415 -1120 32 ) ( -3562 -1063 32 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -3392 -1092 64 ) ( -3392 -1092 32 ) ( -3415 -1120 32 ) dsi/cretebase 336 0 0 0.500000 0.500000 0 0 0
+( -3392 -1092 32 ) ( -3392 -1092 64 ) ( -3561 -1028 64 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -3562 -1063 576 ) ( -3562 -1063 544 ) ( -3561 -1028 544 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+}
+// brush 129
+{
+( -3590 -1041 96 ) ( -3561 -1028 96 ) ( -3577 -1070 96 ) dsi/cretebase 176 -128 0 0.500000 0.500000 0 0 0
+( -3561 -1028 32 ) ( -3678 -1080 32 ) ( -3665 -1109 32 ) dsi/cretebase3 176 -128 0 0.500000 0.500000 0 0 0
+( -3650 -1102 32 ) ( -3650 -1102 64 ) ( -3562 -1063 64 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -3562 -1063 544 ) ( -3562 -1063 576 ) ( -3561 -1028 576 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+( -3561 -1028 576 ) ( -3678 -1080 576 ) ( -3678 -1080 544 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -3650 -1102 64 ) ( -3650 -1102 32 ) ( -3678 -1080 32 ) dsi/cretebase 480 128 0 0.500000 0.500000 0 0 0
+}
+// brush 130
+{
+( -3447 -1362 96 ) ( -3418 -1349 96 ) ( -3434 -1391 96 ) dsi/cretebase 176 -128 0 0.500000 0.500000 0 0 0
+( -3418 -1349 32 ) ( -3535 -1401 32 ) ( -3522 -1430 32 ) dsi/cretebase3 176 -128 0 0.500000 0.500000 0 0 0
+( -3522 -1430 64 ) ( -3405 -1378 64 ) ( -3405 -1378 32 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -3432 -1356 576 ) ( -3432 -1356 544 ) ( -3405 -1378 544 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -3432 -1356 32 ) ( -3432 -1356 64 ) ( -3520 -1395 64 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -3520 -1395 32 ) ( -3520 -1395 64 ) ( -3522 -1430 64 ) dsi/cretebase 128 128 0 0.500000 0.500000 0 0 0
+}
+// brush 131
+{
+( -3590 -1041 160 ) ( -3605 -1047 160 ) ( -3592 -1076 160 ) dsi/cretebase 176 -128 0 0.500000 0.500000 0 0 0
+( -3562 -1063 576 ) ( -3665 -1109 576 ) ( -3678 -1080 576 ) dsi/cretebase3 176 -128 0 0.500000 0.500000 0 0 0
+( -3650 -1102 160 ) ( -3665 -1109 576 ) ( -3562 -1063 576 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -3562 -1063 544 ) ( -3562 -1063 576 ) ( -3561 -1028 576 ) dsi/cretebase3 128 0 0 0.500000 0.500000 0 0 0
+( -3561 -1028 576 ) ( -3678 -1080 576 ) ( -3678 -1080 544 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -3678 -1080 576 ) ( -3665 -1109 576 ) ( -3650 -1102 160 ) dsi/cretebase 128 128 0 0.500000 0.500000 0 0 0
+}
+// brush 132
+{
+( -3447 -1362 160 ) ( -3462 -1369 160 ) ( -3449 -1398 160 ) dsi/cretebase 176 -128 0 0.500000 0.500000 0 0 0
+( -3522 -1430 576 ) ( -3535 -1401 576 ) ( -3432 -1356 576 ) dsi/cretebase3 176 -128 0 0.500000 0.500000 0 0 0
+( -3522 -1430 64 ) ( -3405 -1378 64 ) ( -3405 -1378 32 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -3432 -1356 576 ) ( -3432 -1356 544 ) ( -3405 -1378 544 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -3432 -1356 576 ) ( -3535 -1401 576 ) ( -3520 -1395 160 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -3520 -1395 160 ) ( -3535 -1401 576 ) ( -3522 -1430 576 ) dsi/cretebase 128 128 0 0.500000 0.500000 0 0 0
+}
+// brush 133
+{
+( -3649 -1067 96 ) ( -3650 -1102 96 ) ( -3649 -1067 160 ) dsi/cretebase 128 0 0 0.500000 0.500000 0 0 0
+( -3650 -1102 64 ) ( -3650 -1102 32 ) ( -3678 -1080 32 ) dsi/cretebase 480 128 0 0.500000 0.500000 0 0 0
+( -3561 -1028 576 ) ( -3678 -1080 576 ) ( -3678 -1080 544 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -3605 -1047 160 ) ( -3590 -1041 160 ) ( -3592 -1076 160 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -3561 -1028 96 ) ( -3590 -1041 96 ) ( -3577 -1070 96 ) common/caulk 176 -128 0 0.500000 0.500000 0 0 0
+}
+// brush 134
+{
+( -3520 -1395 96 ) ( -3492 -1417 96 ) ( -3520 -1395 160 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+( -3418 -1349 96 ) ( -3447 -1362 96 ) ( -3434 -1391 96 ) common/caulk 176 -128 0 0.500000 0.500000 0 0 0
+( -3462 -1369 160 ) ( -3447 -1362 160 ) ( -3449 -1398 160 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -3522 -1430 64 ) ( -3405 -1378 64 ) ( -3405 -1378 32 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -3520 -1395 32 ) ( -3520 -1395 64 ) ( -3522 -1430 64 ) dsi/cretebase 128 128 0 0.500000 0.500000 0 0 0
+}
+// brush 135
+{
+( -3593 -1270 576 ) ( -3606 -1240 576 ) ( -3593 -1270 592 ) dsi/cretebase 128 128 0 0.500000 0.500000 0 0 0
+( -3372 -1294 576 ) ( -3405 -1378 576 ) ( -3372 -1294 624 ) dsi/cretebase 128 128 0 0.500000 0.500000 0 0 0
+( -3561 -1028 576 ) ( -3476 -1060 576 ) ( -3561 -1028 624 ) dsi/cretebase 480 128 0 0.500000 0.500000 0 0 0
+( -3605 -1047 624 ) ( -3795 -1132 624 ) ( -3795 -1132 576 ) dsi/cretebase 176 128 0 0.500000 0.500000 0 0 0
+( -3353 -1180 624 ) ( -3444 -976 624 ) ( -3444 -976 576 ) dsi/cretebase 128 128 0 0.500000 0.500000 0 0 0
+( -3639 -1483 624 ) ( -3449 -1398 624 ) ( -3449 -1398 576 ) dsi/cretebase 176 128 0 0.500000 0.500000 0 0 0
+( -3704 -1336 592 ) ( -3795 -1132 592 ) ( -3605 -1047 592 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3605 -1047 576 ) ( -3795 -1132 576 ) ( -3704 -1336 576 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+}
+// brush 136
+{
+( -3466 -1476 576 ) ( -3349 -1424 576 ) ( -3405 -1378 576 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3349 -1424 592 ) ( -3466 -1476 592 ) ( -3522 -1430 592 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3466 -1476 592 ) ( -3349 -1424 592 ) ( -3349 -1424 576 ) dsi/cretebase 176 128 0 0.500000 0.500000 0 0 0
+( -3349 -1424 576 ) ( -3349 -1424 592 ) ( -3405 -1378 592 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -3405 -1378 592 ) ( -3522 -1430 592 ) ( -3522 -1430 576 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -3466 -1476 592 ) ( -3466 -1476 576 ) ( -3522 -1430 576 ) dsi/cretebase 480 128 0 0.500000 0.500000 0 0 0
+}
+// brush 137
+{
+( -3392 -1092 592 ) ( -3340 -1209 592 ) ( -3340 -1209 576 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+( -3346 -1037 576 ) ( -3346 -1037 592 ) ( -3392 -1092 592 ) dsi/cretebase4 432 0 0 0.500000 0.500000 0 0 0
+( -3346 -1037 592 ) ( -3346 -1037 576 ) ( -3268 -1213 576 ) dsi/cretebase 128 128 0 0.500000 0.500000 0 0 0
+( -3268 -1213 592 ) ( -3268 -1213 576 ) ( -3340 -1209 576 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -3340 -1209 592 ) ( -3392 -1092 592 ) ( -3333 -1066 592 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3333 -1066 576 ) ( -3392 -1092 576 ) ( -3340 -1209 576 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+}
+// brush 138
+{
+( -3675 -1008 576 ) ( -3675 -1008 592 ) ( -3678 -1080 592 ) dsi/cretebase 128 128 0 0.500000 0.500000 0 0 0
+( -3558 -956 592 ) ( -3675 -1008 592 ) ( -3675 -1008 576 ) dsi/cretebase 176 128 0 0.500000 0.500000 0 0 0
+( -3558 -956 592 ) ( -3558 -956 576 ) ( -3561 -1028 576 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+( -3678 -1080 592 ) ( -3561 -1028 592 ) ( -3561 -1028 576 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -3675 -1008 592 ) ( -3558 -956 592 ) ( -3561 -1028 592 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3558 -956 576 ) ( -3675 -1008 576 ) ( -3678 -1080 576 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+}
+// brush 139
+{
+( -3392 -1092 576 ) ( -3389 -1021 576 ) ( -3558 -956 576 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3389 -1021 592 ) ( -3392 -1092 592 ) ( -3561 -1028 592 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3392 -1092 592 ) ( -3392 -1092 576 ) ( -3561 -1028 576 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -3346 -1037 592 ) ( -3346 -1037 576 ) ( -3392 -1092 576 ) dsi/cretebase4 432 0 0 0.500000 0.500000 0 0 0
+( -3346 -1037 576 ) ( -3346 -1037 592 ) ( -3558 -956 592 ) dsi/cretebase 480 128 0 0.500000 0.500000 0 0 0
+( -3561 -1028 592 ) ( -3561 -1028 576 ) ( -3558 -956 576 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 140
+{
+( -3405 -1378 576 ) ( -3405 -1378 592 ) ( -3349 -1424 592 ) dsi/cretebase 480 128 0 0.500000 0.500000 0 0 0
+( -3340 -1209 576 ) ( -3340 -1209 592 ) ( -3405 -1378 592 ) dsi/cretebase 128 128 0 0.500000 0.500000 0 0 0
+( -3268 -1213 576 ) ( -3268 -1213 592 ) ( -3340 -1209 592 ) dsi/cretebase 176 128 0 0.500000 0.500000 0 0 0
+( -3268 -1213 592 ) ( -3268 -1213 576 ) ( -3349 -1424 576 ) dsi/cretebase 128 128 0 0.500000 0.500000 0 0 0
+( -3340 -1209 592 ) ( -3285 -1255 592 ) ( -3349 -1424 592 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3285 -1255 576 ) ( -3340 -1209 576 ) ( -3405 -1378 576 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+}
+// brush 141
+{
+( -3537 -964 768 ) ( -3511 -1023 768 ) ( -3569 -1049 768 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3569 -1049 592 ) ( -3511 -1023 592 ) ( -3537 -964 592 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3524 -993 592 ) ( -3524 -993 784 ) ( -3537 -964 784 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+( -3541 -976 592 ) ( -3541 -976 784 ) ( -3571 -964 784 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -3566 -977 592 ) ( -3566 -977 784 ) ( -3595 -990 784 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -3583 -995 576 ) ( -3583 -995 768 ) ( -3595 -1025 768 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+( -3582 -1019 576 ) ( -3582 -1019 768 ) ( -3569 -1049 768 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+( -3564 -1037 576 ) ( -3564 -1037 768 ) ( -3534 -1048 768 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -3540 -1036 576 ) ( -3540 -1036 768 ) ( -3511 -1023 768 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -3522 -1018 592 ) ( -3522 -1018 784 ) ( -3511 -988 784 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 142
+{
+( -3321 -1156 592 ) ( -3321 -1156 784 ) ( -3309 -1126 784 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+( -3338 -1174 576 ) ( -3338 -1174 768 ) ( -3309 -1161 768 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -3363 -1175 576 ) ( -3363 -1175 768 ) ( -3333 -1186 768 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -3380 -1157 576 ) ( -3380 -1157 768 ) ( -3367 -1187 768 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+( -3382 -1133 576 ) ( -3382 -1133 768 ) ( -3393 -1163 768 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+( -3364 -1115 576 ) ( -3364 -1115 768 ) ( -3393 -1128 768 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -3340 -1114 592 ) ( -3340 -1114 784 ) ( -3370 -1102 784 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -3322 -1131 592 ) ( -3322 -1131 784 ) ( -3335 -1102 784 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+( -3367 -1187 592 ) ( -3309 -1161 592 ) ( -3335 -1102 592 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3335 -1102 768 ) ( -3309 -1161 768 ) ( -3367 -1187 768 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+}
+// brush 143
+{
+( -3367 -1344 768 ) ( -3341 -1403 768 ) ( -3400 -1429 768 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3400 -1429 592 ) ( -3341 -1403 592 ) ( -3367 -1344 592 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3354 -1373 592 ) ( -3354 -1373 784 ) ( -3367 -1344 784 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+( -3372 -1356 592 ) ( -3372 -1356 784 ) ( -3402 -1344 784 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -3397 -1357 592 ) ( -3397 -1357 784 ) ( -3426 -1370 784 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -3414 -1375 576 ) ( -3414 -1375 768 ) ( -3426 -1405 768 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+( -3413 -1400 576 ) ( -3413 -1400 768 ) ( -3400 -1429 768 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+( -3395 -1417 576 ) ( -3395 -1417 768 ) ( -3365 -1429 768 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -3371 -1416 576 ) ( -3371 -1416 768 ) ( -3341 -1403 768 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -3353 -1398 592 ) ( -3353 -1398 784 ) ( -3342 -1368 784 ) dsi/cretebase4 224 0 0 0.500000 0.500000 0 0 0
+}
+// brush 144
+{
+( -3333 -1066 768 ) ( -3392 -1092 768 ) ( -3340 -1209 768 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3340 -1209 784 ) ( -3392 -1092 784 ) ( -3333 -1066 784 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3268 -1213 784 ) ( -3268 -1213 768 ) ( -3340 -1209 768 ) dsi/cretebase4 272 384 0 0.500000 0.500000 0 0 0
+( -3346 -1037 784 ) ( -3346 -1037 768 ) ( -3268 -1213 768 ) dsi/cretebase 128 0 0 0.500000 0.500000 0 0 0
+( -3346 -1037 768 ) ( -3346 -1037 784 ) ( -3392 -1092 784 ) dsi/cretebase4 432 384 0 0.500000 0.500000 0 0 0
+( -3392 -1092 784 ) ( -3340 -1209 784 ) ( -3340 -1209 768 ) dsi/cretebase 128 0 0 0.500000 0.500000 0 0 0
+}
+// brush 145
+{
+( -3561 -1028 784 ) ( -3561 -1028 768 ) ( -3558 -956 768 ) dsi/cretebase 128 0 0 0.500000 0.500000 0 0 0
+( -3346 -1037 768 ) ( -3346 -1037 784 ) ( -3558 -956 784 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+( -3346 -1037 784 ) ( -3346 -1037 768 ) ( -3392 -1092 768 ) dsi/cretebase4 432 384 0 0.500000 0.500000 0 0 0
+( -3392 -1092 784 ) ( -3392 -1092 768 ) ( -3561 -1028 768 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+( -3389 -1021 784 ) ( -3392 -1092 784 ) ( -3561 -1028 784 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3392 -1092 768 ) ( -3389 -1021 768 ) ( -3558 -956 768 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+}
+// brush 146
+{
+( -3285 -1255 768 ) ( -3340 -1209 768 ) ( -3405 -1378 768 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3340 -1209 784 ) ( -3285 -1255 784 ) ( -3349 -1424 784 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 0 0 0
+( -3268 -1213 784 ) ( -3268 -1213 768 ) ( -3349 -1424 768 ) dsi/cretebase 128 0 0 0.500000 0.500000 0 0 0
+( -3268 -1213 768 ) ( -3268 -1213 784 ) ( -3340 -1209 784 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -3340 -1209 768 ) ( -3340 -1209 784 ) ( -3405 -1378 784 ) dsi/cretebase 128 0 0 0.500000 0.500000 0 0 0
+( -3405 -1378 768 ) ( -3405 -1378 784 ) ( -3349 -1424 784 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+}
+// brush 147
+{
+( -3627 -1214 472 ) ( -3587 -1302 472 ) ( -3587 -1302 456 ) dsi/cretebase4 224 272 0 0.500000 0.500000 134217728 0 0
+( -3619 -1211 472 ) ( -3627 -1214 472 ) ( -3627 -1214 456 ) dsi/cretebase4 272 272 0 0.500000 0.500000 134217728 0 0
+( -3580 -1299 464 ) ( -3619 -1211 464 ) ( -3619 -1211 448 ) dsi/cretebase4 224 272 0 0.500000 0.500000 134217728 0 0
+( -3587 -1302 472 ) ( -3580 -1299 472 ) ( -3580 -1299 456 ) dsi/cretebase4 272 272 0 0.500000 0.500000 134217728 0 0
+( -3591 -1295 512 ) ( -3630 -1207 512 ) ( -3622 -1204 512 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+( -3619 -1211 504 ) ( -3627 -1214 504 ) ( -3587 -1302 504 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+}
+// brush 148
+{
+( -3619 -1211 440 ) ( -3627 -1214 440 ) ( -3587 -1302 440 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+( -3591 -1295 448 ) ( -3630 -1207 448 ) ( -3622 -1204 448 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+( -3587 -1302 408 ) ( -3580 -1299 408 ) ( -3580 -1299 392 ) dsi/cretebase4 272 144 0 0.500000 0.500000 134217728 0 0
+( -3580 -1299 400 ) ( -3619 -1211 400 ) ( -3619 -1211 384 ) dsi/cretebase4 224 144 0 0.500000 0.500000 134217728 0 0
+( -3619 -1211 408 ) ( -3627 -1214 408 ) ( -3627 -1214 392 ) dsi/cretebase4 272 144 0 0.500000 0.500000 134217728 0 0
+( -3627 -1214 408 ) ( -3587 -1302 408 ) ( -3587 -1302 392 ) dsi/cretebase4 224 144 0 0.500000 0.500000 134217728 0 0
+}
+// brush 149
+{
+( -3627 -1214 344 ) ( -3587 -1302 344 ) ( -3587 -1302 328 ) dsi/cretebase4 224 16 0 0.500000 0.500000 134217728 0 0
+( -3619 -1211 344 ) ( -3627 -1214 344 ) ( -3627 -1214 328 ) dsi/cretebase4 272 16 0 0.500000 0.500000 134217728 0 0
+( -3580 -1299 336 ) ( -3619 -1211 336 ) ( -3619 -1211 320 ) dsi/cretebase4 224 16 0 0.500000 0.500000 134217728 0 0
+( -3587 -1302 344 ) ( -3580 -1299 344 ) ( -3580 -1299 328 ) dsi/cretebase4 272 16 0 0.500000 0.500000 134217728 0 0
+( -3591 -1295 384 ) ( -3630 -1207 384 ) ( -3622 -1204 384 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+( -3619 -1211 376 ) ( -3627 -1214 376 ) ( -3587 -1302 376 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+}
+// brush 150
+{
+( -3619 -1211 312 ) ( -3627 -1214 312 ) ( -3587 -1302 312 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+( -3591 -1295 320 ) ( -3630 -1207 320 ) ( -3622 -1204 320 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+( -3587 -1302 280 ) ( -3580 -1299 280 ) ( -3580 -1299 264 ) dsi/cretebase4 272 -112 0 0.500000 0.500000 134217728 0 0
+( -3580 -1299 272 ) ( -3619 -1211 272 ) ( -3619 -1211 256 ) dsi/cretebase4 224 -112 0 0.500000 0.500000 134217728 0 0
+( -3619 -1211 280 ) ( -3627 -1214 280 ) ( -3627 -1214 264 ) dsi/cretebase4 272 -112 0 0.500000 0.500000 134217728 0 0
+( -3627 -1214 280 ) ( -3587 -1302 280 ) ( -3587 -1302 264 ) dsi/cretebase4 224 -112 0 0.500000 0.500000 134217728 0 0
+}
+// brush 151
+{
+( -3627 -1214 216 ) ( -3587 -1302 216 ) ( -3587 -1302 200 ) dsi/cretebase4 224 -240 0 0.500000 0.500000 134217728 0 0
+( -3619 -1211 216 ) ( -3627 -1214 216 ) ( -3627 -1214 200 ) dsi/cretebase4 272 -240 0 0.500000 0.500000 134217728 0 0
+( -3580 -1299 208 ) ( -3619 -1211 208 ) ( -3619 -1211 192 ) dsi/cretebase4 224 -240 0 0.500000 0.500000 134217728 0 0
+( -3587 -1302 216 ) ( -3580 -1299 216 ) ( -3580 -1299 200 ) dsi/cretebase4 272 -240 0 0.500000 0.500000 134217728 0 0
+( -3591 -1295 256 ) ( -3630 -1207 256 ) ( -3622 -1204 256 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+( -3619 -1211 248 ) ( -3627 -1214 248 ) ( -3587 -1302 248 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+}
+// brush 152
+{
+( -3619 -1211 184 ) ( -3627 -1214 184 ) ( -3587 -1302 184 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+( -3591 -1295 192 ) ( -3630 -1207 192 ) ( -3622 -1204 192 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+( -3587 -1302 152 ) ( -3580 -1299 152 ) ( -3580 -1299 136 ) dsi/cretebase4 272 -368 0 0.500000 0.500000 134217728 0 0
+( -3580 -1299 144 ) ( -3619 -1211 144 ) ( -3619 -1211 128 ) dsi/cretebase4 224 -368 0 0.500000 0.500000 134217728 0 0
+( -3619 -1211 152 ) ( -3627 -1214 152 ) ( -3627 -1214 136 ) dsi/cretebase4 272 -368 0 0.500000 0.500000 134217728 0 0
+( -3627 -1214 152 ) ( -3587 -1302 152 ) ( -3587 -1302 136 ) dsi/cretebase4 224 -368 0 0.500000 0.500000 134217728 0 0
+}
+// brush 153
+{
+( -3627 -1214 88 ) ( -3587 -1302 88 ) ( -3587 -1302 72 ) dsi/cretebase4 224 -496 0 0.500000 0.500000 134217728 0 0
+( -3619 -1211 88 ) ( -3627 -1214 88 ) ( -3627 -1214 72 ) dsi/cretebase4 272 -496 0 0.500000 0.500000 134217728 0 0
+( -3580 -1299 80 ) ( -3619 -1211 80 ) ( -3619 -1211 64 ) dsi/cretebase4 224 -496 0 0.500000 0.500000 134217728 0 0
+( -3587 -1302 88 ) ( -3580 -1299 88 ) ( -3580 -1299 72 ) dsi/cretebase4 272 -496 0 0.500000 0.500000 134217728 0 0
+( -3591 -1295 128 ) ( -3630 -1207 128 ) ( -3622 -1204 128 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+( -3619 -1211 120 ) ( -3627 -1214 120 ) ( -3587 -1302 120 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+}
+// brush 154
+{
+( -3619 -1211 56 ) ( -3627 -1214 56 ) ( -3587 -1302 56 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+( -3591 -1295 64 ) ( -3630 -1207 64 ) ( -3622 -1204 64 ) dsi/cretebase4 272 -128 0 0.500000 0.500000 134217728 0 0
+( -3587 -1302 24 ) ( -3580 -1299 24 ) ( -3580 -1299 8 ) dsi/cretebase4 272 -112 0 0.500000 0.500000 134217728 0 0
+( -3580 -1299 16 ) ( -3619 -1211 16 ) ( -3619 -1211 0 ) dsi/cretebase4 224 -112 0 0.500000 0.500000 134217728 0 0
+( -3619 -1211 24 ) ( -3627 -1214 24 ) ( -3627 -1214 8 ) dsi/cretebase4 272 -112 0 0.500000 0.500000 134217728 0 0
+( -3627 -1214 24 ) ( -3587 -1302 24 ) ( -3587 -1302 8 ) dsi/cretebase4 224 -112 0 0.500000 0.500000 134217728 0 0
+}
+// brush 155
+{
+( -3574 -1314 32 ) ( -3587 -1302 32 ) ( -3574 -1314 592 ) dsi/cretebase 480 128 0 0.500000 0.500000 134217728 0 0
+( -3587 -1302 576 ) ( -3580 -1299 592 ) ( -3581 -1317 576 ) dsi/cretebase 128 128 0 0.500000 0.500000 134217728 0 0
+( -3580 -1299 32 ) ( -3595 -1305 32 ) ( -3588 -1320 32 ) dsi/cretebase4 272 -496 0 0.500000 0.500000 134217728 0 0
+( -3574 -1314 96 ) ( -3580 -1299 96 ) ( -3580 -1299 80 ) dsi/cretebase4 224 144 0 0.500000 0.500000 134217728 0 0
+( -3580 -1299 592 ) ( -3595 -1305 592 ) ( -3595 -1305 576 ) dsi/cretebase4 272 144 0 0.500000 0.500000 134217728 0 0
+}
+// brush 156
+{
+( -3627 -1214 32 ) ( -3626 -1197 32 ) ( -3627 -1214 592 ) dsi/cretebase 128 128 0 0.500000 0.500000 134217728 0 0
+( -3633 -1200 576 ) ( -3626 -1197 592 ) ( -3627 -1214 576 ) dsi/cretebase 128 128 0 0.500000 0.500000 134217728 0 0
+( -3619 -1211 96 ) ( -3626 -1197 96 ) ( -3626 -1197 80 ) dsi/cretebase4 224 144 0 0.500000 0.500000 134217728 0 0
+( -3634 -1218 592 ) ( -3619 -1211 592 ) ( -3619 -1211 576 ) dsi/cretebase4 272 144 0 0.500000 0.500000 134217728 0 0
+( -3626 -1197 32 ) ( -3640 -1203 32 ) ( -3634 -1218 32 ) dsi/cretebase4 272 -496 0 0.500000 0.500000 134217728 0 0
+}
+// brush 157
+{
+( -1959 734 0 ) ( -2048 714 0 ) ( -1959 734 48 ) dsi/cretebase 16 0 0 0.500000 0.500000 0 0 0
+( -1845 1039 0 ) ( -1824 951 0 ) ( -1845 1039 48 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+( -2062 1175 48 ) ( -2180 986 48 ) ( -2180 986 0 ) dsi/cretebase 16 0 0 0.500000 0.500000 0 0 0
+( -1885 1065 48 ) ( -2062 1175 48 ) ( -2062 1175 0 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -1854 782 48 ) ( -1736 971 48 ) ( -1736 971 0 ) dsi/cretebase 16 0 0 0.500000 0.500000 0 0 0
+( -2265 850 48 ) ( -2089 740 48 ) ( -2089 740 0 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -2180 986 32 ) ( -2062 1175 32 ) ( -1885 1065 32 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1885 1065 0 ) ( -2062 1175 0 ) ( -2180 986 0 ) dsi/cretebase 176 -16 0 0.500000 0.500000 0 0 0
+( -2176 870 0 ) ( -2182 892 0 ) ( -2176 870 48 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+( -2041 1087 0 ) ( -2019 1092 0 ) ( -2041 1087 48 ) dsi/cretebase 16 0 0 0.500000 0.500000 0 0 0
+}
+// brush 158
+{
+( -1890 785 576 ) ( -1890 785 544 ) ( -1839 867 544 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1839 867 64 ) ( -1839 867 32 ) ( -1803 863 32 ) dsi/cretebase3 224 0 0 0.500000 0.500000 0 0 0
+( -1871 755 64 ) ( -1803 863 64 ) ( -1803 863 32 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1890 785 32 ) ( -1890 785 64 ) ( -1871 755 64 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -1803 863 32 ) ( -1830 880 32 ) ( -1898 772 32 ) dsi/cretebase3 176 -16 0 0.500000 0.500000 0 0 0
+( -1830 880 96 ) ( -1817 871 96 ) ( -1898 772 96 ) dsi/cretebase 176 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 159
+{
+( -1890 785 576 ) ( -1890 785 544 ) ( -1839 867 544 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1839 867 64 ) ( -1839 867 32 ) ( -1803 863 32 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -1871 755 64 ) ( -1803 863 64 ) ( -1803 863 32 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1890 785 32 ) ( -1890 785 64 ) ( -1871 755 64 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -1898 772 576 ) ( -1830 880 576 ) ( -1803 863 576 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1803 863 160 ) ( -1830 880 160 ) ( -1898 772 160 ) dsi/cretebase 176 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 160
+{
+( -2044 749 544 ) ( -2044 749 576 ) ( -2048 714 576 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -1890 785 32 ) ( -1890 785 64 ) ( -2044 749 64 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1871 755 32 ) ( -1871 755 64 ) ( -1890 785 64 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -1871 755 64 ) ( -1871 755 32 ) ( -2048 714 32 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1894 749 32 ) ( -1890 785 32 ) ( -2044 749 32 ) dsi/cretebase3 176 -16 0 0.500000 0.500000 0 0 0
+( -1876 777 96 ) ( -1863 768 96 ) ( -1953 654 96 ) common/caulk 176 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 161
+{
+( -2044 749 544 ) ( -2044 749 576 ) ( -2048 714 576 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+( -1890 785 32 ) ( -1890 785 64 ) ( -2044 749 64 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1871 755 32 ) ( -1871 755 64 ) ( -1890 785 64 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -1871 755 64 ) ( -1871 755 32 ) ( -2048 714 32 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1876 777 160 ) ( -1863 768 160 ) ( -1953 654 160 ) common/caulk 176 -16 0 0.500000 0.500000 0 0 0
+( -1863 768 96 ) ( -1876 777 96 ) ( -1953 654 96 ) common/caulk 176 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 162
+{
+( -1874 1021 576 ) ( -1874 1021 544 ) ( -1845 1039 544 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1803 863 32 ) ( -1803 863 64 ) ( -1845 1039 64 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -1803 863 64 ) ( -1803 863 32 ) ( -1839 867 32 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -1839 867 64 ) ( -1839 867 32 ) ( -1874 1021 32 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -1839 867 32 ) ( -1808 885 32 ) ( -1845 1039 32 ) dsi/cretebase3 176 -16 0 0.500000 0.500000 0 0 0
+( -1749 980 96 ) ( -1736 971 96 ) ( -1826 858 96 ) common/caulk 176 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 163
+{
+( -1874 1021 576 ) ( -1874 1021 544 ) ( -1845 1039 544 ) dsi/cretebase 16 0 0 0.500000 0.500000 0 0 0
+( -1803 863 32 ) ( -1803 863 64 ) ( -1845 1039 64 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -1803 863 64 ) ( -1803 863 32 ) ( -1839 867 32 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -1839 867 64 ) ( -1839 867 32 ) ( -1874 1021 32 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -1749 980 160 ) ( -1736 971 160 ) ( -1826 858 160 ) common/caulk 176 -16 0 0.500000 0.500000 0 0 0
+( -1736 971 96 ) ( -1749 980 96 ) ( -1826 858 96 ) common/caulk 176 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 164
+{
+( -2044 749 544 ) ( -2044 749 576 ) ( -2048 714 576 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -1890 785 32 ) ( -1890 785 64 ) ( -2044 749 64 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1871 755 32 ) ( -1871 755 64 ) ( -1890 785 64 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -1871 755 64 ) ( -1871 755 32 ) ( -2048 714 32 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1890 785 576 ) ( -1894 749 576 ) ( -2048 714 576 ) dsi/cretebase3 176 -16 0 0.500000 0.500000 0 0 0
+( -1863 768 160 ) ( -1876 777 160 ) ( -1953 654 160 ) common/caulk 176 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 165
+{
+( -1874 1021 576 ) ( -1874 1021 544 ) ( -1845 1039 544 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1803 863 32 ) ( -1803 863 64 ) ( -1845 1039 64 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -1803 863 64 ) ( -1803 863 32 ) ( -1839 867 32 ) dsi/cretebase 224 0 0 0.500000 0.500000 0 0 0
+( -1839 867 64 ) ( -1839 867 32 ) ( -1874 1021 32 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -1808 885 576 ) ( -1839 867 576 ) ( -1874 1021 576 ) dsi/cretebase3 176 -16 0 0.500000 0.500000 0 0 0
+( -1736 971 160 ) ( -1749 980 160 ) ( -1826 858 160 ) common/caulk 176 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 166
+{
+( -1956 1072 64 ) ( -1956 1072 32 ) ( -1953 1107 32 ) dsi/cretebase 480 128 0 0.500000 0.500000 0 0 0
+( -1845 1039 576 ) ( -1953 1107 576 ) ( -1953 1107 544 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -1874 1021 544 ) ( -1874 1021 576 ) ( -1845 1039 576 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1956 1072 32 ) ( -1956 1072 64 ) ( -1874 1021 64 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -1845 1039 32 ) ( -1953 1107 32 ) ( -1970 1080 32 ) dsi/cretebase3 176 -16 0 0.500000 0.500000 0 0 0
+( -1872 1056 96 ) ( -1845 1039 96 ) ( -1888 1029 96 ) dsi/cretebase 176 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 167
+{
+( -2126 800 32 ) ( -2126 800 64 ) ( -2156 782 64 ) dsi/cretebase 16 128 0 0.500000 0.500000 0 0 0
+( -2044 749 32 ) ( -2044 749 64 ) ( -2126 800 64 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -2044 749 576 ) ( -2044 749 544 ) ( -2048 714 544 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -2156 782 64 ) ( -2048 714 64 ) ( -2048 714 32 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -2031 741 32 ) ( -2139 809 32 ) ( -2156 782 32 ) dsi/cretebase3 176 -16 0 0.500000 0.500000 0 0 0
+( -2058 758 96 ) ( -2031 741 96 ) ( -2075 731 96 ) dsi/cretebase 176 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 168
+{
+( -1953 1107 576 ) ( -1970 1080 576 ) ( -1956 1072 160 ) dsi/cretebase 16 128 0 0.500000 0.500000 0 0 0
+( -1845 1039 576 ) ( -1953 1107 576 ) ( -1953 1107 544 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -1874 1021 544 ) ( -1874 1021 576 ) ( -1845 1039 576 ) dsi/cretebase3 16 0 0 0.500000 0.500000 0 0 0
+( -1956 1072 160 ) ( -1970 1080 576 ) ( -1874 1021 576 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -1874 1021 576 ) ( -1970 1080 576 ) ( -1953 1107 576 ) dsi/cretebase3 176 -16 0 0.500000 0.500000 0 0 0
+( -1872 1056 160 ) ( -1885 1065 160 ) ( -1902 1038 160 ) dsi/cretebase 176 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 169
+{
+( -2126 800 160 ) ( -2139 809 576 ) ( -2156 782 576 ) dsi/cretebase 16 128 0 0.500000 0.500000 0 0 0
+( -2044 749 576 ) ( -2139 809 576 ) ( -2126 800 160 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -2044 749 576 ) ( -2044 749 544 ) ( -2048 714 544 ) dsi/cretebase3 480 0 0 0.500000 0.500000 0 0 0
+( -2156 782 64 ) ( -2048 714 64 ) ( -2048 714 32 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -2156 782 576 ) ( -2139 809 576 ) ( -2044 749 576 ) dsi/cretebase3 176 -16 0 0.500000 0.500000 0 0 0
+( -2058 758 160 ) ( -2072 767 160 ) ( -2089 740 160 ) dsi/cretebase 176 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 170
+{
+( -1845 1039 96 ) ( -1872 1056 96 ) ( -1888 1029 96 ) common/caulk 176 -16 0 0.500000 0.500000 0 0 0
+( -1885 1065 160 ) ( -1872 1056 160 ) ( -1902 1038 160 ) dsi/cretebase 176 112 0 0.500000 0.500000 0 0 0
+( -1845 1039 576 ) ( -1953 1107 576 ) ( -1953 1107 544 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -1956 1072 64 ) ( -1956 1072 32 ) ( -1953 1107 32 ) dsi/cretebase 480 128 0 0.500000 0.500000 0 0 0
+( -1926 1090 96 ) ( -1956 1072 96 ) ( -1926 1090 160 ) dsi/cretebase 16 0 0 0.500000 0.500000 0 0 0
+}
+// brush 171
+{
+( -2126 800 32 ) ( -2126 800 64 ) ( -2156 782 64 ) dsi/cretebase 16 128 0 0.500000 0.500000 0 0 0
+( -2156 782 64 ) ( -2048 714 64 ) ( -2048 714 32 ) dsi/cretebase3 176 0 0 0.500000 0.500000 0 0 0
+( -2072 767 160 ) ( -2058 758 160 ) ( -2089 740 160 ) dsi/cretebase 176 112 0 0.500000 0.500000 0 0 0
+( -2031 741 96 ) ( -2058 758 96 ) ( -2075 731 96 ) common/caulk 176 -16 0 0.500000 0.500000 0 0 0
+( -2126 800 96 ) ( -2128 765 96 ) ( -2126 800 160 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+}
+// brush 172
+{
+( -1885 1065 576 ) ( -2062 1175 576 ) ( -2180 986 576 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -2180 986 592 ) ( -2062 1175 592 ) ( -1885 1065 592 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -2265 850 624 ) ( -2089 740 624 ) ( -2089 740 576 ) dsi/cretebase 176 128 0 0.500000 0.500000 0 0 0
+( -1854 782 624 ) ( -1736 971 624 ) ( -1736 971 576 ) dsi/cretebase 16 128 0 0.500000 0.500000 0 0 0
+( -1885 1065 624 ) ( -2062 1175 624 ) ( -2062 1175 576 ) dsi/cretebase 176 128 0 0.500000 0.500000 0 0 0
+( -1845 1039 576 ) ( -1824 951 576 ) ( -1845 1039 624 ) dsi/cretebase 480 128 0 0.500000 0.500000 0 0 0
+( -1959 734 576 ) ( -2048 714 576 ) ( -1959 734 624 ) dsi/cretebase 16 128 0 0.500000 0.500000 0 0 0
+( -2063 931 576 ) ( -2046 958 576 ) ( -2063 931 592 ) dsi/cretebase 16 128 0 0.500000 0.500000 0 0 0
+}
+// brush 173
+{
+( -2163 710 592 ) ( -2163 710 576 ) ( -2156 782 576 ) dsi/cretebase 480 128 0 0.500000 0.500000 0 0 0
+( -2048 714 592 ) ( -2156 782 592 ) ( -2156 782 576 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -2054 642 576 ) ( -2054 642 592 ) ( -2048 714 592 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -2163 710 592 ) ( -2054 642 592 ) ( -2054 642 576 ) dsi/cretebase 176 128 0 0.500000 0.500000 0 0 0
+( -2054 642 592 ) ( -2163 710 592 ) ( -2156 782 592 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -2163 710 576 ) ( -2054 642 576 ) ( -2048 714 576 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 174
+{
+( -1749 829 576 ) ( -1803 863 576 ) ( -1871 755 576 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1871 755 592 ) ( -1803 863 592 ) ( -1749 829 592 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1834 693 592 ) ( -1834 693 576 ) ( -1871 755 576 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -1732 856 592 ) ( -1732 856 576 ) ( -1834 693 576 ) dsi/cretebase 16 128 0 0.500000 0.500000 0 0 0
+( -1732 856 576 ) ( -1732 856 592 ) ( -1803 863 592 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -1803 863 592 ) ( -1871 755 592 ) ( -1871 755 576 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+}
+// brush 175
+{
+( -1783 1077 576 ) ( -1892 1145 576 ) ( -1953 1107 576 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1892 1145 592 ) ( -1783 1077 592 ) ( -1845 1039 592 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1953 1107 592 ) ( -1845 1039 592 ) ( -1845 1039 576 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -1783 1077 592 ) ( -1783 1077 576 ) ( -1845 1039 576 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+( -1783 1077 592 ) ( -1892 1145 592 ) ( -1892 1145 576 ) dsi/cretebase 176 128 0 0.500000 0.500000 0 0 0
+( -1892 1145 576 ) ( -1892 1145 592 ) ( -1953 1107 592 ) dsi/cretebase 16 128 0 0.500000 0.500000 0 0 0
+}
+// brush 176
+{
+( -1845 1039 592 ) ( -1845 1039 576 ) ( -1783 1077 576 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+( -1732 856 576 ) ( -1732 856 592 ) ( -1783 1077 592 ) dsi/cretebase 480 128 0 0.500000 0.500000 0 0 0
+( -1732 856 592 ) ( -1732 856 576 ) ( -1803 863 576 ) dsi/cretebase4 320 0 0 0.500000 0.500000 0 0 0
+( -1803 863 592 ) ( -1803 863 576 ) ( -1845 1039 576 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -1743 901 592 ) ( -1803 863 592 ) ( -1845 1039 592 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1803 863 576 ) ( -1743 901 576 ) ( -1783 1077 576 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 177
+{
+( -1878 684 576 ) ( -1871 755 576 ) ( -2048 714 576 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1871 755 592 ) ( -1878 684 592 ) ( -2054 642 592 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1834 693 592 ) ( -1834 693 576 ) ( -2054 642 576 ) dsi/cretebase 16 128 0 0.500000 0.500000 0 0 0
+( -1834 693 576 ) ( -1834 693 592 ) ( -1871 755 592 ) dsi/cretebase 176 128 0 0.500000 0.500000 0 0 0
+( -1871 755 576 ) ( -1871 755 592 ) ( -2048 714 592 ) dsi/cretebase 16 128 0 0.500000 0.500000 0 0 0
+( -2048 714 576 ) ( -2048 714 592 ) ( -2054 642 592 ) dsi/cretebase 480 128 0 0.500000 0.500000 0 0 0
+}
+// brush 178
+{
+( -1814 1013 592 ) ( -1814 1013 784 ) ( -1783 1020 784 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+( -1839 1017 576 ) ( -1839 1017 768 ) ( -1812 1001 768 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -1854 1037 576 ) ( -1854 1037 768 ) ( -1846 1006 768 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -1849 1062 576 ) ( -1849 1062 768 ) ( -1866 1034 768 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+( -1830 1076 576 ) ( -1830 1076 768 ) ( -1861 1069 768 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+( -1805 1072 592 ) ( -1805 1072 784 ) ( -1832 1089 784 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -1790 1052 592 ) ( -1790 1052 784 ) ( -1797 1083 784 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -1795 1028 592 ) ( -1795 1028 784 ) ( -1778 1055 784 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+( -1866 1034 592 ) ( -1812 1001 592 ) ( -1778 1055 592 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1778 1055 768 ) ( -1812 1001 768 ) ( -1866 1034 768 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 179
+{
+( -1780 811 768 ) ( -1814 756 768 ) ( -1868 790 768 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1868 790 592 ) ( -1814 756 592 ) ( -1780 811 592 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1796 784 592 ) ( -1796 784 784 ) ( -1780 811 784 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+( -1792 808 592 ) ( -1792 808 784 ) ( -1799 840 784 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -1807 827 576 ) ( -1807 827 768 ) ( -1834 844 768 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -1832 832 576 ) ( -1832 832 768 ) ( -1863 825 768 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+( -1850 817 576 ) ( -1850 817 768 ) ( -1868 790 768 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+( -1856 793 576 ) ( -1856 793 768 ) ( -1848 762 768 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -1841 773 576 ) ( -1841 773 768 ) ( -1814 756 768 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -1816 769 592 ) ( -1816 769 784 ) ( -1785 776 784 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+}
+// brush 180
+{
+( -2035 660 592 ) ( -2035 660 784 ) ( -2004 668 784 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+( -2060 665 576 ) ( -2060 665 768 ) ( -2032 647 768 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -2074 684 576 ) ( -2074 684 768 ) ( -2067 653 768 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -2070 709 576 ) ( -2070 709 768 ) ( -2087 682 768 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+( -2050 723 576 ) ( -2050 723 768 ) ( -2082 717 768 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+( -2026 719 592 ) ( -2026 719 784 ) ( -2053 736 784 ) dsi/cretebase4 272 0 0 0.500000 0.500000 0 0 0
+( -2011 699 592 ) ( -2011 699 784 ) ( -2018 731 784 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -2015 675 592 ) ( -2015 675 784 ) ( -1998 702 784 ) dsi/cretebase4 112 0 0 0.500000 0.500000 0 0 0
+( -2087 682 592 ) ( -2032 647 592 ) ( -1998 702 592 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1998 702 768 ) ( -2032 647 768 ) ( -2087 682 768 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 181
+{
+( -1803 863 784 ) ( -1871 755 784 ) ( -1871 755 768 ) dsi/cretebase 16 0 0 0.500000 0.500000 0 0 0
+( -1732 856 768 ) ( -1732 856 784 ) ( -1803 863 784 ) dsi/cretebase4 320 384 0 0.500000 0.500000 0 0 0
+( -1732 856 784 ) ( -1732 856 768 ) ( -1834 693 768 ) dsi/cretebase 16 0 0 0.500000 0.500000 0 0 0
+( -1834 693 784 ) ( -1834 693 768 ) ( -1871 755 768 ) dsi/cretebase4 272 384 0 0.500000 0.500000 0 0 0
+( -1871 755 784 ) ( -1803 863 784 ) ( -1749 829 784 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1749 829 768 ) ( -1803 863 768 ) ( -1871 755 768 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 182
+{
+( -1803 863 768 ) ( -1743 901 768 ) ( -1783 1077 768 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1743 901 784 ) ( -1803 863 784 ) ( -1845 1039 784 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1803 863 784 ) ( -1803 863 768 ) ( -1845 1039 768 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+( -1732 856 784 ) ( -1732 856 768 ) ( -1803 863 768 ) dsi/cretebase4 320 384 0 0.500000 0.500000 0 0 0
+( -1732 856 768 ) ( -1732 856 784 ) ( -1783 1077 784 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+( -1845 1039 784 ) ( -1845 1039 768 ) ( -1783 1077 768 ) dsi/cretebase 16 0 0 0.500000 0.500000 0 0 0
+}
+// brush 183
+{
+( -2048 714 768 ) ( -2048 714 784 ) ( -2054 642 784 ) dsi/cretebase 480 0 0 0.500000 0.500000 0 0 0
+( -1871 755 768 ) ( -1871 755 784 ) ( -2048 714 784 ) dsi/cretebase 16 0 0 0.500000 0.500000 0 0 0
+( -1834 693 768 ) ( -1834 693 784 ) ( -1871 755 784 ) dsi/cretebase 176 0 0 0.500000 0.500000 0 0 0
+( -1834 693 784 ) ( -1834 693 768 ) ( -2054 642 768 ) dsi/cretebase 16 0 0 0.500000 0.500000 0 0 0
+( -1871 755 784 ) ( -1878 684 784 ) ( -2054 642 784 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+( -1878 684 768 ) ( -1871 755 768 ) ( -2048 714 768 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 0 0 0
+}
+// brush 184
+{
+( -2029 985 504 ) ( -2036 990 504 ) ( -2086 908 504 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+( -2083 915 512 ) ( -2032 996 512 ) ( -2025 991 512 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+( -2086 908 472 ) ( -2080 904 472 ) ( -2080 904 456 ) dsi/cretebase4 272 272 0 0.500000 0.500000 134217728 0 0
+( -2080 904 464 ) ( -2029 985 464 ) ( -2029 985 448 ) dsi/cretebase4 112 272 0 0.500000 0.500000 134217728 0 0
+( -2029 985 472 ) ( -2036 990 472 ) ( -2036 990 456 ) dsi/cretebase4 272 272 0 0.500000 0.500000 134217728 0 0
+( -2036 990 472 ) ( -2086 908 472 ) ( -2086 908 456 ) dsi/cretebase4 112 272 0 0.500000 0.500000 134217728 0 0
+}
+// brush 185
+{
+( -2036 990 408 ) ( -2086 908 408 ) ( -2086 908 392 ) dsi/cretebase4 112 144 0 0.500000 0.500000 134217728 0 0
+( -2029 985 408 ) ( -2036 990 408 ) ( -2036 990 392 ) dsi/cretebase4 272 144 0 0.500000 0.500000 134217728 0 0
+( -2080 904 400 ) ( -2029 985 400 ) ( -2029 985 384 ) dsi/cretebase4 112 144 0 0.500000 0.500000 134217728 0 0
+( -2086 908 408 ) ( -2080 904 408 ) ( -2080 904 392 ) dsi/cretebase4 272 144 0 0.500000 0.500000 134217728 0 0
+( -2083 915 448 ) ( -2032 996 448 ) ( -2025 991 448 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+( -2029 985 440 ) ( -2036 990 440 ) ( -2086 908 440 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+}
+// brush 186
+{
+( -2029 985 376 ) ( -2036 990 376 ) ( -2086 908 376 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+( -2083 915 384 ) ( -2032 996 384 ) ( -2025 991 384 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+( -2086 908 344 ) ( -2080 904 344 ) ( -2080 904 328 ) dsi/cretebase4 272 16 0 0.500000 0.500000 134217728 0 0
+( -2080 904 336 ) ( -2029 985 336 ) ( -2029 985 320 ) dsi/cretebase4 112 16 0 0.500000 0.500000 134217728 0 0
+( -2029 985 344 ) ( -2036 990 344 ) ( -2036 990 328 ) dsi/cretebase4 272 16 0 0.500000 0.500000 134217728 0 0
+( -2036 990 344 ) ( -2086 908 344 ) ( -2086 908 328 ) dsi/cretebase4 112 16 0 0.500000 0.500000 134217728 0 0
+}
+// brush 187
+{
+( -2036 990 280 ) ( -2086 908 280 ) ( -2086 908 264 ) dsi/cretebase4 112 -112 0 0.500000 0.500000 134217728 0 0
+( -2029 985 280 ) ( -2036 990 280 ) ( -2036 990 264 ) dsi/cretebase4 272 -112 0 0.500000 0.500000 134217728 0 0
+( -2080 904 272 ) ( -2029 985 272 ) ( -2029 985 256 ) dsi/cretebase4 112 -112 0 0.500000 0.500000 134217728 0 0
+( -2086 908 280 ) ( -2080 904 280 ) ( -2080 904 264 ) dsi/cretebase4 272 -112 0 0.500000 0.500000 134217728 0 0
+( -2083 915 320 ) ( -2032 996 320 ) ( -2025 991 320 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+( -2029 985 312 ) ( -2036 990 312 ) ( -2086 908 312 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+}
+// brush 188
+{
+( -2029 985 248 ) ( -2036 990 248 ) ( -2086 908 248 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+( -2083 915 256 ) ( -2032 996 256 ) ( -2025 991 256 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+( -2086 908 216 ) ( -2080 904 216 ) ( -2080 904 200 ) dsi/cretebase4 272 -240 0 0.500000 0.500000 134217728 0 0
+( -2080 904 208 ) ( -2029 985 208 ) ( -2029 985 192 ) dsi/cretebase4 112 -240 0 0.500000 0.500000 134217728 0 0
+( -2029 985 216 ) ( -2036 990 216 ) ( -2036 990 200 ) dsi/cretebase4 272 -240 0 0.500000 0.500000 134217728 0 0
+( -2036 990 216 ) ( -2086 908 216 ) ( -2086 908 200 ) dsi/cretebase4 112 -240 0 0.500000 0.500000 134217728 0 0
+}
+// brush 189
+{
+( -2036 990 152 ) ( -2086 908 152 ) ( -2086 908 136 ) dsi/cretebase4 112 -368 0 0.500000 0.500000 134217728 0 0
+( -2029 985 152 ) ( -2036 990 152 ) ( -2036 990 136 ) dsi/cretebase4 272 -368 0 0.500000 0.500000 134217728 0 0
+( -2080 904 144 ) ( -2029 985 144 ) ( -2029 985 128 ) dsi/cretebase4 112 -368 0 0.500000 0.500000 134217728 0 0
+( -2086 908 152 ) ( -2080 904 152 ) ( -2080 904 136 ) dsi/cretebase4 272 -368 0 0.500000 0.500000 134217728 0 0
+( -2083 915 192 ) ( -2032 996 192 ) ( -2025 991 192 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+( -2029 985 184 ) ( -2036 990 184 ) ( -2086 908 184 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+}
+// brush 190
+{
+( -2029 985 120 ) ( -2036 990 120 ) ( -2086 908 120 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+( -2083 915 128 ) ( -2032 996 128 ) ( -2025 991 128 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+( -2086 908 88 ) ( -2080 904 88 ) ( -2080 904 72 ) dsi/cretebase4 272 -496 0 0.500000 0.500000 134217728 0 0
+( -2080 904 80 ) ( -2029 985 80 ) ( -2029 985 64 ) dsi/cretebase4 112 -496 0 0.500000 0.500000 134217728 0 0
+( -2029 985 88 ) ( -2036 990 88 ) ( -2036 990 72 ) dsi/cretebase4 272 -496 0 0.500000 0.500000 134217728 0 0
+( -2036 990 88 ) ( -2086 908 88 ) ( -2086 908 72 ) dsi/cretebase4 112 -496 0 0.500000 0.500000 134217728 0 0
+}
+// brush 191
+{
+( -2036 990 24 ) ( -2086 908 24 ) ( -2086 908 8 ) dsi/cretebase4 112 -112 0 0.500000 0.500000 134217728 0 0
+( -2029 985 24 ) ( -2036 990 24 ) ( -2036 990 8 ) dsi/cretebase4 272 -112 0 0.500000 0.500000 134217728 0 0
+( -2080 904 16 ) ( -2029 985 16 ) ( -2029 985 0 ) dsi/cretebase4 112 -112 0 0.500000 0.500000 134217728 0 0
+( -2086 908 24 ) ( -2080 904 24 ) ( -2080 904 8 ) dsi/cretebase4 272 -112 0 0.500000 0.500000 134217728 0 0
+( -2083 915 64 ) ( -2032 996 64 ) ( -2025 991 64 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+( -2029 985 56 ) ( -2036 990 56 ) ( -2086 908 56 ) dsi/cretebase4 272 -16 0 0.500000 0.500000 134217728 0 0
+}
+// brush 192
+{
+( -2080 904 592 ) ( -2093 913 592 ) ( -2093 913 576 ) dsi/cretebase4 272 144 0 0.500000 0.500000 134217728 0 0
+( -2089 890 96 ) ( -2080 904 96 ) ( -2080 904 80 ) dsi/cretebase4 112 144 0 0.500000 0.500000 134217728 0 0
+( -2080 904 32 ) ( -2093 913 32 ) ( -2102 898 32 ) dsi/cretebase4 272 -384 0 0.500000 0.500000 134217728 0 0
+( -2086 908 576 ) ( -2080 904 592 ) ( -2095 894 576 ) dsi/cretebase 16 128 0 0.500000 0.500000 134217728 0 0
+( -2089 890 32 ) ( -2086 908 32 ) ( -2089 890 592 ) dsi/cretebase 480 128 0 0.500000 0.500000 134217728 0 0
+}
+// brush 193
+{
+( -2021 999 32 ) ( -2034 1007 32 ) ( -2043 994 32 ) dsi/cretebase4 272 -384 0 0.500000 0.500000 134217728 0 0
+( -2043 994 592 ) ( -2029 985 592 ) ( -2029 985 576 ) dsi/cretebase4 272 144 0 0.500000 0.500000 134217728 0 0
+( -2029 985 96 ) ( -2021 999 96 ) ( -2021 999 80 ) dsi/cretebase4 112 144 0 0.500000 0.500000 134217728 0 0
+( -2027 1003 576 ) ( -2021 999 592 ) ( -2036 990 576 ) dsi/cretebase 16 128 0 0.500000 0.500000 134217728 0 0
+( -2036 990 32 ) ( -2021 999 32 ) ( -2036 990 592 ) dsi/cretebase 16 128 0 0.500000 0.500000 134217728 0 0
+}
+// brush 194
+{
+( -448 -1024 1152 ) ( -448 -1216 1152 ) ( -640 -1216 1152 ) dsi/cretebase4 64 -64 0 0.500000 0.500000 0 0 0
+( -640 -1216 0 ) ( -448 -1216 0 ) ( -448 -1024 0 ) dsi/cretebase4 64 -64 0 0.500000 0.500000 0 0 0
+( -448 -1120 0 ) ( -448 -1120 192 ) ( -448 -1024 192 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -476 -1052 0 ) ( -476 -1052 192 ) ( -544 -984 192 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -544 -1024 0 ) ( -544 -1024 192 ) ( -640 -1024 192 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -612 -1052 0 ) ( -612 -1052 192 ) ( -680 -1120 192 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -640 -1120 0 ) ( -640 -1120 192 ) ( -640 -1216 192 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -612 -1188 0 ) ( -612 -1188 192 ) ( -544 -1256 192 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -544 -1216 0 ) ( -544 -1216 192 ) ( -448 -1216 192 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+( -476 -1188 0 ) ( -476 -1188 192 ) ( -408 -1120 192 ) dsi/cretebase4 64 0 0 0.500000 0.500000 0 0 0
+}
+// brush 195
+{
+( -444 1052 0 ) ( -444 1052 192 ) ( -376 1120 192 ) dsi/cretebase4 192 0 0 0.500000 0.500000 0 0 0
+( -512 1024 0 ) ( -512 1024 192 ) ( -416 1024 192 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -580 1052 0 ) ( -580 1052 192 ) ( -512 984 192 ) dsi/cretebase4 192 0 0 0.500000 0.500000 0 0 0
+( -608 1120 0 ) ( -608 1120 192 ) ( -608 1024 192 ) dsi/cretebase4 192 0 0 0.500000 0.500000 0 0 0
+( -580 1188 0 ) ( -580 1188 192 ) ( -648 1120 192 ) dsi/cretebase4 192 0 0 0.500000 0.500000 0 0 0
+( -512 1216 0 ) ( -512 1216 192 ) ( -608 1216 192 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -444 1188 0 ) ( -444 1188 192 ) ( -512 1256 192 ) dsi/cretebase4 192 0 0 0.500000 0.500000 0 0 0
+( -416 1120 0 ) ( -416 1120 192 ) ( -416 1216 192 ) dsi/cretebase4 192 0 0 0.500000 0.500000 0 0 0
+( -608 1024 0 ) ( -416 1024 0 ) ( -416 1216 0 ) dsi/cretebase4 0 -192 0 0.500000 0.500000 0 0 0
+( -416 1216 1152 ) ( -416 1024 1152 ) ( -608 1024 1152 ) dsi/cretebase4 0 -192 0 0.500000 0.500000 0 0 0
+}
+// brush 196
+{
+( -576 1216 0 ) ( -560 1200 0 ) ( -576 1216 1152 ) dsi/cretebase -32 -128 0 0.500000 0.500000 0 0 0
+( -592 1168 0 ) ( -608 1184 0 ) ( -592 1168 1152 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -912 1504 0 ) ( -944 1472 0 ) ( -592 1168 0 ) dsi/cretebase4 -32 -128 0 0.500000 0.500000 0 0 0
+( -944 1472 1152 ) ( -912 1504 1152 ) ( -560 1200 1152 ) dsi/cretebase4 -32 -128 0 0.500000 0.500000 0 0 0
+( -592 1168 0 ) ( -592 1168 1152 ) ( -560 1200 1152 ) dsi/cretebase4 128 0 0 0.500000 0.500000 0 0 0
+( -944 1472 1152 ) ( -944 1472 0 ) ( -912 1504 0 ) dsi/cretebase4 128 0 0 0.500000 0.500000 0 0 0
+}
+// brush 197
+{
+( -864 1664 1152 ) ( -864 1472 1152 ) ( -1056 1472 1152 ) dsi/cretebase4 -128 192 0 0.500000 0.500000 0 0 0
+( -1056 1472 0 ) ( -864 1472 0 ) ( -864 1664 0 ) dsi/cretebase4 -128 192 0 0.500000 0.500000 0 0 0
+( -864 1568 0 ) ( -864 1568 192 ) ( -864 1664 192 ) dsi/cretebase4 -192 0 0 0.500000 0.500000 0 0 0
+( -892 1636 0 ) ( -892 1636 192 ) ( -960 1704 192 ) dsi/cretebase4 -192 0 0 0.500000 0.500000 0 0 0
+( -960 1664 0 ) ( -960 1664 192 ) ( -1056 1664 192 ) dsi/cretebase4 -128 0 0 0.500000 0.500000 0 0 0
+( -1028 1636 0 ) ( -1028 1636 192 ) ( -1096 1568 192 ) dsi/cretebase4 -192 0 0 0.500000 0.500000 0 0 0
+( -1056 1568 0 ) ( -1056 1568 192 ) ( -1056 1472 192 ) dsi/cretebase4 -192 0 0 0.500000 0.500000 0 0 0
+( -1028 1500 0 ) ( -1028 1500 192 ) ( -960 1432 192 ) dsi/cretebase4 -192 0 0 0.500000 0.500000 0 0 0
+( -960 1472 0 ) ( -960 1472 192 ) ( -864 1472 192 ) dsi/cretebase4 -128 0 0 0.500000 0.500000 0 0 0
+( -892 1500 0 ) ( -892 1500 192 ) ( -824 1568 192 ) dsi/cretebase4 -192 0 0 0.500000 0.500000 0 0 0
+}
+// brush 198
+{
+( -624 1984 1152 ) ( -624 1984 0 ) ( -592 1952 0 ) dsi/cretebase4 -256 0 0 0.500000 0.500000 0 0 0
+( -928 1632 0 ) ( -928 1632 1152 ) ( -896 1600 1152 ) dsi/cretebase4 -256 0 0 0.500000 0.500000 0 0 0
+( -624 1984 1152 ) ( -592 1952 1152 ) ( -896 1600 1152 ) dsi/cretebase4 -288 256 0 0.500000 0.500000 0 0 0
+( -592 1952 0 ) ( -624 1984 0 ) ( -928 1632 0 ) dsi/cretebase4 -288 256 0 0.500000 0.500000 0 0 0
+( -928 1632 0 ) ( -912 1648 0 ) ( -928 1632 1152 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+( -880 1616 0 ) ( -896 1600 0 ) ( -880 1616 1152 ) dsi/cretebase -160 -128 0 0.500000 0.500000 0 0 0
+}
+// brush 199
+{
+( -596 1932 0 ) ( -596 1932 192 ) ( -528 1864 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( -624 2000 0 ) ( -624 2000 192 ) ( -624 1904 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( -596 2068 0 ) ( -596 2068 192 ) ( -664 2000 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( -528 2096 0 ) ( -528 2096 192 ) ( -624 2096 192 ) dsi/cretebase4 128 0 0 0.500000 0.500000 0 0 0
+( -460 2068 0 ) ( -460 2068 192 ) ( -528 2136 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( -432 2000 0 ) ( -432 2000 192 ) ( -432 2096 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( -460 1932 0 ) ( -460 1932 192 ) ( -392 2000 192 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( -528 1904 0 ) ( -528 1904 192 ) ( -432 1904 192 ) dsi/cretebase4 128 0 0 0.500000 0.500000 0 0 0
+( -624 2096 0 ) ( -624 1904 0 ) ( -432 1904 0 ) dsi/cretebase4 128 64 0 0.500000 0.500000 0 0 0
+( -432 1904 1152 ) ( -624 1904 1152 ) ( -624 2096 1152 ) dsi/cretebase4 128 64 0 0.500000 0.500000 0 0 0
+}
+// brush 200
+{
+( -288 864 0 ) ( -288 896 0 ) ( -288 864 1152 ) dsi/cretebase 384 0 0 0.500000 0.500000 0 0 0
+( 32 704 0 ) ( -32 704 0 ) ( 32 704 1152 ) dsi/cretebase 384 0 0 0.500000 0.500000 0 0 0
+( 0 832 0 ) ( 0 720 0 ) ( 0 832 1152 ) dsi/cretebase 384 0 0 0.500000 0.500000 0 0 0
+( -352 912 192 ) ( -320 912 192 ) ( -352 912 1152 ) dsi/cretebase 384 0 0 0.500000 0.500000 0 0 0
+( 16 1120 0 ) ( 0 1120 0 ) ( 16 576 0 ) dsi/cretebase 384 0 0 0.500000 0.500000 0 0 0
+( -448 1120 1152 ) ( 192 672 1152 ) ( 128 576 1152 ) dsi/cretebase 384 0 0 0.500000 0.500000 0 0 0
+( 128 576 1152 ) ( 128 576 0 ) ( -512 1024 0 ) dsi/cretebase 384 0 0 0.500000 0.500000 0 0 0
+( 384 576 0 ) ( 384 576 1152 ) ( -448 1120 1152 ) dsi/cretebase 384 0 0 0.500000 0.500000 0 0 0
+}
+// brush 201
+{
+( -928 -1504 0 ) ( -960 -1472 0 ) ( -960 -1472 1152 ) dsi/cretebase4 -448 0 0 0.500000 0.500000 0 0 0
+( -576 -1200 1152 ) ( -608 -1168 1152 ) ( -608 -1168 0 ) dsi/cretebase4 -448 0 0 0.500000 0.500000 0 0 0
+( -576 -1200 1152 ) ( -928 -1504 1152 ) ( -960 -1472 1152 ) dsi/cretebase4 0 448 0 0.500000 0.500000 0 0 0
+( -608 -1168 0 ) ( -960 -1472 0 ) ( -928 -1504 0 ) dsi/cretebase4 0 448 0 0.500000 0.500000 0 0 0
+( -608 -1168 1152 ) ( -624 -1184 0 ) ( -608 -1168 0 ) dsi/cretebase -64 0 0 0.500000 0.500000 0 0 0
+( -592 -1216 1152 ) ( -576 -1200 0 ) ( -592 -1216 0 ) dsi/cretebase -96 -128 0 0.500000 0.500000 0 0 0
+}
+// brush 202
+{
+( -840 -1568 192 ) ( -908 -1500 192 ) ( -908 -1500 0 ) dsi/cretebase4 -256 0 0 0.500000 0.500000 0 0 0
+( -880 -1472 192 ) ( -976 -1472 192 ) ( -976 -1472 0 ) dsi/cretebase4 -96 0 0 0.500000 0.500000 0 0 0
+( -976 -1432 192 ) ( -1044 -1500 192 ) ( -1044 -1500 0 ) dsi/cretebase4 -256 0 0 0.500000 0.500000 0 0 0
+( -1072 -1472 192 ) ( -1072 -1568 192 ) ( -1072 -1568 0 ) dsi/cretebase4 -256 0 0 0.500000 0.500000 0 0 0
+( -1112 -1568 192 ) ( -1044 -1636 192 ) ( -1044 -1636 0 ) dsi/cretebase4 -256 0 0 0.500000 0.500000 0 0 0
+( -1072 -1664 192 ) ( -976 -1664 192 ) ( -976 -1664 0 ) dsi/cretebase4 -96 0 0 0.500000 0.500000 0 0 0
+( -976 -1704 192 ) ( -908 -1636 192 ) ( -908 -1636 0 ) dsi/cretebase4 -256 0 0 0.500000 0.500000 0 0 0
+( -880 -1664 192 ) ( -880 -1568 192 ) ( -880 -1568 0 ) dsi/cretebase4 -256 0 0 0.500000 0.500000 0 0 0
+( -880 -1664 0 ) ( -880 -1472 0 ) ( -1072 -1472 0 ) dsi/cretebase4 -96 256 0 0.500000 0.500000 0 0 0
+( -1072 -1472 1152 ) ( -880 -1472 1152 ) ( -880 -1664 1152 ) dsi/cretebase4 -96 256 0 0.500000 0.500000 0 0 0
+}
+// brush 203
+{
+( -896 -1616 1152 ) ( -912 -1600 0 ) ( -896 -1616 0 ) dsi/cretebase -224 -128 0 0.500000 0.500000 0 0 0
+( -944 -1632 1152 ) ( -928 -1648 0 ) ( -944 -1632 0 ) dsi/cretebase -64 0 0 0.500000 0.500000 0 0 0
+( -944 -1632 0 ) ( -640 -1984 0 ) ( -608 -1952 0 ) dsi/cretebase4 -256 320 0 0.500000 0.500000 0 0 0
+( -912 -1600 1152 ) ( -608 -1952 1152 ) ( -640 -1984 1152 ) dsi/cretebase4 -256 320 0 0.500000 0.500000 0 0 0
+( -912 -1600 1152 ) ( -944 -1632 1152 ) ( -944 -1632 0 ) dsi/cretebase4 -320 0 0 0.500000 0.500000 0 0 0
+( -608 -1952 0 ) ( -640 -1984 0 ) ( -640 -1984 1152 ) dsi/cretebase4 -320 0 0 0.500000 0.500000 0 0 0
+}
+// brush 204
+{
+( -640 -2096 1152 ) ( -640 -1904 1152 ) ( -448 -1904 1152 ) dsi/cretebase4 160 128 0 0.500000 0.500000 0 0 0
+( -448 -1904 0 ) ( -640 -1904 0 ) ( -640 -2096 0 ) dsi/cretebase4 160 128 0 0.500000 0.500000 0 0 0
+( -448 -1904 192 ) ( -544 -1904 192 ) ( -544 -1904 0 ) dsi/cretebase4 160 0 0 0.500000 0.500000 0 0 0
+( -408 -2000 192 ) ( -476 -1932 192 ) ( -476 -1932 0 ) dsi/cretebase4 -128 0 0 0.500000 0.500000 0 0 0
+( -448 -2096 192 ) ( -448 -2000 192 ) ( -448 -2000 0 ) dsi/cretebase4 -128 0 0 0.500000 0.500000 0 0 0
+( -544 -2136 192 ) ( -476 -2068 192 ) ( -476 -2068 0 ) dsi/cretebase4 -128 0 0 0.500000 0.500000 0 0 0
+( -640 -2096 192 ) ( -544 -2096 192 ) ( -544 -2096 0 ) dsi/cretebase4 160 0 0 0.500000 0.500000 0 0 0
+( -680 -2000 192 ) ( -612 -2068 192 ) ( -612 -2068 0 ) dsi/cretebase4 -128 0 0 0.500000 0.500000 0 0 0
+( -640 -1904 192 ) ( -640 -2000 192 ) ( -640 -2000 0 ) dsi/cretebase4 -128 0 0 0.500000 0.500000 0 0 0
+( -544 -1864 192 ) ( -612 -1932 192 ) ( -612 -1932 0 ) dsi/cretebase4 -128 0 0 0.500000 0.500000 0 0 0
+}
+// brush 205
+{
+( -464 -1120 1152 ) ( 368 -576 1152 ) ( 368 -576 0 ) dsi/cretebase -96 0 0 0.500000 0.500000 0 0 0
+( -528 -1024 0 ) ( 112 -576 0 ) ( 112 -576 1152 ) dsi/cretebase -96 0 0 0.500000 0.500000 0 0 0
+( 112 -576 1152 ) ( 176 -672 1152 ) ( -464 -1120 1152 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( 0 -576 0 ) ( -16 -1120 0 ) ( 0 -1120 0 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -368 -912 1152 ) ( -336 -912 192 ) ( -368 -912 192 ) dsi/cretebase -96 0 0 0.500000 0.500000 0 0 0
+( -16 -832 1152 ) ( -16 -720 0 ) ( -16 -832 0 ) dsi/cretebase -192 0 0 0.500000 0.500000 0 0 0
+( 16 -704 1152 ) ( -48 -704 0 ) ( 16 -704 0 ) dsi/cretebase -96 0 0 0.500000 0.500000 0 0 0
+( -304 -864 1152 ) ( -304 -896 0 ) ( -304 -864 0 ) dsi/cretebase -192 0 0 0.500000 0.500000 0 0 0
+}
+// brush 206
+{
+( -192 -1608 0 ) ( -192 -448 0 ) ( 64 -448 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 64 -448 -32 ) ( -192 -448 -32 ) ( -192 -1608 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -1024 320 0 ) ( -1024 0 0 ) ( -1024 0 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -512 -1024 -32 ) ( -768 -768 -32 ) ( -512 -1024 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -576 -576 0 ) ( -576 -448 0 ) ( -576 -576 -32 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -528 -16 -32 ) ( -496 -16 -32 ) ( -528 -16 0 ) common/caulk 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 207
+{
+( 2016 -2048 0 ) ( -2016 -2048 0 ) ( -2016 -2112 0 ) dsi/cretebase4 0 64 0 0.500000 0.500000 0 0 0
+( -2016 -2112 1792 ) ( -2016 -2048 1792 ) ( 2016 -2048 1792 ) dsi/cretebase4 0 64 0 0.500000 0.500000 0 0 0
+( -1984 -2112 1024 ) ( 2048 -2112 1024 ) ( 2048 -2112 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( 2048 -2112 1792 ) ( 2048 -2048 1792 ) ( 2048 -2048 768 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+( -1472 -2048 1024 ) ( -5504 -2048 1024 ) ( -5504 -2048 0 ) dsi/cretebase4 0 0 0 0.500000 0.500000 0 0 0
+( -5568 -2048 1792 ) ( -5568 -2112 1792 ) ( -5568 -2112 768 ) dsi/cretebase4 -64 0 0 0.500000 0.500000 0 0 0
+}
+// brush 208
+{
+( -859 675 0 ) ( -859 675 192 ) ( -814 720 192 ) dsi/cretebase -32 64 0 0.500000 0.500000 0 0 0
+( -904 656 0 ) ( -904 656 192 ) ( -840 656 192 ) dsi/cretebase -112 64 0 0.500000 0.500000 0 0 0
+( -949 675 0 ) ( -949 675 192 ) ( -904 630 192 ) dsi/cretebase -64 0 0 0.500000 0.500000 0 0 0
+( -968 720 32 ) ( -968 720 224 ) ( -968 656 224 ) dsi/cretebase -64 0 0 0.500000 0.500000 0 0 0
+( -949 765 0 ) ( -949 765 192 ) ( -994 720 192 ) dsi/cretebase -64 0 0 0.500000 0.500000 0 0 0
+( -904 784 0 ) ( -904 784 192 ) ( -968 784 192 ) dsi/cretebase -112 64 0 0.500000 0.500000 0 0 0
+( -859 765 0 ) ( -859 765 192 ) ( -904 810 192 ) dsi/cretebase -32 64 0 0.500000 0.500000 0 0 0
+( -840 720 0 ) ( -840 720 192 ) ( -840 784 192 ) dsi/cretebase -32 64 0 0.500000 0.500000 0 0 0
+( -968 656 0 ) ( -840 656 0 ) ( -840 784 0 ) dsi/cretebase -112 224 0 0.500000 0.500000 0 0 0
+( -856 784 128 ) ( -856 656 128 ) ( -984 656 128 ) dsi/cretebase4 -304 224 0 0.500000 0.500000 0 0 0
+}
+// brush 209
+{
+( -2048 2048 1792 ) ( -2144 2048 1792 ) ( -2144 -2048 1792 ) sav-graysky1/sav-graysky2_skybox 256 0 0 0.500000 0.500000 0 0 0
+( -2176 -2048 1856 ) ( -2176 2048 1856 ) ( -2080 2048 1856 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
+( -2144 -2080 1088 ) ( -2048 -2080 1088 ) ( -2048 -2080 1024 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
+( 1920 -2048 928 ) ( 1920 2048 928 ) ( 1920 2048 864 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
+( -2048 2048 1088 ) ( -2144 2048 1088 ) ( -2144 2048 1024 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
+( -5696 2016 1088 ) ( -5696 -2080 1088 ) ( -5696 -2080 1024 ) common/caulk 0 0 0 0.500000 0.500000 0 4 0
+}
+}
+// entity 1
+{
+"classname" "weapon_crylink"
+"origin" "-104 248 32"
+}
+// entity 2
+{
+"classname" "weapon_electro"
+"origin" "-304 176 32"
+}
+// entity 3
+{
+"classname" "weapon_grenadelauncher"
+"origin" "-192 128 32"
+}
+// entity 4
+{
+"classname" "weapon_hagar"
+"origin" "-384 256 32"
+}
+// entity 5
+{
+"classname" "weapon_machinegun"
+"origin" "-176 416 32"
+}
+// entity 6
+{
+"origin" "-320 -192 32"
+"classname" "weapon_electro"
+}
+// entity 7
+{
+"origin" "-384 -256 32"
+"classname" "weapon_hagar"
+}
+// entity 8
+{
+"angle" "360"
+"origin" "-5056 -928 32"
+"classname" "info_player_deathmatch"
+}
+// entity 9
+{
+"classname" "info_player_deathmatch"
+"origin" "-4704 976 32"
+"angle" "360"
+}
+// entity 10
+{
+"angle" "360"
+"origin" "-4144 -80 32"
+"classname" "info_player_deathmatch"
+}
+// entity 11
+{
+"angle" "360"
+"origin" "-3536 784 32"
+"classname" "info_player_deathmatch"
+}
+// entity 12
+{
+"classname" "info_player_deathmatch"
+"origin" "-2656 -992 32"
+"angle" "360"
+}
+// entity 13
+{
+"angle" "360"
+"origin" "-2240 1040 32"
+"classname" "info_player_deathmatch"
+}
+// entity 14
+{
+"classname" "item_armor25"
+"origin" "1024 192 16"
+}
+// entity 15
+{
+"origin" "1024 -192 16"
+"classname" "item_armor25"
+}
+// entity 16
+{
+"origin" "-192 -128 32"
+"classname" "weapon_crylink"
+}
+// entity 17
+{
+"origin" "-112 -272 32"
+"classname" "weapon_grenadelauncher"
+}
+// entity 18
+{
+"origin" "-144 -416 32"
+"classname" "weapon_machinegun"
+}
+// entity 19
+{
+"classname" "info_player_deathmatch"
+"origin" "-3824 -1328 32"
+"angle" "360"
+}
+// entity 20
+{
+"origin" "1152 192 16"
+"classname" "item_armor25"
+}
+// entity 21
+{
+"classname" "item_armor25"
+"origin" "1024 320 16"
+}
+// entity 22
+{
+"origin" "1152 320 16"
+"classname" "item_armor25"
+}
+// entity 23
+{
+"origin" "1024 -320 16"
+"classname" "item_armor25"
+}
+// entity 24
+{
+"classname" "item_armor25"
+"origin" "1152 -320 16"
+}
+// entity 25
+{
+"classname" "item_armor25"
+"origin" "1152 -192 16"
+}
+// entity 26
+{
+"classname" "func_group"
+// brush 0
+{
+( -4384 832 64 ) ( -4384 1152 64 ) ( -4384 1152 0 ) dsi/cretebase -160 0 0 0.500000 0.500000 134217728 0 0
+( -4448 832 64 ) ( -4384 832 64 ) ( -4384 832 0 ) dsi/cretebase -352 0 0 0.500000 0.500000 134217728 0 0
+( -4448 1152 64 ) ( -4448 832 64 ) ( -4448 832 0 ) dsi/cretebase -160 0 0 0.500000 0.500000 134217728 0 0
+( -4384 1152 64 ) ( -4448 1152 64 ) ( -4448 1152 0 ) dsi/cretebase -352 0 0 0.500000 0.500000 134217728 0 0
+( -4384 1152 64 ) ( -4384 832 64 ) ( -4448 832 64 ) dsi/cretebase4 -352 160 0 0.500000 0.500000 134217728 0 0
+( -4448 832 0 ) ( -4384 832 0 ) ( -4384 1152 0 ) dsi/cretebase -352 160 0 0.500000 0.500000 134217728 0 0
+}
+// brush 1
+{
+( -4464 1264 0 ) ( -4448 1280 0 ) ( -4464 1264 48 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4448 704 0 ) ( -4464 720 0 ) ( -4448 704 48 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4512 832 0 ) ( -4448 832 0 ) ( -4448 1152 0 ) dsi/cretebase -288 224 0 0.500000 0.500000 134217728 0 0
+( -4448 1152 48 ) ( -4448 832 48 ) ( -4512 832 48 ) dsi/cretebase4 -352 160 0 0.500000 0.500000 134217728 0 0
+( -4512 1152 48 ) ( -4512 832 48 ) ( -4512 832 0 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4448 832 48 ) ( -4448 1152 48 ) ( -4448 1152 0 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+}
+// brush 2
+{
+( -4464 1264 0 ) ( -4448 1280 0 ) ( -4464 1264 32 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4448 704 0 ) ( -4464 720 0 ) ( -4448 704 32 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4512 832 48 ) ( -4512 1152 48 ) ( -4512 1152 0 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4576 1152 48 ) ( -4576 832 48 ) ( -4576 832 0 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4512 1152 32 ) ( -4512 832 32 ) ( -4576 832 32 ) dsi/cretebase4 -352 160 0 0.500000 0.500000 134217728 0 0
+( -4576 832 0 ) ( -4512 832 0 ) ( -4512 1152 0 ) dsi/cretebase -288 224 0 0.500000 0.500000 134217728 0 0
+}
+// brush 3
+{
+( -4464 1264 0 ) ( -4448 1280 0 ) ( -4464 1264 16 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4448 704 0 ) ( -4464 720 0 ) ( -4448 704 16 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4640 832 0 ) ( -4576 832 0 ) ( -4576 1152 0 ) dsi/cretebase -288 224 0 0.500000 0.500000 134217728 0 0
+( -4608 1152 16 ) ( -4608 832 16 ) ( -4672 832 16 ) dsi/cretebase4 -352 160 0 0.500000 0.500000 134217728 0 0
+( -4640 1152 48 ) ( -4640 832 48 ) ( -4640 832 0 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4576 832 48 ) ( -4576 1152 48 ) ( -4576 1152 0 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+}
+// brush 4
+{
+( -4496 1088 64 ) ( -4480 1088 64 ) ( -4496 1152 64 ) dsi/cretebase -288 224 0 0.500000 0.500000 134217728 0 0
+( -4384 1088 64 ) ( -4448 1152 64 ) ( -4384 1152 128 ) dsi/cretebase -288 224 0 0.500000 0.500000 134217728 0 0
+( -4448 1152 64 ) ( -4448 1152 0 ) ( -4384 1152 64 ) dsi/cretebase -288 64 0 0.500000 0.500000 134217728 0 0
+( -4384 1088 0 ) ( -4384 1088 64 ) ( -4384 1152 128 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+}
+// brush 5
+{
+( -4496 832 64 ) ( -4480 832 64 ) ( -4496 896 64 ) dsi/cretebase -288 224 0 0.500000 0.500000 134217728 0 0
+( -4448 832 64 ) ( -4384 896 64 ) ( -4384 832 128 ) dsi/cretebase -288 224 0 0.500000 0.500000 134217728 0 0
+( -4448 832 0 ) ( -4448 832 64 ) ( -4384 832 128 ) dsi/cretebase -288 64 0 0.500000 0.500000 134217728 0 0
+( -4384 896 64 ) ( -4384 896 0 ) ( -4384 832 64 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+}
+// brush 6
+{
+( -4352 992 240 ) ( -4320 992 240 ) ( -4320 1152 240 ) common/caulk -96 32 0 0.500000 0.500000 0 0 0
+( -4320 992 240 ) ( -4384 992 240 ) ( -4448 992 384 ) common/caulk -96 128 0 0.500000 0.500000 0 0 0
+( -4448 1120 384 ) ( -4256 1120 384 ) ( -4256 832 384 ) dsi/cretebase -96 288 0 0.500000 0.500000 0 0 0
+( -4384 1152 192 ) ( -4320 1152 192 ) ( -4256 1152 384 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -4384 832 192 ) ( -4384 1152 192 ) ( -4448 1152 384 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -4320 1152 192 ) ( -4320 832 192 ) ( -4256 832 384 ) dsi/cretebase4 -160 0 0 0.500000 0.500000 0 0 0
+}
+// brush 7
+{
+( -4352 832 240 ) ( -4320 832 240 ) ( -4320 992 240 ) common/caulk -96 32 0 0.500000 0.500000 0 0 0
+( -4384 992 240 ) ( -4320 992 240 ) ( -4256 992 384 ) common/caulk -96 128 0 0.500000 0.500000 0 0 0
+( -4448 1120 384 ) ( -4256 1120 384 ) ( -4256 832 384 ) dsi/cretebase -96 288 0 0.500000 0.500000 0 0 0
+( -4384 832 192 ) ( -4384 1152 192 ) ( -4448 1152 384 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -4320 832 192 ) ( -4384 832 192 ) ( -4448 832 384 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -4320 1152 192 ) ( -4320 832 192 ) ( -4256 832 384 ) dsi/cretebase4 -160 0 0 0.500000 0.500000 0 0 0
+}
+// brush 8
+{
+( -4320 992 240 ) ( -4352 992 240 ) ( -4320 1152 240 ) common/caulk -96 32 0 0.500000 0.500000 134217728 0 0
+( -4384 992 240 ) ( -4320 992 240 ) ( -4320 1152 192 ) dsi/cretebase4 -352 160 0 0.500000 0.500000 134217728 0 0
+( -4384 1152 192 ) ( -4320 1152 192 ) ( -4256 1152 384 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4384 832 192 ) ( -4384 1152 192 ) ( -4448 1152 384 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4320 1152 192 ) ( -4320 832 192 ) ( -4256 832 384 ) dsi/cretebase4 -160 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 9
+{
+( -4320 832 240 ) ( -4352 832 240 ) ( -4320 992 240 ) common/caulk -96 32 0 0.500000 0.500000 134217728 0 0
+( -4320 992 240 ) ( -4384 992 240 ) ( -4384 832 192 ) dsi/cretebase4 -352 160 0 0.500000 0.500000 134217728 0 0
+( -4384 832 192 ) ( -4384 1152 192 ) ( -4448 1152 384 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4320 832 192 ) ( -4384 832 192 ) ( -4448 832 384 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4320 1152 192 ) ( -4320 832 192 ) ( -4256 832 384 ) dsi/cretebase4 -160 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 10
+{
+( -4320 1344 0 ) ( -4256 1280 0 ) ( -4320 1344 384 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+( -4448 1280 0 ) ( -4384 1344 0 ) ( -4448 1280 384 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+( -4384 1152 0 ) ( -4320 1152 0 ) ( -4320 1216 0 ) dsi/cretebase -352 160 0 0.500000 0.500000 0 0 0
+( -4352 1216 384 ) ( -4352 1152 384 ) ( -4416 1152 384 ) dsi/cretebase -352 160 0 0.500000 0.500000 0 0 0
+( -4320 1344 128 ) ( -4384 1344 128 ) ( -4384 1344 0 ) dsi/cretebase4 -96 0 0 0.500000 0.500000 0 0 0
+( -4448 1216 128 ) ( -4448 1152 128 ) ( -4448 1152 0 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+( -4384 1152 128 ) ( -4320 1152 128 ) ( -4320 1152 0 ) dsi/cretebase -352 0 0 0.500000 0.500000 0 0 0
+( -4256 1152 128 ) ( -4256 1216 128 ) ( -4256 1216 0 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+}
+// brush 11
+{
+( -4384 640 416 ) ( -4384 640 432 ) ( -4384 1344 432 ) common/caulk -160 0 0 0.500000 0.500000 0 0 0
+( -4256 704 448 ) ( -4256 672 416 ) ( -4448 704 448 ) dsi/cretebase -352 160 0 0.500000 0.500000 0 0 0
+( -4256 1344 384 ) ( -4256 1312 416 ) ( -4448 1344 384 ) dsi/cretebase -352 160 0 0.500000 0.500000 0 0 0
+( -4448 1280 384 ) ( -4384 1344 384 ) ( -4448 1280 448 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+( -4384 640 384 ) ( -4448 704 384 ) ( -4384 640 448 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+( -4256 640 384 ) ( -4256 1344 384 ) ( -4448 1344 384 ) dsi/cretebase -352 160 0 0.500000 0.500000 0 0 0
+( -4384 1344 448 ) ( -4384 640 448 ) ( -4448 640 384 ) dsi/cretebase -352 160 0 0.500000 0.500000 0 0 0
+}
+// brush 12
+{
+( -4320 640 400 ) ( -4320 640 432 ) ( -4320 1344 432 ) common/caulk -160 0 0 0.500000 0.500000 0 0 0
+( -4384 640 432 ) ( -4384 640 416 ) ( -4384 1344 432 ) common/caulk -160 0 0 0.500000 0.500000 0 0 0
+( -4256 704 448 ) ( -4256 672 416 ) ( -4448 704 448 ) dsi/cretebase4 -96 160 0 0.500000 0.500000 0 0 0
+( -4256 1344 384 ) ( -4256 1312 416 ) ( -4448 1344 384 ) dsi/cretebase4 -96 160 0 0.500000 0.500000 0 0 0
+( -4256 640 384 ) ( -4256 1344 384 ) ( -4448 1344 384 ) dsi/cretebase -352 160 0 0.500000 0.500000 0 0 0
+( -4320 1344 448 ) ( -4320 640 448 ) ( -4384 640 448 ) dsi/cretebase4 -96 160 0 0.500000 0.500000 0 0 0
+}
+// brush 13
+{
+( -4320 640 432 ) ( -4320 640 400 ) ( -4320 1344 432 ) common/caulk -160 0 0 0.500000 0.500000 0 0 0
+( -4256 704 448 ) ( -4256 672 416 ) ( -4448 704 448 ) dsi/cretebase -352 160 0 0.500000 0.500000 0 0 0
+( -4256 1344 384 ) ( -4256 1312 416 ) ( -4448 1344 384 ) dsi/cretebase -352 160 0 0.500000 0.500000 0 0 0
+( -4320 1344 384 ) ( -4256 1280 384 ) ( -4320 1344 448 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+( -4256 704 384 ) ( -4320 640 384 ) ( -4256 704 448 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+( -4256 640 384 ) ( -4256 1344 384 ) ( -4448 1344 384 ) dsi/cretebase -352 160 0 0.500000 0.500000 0 0 0
+( -4320 640 448 ) ( -4320 1344 448 ) ( -4256 1344 384 ) dsi/cretebase 0 0 0 0.500000 0.500000 0 0 0
+}
+// brush 14
+{
+( -4384 640 0 ) ( -4448 704 0 ) ( -4384 640 384 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+( -4256 704 0 ) ( -4320 640 0 ) ( -4256 704 384 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+( -4256 768 128 ) ( -4256 832 128 ) ( -4256 832 0 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+( -4384 640 128 ) ( -4320 640 128 ) ( -4320 640 0 ) dsi/cretebase4 -96 0 0 0.500000 0.500000 0 0 0
+( -4448 832 128 ) ( -4448 768 128 ) ( -4448 768 0 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+( -4320 832 128 ) ( -4384 832 128 ) ( -4384 832 0 ) dsi/cretebase -352 0 0 0.500000 0.500000 0 0 0
+( -4352 832 384 ) ( -4352 768 384 ) ( -4416 768 384 ) dsi/cretebase -352 160 0 0.500000 0.500000 0 0 0
+( -4384 768 0 ) ( -4320 768 0 ) ( -4320 832 0 ) dsi/cretebase -352 160 0 0.500000 0.500000 0 0 0
+}
+// brush 15
+{
+( -4192 832 0 ) ( -4192 1152 0 ) ( -4384 1152 0 ) dsi/cretebase -96 288 0 0.500000 0.500000 0 0 0
+( -4320 1120 128 ) ( -4320 832 128 ) ( -4448 832 128 ) dsi/cretebase3 -352 160 0 0.500000 0.500000 0 0 0
+( -4320 1152 128 ) ( -4384 1152 128 ) ( -4416 1152 0 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -4384 832 0 ) ( -4384 1152 0 ) ( -4384 1152 128 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -4384 832 128 ) ( -4320 832 128 ) ( -4288 832 0 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -4192 1152 0 ) ( -4192 832 0 ) ( -4320 832 128 ) dsi/cretebase3 -352 160 0 0.500000 0.500000 0 0 0
+}
+}
+// entity 27
+{
+"classname" "func_group"
+// brush 0
+{
+( -4736 -1088 64 ) ( -4736 -768 64 ) ( -4736 -768 0 ) dsi/cretebase 96 0 0 0.500000 0.500000 134217728 0 0
+( -4800 -1088 64 ) ( -4736 -1088 64 ) ( -4736 -1088 0 ) dsi/cretebase -160 0 0 0.500000 0.500000 134217728 0 0
+( -4800 -768 64 ) ( -4800 -1088 64 ) ( -4800 -1088 0 ) dsi/cretebase 96 0 0 0.500000 0.500000 134217728 0 0
+( -4736 -768 64 ) ( -4800 -768 64 ) ( -4800 -768 0 ) dsi/cretebase -160 0 0 0.500000 0.500000 134217728 0 0
+( -4736 -768 64 ) ( -4736 -1088 64 ) ( -4800 -1088 64 ) dsi/cretebase4 -160 -96 0 0.500000 0.500000 134217728 0 0
+( -4800 -1088 0 ) ( -4736 -1088 0 ) ( -4736 -768 0 ) dsi/cretebase -160 -96 0 0.500000 0.500000 134217728 0 0
+}
+// brush 1
+{
+( -4816 -656 0 ) ( -4800 -640 0 ) ( -4816 -656 48 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+( -4800 -1216 0 ) ( -4816 -1200 0 ) ( -4800 -1216 48 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+( -4864 -1088 0 ) ( -4800 -1088 0 ) ( -4800 -768 0 ) dsi/cretebase -96 -32 0 0.500000 0.500000 134217728 0 0
+( -4800 -768 48 ) ( -4800 -1088 48 ) ( -4864 -1088 48 ) dsi/cretebase4 -160 -96 0 0.500000 0.500000 134217728 0 0
+( -4864 -768 48 ) ( -4864 -1088 48 ) ( -4864 -1088 0 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+( -4800 -1088 48 ) ( -4800 -768 48 ) ( -4800 -768 0 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+}
+// brush 2
+{
+( -4816 -656 0 ) ( -4800 -640 0 ) ( -4816 -656 32 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+( -4800 -1216 0 ) ( -4816 -1200 0 ) ( -4800 -1216 32 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+( -4864 -1088 48 ) ( -4864 -768 48 ) ( -4864 -768 0 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+( -4928 -768 48 ) ( -4928 -1088 48 ) ( -4928 -1088 0 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+( -4864 -768 32 ) ( -4864 -1088 32 ) ( -4928 -1088 32 ) dsi/cretebase4 -160 -96 0 0.500000 0.500000 134217728 0 0
+( -4928 -1088 0 ) ( -4864 -1088 0 ) ( -4864 -768 0 ) dsi/cretebase -96 -32 0 0.500000 0.500000 134217728 0 0
+}
+// brush 3
+{
+( -4816 -656 0 ) ( -4800 -640 0 ) ( -4816 -656 16 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+( -4800 -1216 0 ) ( -4816 -1200 0 ) ( -4800 -1216 16 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+( -4992 -1088 0 ) ( -4928 -1088 0 ) ( -4928 -768 0 ) dsi/cretebase -96 -32 0 0.500000 0.500000 134217728 0 0
+( -4960 -768 16 ) ( -4960 -1088 16 ) ( -5024 -1088 16 ) dsi/cretebase4 -160 -96 0 0.500000 0.500000 134217728 0 0
+( -4992 -768 48 ) ( -4992 -1088 48 ) ( -4992 -1088 0 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+( -4928 -1088 48 ) ( -4928 -768 48 ) ( -4928 -768 0 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+}
+// brush 4
+{
+( -4848 -832 64 ) ( -4832 -832 64 ) ( -4848 -768 64 ) dsi/cretebase -96 -32 0 0.500000 0.500000 134217728 0 0
+( -4736 -832 64 ) ( -4800 -768 64 ) ( -4736 -768 128 ) dsi/cretebase -96 -32 0 0.500000 0.500000 134217728 0 0
+( -4800 -768 64 ) ( -4800 -768 0 ) ( -4736 -768 64 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4736 -832 0 ) ( -4736 -832 64 ) ( -4736 -768 128 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+}
+// brush 5
+{
+( -4848 -1088 64 ) ( -4832 -1088 64 ) ( -4848 -1024 64 ) dsi/cretebase -96 -32 0 0.500000 0.500000 134217728 0 0
+( -4800 -1088 64 ) ( -4736 -1024 64 ) ( -4736 -1088 128 ) dsi/cretebase -96 -32 0 0.500000 0.500000 134217728 0 0
+( -4800 -1088 0 ) ( -4800 -1088 64 ) ( -4736 -1088 128 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -4736 -1024 64 ) ( -4736 -1024 0 ) ( -4736 -1088 64 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+}
+// brush 6
+{
+( -4704 -928 240 ) ( -4672 -928 240 ) ( -4672 -768 240 ) common/caulk -160 -224 0 0.500000 0.500000 0 0 0
+( -4672 -928 240 ) ( -4736 -928 240 ) ( -4800 -928 384 ) common/caulk -160 128 0 0.500000 0.500000 0 0 0
+( -4800 -800 384 ) ( -4608 -800 384 ) ( -4608 -1088 384 ) dsi/cretebase -416 -480 0 0.500000 0.500000 0 0 0
+( -4736 -768 192 ) ( -4672 -768 192 ) ( -4608 -768 384 ) dsi/cretebase -416 64 0 0.500000 0.500000 0 0 0
+( -4736 -1088 192 ) ( -4736 -768 192 ) ( -4800 -768 384 ) dsi/cretebase 160 64 0 0.500000 0.500000 0 0 0
+( -4672 -768 192 ) ( -4672 -1088 192 ) ( -4608 -1088 384 ) dsi/cretebase4 96 0 0 0.500000 0.500000 0 0 0
+}
+// brush 7
+{
+( -4704 -1088 240 ) ( -4672 -1088 240 ) ( -4672 -928 240 ) common/caulk -160 -224 0 0.500000 0.500000 0 0 0
+( -4736 -928 240 ) ( -4672 -928 240 ) ( -4608 -928 384 ) common/caulk -160 128 0 0.500000 0.500000 0 0 0
+( -4800 -800 384 ) ( -4608 -800 384 ) ( -4608 -1088 384 ) dsi/cretebase -416 -480 0 0.500000 0.500000 0 0 0
+( -4736 -1088 192 ) ( -4736 -768 192 ) ( -4800 -768 384 ) dsi/cretebase 160 64 0 0.500000 0.500000 0 0 0
+( -4672 -1088 192 ) ( -4736 -1088 192 ) ( -4800 -1088 384 ) dsi/cretebase -416 64 0 0.500000 0.500000 0 0 0
+( -4672 -768 192 ) ( -4672 -1088 192 ) ( -4608 -1088 384 ) dsi/cretebase4 96 0 0 0.500000 0.500000 0 0 0
+}
+// brush 8
+{
+( -4672 -928 240 ) ( -4704 -928 240 ) ( -4672 -768 240 ) common/caulk -160 -224 0 0.500000 0.500000 134217728 0 0
+( -4736 -928 240 ) ( -4672 -928 240 ) ( -4672 -768 192 ) dsi/cretebase4 -160 -96 0 0.500000 0.500000 134217728 0 0
+( -4736 -768 192 ) ( -4672 -768 192 ) ( -4608 -768 384 ) dsi/cretebase -416 64 0 0.500000 0.500000 134217728 0 0
+( -4736 -1088 192 ) ( -4736 -768 192 ) ( -4800 -768 384 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+( -4672 -768 192 ) ( -4672 -1088 192 ) ( -4608 -1088 384 ) dsi/cretebase4 96 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 9
+{
+( -4672 -1088 240 ) ( -4704 -1088 240 ) ( -4672 -928 240 ) common/caulk -160 -224 0 0.500000 0.500000 134217728 0 0
+( -4672 -928 240 ) ( -4736 -928 240 ) ( -4736 -1088 192 ) dsi/cretebase4 -160 -96 0 0.500000 0.500000 134217728 0 0
+( -4736 -1088 192 ) ( -4736 -768 192 ) ( -4800 -768 384 ) dsi/cretebase 160 64 0 0.500000 0.500000 134217728 0 0
+( -4672 -1088 192 ) ( -4736 -1088 192 ) ( -4800 -1088 384 ) dsi/cretebase -416 64 0 0.500000 0.500000 134217728 0 0
+( -4672 -768 192 ) ( -4672 -1088 192 ) ( -4608 -1088 384 ) dsi/cretebase4 96 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 10
+{
+( -4672 -576 0 ) ( -4608 -640 0 ) ( -4672 -576 384 ) dsi/cretebase 96 0 0 0.500000 0.500000 0 0 0
+( -4800 -640 0 ) ( -4736 -576 0 ) ( -4800 -640 384 ) dsi/cretebase 96 0 0 0.500000 0.500000 0 0 0
+( -4736 -768 0 ) ( -4672 -768 0 ) ( -4672 -704 0 ) dsi/cretebase -160 -96 0 0.500000 0.500000 0 0 0
+( -4704 -704 384 ) ( -4704 -768 384 ) ( -4768 -768 384 ) dsi/cretebase -160 -96 0 0.500000 0.500000 0 0 0
+( -4672 -576 128 ) ( -4736 -576 128 ) ( -4736 -576 0 ) dsi/cretebase4 -32 0 0 0.500000 0.500000 0 0 0
+( -4800 -704 128 ) ( -4800 -768 128 ) ( -4800 -768 0 ) dsi/cretebase 96 0 0 0.500000 0.500000 0 0 0
+( -4736 -768 128 ) ( -4672 -768 128 ) ( -4672 -768 0 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+( -4608 -768 128 ) ( -4608 -704 128 ) ( -4608 -704 0 ) dsi/cretebase 96 0 0 0.500000 0.500000 0 0 0
+}
+// brush 11
+{
+( -4736 -1280 416 ) ( -4736 -1280 432 ) ( -4736 -576 432 ) common/caulk 96 0 0 0.500000 0.500000 0 0 0
+( -4608 -1216 448 ) ( -4608 -1248 416 ) ( -4800 -1216 448 ) dsi/cretebase -160 -96 0 0.500000 0.500000 0 0 0
+( -4608 -576 384 ) ( -4608 -608 416 ) ( -4800 -576 384 ) dsi/cretebase -160 -96 0 0.500000 0.500000 0 0 0
+( -4800 -640 384 ) ( -4736 -576 384 ) ( -4800 -640 448 ) dsi/cretebase 96 0 0 0.500000 0.500000 0 0 0
+( -4736 -1280 384 ) ( -4800 -1216 384 ) ( -4736 -1280 448 ) dsi/cretebase 96 0 0 0.500000 0.500000 0 0 0
+( -4608 -1280 384 ) ( -4608 -576 384 ) ( -4800 -576 384 ) dsi/cretebase -160 -96 0 0.500000 0.500000 0 0 0
+( -4736 -576 448 ) ( -4736 -1280 448 ) ( -4800 -1280 384 ) dsi/cretebase -160 -96 0 0.500000 0.500000 0 0 0
+}
+// brush 12
+{
+( -4672 -1280 400 ) ( -4672 -1280 432 ) ( -4672 -576 432 ) common/caulk 96 0 0 0.500000 0.500000 0 0 0
+( -4736 -1280 432 ) ( -4736 -1280 416 ) ( -4736 -576 432 ) common/caulk 96 0 0 0.500000 0.500000 0 0 0
+( -4608 -1216 448 ) ( -4608 -1248 416 ) ( -4800 -1216 448 ) dsi/cretebase4 -32 -96 0 0.500000 0.500000 0 0 0
+( -4608 -576 384 ) ( -4608 -608 416 ) ( -4800 -576 384 ) dsi/cretebase4 -32 -96 0 0.500000 0.500000 0 0 0
+( -4608 -1280 384 ) ( -4608 -576 384 ) ( -4800 -576 384 ) dsi/cretebase -160 -96 0 0.500000 0.500000 0 0 0
+( -4672 -576 448 ) ( -4672 -1280 448 ) ( -4736 -1280 448 ) dsi/cretebase4 -32 -96 0 0.500000 0.500000 0 0 0
+}
+// brush 13
+{
+( -4672 -1280 432 ) ( -4672 -1280 400 ) ( -4672 -576 432 ) common/caulk 96 0 0 0.500000 0.500000 0 0 0
+( -4608 -1216 448 ) ( -4608 -1248 416 ) ( -4800 -1216 448 ) dsi/cretebase -160 -96 0 0.500000 0.500000 0 0 0
+( -4608 -576 384 ) ( -4608 -608 416 ) ( -4800 -576 384 ) dsi/cretebase -160 -96 0 0.500000 0.500000 0 0 0
+( -4672 -576 384 ) ( -4608 -640 384 ) ( -4672 -576 448 ) dsi/cretebase 96 0 0 0.500000 0.500000 0 0 0
+( -4608 -1216 384 ) ( -4672 -1280 384 ) ( -4608 -1216 448 ) dsi/cretebase 96 0 0 0.500000 0.500000 0 0 0
+( -4608 -1280 384 ) ( -4608 -576 384 ) ( -4800 -576 384 ) dsi/cretebase -160 -96 0 0.500000 0.500000 0 0 0
+( -4672 -1280 448 ) ( -4672 -576 448 ) ( -4608 -576 384 ) dsi/cretebase -160 -96 0 0.500000 0.500000 0 0 0
+}
+// brush 14
+{
+( -4736 -1280 0 ) ( -4800 -1216 0 ) ( -4736 -1280 384 ) dsi/cretebase 96 0 0 0.500000 0.500000 0 0 0
+( -4608 -1216 0 ) ( -4672 -1280 0 ) ( -4608 -1216 384 ) dsi/cretebase 96 0 0 0.500000 0.500000 0 0 0
+( -4608 -1152 128 ) ( -4608 -1088 128 ) ( -4608 -1088 0 ) dsi/cretebase 96 0 0 0.500000 0.500000 0 0 0
+( -4736 -1280 128 ) ( -4672 -1280 128 ) ( -4672 -1280 0 ) dsi/cretebase4 -32 0 0 0.500000 0.500000 0 0 0
+( -4800 -1088 128 ) ( -4800 -1152 128 ) ( -4800 -1152 0 ) dsi/cretebase 96 0 0 0.500000 0.500000 0 0 0
+( -4672 -1088 128 ) ( -4736 -1088 128 ) ( -4736 -1088 0 ) dsi/cretebase -160 0 0 0.500000 0.500000 0 0 0
+( -4704 -1088 384 ) ( -4704 -1152 384 ) ( -4768 -1152 384 ) dsi/cretebase -160 -96 0 0.500000 0.500000 0 0 0
+( -4736 -1152 0 ) ( -4672 -1152 0 ) ( -4672 -1088 0 ) dsi/cretebase -160 -96 0 0.500000 0.500000 0 0 0
+}
+// brush 15
+{
+( -4544 -1088 0 ) ( -4544 -768 0 ) ( -4736 -768 0 ) dsi/cretebase -416 -480 0 0.500000 0.500000 0 0 0
+( -4672 -800 128 ) ( -4672 -1088 128 ) ( -4800 -1088 128 ) dsi/cretebase3 -160 -96 0 0.500000 0.500000 0 0 0
+( -4672 -768 128 ) ( -4736 -768 128 ) ( -4768 -768 0 ) dsi/cretebase -416 64 0 0.500000 0.500000 0 0 0
+( -4736 -1088 0 ) ( -4736 -768 0 ) ( -4736 -768 128 ) dsi/cretebase 160 64 0 0.500000 0.500000 0 0 0
+( -4736 -1088 128 ) ( -4672 -1088 128 ) ( -4640 -1088 0 ) dsi/cretebase -416 64 0 0.500000 0.500000 0 0 0
+( -4544 -768 0 ) ( -4544 -1088 0 ) ( -4672 -1088 128 ) dsi/cretebase3 -160 -96 0 0.500000 0.500000 0 0 0
+}
+}
+// entity 28
+{
+"classname" "func_group"
+// brush 0
+{
+( -3712 -124 96 ) ( -3712 -32 64 ) ( -3648 -64 96 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3648 -64 96 ) ( -3712 -32 64 ) ( -3712 -32 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3616 -160 0 ) ( -3872 -64 0 ) ( -3872 -64 340 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3712 -32 0 ) ( -3712 -32 64 ) ( -3712 -124 96 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3648 -384 0 ) ( -3648 -384 384 ) ( -3648 192 384 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3648 192 0 ) ( -3712 192 0 ) ( -3712 -320 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 1
+{
+( -3712 -124 173 ) ( -3648 -148 143 ) ( -3648 -256 183 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3648 -148 0 ) ( -3648 -148 143 ) ( -3712 -124 173 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3680 -256 0 ) ( -3744 -256 0 ) ( -3744 -256 384 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3712 -124 0 ) ( -3712 -124 173 ) ( -3712 -256 183 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3648 -256 183 ) ( -3648 -148 143 ) ( -3648 -148 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3648 192 0 ) ( -3712 192 0 ) ( -3712 -320 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 2
+{
+( -3621 352 0 ) ( -3621 288 0 ) ( -3515 352 0 ) common/caulk 0 0 0 0.500000 0.500000 134217728 0 0
+( -3515 -210 37 ) ( -3577 -184 -4 ) ( -3591 -320 37 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3558 -180 165 ) ( -3614 -156 135 ) ( -3569 -188 2 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3614 -156 135 ) ( -3558 -180 165 ) ( -3564 -288 178 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3619 -288 143 ) ( -3565 -288 177 ) ( -3537 -320 71 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3577 -184 -4 ) ( -3614 -156 135 ) ( -3621 -286 150 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3558 -180 165 ) ( -3515 -210 37 ) ( -3529 -322 70 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 3
+{
+( -3360 44 0 ) ( -3456 44 0 ) ( -3360 -256 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3496 128 -51 ) ( -3465 -64 -43 ) ( -3511 128 11 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3620 -224 -50 ) ( -3309 416 28 ) ( -3635 -224 12 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3162 -256 97 ) ( -3146 -256 35 ) ( -3519 -256 -58 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3170 -384 128 ) ( -3542 -384 35 ) ( -3542 192 35 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3527 -320 -27 ) ( -3527 192 -27 ) ( -3542 192 35 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 4
+{
+( -3520 -77 0 ) ( -3648 -77 0 ) ( -3520 -282 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3680 -128 0 ) ( -3904 -288 96 ) ( -3904 -256 96 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3918 -256 -40 ) ( -3925 -224 23 ) ( -3903 -256 122 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3529 -136 68 ) ( -3864 -309 141 ) ( -4140 105 -148 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3648 -96 -32 ) ( -3936 -224 -32 ) ( -3904 -288 96 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3936 -224 -32 ) ( -3648 -96 -32 ) ( -3776 -128 32 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 5
+{
+( -3902 -64 0 ) ( -3902 -160 0 ) ( -3595 -64 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -4092 -389 -42 ) ( -3676 -367 -52 ) ( -4091 -376 21 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3687 -397 -45 ) ( -3581 -666 10 ) ( -3580 -653 72 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3775 -174 -124 ) ( -3774 -161 -61 ) ( -3902 -528 -48 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3835 -147 -96 ) ( -3962 -500 -20 ) ( -3479 -668 9 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3448 -665 73 ) ( -4022 -466 39 ) ( -3895 -112 -37 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -4023 -480 -24 ) ( -4022 -466 39 ) ( -3478 -655 71 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 6
+{
+( -4448 -64 0 ) ( -4448 -192 0 ) ( -4248 -64 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -4192 -467 36 ) ( -4320 -339 49 ) ( -4192 -460 -28 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -4352 -530 29 ) ( -4160 -308 53 ) ( -4352 -524 -34 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -4448 -499 33 ) ( -4448 -489 -63 ) ( -4448 -107 -23 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3936 -117 73 ) ( -3936 -499 33 ) ( -4448 -499 33 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3872 -499 33 ) ( -3872 -492 -31 ) ( -4448 -492 -31 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 7
+{
+( -4096 -320 224 ) ( -3968 -320 352 ) ( -3968 -384 352 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -4128 -320 416 ) ( -3936 -320 192 ) ( -4128 -384 416 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3776 -288 0 ) ( -3776 -352 0 ) ( -3776 -288 384 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -4224 -320 384 ) ( -4224 -416 384 ) ( -4224 -416 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3712 -320 0 ) ( -3712 -320 384 ) ( -4224 -320 384 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -4256 -384 384 ) ( -3648 -384 384 ) ( -3648 -384 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3616 -320 0 ) ( -4224 -320 0 ) ( -4224 -416 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 8
+{
+( -3644 352 0 ) ( -3644 288 0 ) ( -3423 352 0 ) common/caulk 0 0 0 0.500000 0.500000 134217728 0 0
+( -3473 -320 137 ) ( -3354 -320 -262 ) ( -3354 -384 -262 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3441 -320 134 ) ( -3198 -320 301 ) ( -3198 -384 301 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3655 -320 -69 ) ( -3273 -320 -109 ) ( -3220 -320 400 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3216 -384 432 ) ( -3280 -384 -173 ) ( -3662 -384 -133 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 9
+{
+( -4224 240 0 ) ( -4224 192 0 ) ( -4016 240 0 ) dsi/cretebase4 0 -32 0 0.500000 0.500000 134217728 0 0
+( -4288 189 55 ) ( -4176 211 132 ) ( -4288 127 73 ) dsi/cretebase4 0 -32 0 0.500000 0.500000 134217728 0 0
+( -4224 273 348 ) ( -4224 242 356 ) ( -4224 136 -13 ) dsi/cretebase4 0 -32 0 0.500000 0.500000 134217728 0 0
+( -4000 149 -83 ) ( -4000 202 102 ) ( -4224 220 163 ) dsi/cretebase4 0 -32 0 0.500000 0.500000 134217728 0 0
+( -4016 224 295 ) ( -4016 255 286 ) ( -4016 149 -83 ) dsi/cretebase4 0 -32 0 0.500000 0.500000 134217728 0 0
+( -4000 141 119 ) ( -4000 88 -65 ) ( -4224 105 -4 ) dsi/cretebase4 0 -32 0 0.500000 0.500000 134217728 0 0
+( -4000 202 102 ) ( -4000 141 119 ) ( -4224 158 181 ) dsi/cretebase4 0 -32 0 0.500000 0.500000 134217728 0 0
+}
+// brush 10
+{
+( -3808 -336 336 ) ( -3600 -336 256 ) ( -3808 -400 336 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3776 -368 0 ) ( -3776 -304 0 ) ( -3776 -304 384 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3712 -336 0 ) ( -3712 -336 384 ) ( -4224 -336 384 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3712 -320 384 ) ( -3712 -320 0 ) ( -3648 -384 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -4256 -384 384 ) ( -3648 -384 384 ) ( -3648 -384 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3616 -320 0 ) ( -4224 -320 0 ) ( -4224 -416 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 11
+{
+( -3808 -272 336 ) ( -3600 -272 256 ) ( -3808 -400 336 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3712 -336 384 ) ( -3712 -272 96 ) ( -3648 -336 384 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3648 192 0 ) ( -3712 192 0 ) ( -3712 -320 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3648 -384 384 ) ( -3648 -384 0 ) ( -3712 -320 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3648 -384 0 ) ( -3648 -384 384 ) ( -3648 192 384 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3712 192 384 ) ( -3712 -320 384 ) ( -3712 -320 0 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3744 -256 0 ) ( -3680 -256 0 ) ( -3744 -256 384 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+}
+// brush 12
+{
+( -3733 64 0 ) ( -3733 48 0 ) ( -3568 64 0 ) common/caulk 0 0 0 0.500000 0.500000 134217728 0 0
+( -3733 162 146 ) ( -3632 112 119 ) ( -3568 -112 58 ) dsi/cretebase2 0 0 0 0.500000 0.500000 134217728 0 0
+( -3632 112 -48 ) ( -3632 112 119 ) ( -3733 162 146 ) dsi/cretebase2 0 -96 0 0.500000 0.500000 134217728 0 0
+( -3568 -112 58 ) ( -3632 112 119 ) ( -3632 112 -48 ) dsi/cretebase2 0 -96 0 0.500000 0.500000 134217728 0 0
+( -3664 -112 304 ) ( -3600 -112 304 ) ( -3600 -112 -80 ) dsi/cretebase2 0 -96 0 0.500000 0.500000 134217728 0 0
+( -3733 162 -40 ) ( -3733 162 146 ) ( -3664 -112 29 ) dsi/cretebase2 0 -96 0 0.500000 0.500000 134217728 0 0
+}
+}
+// entity 29
+{
+"classname" "weapon_grenadelauncher"
+"origin" "-4432 992 96"
+}
+// entity 30
+{
+"classname" "item_rockets"
+"origin" "-4432 880 96"
+"angle" "135"
+}
+// entity 31
+{
+"angle" "225"
+"origin" "-4432 1104 96"
+"classname" "item_rockets"
+}
+// entity 32
+{
+"classname" "weapon_electro"
+"origin" "-4784 -928 96"
+}
+// entity 33
+{
+"classname" "item_cells"
+"origin" "-4784 -832 96"
+}
+// entity 34
+{
+"origin" "-4784 -1024 96"
+"classname" "item_cells"
+}
+// entity 35
+{
+"classname" "item_armor1"
+"origin" "-4040 -256 16"
+}
+// entity 36
+{
+"origin" "-3776 128 16"
+"classname" "item_armor1"
+}
+// entity 37
+{
+"classname" "item_armor1"
+"origin" "-3776 -64 16"
+}
+// entity 38
+{
+"origin" "-4160 -256 16"
+"classname" "item_armor1"
+}
+// entity 39
+{
+"classname" "item_health1"
+"origin" "-3968 -256 16"
+}
+// entity 40
+{
+"origin" "-4096 -256 16"
+"classname" "item_health1"
+}
+// entity 41
+{
+"classname" "item_health1"
+"origin" "-3776 64 16"
+}
+// entity 42
+{
+"origin" "-3776 0 16"
+"classname" "item_health1"
+}
+// entity 43
+{
+"classname" "weapon_rocketlauncher"
+"origin" "-3968 -64 16"
+}
+// entity 44
+{
+"classname" "weapon_nex"
+"origin" "-3256 784 608"
+}
+// entity 45
+{
+"classname" "item_cells"
+"origin" "-3256 848 608"
+}
+// entity 46
+{
+"origin" "-3256 720 608"
+"classname" "item_cells"
+}
+// entity 47
+{
+"classname" "func_ladder"
+// brush 0
+{
+( -3336 848 576 ) ( -3336 832 576 ) ( -3336 832 32 ) common/trigger 32 0 0 0.500000 0.500000 134217728 0 0
+( -3328 832 576 ) ( -3336 832 576 ) ( -3336 832 32 ) common/trigger 48 0 0 0.500000 0.500000 134217728 0 0
+( -3328 832 576 ) ( -3328 848 576 ) ( -3328 848 32 ) common/trigger 32 0 0 0.500000 0.500000 134217728 0 0
+( -3336 736 592 ) ( -3328 736 592 ) ( -3328 736 48 ) common/trigger 48 0 0 0.500000 0.500000 134217728 0 0
+( -3336 824 592 ) ( -3336 840 592 ) ( -3328 840 592 ) common/trigger 48 -32 0 0.500000 0.500000 134217728 0 0
+( -3328 848 32 ) ( -3336 848 32 ) ( -3336 832 32 ) common/trigger 48 -32 0 0.500000 0.500000 134217728 0 0
+}
+}
+// entity 48
+{
+"classname" "func_ladder"
+// brush 0
+{
+( -3640 -1203 576 ) ( -3634 -1218 576 ) ( -3634 -1218 32 ) common/trigger 0 0 0 0.500000 0.500000 134217728 0 0
+( -3627 -1214 576 ) ( -3634 -1218 576 ) ( -3634 -1218 32 ) common/trigger 48 0 0 0.500000 0.500000 134217728 0 0
+( -3627 -1214 576 ) ( -3633 -1200 576 ) ( -3633 -1200 32 ) common/trigger 0 0 0 0.500000 0.500000 134217728 0 0
+( -3595 -1305 592 ) ( -3587 -1302 592 ) ( -3587 -1302 48 ) common/trigger 48 0 0 0.500000 0.500000 134217728 0 0
+( -3631 -1225 592 ) ( -3637 -1210 592 ) ( -3630 -1207 592 ) common/trigger 48 0 0 0.500000 0.500000 134217728 0 0
+( -3633 -1200 32 ) ( -3640 -1203 32 ) ( -3634 -1218 32 ) common/trigger 48 0 0 0.500000 0.500000 134217728 0 0
+}
+}
+// entity 49
+{
+"classname" "weapon_hagar"
+"origin" "-1992 918 608"
+}
+// entity 50
+{
+"classname" "item_rockets"
+"origin" "-2042 879 608"
+}
+// entity 51
+{
+"origin" "-1941 958 608"
+"classname" "item_rockets"
+}
+// entity 52
+{
+"classname" "func_ladder"
+// brush 0
+{
+( -2027 1003 32 ) ( -2034 1007 32 ) ( -2043 994 32 ) common/trigger 48 -16 0 0.500000 0.500000 134217728 0 0
+( -2047 987 592 ) ( -2038 1001 592 ) ( -2032 996 592 ) common/trigger 48 -16 0 0.500000 0.500000 134217728 0 0
+( -2093 913 592 ) ( -2086 908 592 ) ( -2086 908 48 ) common/trigger 48 0 0 0.500000 0.500000 134217728 0 0
+( -2036 990 576 ) ( -2027 1003 576 ) ( -2027 1003 32 ) common/trigger 16 0 0 0.500000 0.500000 134217728 0 0
+( -2036 990 576 ) ( -2043 994 576 ) ( -2043 994 32 ) common/trigger 48 0 0 0.500000 0.500000 134217728 0 0
+( -2034 1007 576 ) ( -2043 994 576 ) ( -2043 994 32 ) common/trigger 16 0 0 0.500000 0.500000 134217728 0 0
+}
+}
+// entity 53
+{
+"classname" "weapon_machinegun"
+"origin" "-3528 -1344 608"
+}
+// entity 54
+{
+"origin" "-3536 -1304 608"
+"classname" "item_bullets"
+}
+// entity 55
+{
+"classname" "item_health25"
+"origin" "-3544 -1136 48"
+}
+// entity 56
+{
+"origin" "-3464 -1248 48"
+"classname" "item_health25"
+}
+// entity 57
+{
+"classname" "item_health25"
+"origin" "-3200 704 48"
+}
+// entity 58
+{
+"origin" "-3184 840 48"
+"classname" "item_health25"
+}
+// entity 59
+{
+"classname" "item_health25"
+"origin" "-1968 952 48"
+}
+// entity 60
+{
+"origin" "-2016 824 48"
+"classname" "item_health25"
+}
+// entity 61
+{
+"classname" "func_group"
+// brush 0
+{
+( -2319 -568 0 ) ( -2140 -833 0 ) ( -2246 -905 128 ) dsi/cretebase3 -288 144 0 0.500000 0.500000 0 0 0
+( -2300 -941 128 ) ( -2246 -905 128 ) ( -2220 -887 0 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -2300 -941 0 ) ( -2478 -676 0 ) ( -2478 -676 128 ) dsi/cretebase -16 64 0 0.500000 0.500000 0 0 0
+( -2425 -640 128 ) ( -2478 -676 128 ) ( -2505 -694 0 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -2407 -666 128 ) ( -2246 -905 128 ) ( -2352 -977 128 ) dsi/cretebase3 -288 144 0 0.500000 0.500000 0 0 0
+( -2140 -833 0 ) ( -2319 -568 0 ) ( -2478 -676 0 ) dsi/cretebase -32 272 0 0.500000 0.500000 0 0 0
+}
+// brush 1
+{
+( -2264 -994 0 ) ( -2210 -958 0 ) ( -2246 -905 0 ) dsi/cretebase -288 144 0 0.500000 0.500000 0 0 0
+( -2273 -923 384 ) ( -2237 -977 384 ) ( -2291 -1012 384 ) dsi/cretebase -288 144 0 0.500000 0.500000 0 0 0
+( -2246 -905 128 ) ( -2300 -941 128 ) ( -2300 -941 0 ) dsi/cretebase -352 0 0 0.500000 0.500000 0 0 0
+( -2352 -977 128 ) ( -2317 -1029 128 ) ( -2317 -1029 0 ) dsi/cretebase -80 0 0 0.500000 0.500000 0 0 0
+( -2192 -1100 128 ) ( -2139 -1064 128 ) ( -2139 -1064 0 ) dsi/cretebase4 -96 0 0 0.500000 0.500000 0 0 0
+( -2157 -923 128 ) ( -2193 -870 128 ) ( -2193 -870 0 ) dsi/cretebase -80 0 0 0.500000 0.500000 0 0 0
+( -2122 -976 0 ) ( -2139 -1064 0 ) ( -2122 -976 384 ) dsi/cretebase -80 0 0 0.500000 0.500000 0 0 0
+( -2192 -1100 0 ) ( -2281 -1083 0 ) ( -2192 -1100 384 ) dsi/cretebase -208 0 0 0.500000 0.500000 0 0 0
+}
+// brush 2
+{
+( -2139 -1064 448 ) ( -2533 -481 448 ) ( -2480 -445 384 ) dsi/cretebase -448 496 0 0.500000 0.500000 0 0 0
+( -2086 -1028 384 ) ( -2480 -445 384 ) ( -2639 -552 384 ) dsi/cretebase -288 144 0 0.500000 0.500000 0 0 0
+( -2122 -976 384 ) ( -2139 -1064 384 ) ( -2122 -976 448 ) dsi/cretebase -80 0 0 0.500000 0.500000 0 0 0
+( -2533 -481 384 ) ( -2444 -498 384 ) ( -2533 -481 448 ) dsi/cretebase -208 0 0 0.500000 0.500000 0 0 0
+( -2480 -445 384 ) ( -2462 -472 416 ) ( -2639 -552 384 ) dsi/cretebase -288 144 0 0.500000 0.500000 0 0 0
+( -2122 -976 448 ) ( -2104 -1002 416 ) ( -2281 -1083 448 ) dsi/cretebase -288 144 0 0.500000 0.500000 0 0 0
+( -2139 -1064 432 ) ( -2139 -1064 400 ) ( -2533 -481 432 ) common/caulk -80 0 0 0.500000 0.500000 0 0 0
+}
+// brush 3
+{
+( -2533 -481 448 ) ( -2139 -1064 448 ) ( -2192 -1100 448 ) dsi/cretebase4 -32 144 0 0.500000 0.500000 0 0 0
+( -2086 -1028 384 ) ( -2480 -445 384 ) ( -2639 -552 384 ) dsi/cretebase -288 144 0 0.500000 0.500000 0 0 0
+( -2480 -445 384 ) ( -2462 -472 416 ) ( -2639 -552 384 ) dsi/cretebase4 -32 144 0 0.500000 0.500000 0 0 0
+( -2122 -976 448 ) ( -2104 -1002 416 ) ( -2281 -1083 448 ) dsi/cretebase4 -32 144 0 0.500000 0.500000 0 0 0
+( -2192 -1100 432 ) ( -2192 -1100 416 ) ( -2586 -516 432 ) common/caulk -80 0 0 0.500000 0.500000 0 0 0
+( -2139 -1064 400 ) ( -2139 -1064 432 ) ( -2533 -481 432 ) common/caulk -80 0 0 0.500000 0.500000 0 0 0
+}
+// brush 4
+{
+( -2586 -516 448 ) ( -2192 -1100 448 ) ( -2245 -1135 384 ) dsi/cretebase -288 144 0 0.500000 0.500000 0 0 0
+( -2086 -1028 384 ) ( -2480 -445 384 ) ( -2639 -552 384 ) dsi/cretebase -288 144 0 0.500000 0.500000 0 0 0
+( -2192 -1100 384 ) ( -2281 -1083 384 ) ( -2192 -1100 448 ) dsi/cretebase -208 0 0 0.500000 0.500000 0 0 0
+( -2603 -606 384 ) ( -2586 -516 384 ) ( -2603 -606 448 ) dsi/cretebase -80 0 0 0.500000 0.500000 0 0 0
+( -2480 -445 384 ) ( -2462 -472 416 ) ( -2639 -552 384 ) dsi/cretebase -288 144 0 0.500000 0.500000 0 0 0
+( -2122 -976 448 ) ( -2104 -1002 416 ) ( -2281 -1083 448 ) dsi/cretebase -288 144 0 0.500000 0.500000 0 0 0
+( -2192 -1100 416 ) ( -2192 -1100 432 ) ( -2586 -516 432 ) common/caulk -80 0 0 0.500000 0.500000 0 0 0
+}
+// brush 5
+{
+( -2372 -605 128 ) ( -2408 -551 128 ) ( -2408 -551 0 ) dsi/cretebase -80 0 0 0.500000 0.500000 0 0 0
+( -2478 -676 128 ) ( -2425 -640 128 ) ( -2425 -640 0 ) dsi/cretebase -352 0 0 0.500000 0.500000 0 0 0
+( -2567 -658 128 ) ( -2531 -712 128 ) ( -2531 -712 0 ) dsi/cretebase -80 0 0 0.500000 0.500000 0 0 0
+( -2533 -481 128 ) ( -2586 -516 128 ) ( -2586 -516 0 ) dsi/cretebase4 -96 0 0 0.500000 0.500000 0 0 0
+( -2488 -604 384 ) ( -2451 -658 384 ) ( -2505 -694 384 ) dsi/cretebase -288 144 0 0.500000 0.500000 0 0 0
+( -2478 -676 0 ) ( -2425 -640 0 ) ( -2461 -587 0 ) dsi/cretebase -288 144 0 0.500000 0.500000 0 0 0
+( -2603 -606 0 ) ( -2586 -516 0 ) ( -2603 -606 384 ) dsi/cretebase -80 0 0 0.500000 0.500000 0 0 0
+( -2533 -481 0 ) ( -2444 -498 0 ) ( -2533 -481 384 ) dsi/cretebase -208 0 0 0.500000 0.500000 0 0 0
+}
+// brush 6
+{
+( -2425 -640 192 ) ( -2246 -905 192 ) ( -2193 -870 384 ) dsi/cretebase4 -80 0 0 0.500000 0.500000 134217728 0 0
+( -2246 -905 192 ) ( -2300 -941 192 ) ( -2352 -977 384 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -2300 -941 192 ) ( -2478 -676 192 ) ( -2531 -712 384 ) dsi/cretebase -16 64 0 0.500000 0.500000 134217728 0 0
+( -2336 -772 240 ) ( -2389 -809 240 ) ( -2300 -941 192 ) dsi/cretebase4 -288 144 0 0.500000 0.500000 134217728 0 0
+( -2246 -905 240 ) ( -2273 -923 240 ) ( -2336 -772 240 ) common/caulk -32 16 0 0.500000 0.500000 134217728 0 0
+}
+// brush 7
+{
+( -2425 -640 192 ) ( -2246 -905 192 ) ( -2193 -870 384 ) dsi/cretebase4 -80 0 0 0.500000 0.500000 134217728 0 0
+( -2300 -941 192 ) ( -2478 -676 192 ) ( -2531 -712 384 ) dsi/cretebase -16 64 0 0.500000 0.500000 134217728 0 0
+( -2478 -676 192 ) ( -2425 -640 192 ) ( -2372 -605 384 ) dsi/cretebase -96 64 0 0.500000 0.500000 134217728 0 0
+( -2389 -809 240 ) ( -2336 -772 240 ) ( -2425 -640 192 ) dsi/cretebase4 -288 144 0 0.500000 0.500000 134217728 0 0
+( -2336 -772 240 ) ( -2362 -790 240 ) ( -2425 -640 240 ) common/caulk -32 16 0 0.500000 0.500000 134217728 0 0
+}
+// brush 8
+{
+( -2425 -640 192 ) ( -2246 -905 192 ) ( -2193 -870 384 ) dsi/cretebase4 -80 0 0 0.500000 0.500000 0 0 0
+( -2246 -905 192 ) ( -2300 -941 192 ) ( -2352 -977 384 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -2300 -941 192 ) ( -2478 -676 192 ) ( -2531 -712 384 ) dsi/cretebase -16 64 0 0.500000 0.500000 0 0 0
+( -2513 -738 384 ) ( -2354 -631 384 ) ( -2193 -870 384 ) dsi/cretebase -32 272 0 0.500000 0.500000 0 0 0
+( -2389 -809 240 ) ( -2336 -772 240 ) ( -2283 -737 384 ) common/caulk -96 128 0 0.500000 0.500000 0 0 0
+( -2273 -923 240 ) ( -2246 -905 240 ) ( -2336 -772 240 ) common/caulk -32 16 0 0.500000 0.500000 0 0 0
+}
+// brush 9
+{
+( -2425 -640 192 ) ( -2246 -905 192 ) ( -2193 -870 384 ) dsi/cretebase4 -80 0 0 0.500000 0.500000 0 0 0
+( -2300 -941 192 ) ( -2478 -676 192 ) ( -2531 -712 384 ) dsi/cretebase -16 64 0 0.500000 0.500000 0 0 0
+( -2478 -676 192 ) ( -2425 -640 192 ) ( -2372 -605 384 ) dsi/cretebase -96 64 0 0.500000 0.500000 0 0 0
+( -2513 -738 384 ) ( -2354 -631 384 ) ( -2193 -870 384 ) dsi/cretebase -32 272 0 0.500000 0.500000 0 0 0
+( -2336 -772 240 ) ( -2389 -809 240 ) ( -2442 -844 384 ) common/caulk -96 128 0 0.500000 0.500000 0 0 0
+( -2362 -790 240 ) ( -2336 -772 240 ) ( -2425 -640 240 ) common/caulk -32 16 0 0.500000 0.500000 0 0 0
+}
+// brush 10
+{
+( -2335 -888 64 ) ( -2335 -888 0 ) ( -2300 -941 64 ) dsi/cretebase -16 64 0 0.500000 0.500000 134217728 0 0
+( -2352 -977 0 ) ( -2352 -977 64 ) ( -2300 -941 128 ) dsi/cretebase -288 64 0 0.500000 0.500000 134217728 0 0
+( -2352 -977 64 ) ( -2335 -888 64 ) ( -2300 -941 128 ) dsi/cretebase -160 -240 0 0.500000 0.500000 134217728 0 0
+( -2393 -1003 64 ) ( -2379 -994 64 ) ( -2428 -951 64 ) dsi/cretebase -224 208 0 0.500000 0.500000 134217728 0 0
+}
+// brush 11
+{
+( -2443 -729 0 ) ( -2443 -729 64 ) ( -2478 -676 128 ) dsi/cretebase -16 64 0 0.500000 0.500000 134217728 0 0
+( -2531 -712 64 ) ( -2531 -712 0 ) ( -2478 -676 64 ) dsi/cretebase -288 64 0 0.500000 0.500000 134217728 0 0
+( -2443 -729 64 ) ( -2531 -712 64 ) ( -2478 -676 128 ) dsi/cretebase -288 -240 0 0.500000 0.500000 134217728 0 0
+( -2535 -792 64 ) ( -2522 -782 64 ) ( -2571 -738 64 ) dsi/cretebase -224 208 0 0.500000 0.500000 134217728 0 0
+}
+// brush 12
+{
+( -2458 -1048 48 ) ( -2637 -783 48 ) ( -2637 -783 0 ) dsi/cretebase -16 64 0 0.500000 0.500000 134217728 0 0
+( -2690 -819 48 ) ( -2512 -1085 48 ) ( -2512 -1085 0 ) dsi/cretebase -16 64 0 0.500000 0.500000 134217728 0 0
+( -2664 -801 16 ) ( -2485 -1066 16 ) ( -2538 -1102 16 ) dsi/cretebase4 -288 144 0 0.500000 0.500000 134217728 0 0
+( -2512 -1085 0 ) ( -2458 -1048 0 ) ( -2637 -783 0 ) dsi/cretebase -224 208 0 0.500000 0.500000 134217728 0 0
+( -2281 -1083 0 ) ( -2303 -1078 0 ) ( -2281 -1083 16 ) dsi/cretebase -144 64 0 0.500000 0.500000 134217728 0 0
+( -2607 -628 0 ) ( -2603 -606 0 ) ( -2607 -628 16 ) dsi/cretebase -16 64 0 0.500000 0.500000 134217728 0 0
+}
+// brush 13
+{
+( -2458 -1048 0 ) ( -2406 -1013 0 ) ( -2584 -748 0 ) dsi/cretebase -224 208 0 0.500000 0.500000 134217728 0 0
+( -2584 -748 32 ) ( -2406 -1013 32 ) ( -2458 -1048 32 ) dsi/cretebase4 -288 144 0 0.500000 0.500000 134217728 0 0
+( -2637 -783 48 ) ( -2458 -1048 48 ) ( -2458 -1048 0 ) dsi/cretebase -16 64 0 0.500000 0.500000 134217728 0 0
+( -2406 -1013 48 ) ( -2584 -748 48 ) ( -2584 -748 0 ) dsi/cretebase -16 64 0 0.500000 0.500000 134217728 0 0
+( -2281 -1083 0 ) ( -2303 -1078 0 ) ( -2281 -1083 32 ) dsi/cretebase -144 64 0 0.500000 0.500000 134217728 0 0
+( -2607 -628 0 ) ( -2603 -606 0 ) ( -2607 -628 32 ) dsi/cretebase -16 64 0 0.500000 0.500000 134217728 0 0
+}
+// brush 14
+{
+( -2352 -977 48 ) ( -2531 -712 48 ) ( -2531 -712 0 ) dsi/cretebase -16 64 0 0.500000 0.500000 134217728 0 0
+( -2584 -748 48 ) ( -2406 -1013 48 ) ( -2406 -1013 0 ) dsi/cretebase -16 64 0 0.500000 0.500000 134217728 0 0
+( -2531 -712 48 ) ( -2352 -977 48 ) ( -2406 -1013 48 ) dsi/cretebase4 -288 144 0 0.500000 0.500000 134217728 0 0
+( -2406 -1013 0 ) ( -2352 -977 0 ) ( -2531 -712 0 ) dsi/cretebase -224 208 0 0.500000 0.500000 134217728 0 0
+( -2281 -1083 0 ) ( -2303 -1078 0 ) ( -2281 -1083 48 ) dsi/cretebase -144 64 0 0.500000 0.500000 134217728 0 0
+( -2607 -628 0 ) ( -2603 -606 0 ) ( -2607 -628 48 ) dsi/cretebase -16 64 0 0.500000 0.500000 134217728 0 0
+}
+// brush 15
+{
+( -2352 -977 0 ) ( -2300 -941 0 ) ( -2478 -676 0 ) dsi/cretebase -288 144 0 0.500000 0.500000 134217728 0 0
+( -2478 -676 64 ) ( -2300 -941 64 ) ( -2352 -977 64 ) dsi/cretebase4 -288 144 0 0.500000 0.500000 134217728 0 0
+( -2478 -676 64 ) ( -2531 -712 64 ) ( -2531 -712 0 ) dsi/cretebase -352 0 0 0.500000 0.500000 134217728 0 0
+( -2531 -712 64 ) ( -2352 -977 64 ) ( -2352 -977 0 ) dsi/cretebase -80 0 0 0.500000 0.500000 134217728 0 0
+( -2352 -977 64 ) ( -2300 -941 64 ) ( -2300 -941 0 ) dsi/cretebase -352 0 0 0.500000 0.500000 134217728 0 0
+( -2300 -941 64 ) ( -2478 -676 64 ) ( -2478 -676 0 ) dsi/cretebase -80 0 0 0.500000 0.500000 134217728 0 0
+}
+}
+// entity 62
+{
+"classname" "weapon_crylink"
+"origin" "-2509 -814 80"
+}
+// entity 63
+{
+"classname" "item_cells"
+"origin" "-2413 -944 80"
+}
+// entity 64
+{
+"origin" "-2449 -859 80"
+"classname" "item_cells"
+}
+// entity 65
+{
+"classname" "item_armor25"
+"origin" "-1920 832 48"
+}
+// entity 66
+{
+"origin" "-3136 768 48"
+"classname" "item_armor25"
+}
+// entity 67
+{
+"origin" "-3424 -1152 48"
+"classname" "item_armor25"
+}
+// entity 68
+{
+"classname" "item_strength"
+"origin" "-560 0 32"
+}
+// entity 69
+{
+"classname" "info_player_deathmatch"
+"origin" "-5504 352 32"
+"angle" "360"
+}
+// entity 70
+{
+"angle" "360"
+"origin" "-5504 -416 32"
+"classname" "info_player_deathmatch"
+}
+// entity 71
+{
+"classname" "info_player_deathmatch"
+"origin" "-5504 -160 32"
+"angle" "360"
+}
+// entity 72
+{
+"angle" "360"
+"origin" "-5504 96 32"
+"classname" "info_player_deathmatch"
+}
+// entity 73
+{
+"classname" "weapon_crylink"
+"origin" "-5504 224 32"
+}
+// entity 74
+{
+"classname" "weapon_machinegun"
+"origin" "-5504 -32 32"
+}
+// entity 75
+{
+"classname" "weapon_hagar"
+"origin" "-5504 -288 32"
+}
+// entity 76
+{
+"target" "t3"
+"classname" "turret_targettrigger"
+// brush 0
+{
+( -3128 880 592 ) ( -3248 880 592 ) ( -3248 672 592 ) common/trigger 0 32 0 0.500000 0.500000 0 7 0
+( -3248 672 672 ) ( -3248 880 672 ) ( -3128 880 672 ) common/trigger 0 32 0 0.500000 0.500000 0 7 0
+( -3248 672 624 ) ( -3128 672 624 ) ( -3128 672 592 ) common/trigger 0 0 0 0.500000 0.500000 0 7 0
+( -3128 672 624 ) ( -3128 880 624 ) ( -3128 880 592 ) common/trigger -32 0 0 0.500000 0.500000 0 7 0
+( -3128 880 624 ) ( -3248 880 624 ) ( -3248 880 592 ) common/trigger 0 0 0 0.500000 0.500000 0 7 0
+( -3248 880 624 ) ( -3248 672 624 ) ( -3248 672 592 ) common/trigger -32 0 0 0.500000 0.500000 0 7 0
+}
+}
+// entity 77
+{
+"target" "t3"
+"classname" "turret_targettrigger"
+// brush 0
+{
+( -1976 1024 624 ) ( -2086 848 624 ) ( -2086 848 592 ) common/trigger -32 0 0 0.500000 0.500000 0 7 0
+( -1874 960 624 ) ( -1976 1024 624 ) ( -1976 1024 592 ) common/trigger -48 0 0 0.500000 0.500000 0 7 0
+( -1984 784 624 ) ( -1874 960 624 ) ( -1874 960 592 ) common/trigger -32 0 0 0.500000 0.500000 0 7 0
+( -2086 848 624 ) ( -1984 784 624 ) ( -1984 784 592 ) common/trigger -48 0 0 0.500000 0.500000 0 7 0
+( -2086 848 672 ) ( -1976 1024 672 ) ( -1874 960 672 ) common/trigger -48 32 0 0.500000 0.500000 0 7 0
+( -1874 960 592 ) ( -1976 1024 592 ) ( -2086 848 592 ) common/trigger -48 32 0 0.500000 0.500000 0 7 0
+}
+}
+// entity 78
+{
+"target" "t3"
+"classname" "turret_targettrigger"
+// brush 0
+{
+( -3554 -1117 624 ) ( -3497 -1317 624 ) ( -3497 -1317 592 ) common/trigger 16 0 0 0.500000 0.500000 0 7 0
+( -3439 -1083 624 ) ( -3554 -1117 624 ) ( -3554 -1117 592 ) common/trigger -16 0 0 0.500000 0.500000 0 7 0
+( -3382 -1283 624 ) ( -3439 -1083 624 ) ( -3439 -1083 592 ) common/trigger 16 0 0 0.500000 0.500000 0 7 0
+( -3497 -1317 624 ) ( -3382 -1283 624 ) ( -3382 -1283 592 ) common/trigger -16 0 0 0.500000 0.500000 0 7 0
+( -3497 -1317 672 ) ( -3554 -1117 672 ) ( -3439 -1083 672 ) common/trigger -16 -16 0 0.500000 0.500000 0 7 0
+( -3439 -1083 592 ) ( -3554 -1117 592 ) ( -3497 -1317 592 ) common/trigger -16 -16 0 0.500000 0.500000 0 7 0
+}
+}
+// entity 79
+{
+"classname" "turret_targettrigger"
+"target" "t3"
+// brush 0
+{
+( -4480 1168 136 ) ( -4480 1040 136 ) ( -4480 1040 72 ) common/trigger -32 0 0 0.500000 0.500000 0 7 0
+( -4416 1160 136 ) ( -4504 1160 136 ) ( -4504 1160 72 ) common/trigger -48 0 0 0.500000 0.500000 0 7 0
+( -4400 1032 136 ) ( -4400 1160 136 ) ( -4400 1160 72 ) common/trigger -32 0 0 0.500000 0.500000 0 7 0
+( -4496 832 136 ) ( -4408 832 136 ) ( -4408 832 72 ) common/trigger -48 0 0 0.500000 0.500000 0 7 0
+( -4496 1040 136 ) ( -4496 1168 136 ) ( -4408 1168 136 ) common/trigger -48 32 0 0.500000 0.500000 0 7 0
+( -4408 1168 72 ) ( -4496 1168 72 ) ( -4496 1040 72 ) common/trigger -48 32 0 0.500000 0.500000 0 7 0
+}
+}
+// entity 80
+{
+"origin" "-5376 1792 32"
+"classname" "info_player_team1"
+}
+// entity 81
+{
+"origin" "-5344 -1824 32"
+"classname" "info_player_team2"
+}
+// entity 82
+{
+"target" "t3"
+"classname" "turret_targettrigger"
+// brush 0
+{
+( -2944 632 0 ) ( -3032 632 0 ) ( -3032 504 0 ) common/trigger 48 48 0 0.500000 0.500000 0 7 0
+( -3040 504 136 ) ( -3040 632 136 ) ( -2952 632 136 ) common/trigger 48 48 0 0.500000 0.500000 0 7 0
+( -2976 -616 136 ) ( -2888 -616 136 ) ( -2888 -616 72 ) common/trigger 48 0 0 0.500000 0.500000 0 7 0
+( -2736 520 136 ) ( -2736 648 136 ) ( -2736 648 72 ) common/trigger -48 0 0 0.500000 0.500000 0 7 0
+( -2960 624 136 ) ( -3048 624 136 ) ( -3048 624 72 ) common/trigger 48 0 0 0.500000 0.500000 0 7 0
+( -3024 632 136 ) ( -3024 504 136 ) ( -3024 504 72 ) common/trigger -48 0 0 0.500000 0.500000 0 7 0
+}
+}
+// entity 83
+{
+"target" "t9"
+"targetname" "t8"
+"origin" "-560 560 32"
+"classname" "walker_checkpoint"
+}
+// entity 84
+{
+"target" "t10"
+"targetname" "t9"
+"classname" "walker_checkpoint"
+"origin" "-1152 1152 32"
+}
+// entity 85
+{
+"targetname" "t13"
+"target" "t7"
+"origin" "-1152 -1152 32"
+"classname" "walker_checkpoint"
+}
+// entity 86
+{
+"target" "t14"
+"targetname" "t7"
+"origin" "-560 -560 32"
+"classname" "walker_checkpoint"
+}
+// entity 87
+{
+"targetname" "t14"
+"target" "t8"
+"classname" "walker_checkpoint"
+"origin" "-384 0 32"
+}
+// entity 88
+{
+"target" "t11"
+"targetname" "t10"
+"origin" "-1152 512 32"
+"classname" "walker_checkpoint"
+}
+// entity 89
+{
+"target" "t12"
+"targetname" "t11"
+"classname" "walker_checkpoint"
+"origin" "-768 0 32"
+}
+// entity 90
+{
+"target" "t13"
+"targetname" "t12"
+"origin" "-1152 -512 32"
+"classname" "walker_checkpoint"
+}
+// entity 91
+{
+"angle" "180"
+"classname" "turret_walker"
+"origin" "-1120 0 8"
+}

Copied: branches/nexuiz-2.0/data/maps/turret_test.waypoints (from rev 4862, trunk/data/maps/turret_test.waypoints)
===================================================================
--- branches/nexuiz-2.0/data/maps/turret_test.waypoints	                        (rev 0)
+++ branches/nexuiz-2.0/data/maps/turret_test.waypoints	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,312 @@
+'-2306.0 1302.9  24.1'
+'-2306.0 1302.9  24.1'
+0
+'-2580.1 1340.2  24.1'
+'-2580.1 1340.2  24.1'
+0
+'-2834.4 1375.1  24.1'
+'-2834.4 1375.1  24.1'
+0
+'-3111.8 1413.1  24.1'
+'-3111.8 1413.1  24.1'
+0
+'-3409.1 1453.8  24.1'
+'-3409.1 1453.8  24.1'
+0
+'-3660.1 1488.2  24.1'
+'-3660.1 1488.2  24.1'
+0
+'-4177.1 -481.0  24.1'
+'-4177.1 -481.0  24.1'
+0
+'-3970.3 -571.0  24.1'
+'-3970.3 -571.0  24.1'
+0
+'-3779.8 -651.6  24.1'
+'-3779.8 -651.6  24.1'
+0
+'-3581.2 -695.1  24.1'
+'-3581.2 -695.1  24.1'
+0
+'-3374.4 -698.5  24.1'
+'-3374.4 -698.5  24.1'
+0
+'-3174.5 -734.2  24.1'
+'-3174.5 -734.2  24.1'
+0
+'-3024.0 -277.1  24.1'
+'-3024.0 -277.1  24.1'
+0
+'-2795.9 -247.8  24.1'
+'-2795.9 -247.8  24.1'
+0
+'-2580.0 -229.0  24.1'
+'-2580.0 -229.0  24.1'
+0
+'-2393.7 -186.6  56.1'
+'-2393.7 -186.6  56.1'
+0
+'-2180.7 553.3  24.1'
+'-2180.7 553.3  24.1'
+0
+'-1968.9 530.2  24.1'
+'-1968.9 530.2  24.1'
+0
+'-1770.3 472.6  24.1'
+'-1770.3 472.6  24.1'
+0
+'-1539.6 360.4  24.1'
+'-1539.6 360.4  24.1'
+0
+'-1349.9 218.9  24.1'
+'-1349.9 218.9  24.1'
+0
+'-1210.0 118.7  24.1'
+'-1210.0 118.7  24.1'
+0
+'-1039.7 -15.8  24.1'
+'-1039.7 -15.8  24.1'
+0
+'-1164.0 -111.8  24.1'
+'-1164.0 -111.8  24.1'
+0
+'-1373.4 -263.2  24.1'
+'-1373.4 -263.2  24.1'
+0
+'-1578.1 -412.5  24.1'
+'-1578.1 -412.5  24.1'
+0
+'-1846.5 -549.9  24.1'
+'-1846.5 -549.9  24.1'
+0
+'-2088.1 -614.0  24.1'
+'-2088.1 -614.0  24.1'
+0
+'-2344.3 -611.0  24.1'
+'-2344.3 -611.0  24.1'
+0
+'-2568.6 -594.2  24.1'
+'-2568.6 -594.2  24.1'
+0
+'-3105.1 217.7  24.1'
+'-3105.1 217.7  24.1'
+0
+'-2899.6 271.7  24.1'
+'-2899.6 271.7  24.1'
+0
+'-2672.5 286.2  24.1'
+'-2672.5 286.2  24.1'
+0
+'-2307.7 124.4  56.1'
+'-2307.7 124.4  56.1'
+0
+'-2284.3 324.8  24.1'
+'-2284.3 324.8  24.1'
+0
+'-2310.3 571.7  24.1'
+'-2310.3 571.7  24.1'
+0
+'-2275.3 907.5  24.1'
+'-2275.3 907.5  24.1'
+0
+'-1980.1 975.3  56.1'
+'-1980.1 975.3  56.1'
+0
+'-2070.2 994.0  24.1'
+'-2070.2 994.0  24.1'
+0
+'-2195.7 1187.4  24.1'
+'-2195.7 1187.4  24.1'
+0
+'-2224.5 1432.7  24.1'
+'-2224.5 1432.7  24.1'
+0
+'-1926.1 1636.5  24.1'
+'-1926.1 1636.5  24.1'
+0
+'-1555.7 1589.8  24.1'
+'-1555.7 1589.8  24.1'
+0
+'-1255.8 1373.8  24.1'
+'-1255.8 1373.8  24.1'
+0
+'-1078.4 937.8  24.1'
+'-1078.4 937.8  24.1'
+0
+'-987.7 506.8  24.1'
+'-987.7 506.8  24.1'
+0
+'-628.6  62.2  24.1'
+'-628.6  62.2  24.1'
+0
+'768.4 166.1  24.1'
+'768.4 166.1  24.1'
+0
+'474.8 120.8  24.1'
+'474.8 120.8  24.1'
+0
+'812.2 -212.0  24.1'
+'812.2 -212.0  24.1'
+0
+'573.5 -118.7  24.1'
+'573.5 -118.7  24.1'
+0
+'316.1 -13.6  24.1'
+'316.1 -13.6  24.1'
+0
+' 36.1  -9.3  24.1'
+' 36.1  -9.3  24.1'
+0
+'-240.0 -26.3  24.1'
+'-240.0 -26.3  24.1'
+0
+'-523.1 -110.5  24.1'
+'-523.1 -110.5  24.1'
+0
+'-742.7 -273.1  24.1'
+'-742.7 -273.1  24.1'
+0
+'-968.3 -473.4  24.1'
+'-968.3 -473.4  24.1'
+0
+'-1161.5 -695.6  24.1'
+'-1161.5 -695.6  24.1'
+0
+'-1338.0 -966.5  24.1'
+'-1338.0 -966.5  24.1'
+0
+'-1512.9 -1176.4  24.1'
+'-1512.9 -1176.4  24.1'
+0
+'-1759.7 -1379.7  24.1'
+'-1759.7 -1379.7  24.1'
+0
+'-2003.0 -1511.2  24.1'
+'-2003.0 -1511.2  24.1'
+0
+'-2272.0 -1575.4  24.1'
+'-2272.0 -1575.4  24.1'
+0
+'-2571.5 -1568.2  24.1'
+'-2571.5 -1568.2  24.1'
+0
+'-2777.6 -1466.8  24.1'
+'-2777.6 -1466.8  24.1'
+0
+'-4569.4 -430.1  24.1'
+'-4569.4 -430.1  24.1'
+0
+'-4399.4 -668.1  24.1'
+'-4399.4 -668.1  24.1'
+0
+'-4158.2 -881.3  24.1'
+'-4158.2 -881.3  24.1'
+0
+'-4003.3 -1154.8  24.1'
+'-4003.3 -1154.8  24.1'
+0
+'-5055.9 -1433.3  24.1'
+'-5055.9 -1433.3  24.1'
+0
+'-4787.4 -1663.1  24.1'
+'-4787.4 -1663.1  24.1'
+0
+'-4392.7 -1726.1  24.1'
+'-4392.7 -1726.1  24.1'
+0
+'-3998.2 -1629.2  24.1'
+'-3998.2 -1629.2  24.1'
+0
+'-3616.5 -1544.0  24.1'
+'-3616.5 -1544.0  24.1'
+0
+'-3228.7 -1395.6  24.1'
+'-3228.7 -1395.6  24.1'
+0
+'-2834.2 -1290.1  24.1'
+'-2834.2 -1290.1  24.1'
+0
+'-2659.6 -1081.2  56.1'
+'-2659.6 -1081.2  56.1'
+0
+'-3019.8 -987.4  24.1'
+'-3019.8 -987.4  24.1'
+0
+'-3079.7 -675.6  24.1'
+'-3079.7 -675.6  24.1'
+0
+'-3084.9 -285.7  24.1'
+'-3084.9 -285.7  24.1'
+0
+'-3135.4  56.7  24.1'
+'-3135.4  56.7  24.1'
+0
+'-3227.9 381.6  24.1'
+'-3227.9 381.6  24.1'
+0
+'-3291.1 781.1 616.1'
+'-3291.1 781.1 616.1'
+0
+'-3336.3 797.5 536.1'
+'-3336.3 797.5 536.1'
+0
+'-3344.0 783.7  56.1'
+'-3344.0 783.7  56.1'
+0
+'-3393.8 646.2  56.1'
+'-3393.8 646.2  56.1'
+0
+'-4994.7 1111.8  24.1'
+'-4994.7 1111.8  24.1'
+0
+'-4940.6 1412.3  24.1'
+'-4940.6 1412.3  24.1'
+0
+'-4551.3 1722.5  24.1'
+'-4551.3 1722.5  24.1'
+0
+'-4210.6 1784.9  24.1'
+'-4210.6 1784.9  24.1'
+0
+'-3799.3 1502.1  24.1'
+'-3799.3 1502.1  24.1'
+0
+'-3742.5 1170.5  24.1'
+'-3742.5 1170.5  24.1'
+0
+'-3683.9 735.4  24.1'
+'-3683.9 735.4  24.1'
+0
+'-3862.0 420.7  24.1'
+'-3862.0 420.7  24.1'
+0
+'-3932.6 262.5  24.1'
+'-3932.6 262.5  24.1'
+0
+'-4321.6 -168.5  24.1'
+'-4321.6 -168.5  24.1'
+0
+'-5012.6 -43.3  24.1'
+'-5012.6 -43.3  24.1'
+0
+'-5169.1 -880.8  24.1'
+'-5169.1 -880.8  24.1'
+0
+'-5168.3 -526.4  24.1'
+'-5168.3 -526.4  24.1'
+0
+'-4945.5 -345.7  24.1'
+'-4945.5 -345.7  24.1'
+0
+'-4637.0 -59.4  24.1'
+'-4637.0 -59.4  24.1'
+0
+'-4654.1 287.8  24.1'
+'-4654.1 287.8  24.1'
+0
+'-4805.7 489.3  24.1'
+'-4805.7 489.3  24.1'
+0
+'-5076.2 499.6  24.1'
+'-5076.2 499.6  24.1'
+0

Copied: branches/nexuiz-2.0/data/models/tagrocket.md3 (from rev 4862, trunk/data/models/tagrocket.md3)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/tagrocket.tga (from rev 4862, trunk/data/models/tagrocket.tga)
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/models/turrets/c512.md3
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/r_fx1_1.tga (from rev 4862, trunk/data/models/turrets/r_fx1_1.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/r_fx1_2.tga (from rev 4862, trunk/data/models/turrets/r_fx1_2.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/r_fx1_3.tga (from rev 4862, trunk/data/models/turrets/r_fx1_3.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/r_fx1_4.tga (from rev 4862, trunk/data/models/turrets/r_fx1_4.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/r_fx1_5.tga (from rev 4862, trunk/data/models/turrets/r_fx1_5.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/radiant/walker.md3 (from rev 4862, trunk/data/models/turrets/radiant/walker.md3)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/walker_base.tga (from rev 4862, trunk/data/models/turrets/walker_base.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/walker_base_gloss.tga (from rev 4862, trunk/data/models/turrets/walker_base_gloss.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/walker_base_glow.tga (from rev 4862, trunk/data/models/turrets/walker_base_glow.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/walker_base_norm.tga (from rev 4862, trunk/data/models/turrets/walker_base_norm.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/walker_body.md3 (from rev 4862, trunk/data/models/turrets/walker_body.md3)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/walker_head_minigun.md3 (from rev 4862, trunk/data/models/turrets/walker_head_minigun.md3)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/walker_mghead.md3 (from rev 4862, trunk/data/models/turrets/walker_mghead.md3)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/walker_minigun.tga (from rev 4862, trunk/data/models/turrets/walker_minigun.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/walker_props.md3 (from rev 4862, trunk/data/models/turrets/walker_props.md3)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/walker_spawn.md3 (from rev 4862, trunk/data/models/turrets/walker_spawn.md3)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/turrets/white.tga (from rev 4862, trunk/data/models/turrets/white.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/weapons/g_hlac.md3 (from rev 4862, trunk/data/models/weapons/g_hlac.md3)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/weapons/g_seeker.md3 (from rev 4862, trunk/data/models/weapons/g_seeker.md3)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/weapons/v_hlac.md3 (from rev 4862, trunk/data/models/weapons/v_hlac.md3)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/weapons/v_seeker.md3 (from rev 4862, trunk/data/models/weapons/v_seeker.md3)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/weapons/w_hlac.zym (from rev 4862, trunk/data/models/weapons/w_hlac.zym)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/models/weapons/w_seeker.zym (from rev 4862, trunk/data/models/weapons/w_seeker.zym)
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/qcsrc/common/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/common/constants.qh	2008-10-24 09:45:12 UTC (rev 4863)
@@ -314,11 +314,17 @@
 float WEP_PORTO				= 10; float WEPBIT_PORTO			= 512;
 float WEP_MINSTANEX			= 11; float WEPBIT_MINSTANEX		= 1024;
 float WEP_HOOK     			= 12; float WEPBIT_HOOK     		= 2048;
-float WEP_LAST				= 12; float WEPBIT_ALL              = 4095;
-float WEP_COUNT             = 13;
+float WEP_HLAC			    = 13; float WEPBIT_HLAC		        = 4096;
+float WEP_SEEKER			= 14; float WEPBIT_SEEKER		    = 8192;
+float WEP_LAST				= 14; float WEPBIT_ALL              = 16383;
+float WEP_COUNT             = 15;
 
-float	IT_UNLIMITED_AMMO       = 1;
+float	IT_UNLIMITED_WEAPON_AMMO  = 1;
 // when this bit is set, using a weapon does not reduce ammo. Checkpoints can give this powerup.
+float	IT_UNLIMITED_SUPERWEAPONS = 2;
+// when this bit is set, using a superweapon does not throw it away. Checkpoints can give this powerup.
+float	IT_UNLIMITED_AMMO         = 3;
+// both of these combined
 float	IT_SHELLS				= 256;
 float	IT_NAILS				= 512;
 float	IT_ROCKETS				= 1024;

Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/weaponslist.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/weaponslist.c	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/weaponslist.c	2008-10-24 09:45:12 UTC (rev 4863)
@@ -93,6 +93,8 @@
 		case WEP_PORTO:            return "Port-O-Launch";
 		case WEP_MINSTANEX:        return "MinstaNex";
 		case WEP_HOOK:             return "Grappling Hook";
+		case WEP_HLAC:             return "Heavy Laser Assault Cannon";
+		case WEP_SEEKER:           return "T.A.G. Seeker";
 		default:                   return "(fix qcsrc/menu/nexuiz/weaponslist.c)";
 	}
 }

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -439,6 +439,7 @@
 	self.spectatortime = time;
 	
 	self.classname = "observer";
+	self.iscreature = FALSE;
 	self.health = -666;
 	self.takedamage = DAMAGE_NO;
 	self.solid = SOLID_NOT;
@@ -629,6 +630,7 @@
 		self.iscreature = TRUE;
 		self.movetype = MOVETYPE_WALK;
 		self.solid = SOLID_SLIDEBOX;
+		self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP;
 		if(independent_players)
 			MAKE_INDEPENDENT_PLAYER(self);
 		self.flags = FL_CLIENT;

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -314,7 +314,7 @@
 			{
 				case 99:
 					self.weapons |= WEPBIT_ALL;
-					self.items |= IT_UNLIMITED_AMMO;
+					self.items |= IT_UNLIMITED_WEAPON_AMMO;
 					self.ammo_shells = g_pickup_shells_max;
 					self.ammo_nails = g_pickup_nails_max;
 					self.ammo_rockets = g_pickup_rockets_max;

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -120,7 +120,7 @@
 }
 
 float w_getbestweapon(entity e)
-{ 
+{
 	return W_GetCycleWeapon(e, e.cvar_cl_weaponpriority, 0, -1, 0);
 };
 
@@ -389,7 +389,7 @@
 		if(nixnex_nextchange != self.nixnex_lastchange_id) // this shall only be called once per round!
 		{
 			self.nixnex_lastchange_id = nixnex_nextchange;
-			if (self.items & IT_UNLIMITED_AMMO)
+			if (self.items & IT_UNLIMITED_WEAPON_AMMO)
 			{
 				self.ammo_shells = cvar("g_pickup_shells_max");
 				self.ammo_nails = cvar("g_pickup_nails_max");
@@ -416,7 +416,7 @@
 				centerprint(self, strcat("^3", ftos(dt), "^2 seconds until weapon change...\n\nNext weapon: ^3", W_Name(nixnex_nextweapon), "\n"));
 		}
 
-		if(!(self.items & IT_UNLIMITED_AMMO) && time > self.nixnex_nextincr)
+		if(!(self.items & IT_UNLIMITED_WEAPON_AMMO) && time > self.nixnex_nextincr)
 		{
 			self.ammo_shells = self.ammo_shells + cvar("g_balance_nixnex_ammoincr_shells");
 			self.ammo_nails = self.ammo_nails + cvar("g_balance_nixnex_ammoincr_nails");
@@ -452,5 +452,8 @@
 	register_weapon(WEP_PORTO,            w_porto,     IT_SUPERWEAPON, 0, 0,     0, "porto" ,    "porto",           "Port-O-Launch");
 	register_weapon(WEP_MINSTANEX,        w_minstanex, IT_CELLS,       7, 0, 10000, "minstanex", "minstanex",       "MinstaNex");
 	register_weapon(WEP_HOOK,             w_hook,      IT_CELLS,       0, 0,     0, "hookgun",   "hook",            "Grappling Hook");
+	register_weapon(WEP_SEEKER,           w_seeker,    IT_ROCKETS,     8, 0,     0, "seeker",    "seeker",          "T.A.G. Seeker");
+	register_weapon(WEP_HLAC,             w_hlac,      IT_CELLS,       6, 0,     0, "hlac",      "hlac",            "Heavy Laser Assault Cannon");
+
 	register_weapons_done();
 }

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_weaponsystem.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -389,11 +389,18 @@
 	{
 		if (andammo)
 		{
-			oldself = self;
-			self = cl;
-			f = weapon_action(wpn, WR_CHECKAMMO1);
-			f = f + weapon_action(wpn, WR_CHECKAMMO2);
-			self = oldself;
+			if(cl.items & IT_UNLIMITED_WEAPON_AMMO)
+			{
+				f = 1;
+			}
+			else
+			{
+				oldself = self;
+				self = cl;
+				f = weapon_action(wpn, WR_CHECKAMMO1);
+				f = f + weapon_action(wpn, WR_CHECKAMMO2);
+				self = oldself;
+			}
 			if (!f)
 			{
 				if (complain)
@@ -459,6 +466,7 @@
 			return FALSE;
 		}
 	
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 	if (!weapon_action(self.weapon, WR_CHECKAMMO1 + secondary))
 	{
 		W_SwitchWeapon_Force(self, w_getbestweapon(self));

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_hook.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_hook.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_hook.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -222,7 +222,7 @@
 				dv = ((self.owner.velocity - v0) * dir) * dir;
 				if(cvar("g_grappling_hook_tarzan") >= 2)
 				{
-					if(self.aiment.movetype == MOVETYPE_WALK || self.aiment.movetype == MOVETYPE_TOSS)
+					if(self.aiment.movetype == MOVETYPE_WALK)
 					{
 						self.owner.velocity = self.owner.velocity - dv * 0.5;
 						self.aiment.velocity = self.aiment.velocity - dv * 0.5;
@@ -380,7 +380,7 @@
 
 void GrapplingHookFrame()
 {
-	if(g_grappling_hook && timeoutStatus != 2)
+	if(g_grappling_hook && timeoutStatus != 2 && self.weapon != WEP_HOOK)
 	{
 		// offhand hook controls
 		if(self.BUTTON_HOOK)
@@ -393,11 +393,8 @@
 		}
 		else
 		{
-			if(self.hook)
-			{
-				self.hook_state |= HOOK_REMOVING;
-				self.hook_state (-) HOOK_WAITING_FOR_RELEASE;
-			}
+			self.hook_state |= HOOK_REMOVING;
+			self.hook_state (-) HOOK_WAITING_FOR_RELEASE;
 		}
 
 		self.hook_state (-) HOOK_RELEASING;

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_subs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_subs.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_subs.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -26,6 +26,21 @@
 
 /*
 ==================
+SUB_Friction
+
+Applies some friction to self
+==================
+*/
+.float friction;
+void SUB_Friction (void)
+{
+	self.nextthink = time;
+	if(self.flags & FL_ONGROUND)
+		self.velocity = self.velocity * (1 - frametime * self.friction);
+}
+
+/*
+==================
 SUB_VanishOrRemove
 
 Makes client invisible or removes non-client

Modified: branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_triggers.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -54,9 +54,12 @@
 //
 	if (activator.classname == "player" && self.message != "")
 	{
-		centerprint (activator, self.message);
-		if (!self.noise)
-			play2(activator, "misc/talk.wav");
+		if(clienttype(activator) == CLIENTTYPE_REAL)
+		{
+			centerprint (activator, self.message);
+			if (!self.noise)
+				play2(activator, "misc/talk.wav");
+		}
 	}
 
 //
@@ -174,7 +177,7 @@
 {
 	if not(self.spawnflags & 2)
 	{
-		if (other.classname != "player")
+		if not(other.iscreature)
 			return;
 
 		if(self.team)
@@ -762,7 +765,7 @@
 	if(self.enemy.target != "") // DETECTOR laser
 	{
 		traceline(self.origin, o, MOVE_NORMAL, self);
-		if(trace_ent.classname == "player")
+		if(trace_ent.iscreature)
 		{
 			self.pusher = trace_ent;
 			if(!self.count)
@@ -915,11 +918,12 @@
     float str;
 
 	// FIXME: Better checking for what to push and not.
-	if (other.classname != "player")
+	if not(other.iscreature)
 	if (other.classname != "corpse")
 	if (other.classname != "body")
 	if (other.classname != "gib")
 	if (other.classname != "missile")
+	if (other.classname != "rocket")
 	if (other.classname != "casing")
 	if (other.classname != "grenade")
 	if (other.classname != "plasma")
@@ -928,7 +932,7 @@
 	if (other.classname != "droppedweapon")
 		return;
 
-	if (other.deadflag && other.classname == "player")
+	if (other.deadflag && other.iscreature)
 		return;
 
 	EXACTTRIGGER_TOUCH;
@@ -962,11 +966,12 @@
     float pushdeltatime;
 
 	// FIXME: Better checking for what to push and not.
-	if (other.classname != "player")
+	if not(other.iscreature)
 	if (other.classname != "corpse")
 	if (other.classname != "body")
 	if (other.classname != "gib")
 	if (other.classname != "missile")
+	if (other.classname != "rocket")
 	if (other.classname != "casing")
 	if (other.classname != "grenade")
 	if (other.classname != "plasma")
@@ -975,7 +980,7 @@
 	if (other.classname != "droppedweapon")
 		return;
 
-	if (other.deadflag && other.classname == "player")
+	if (other.deadflag && other.iscreature)
 		return;
 
 	EXACTTRIGGER_TOUCH;
@@ -998,11 +1003,12 @@
     float str;
 
 	// FIXME: Better checking for what to push and not.
-	if (other.classname != "player")
+	if not(other.iscreature)
 	if (other.classname != "corpse")
 	if (other.classname != "body")
 	if (other.classname != "gib")
 	if (other.classname != "missile")
+	if (other.classname != "rocket")
 	if (other.classname != "casing")
 	if (other.classname != "grenade")
 	if (other.classname != "plasma")
@@ -1011,7 +1017,7 @@
 	if (other.classname != "droppedweapon")
 		return;
 
-	if (other.deadflag && other.classname == "player")
+	if (other.deadflag && other.iscreature)
 		return;
 
 	EXACTTRIGGER_TOUCH;
@@ -1101,6 +1107,7 @@
 void monoflop_use()
 {
 	self.nextthink = time + self.wait;
+	self.enemy = activator;
 	if(self.state)
 		return;
 	self.state = 1;
@@ -1112,12 +1119,14 @@
 		return;
 	self.nextthink = time + self.wait;
 	self.state = 1;
+	self.enemy = activator;
 	SUB_UseTargets();
 }
 
 void monoflop_think()
 {
 	self.state = 0;
+	activator = self.enemy;
 	SUB_UseTargets();
 }
 
@@ -1142,6 +1151,7 @@
 
 	newstate = (time < cyclestart + self.wait);
 
+	activator = self;
 	if(self.state != newstate)
 		SUB_UseTargets();
 	self.state = newstate;

Modified: branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -751,7 +751,7 @@
 		start_weapons = WEPBIT_ROCKET_LAUNCHER;
 		weapon_action(WEP_ROCKET_LAUNCHER, WR_PRECACHE);
 		start_ammo_rockets = 999;
-		start_items |= IT_UNLIMITED_AMMO;
+		start_items |= IT_UNLIMITED_WEAPON_AMMO;
 	}
 	else if(g_nixnex)
 	{
@@ -787,7 +787,7 @@
 			start_ammo_nails = cvar("g_pickup_nails_max");
 			start_ammo_rockets = cvar("g_pickup_rockets_max");
 			start_ammo_cells = cvar("g_pickup_cells_max");
-			start_items |= IT_UNLIMITED_AMMO;
+			start_items |= IT_UNLIMITED_WEAPON_AMMO;
 		}
 
 		for(i = WEP_FIRST; i <= WEP_LAST; ++i)
@@ -1292,6 +1292,12 @@
 	objerror_builtin(s);
 }
 
+void remove_unsafely(entity e)
+{
+	e.classname = "";
+	remove_builtin(e);
+}
+
 void remove_safely(entity e)
 {
 	make_safe_for_remove(e);

Modified: branches/nexuiz-2.0/data/qcsrc/server/mode_onslaught.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/mode_onslaught.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/mode_onslaught.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -602,6 +602,7 @@
 	self.isshielded = TRUE;
 	// spawn shield model which indicates whether this can be damaged
 	self.enemy = e = spawn();
+	e.classname = "onslaught_generator_shield";
 	e.solid = SOLID_NOT;
 	e.movetype = MOVETYPE_NONE;
 	e.effects = EF_ADDITIVE;
@@ -633,6 +634,7 @@
 	self.nextthink = time + 0.2;
 }
 
+.float waslinked;
 void onslaught_controlpoint_icon_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
 	entity oself;
@@ -679,16 +681,19 @@
 		// Use targets now (somebody make sure this is in the right place..)
 		oself = self;
 		self = self.owner;
-		activator = self.owner;
+		activator = self;
 		SUB_UseTargets ();
 		self = oself;
 
+		self.owner.waslinked = self.owner.islinked;
+
 		remove(self);
 	}
 };
 
 void onslaught_controlpoint_icon_think()
 {
+	entity oself;
 	self.nextthink = time + 0.1;
 	if (time > self.pain_finished + 1)
 	{
@@ -699,14 +704,41 @@
 	self.alpha = self.health / self.max_health;
 	// colormod flash when shot
 	self.colormod = '1 1 1' * (2 - bound(0, (self.pain_finished - time) / 10, 1));
+
+	if(self.owner.islinked != self.owner.waslinked)
+	{
+		// unteam the spawnpoint if needed
+		float t;
+		t = self.owner.team;
+		if(!self.owner.islinked)
+			self.owner.team = 0;
+
+		oself = self;
+		self = self.owner;
+		activator = self;
+		SUB_UseTargets ();
+		self = oself;
+
+		self.owner.team = t;
+
+		self.owner.waslinked = self.owner.islinked;
+	}
 };
 
 void onslaught_controlpoint_icon_buildthink()
 {
 	local entity oself;
+	float a;
 
 	self.nextthink = time + 0.1;
+
+	// only do this if there is power
+	a = onslaught_controlpoint_can_be_linked(self.owner, self.owner.team);
+	if(!a)
+		return;
+
 	self.health = self.health + self.count;
+
 	if (self.health >= self.max_health)
 	{
 		self.health = self.max_health;
@@ -742,6 +774,7 @@
 	// so start building the captured point icon (which only captures this
 	// point if it successfully builds without being destroyed first)
 	self.goalentity = e = spawn();
+	e.classname = "onslaught_controlpoint_icon";
 	e.owner = self;
 	e.max_health = cvar("g_onslaught_cp_health");
 	e.health = e.max_health * 0.1;
@@ -803,6 +836,7 @@
 	self.isshielded = TRUE;
 	// spawn shield model which indicates whether this can be damaged
 	self.enemy = e = spawn();
+	e.classname = "onslaught_controlpoint_shield";
 	e.solid = SOLID_NOT;
 	e.movetype = MOVETYPE_NONE;
 	e.effects = EF_ADDITIVE;

Modified: branches/nexuiz-2.0/data/qcsrc/server/portals.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/portals.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/portals.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -239,6 +239,9 @@
 		return; // only handle TouchAreaGrid ones (only these can teleport)
 		// for some unknown reason, this also gets collisions from SV_Impact sometimes
 
+	if(other.classname == "grapplinghook")
+		return;
+
 	if(other.classname == "porto")
 	{
 		if(other.portal_id == self.portal_id)
@@ -261,12 +264,15 @@
 	fixedmakevectors(self.angles);
 	if((other.origin - self.origin) * v_forward < 0)
 		return;
+
+	/*
 	if(other.mins_x < PL_MIN_x || other.mins_y < PL_MIN_y || other.mins_z < PL_MIN_z
 	|| other.maxs_x > PL_MAX_x || other.maxs_y > PL_MAX_y || other.maxs_z > PL_MAX_z)
 	{
 		// can't teleport this
 		return;
 	}
+	*/
 
 	if(Portal_TeleportPlayer(self, other))
 		if(other.classname == "porto")

Modified: branches/nexuiz-2.0/data/qcsrc/server/progs.src
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/progs.src	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/progs.src	2008-10-24 09:45:12 UTC (rev 4863)
@@ -10,7 +10,7 @@
 ../common/util.qh
 
 //// tZork Turrets ////
-tturrets/include/turret_tturrets_early.qh
+tturrets/include/turrets_early.qh
 
 campaign.qh
 ../common/campaign_common.qh
@@ -84,6 +84,8 @@
 w_rocketlauncher.qc
 w_porto.qc
 w_hook.qc
+w_hlac.qc
+w_seeker.qc
 
 t_items.qc
 cl_weapons.qc
@@ -134,7 +136,7 @@
 
 
 //// tZork Turrets ////
-tturrets/include/turret_tturrets.qh
+tturrets/include/turrets.qh
 
 scores.qc
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/sv_main.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -133,7 +133,7 @@
 entity SelectSpawnPoint (float anypoint);
 void StartFrame (void)
 {
-	remove = remove_builtin; // not during spawning!
+	remove = remove_unsafely; // not during spawning!
 
 	dprint_load(); // load dprint status from cvar
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/t_halflife.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/t_halflife.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/t_halflife.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -37,7 +37,7 @@
 
 void func_ladder_touch()
 {
-	if (other.classname != "player")
+	if not(other.iscreature)
 		return;
 
 	EXACTTRIGGER_TOUCH;

Modified: branches/nexuiz-2.0/data/qcsrc/server/t_items.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/t_items.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -505,7 +505,7 @@
 
 	if (cvar("g_fullbrightitems"))
 		self.effects = self.effects | EF_FULLBRIGHT;
-	
+
 	if(self.team)
 	{
 		self.effects = self.effects | EF_NODRAW; // marker for item team search
@@ -946,12 +946,12 @@
 
 float target_item_func_itembitset(float a, float b)
 {
-	return (a - (a & (IT_UNLIMITED_AMMO | IT_STRENGTH | IT_INVINCIBLE))) | b;
+	return (a - (a & (IT_UNLIMITED_WEAPON_AMMO | IT_STRENGTH | IT_INVINCIBLE))) | b;
 }
 
 float target_item_func_itemand(float a, float b)
 {
-	return (a - (a & (IT_UNLIMITED_AMMO | IT_STRENGTH | IT_INVINCIBLE))) | (a & b);
+	return (a - (a & (IT_UNLIMITED_WEAPON_AMMO | IT_STRENGTH | IT_INVINCIBLE))) | (a & b);
 }
 
 float target_item_func_or(float a, float b)
@@ -1091,7 +1091,7 @@
 		activator.strength_finished = 0;
 	if not(activator.items & IT_INVINCIBLE)
 		activator.invincible_finished = 0;
-	
+
 	if(activator.health > h0)
 		activator.pauserothealth_finished = max(activator.pauserothealth_finished, time + cvar("g_balance_pause_health_rot"));
 	else if(activator.health < h0)
@@ -1118,7 +1118,7 @@
 		self.strength_finished = cvar("g_balance_powerup_strength_time");
 	if(!self.invincible_finished)
 		self.invincible_finished = cvar("g_balance_powerup_invincible_time");
-	
+
 	precache_sound("misc/itempickup.wav");
 	precache_sound("misc/itempickup.wav");
 	precache_sound("misc/itempickup.wav");
@@ -1131,9 +1131,11 @@
 	n = tokenize_sane(self.netname);
 	for(i = 0; i < n; ++i)
 	{
-		if(argv(i) == "unlimited_ammo") self.items |= IT_UNLIMITED_AMMO;
-		if(argv(i) == "strength")       self.items |= IT_STRENGTH;
-		if(argv(i) == "invincible")     self.items |= IT_INVINCIBLE;
+		if(argv(i) == "unlimited_ammo")         self.items |= IT_UNLIMITED_AMMO;
+		if(argv(i) == "unlimited_weapon_ammo")  self.items |= IT_UNLIMITED_WEAPON_AMMO;
+		if(argv(i) == "unlimited_superweapons") self.items |= IT_UNLIMITED_SUPERWEAPONS;
+		if(argv(i) == "strength")               self.items |= IT_STRENGTH;
+		if(argv(i) == "invincible")             self.items |= IT_INVINCIBLE;
 		for(j = WEP_FIRST; j <= WEP_LAST; ++j)
 		{
 			e = get_weaponinfo(j);

Modified: branches/nexuiz-2.0/data/qcsrc/server/t_jumppads.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/t_jumppads.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/t_jumppads.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -104,11 +104,12 @@
 void trigger_push_touch()
 {
 	// FIXME: add a .float for whether an entity should be tossed by jumppads
-	if (other.classname != "player")
+	if (!other.iscreature)
 	if (other.classname != "corpse")
 	if (other.classname != "body")
 	if (other.classname != "gib")
 	if (other.classname != "missile")
+	if (other.classname != "rocket")
 	if (other.classname != "casing")
 	if (other.classname != "grenade")
 	if (other.classname != "plasma")
@@ -117,7 +118,7 @@
 	if (other.classname != "droppedweapon")
 		return;
 
-	if (other.deadflag && other.classname == "player")
+	if (other.deadflag && other.iscreature)
 		return;
 
 	EXACTTRIGGER_TOUCH;
@@ -151,12 +152,12 @@
 				other.(jumppadsused[mod(other.jumppadcount, NUM_JUMPPADSUSED)]) = self;
 				other.jumppadcount = other.jumppadcount + 1;
 			}
+
+			if(self.message)
+				centerprint(other, self.message);
 		}
 		else
 			other.jumppadcount = TRUE;
-
-		if(self.message)
-			centerprint(other, self.message);
 	}
 
 	if(self.enemy.target)

Modified: branches/nexuiz-2.0/data/qcsrc/server/t_plats.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/t_plats.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/t_plats.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -77,7 +77,7 @@
 
 void plat_center_touch()
 {
-	if (other.classname != "player")
+	if not(other.iscreature)
 		return;
 
 	if (other.health <= 0)
@@ -92,7 +92,7 @@
 
 void plat_outside_touch()
 {
-	if (other.classname != "player")
+	if not(other.iscreature)
 		return;
 
 	if (other.health <= 0)
@@ -505,7 +505,7 @@
 //	}
 	if (!other)
 		return;
-	if (other.classname != "player")
+	if not(other.iscreature)
 		return;
 	if(other.velocity * self.movedir < 0)
 		return;
@@ -771,6 +771,7 @@
 void door_trigger_touch()
 {
 	if (other.health < 1)
+	if not(other.iscreature && other.deadflag == DEAD_NO)
 		return;
 
 	if (time < self.attack_finished_single)
@@ -809,7 +810,7 @@
 */
 void door_touch()
 {
-	if (other.classname != "player")
+	if(other.classname != "player")
 		return;
 	if (self.owner.attack_finished_single > time)
 		return;
@@ -1207,7 +1208,7 @@
 */
 void secret_touch()
 {
-	if (activator.classname != "player")
+	if not(other.iscreature)
 		return;
 	if (self.attack_finished_single > time)
 		return;

Modified: branches/nexuiz-2.0/data/qcsrc/server/target_spawn.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/target_spawn.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/target_spawn.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -9,7 +9,19 @@
 .void() target_spawn_spawnfunc;
 float target_spawn_spawnfunc_field;
 .entity target_spawn_activator;
+.float target_spawn_id;
+float target_spawn_count;
 
+void target_spawn_helper_setmodel()
+{
+	setmodel(self, self.model);
+}
+
+void target_spawn_helper_setsize()
+{
+	setsize(self, self.mins, self.maxs);
+}
+
 void target_spawn_useon(entity e)
 {
 	float i, n, valuefieldpos;
@@ -20,6 +32,7 @@
 	entity oldactivator;
 
 	n = tokenize_sane(self.message);
+	self.target_spawn_activator = activator;
 
 	for(i = 0; i < n-1; i += 2)
 	{
@@ -169,13 +182,15 @@
 		}
 		if(key == "$")
 		{
+			if(substring(value, 0, 1) == "_")
+				value = strcat("target_spawn_helper", value);
 			putentityfieldstring(target_spawn_spawnfunc_field, e, value);
 
 			oldself = self;
 			oldactivator = activator;
 
 			self = e;
-			activator = self.target_spawn_activator;
+			activator = oldself.target_spawn_activator;
 
 			self.target_spawn_spawnfunc();
 
@@ -191,6 +206,25 @@
 	}
 }
 
+float target_spawn_cancreate()
+{
+	float c;
+	entity e;
+
+	c = self.count;
+	if(c == 0) // no limit?
+		return 1;
+
+	++c; // increase count to not include MYSELF
+	for(e = world; (e = findfloat(e, target_spawn_id, self.target_spawn_id)); --c)
+		;
+	
+	// if c now is 0, we have AT LEAST the given count (maybe more), so don't spawn any more
+	if(c == 0)
+		return 0;
+	return 1;
+}
+
 void target_spawn_use()
 {
 	entity e;
@@ -198,8 +232,11 @@
 	if(self.target == "")
 	{
 		// spawn new entity
+		if(!target_spawn_cancreate())
+			return;
 		e = spawn();
 		target_spawn_useon(e);
+		e.target_spawn_id = self.target_spawn_id;
 	}
 	else
 	{
@@ -216,7 +253,7 @@
 		target_spawn_use();
 }
 
-void spawnfunc_target_spawn()
+void initialize_field_db()
 {
 	if(!target_spawn_initialized)
 	{
@@ -242,7 +279,56 @@
 
 		target_spawn_initialized = 1;
 	}
+}
+
+void spawnfunc_target_spawn()
+{
+	initialize_field_db();
 	self.use = target_spawn_use;
 	self.message = strzone(strreplace("'", "\"", self.message));
+	self.target_spawn_id = ++target_spawn_count;
 	InitializeEntity(self, target_spawn_spawnfirst, INITPRIO_LAST);
 }
+
+
+void trigger_relay_if_use()
+{
+	float n;
+	var .string fld;
+	entity e;
+	n = self.count;
+
+	// TODO make this generic AND faster than nextent()ing through all, if somehow possible
+	if(self.netname == "targetname")
+		fld = targetname;
+	else if(self.netname == "netname")
+		fld = netname;
+	else if(self.netname == "target")
+		fld = target;
+	else if(self.netname == "classname")
+		fld = classname;
+	else
+	{
+		objerror("invalid field specified for trigger_relay_if");
+		return;
+	}
+
+	for(e = world; (e = find(e, fld, self.message)) && (n > 0); --n)
+		;
+
+	if(self.spawnflags & 1) // MORE THAN count valid targets
+	{
+		if(n)
+			SUB_UseTargets();
+	}
+	else // AT MOST count valid targets
+	{
+		if(!n)
+			SUB_UseTargets();
+	}
+}
+
+void spawnfunc_trigger_relay_if()
+{
+	self.use = trigger_relay_if_use;
+};

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turret_tturrets.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turret_tturrets.qh	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turret_tturrets.qh	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,31 +0,0 @@
-#ifdef TTURRETS_ENABLED
-
-// Include section.
-#include "../system/turret_system_misc.qc"       /// Assorted junk & jewls
-#include "../system/turret_system_main.qc"       /// And routines
-#include "../system/turret_system_aimprocs.qc"   /// Aiming realted stuff
-#include "../system/turret_system_scoreprocs.qc" /// Target calssification
-#include "../system/turret_system_damage.qc"     /// Outch, they are hurting me! what should i do?
-
-#include "../units/turret_unit_common.qc"   /// Some "make life easyer" funcs.
-
-// Non combat units
-#include "../units/turret_unit_fusionreactor.qc"  /// Supply unites that need it with power
-// #include "../units/turret_unit_targetcomputer.qc" /// Optimized target selection for multiple units
-#include "../units/turret_unit_targettrigger.qc"  /// Hit me!
-
-// Combat units
-#include "../units/turret_unit_plasma.qc"  /// Basic energy cannon
-#include "../units/turret_unit_mlrs.qc"    /// Basic multibay RL
-#include "../units/turret_unit_hellion.qc" /// Seeking missiles MLRS
-#include "../units/turret_unit_flac.qc"    /// anti missile turret
-#include "../units/turret_unit_phaser.qc"   /// ZzzapT
-//#include "../units/turret_unit_gauss.qc"   /// Railgun
-#include "../units/turret_unit_hk.qc"      /// Hunter killers
-#include "../units/turret_unit_machinegun.qc" /// whacka
-//#include "../units/turret_unit_minigun.qc" /// whacka whacka
-#include "../units/turret_unit_tessla.qc"  /// Chain lightning capabale turret
-//#include "../units/turret_unit_walker.qc"
-//#include "../units/turret_unit_howitzer.qc"
-
-#endif // TTURRETS_ENABLED

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turret_tturrets_early.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turret_tturrets_early.qh	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turret_tturrets_early.qh	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,466 +0,0 @@
-// Comment out below to skip turrets
-#define TTURRETS_ENABLED
-
-#ifdef TTURRETS_ENABLED
-
-#message "with tZork turrets rc2"
-
-vector real_origin(entity ent);
-
-/// target selection flags
-.float target_select_flags;
-.float target_validate_flags;
-/// Dont select a target on its own.
-#define TFL_TARGETSELECT_NO            1024
-/// Need line of sight
-#define TFL_TARGETSELECT_LOS           2
-/// Players are valid targets
-#define TFL_TARGETSELECT_PLAYERS       4
-/// Missiles are valid targets
-#define TFL_TARGETSELECT_MISSILES      8
-/// Responds to turret_trigger_target events
-#define TFL_TARGETSELECT_TRIGGERTARGET 16
-/// Angular limitations of turret head limits target selection
-#define TFL_TARGETSELECT_ANGLELIMITS   32
-/// Range limits apply in targetselection
-#define TFL_TARGETSELECT_RANGELIMTS    64
-/// DOnt select targets with a .team matching its own
-#define TFL_TARGETSELECT_TEAMCHECK     4096
-/// Cant select targets on its own. needs to be triggerd or slaved.
-#define TFL_TARGETSELECT_NOBUILTIN     256
-/// TFL_TARGETSELECT_TEAMCHECK is inverted (selects only mebers of own .team)
-#define TFL_TARGETSELECT_OWNTEAM       2048
-
-/// aim flags
-.float aim_flags;
-/// Dont aim.
-#define TFL_AIM_NO                  512
-/// Go for ground, not direct hit
-#define TFL_AIM_GROUND              2
-/// Go for ground, not direct hit if target is on ground too
-#define TFL_AIM_GROUND2              1024
-/// Use balistic aim (not implemented)
-#define TFL_AIM_BALISTIC            4
-/// Try to predict target movement
-#define TFL_AIM_LEAD                8
-/// Compensate for shot traveltime when lead
-#define TFL_AIM_SHOTTIMECOMPENSATE  16
-/// Aim slightly in front of target
-#define TFL_AIM_INFRONT             32
-/// Aim slightly behind target
-#define TFL_AIM_BEHIND              64
-/// blend real and predicted z positions. (fake bounce prediction)
-#define TFL_AIM_ZEASE               128
-/// Just poitn at target's current location
-#define TFL_AIM_SIMPLE              256
-
-/// track (turn and pitch head) flags
-.float track_flags;
-/// Dont move head
-#define TFL_TRACK_NO    2
-/// Pitch the head
-#define TFL_TRACK_PITCH 4
-/// Rotate the head
-#define TFL_TRACK_ROT   8
-
-/// How tracking is preformed
-.float track_type;
-/// Hard angle increments. Ugly for fast turning, best accuracy.
-#define TFL_TRACKTYPE_STEPMOTOR    1
-/// Smoth absolute movement. Looks ok, fair accuracy.
-#define TFL_TRACKTYPE_FLUIDPRECISE 2
-/// Simulated inertia. "Wobbly mode" Looks kool, can mean terrible accuracy depending on how the feilds below are set
-#define TFL_TRACKTYPE_FLUIDINERTIA 3
-/// TFL_TRACKTYPE_FLUIDINERTIA: pitch multiplier
-.float track_accel_pitch;
-/// TFL_TRACKTYPE_FLUIDINERTIA: rotation multiplier
-.float  track_accel_rot;
-/// TFL_TRACKTYPE_FLUIDINERTIA: Blendrate with old rotation (inertia simulation) 1  = only old, 0 = only new
-.float  track_blendrate;
-
-/// How prefire check is preformed
-.float firecheck_flags;
-/// Dont do any chekcs
-#define TFL_FIRECHECK_NO          8192
-/// Dont kill the world
-#define TFL_FIRECHECK_WORLD       2
-/// Dont kill the dead
-#define TFL_FIRECHECK_DEAD        4
-/// Range limits apply
-#define TFL_FIRECHECK_DISTANCES   8
-/// Line Of Sight needs to be clear
-#define TFL_FIRECHECK_LOS         16
-/// Consider distance inpactpoint<->aimspot
-#define TFL_FIRECHECK_AIMDIST     32
-/// Consider enemy origin<->impactpoint
-#define TFL_FIRECHECK_REALDIST    64
-/// Consider angular diff head<->aimspot
-#define TFL_FIRECHECK_ANGLEDIST  128
-/// (re)consider target.team<->self.team
-#define TFL_FIRECHECK_TEAMCECK   256
-/// Try to avoid friendly fire
-#define TFL_FIRECHECK_AFF        512
-/// Own .ammo needs to be >= then own .shot_dmg
-#define TFL_FIRECHECK_OWM_AMMO   1024
-/// Others ammo need to be < others .ammo_max
-#define TFL_FIRECHECK_OTHER_AMMO 2048
-/// Check own .attack_finished_single vs time
-#define TFL_FIRECHECK_REFIRE     4096
-
-/// How shooting is done
-.float shoot_flags;
-/// Dont shoot
-#define  TFL_SHOOT_NO          64
-/// Fire in vollys (partial implementation through .shot_volly)
-#define  TFL_SHOOT_VOLLY       2
-/// Always do a full volly, even if target is lost or dead. (not implemented)
-#define  TFL_SHOOT_VOLLYALWAYS 4
-/// Loop though all valid tarters, and hit them.
-#define  TFL_SHOOT_HITALLVALID 8
-/// Fiering makes unit loose target (after volly is done, if in volly mode)
-#define  TFL_SHOOT_CLEARTARGET 16
-///Custom shooting;
-#define  TFL_SHOOT_CUSTOM 32
-
-/// Information aboute the units capabilities
-.float turrcaps_flags;
-/// No kown capabilities
-#define  TFL_TURRCAPS_NONE        0
-/// Capable of sniping
-#define  TFL_TURRCAPS_SNIPER      2
-/// Capable of splasdamage
-#define  TFL_TURRCAPS_RADIUSDMG   4
-/// Has one or more cannons with zero shot traveltime
-#define  TFL_TURRCAPS_HITSCAN     8
-/// More then one (type of) gun
-#define  TFL_TURRCAPS_MULTIGUN    16
-/// Carries at least one guided weapon
-#define  TFL_TURRCAPS_GUIDED      32
-/// At least one gun fiers slow projectiles
-#define  TFL_TURRCAPS_SLOWPROJ    64
-/// At least one gun fiers medium speed projectiles
-#define  TFL_TURRCAPS_MEDPROJ     128
-/// At least one gun fiers fast projectiles
-#define  TFL_TURRCAPS_FASTPROJ    256
-/// At least one gun capable of damaging players
-#define  TFL_TURRCAPS_PLAYERKILL  512
-/// At least one gun that can shoot town missiles
-#define  TFL_TURRCAPS_MISSILEKILL 1024
-/// Has support capabilities. powerplants and sutch.
-#define  TFL_TURRCAPS_SUPPORT     2048
-/// Proveides at least one type of ammmo
-#define  TFL_TURRCAPS_AMMOSOURCE  4096
-/// Can recive targets from external sources
-#define TFL_TURRCAPS_RECIVETARGETS 8192
-/// Capable of self-transport
-#define TFL_TURRCAPS_MOVE 16384
-/// Will roam arround even if not chasing anyting
-#define TFL_TURRCAPS_ROAM 32768
-#define TFL_TURRCAPS_LINKED 65536
-
-/// Ammo types needed and/or provided
-.float ammo_flags;
-/// Has and needs no ammo
-#define  TFL_AMMO_NONE     64
-/// Uses power
-#define  TFL_AMMO_ENERGY   2
-/// Uses bullets
-#define  TFL_AMMO_BULLETS  4
-/// Uses explosives
-#define  TFL_AMMO_ROCKETS  8
-/// Regenerates ammo on its own
-#define  TFL_AMMO_RECHARGE 16
-/// Can recive ammo from others
-#define  TFL_AMMO_RECIVE   32
-
-/// How incomming damage is handeld
-.float damage_flags;
-/// Cant be hurt
-#define  TFL_DMG_NO              256
-/// Can be damaged
-#define  TFL_DMG_YES             2
-/// Can be damaged  by teammates
-#define  TFL_DMG_TAKEFROMTEAM    4
-/// Traget attackers
-#define  TFL_DMG_RETALIATE       8
-/// Target attackers, even is on own team
-#define  TFL_DMG_RETALIATEONTEAM 16
-/// Loses target when damaged
-#define  TFL_DMG_TARGETLOSS      32
-/// Reciving damage trows off aim
-#define  TFL_DMG_AIMSHAKE        64
-/// Reciving damage slaps the head arround
-#define  TFL_DMG_HEADSHAKE       128
-
-// Spawnflags
-/// Spawn in teambased modes
-#define TFL_SPAWN_TEAM      2
-/// Spawn in FFA modes
-#define TFL_SPAWN_FFA       4
-/// Respawn after death
-#define TFL_SPAWN_RESPAWN   8
-
-/*
-* Fields commnly used by turrets
-*/
-/// Turrets internal ai speed
-.float      ticrate;
-/// Where to point the head when no target
-.vector     idle_aim;
-/// Top part of turret
-.entity     tur_head;
-/// Start/respawn health
-.float      tur_health;
-/// Defend this entity (or ratehr this entitys position)
-.entity     tur_defend;
-/// on/off toggle.
-.float      tur_active;
-/// Aim from this point,
-.vector     tur_aimorg;
-/// and shoot from here. (could be non constant, think MLRS)
-.vector     tur_shotorg;
-/// Aim at this spot
-.vector     tur_aimpos;
-/// Predicted time the round will impact
-.float      tur_impacttime;
-/// Predicted place the round will impact
-.vector     tur_impactpoint;
-/// What entity the aimtrace hit, if any.
-.entity     tur_impactent;
-/// Distance to enemy
-.float      tur_dist_enemy;
-/// Distance impact<->aim
-.float      tur_dist_toaimpos;
-/// Decresment counter form .shot_volly to 0.
-.float      volly_counter;
-
-/*
-* Projectile/missile. its up to the individual turret implementation to
-** deal the damage, blow upp the missile or whatever.
-*/
-/// Track then refireing is possible
-//.float attack_finished; = attack_finished_single
-/// Shoot this often
-.float shot_refire;
-/// Shots travel this fast, when appliable
-.float shot_speed;
-/// Inaccuracy
-.float shot_spread;
-/// Estimated (core) damage of projectiles. also reduce on ammo with this amount when fiering
-.float shot_dmg;
-/// If radius dmg, this is how big that radius is.
-.float shot_radius;
-/// Max force exserted by round impact
-.float shot_force;
-/// < 1 = shoot # times at target (if possible)
-.float shot_volly;
-/// Refire after a compleated or borken volly.
-.float shot_volly_refire;
-
-/// Consider targets within this range
-.float target_range;
-/// Dont consider targets closer then
-.float target_range_min;
-/// Engage fire routine on targets within
-.float target_range_fire;
-/// Targets closer to this are prefered
-.float target_range_optimal;
-
-/*
-* The standard targetselection tries to select a target based on
-* range, angle offset, target type, "is old target"
-* Thise biases will allow score scaling to (dis)favor diffrent targets
-*/
-/// (dis)Favor best range this mutch
-.float target_select_rangebias;
-/// (dis)Favor targeting my old enemy this mutch
-.float target_select_samebias;
-/// (dis)Favor targeting the enemy closest to my guns current angle this mutch
-.float target_select_anglebias;
-/// (dis)Favor Missiles? (-1 to diable targeting compleatly)
-.float target_select_missilebias;
-/// (dis)Favot living players (-1 to diable targeting compleatly)
-.float target_select_playerbias;
-
-/*
-* Aim refers to real aiming, not gun pos (thats done by track)
-*/
-/// Maximum offset between impact and aim spot to fire
-.float aim_firetolerance_dist;
-/// Maximum angular offset between head and aimspot to fire
-//.float aim_firetolerance_angle;
-/// How fast can i rotate/pitch (per second in stepmotor mode, base force in smooth modes)
-.float aim_speed;
-/// cant aim higher/lower then this
-.float aim_maxpitch;
-/// I cant rotate more then this
-.float aim_maxrot;
-
-// Ammo/power. keeping dmg and ammo on a one to one ratio is preferable (for rating)
-/// Staring & current ammo
-.float ammo;
-/// Regenerate this mutch ammo (per second)
-.float ammo_recharge;
-/// Max amount of ammo i can hold
-.float ammo_max;
-
-
-// Uncomment below to enable various debug output.
-//#define TURRET_DEBUG
-//#define TURRET_DEBUG_TARGETVALIDATE
-//#define TURRET_DEBUG_TARGETSELECT
-
-#ifdef TURRET_DEBUG
-.float tur_dbg_dmg_t_h; // Total dmg that hit something (can be more then tur_dbg_dmg_t_f since it should count radius dmg.
-.float tur_dbg_dmg_t_f; // Total damage spent
-.float tur_dbg_start;   // When did i go online?
-.float tur_dbg_tmr1;    // timer for random use
-.float tur_dbg_tmr2;    // timer for random use
-.float tur_dbg_tmr3;    // timer for random use
-.vector tur_dbg_rvec;   // Random vector, mainly for coloruing stuff'
-#endif
-
-// System main's
-/// Main AI loop
-void turret_think();
-/// Prefire checks and sutch
-void turret_fire();
-
-// Callbacks
-/// implements the actual fiering
-.void()  turret_firefunc;
-/// prefire checks go here. return 1 to go bang, 0 not to.
-.float() turret_firecheckfunc;
-// Execure BEFORE main ai loop. return 0 to cancel any following proccessing.
-//.float() turret_prethink;
-/// Execure AFTER main AI loop UNLESS turret_prethink returnd 0
-.void()  turret_postthink;
-
-/// Add a target
-.float(entity e_target,entity e_sender) turret_addtarget;
-
-//.float call_diehook;
-//.float call_respwnhook;
-.void() turret_diehook;
-.void() turret_respawnhook;
-
-/*
-#define TEH_THINK 2
-#define TEH_DAMAGE 4
-#define TEH_DIE 8
-#define TEH_RESPAWN 16
-#define TEH_TRACK 32
-#define TEH_AIM 64
-#define TEH_SELECT 128
-.float(float event_id) turret_eventhook;
-*/
-
-/*
-* Some turrets need other aimsystems then other.
-* This should return the place to aim at, not acctualy turn or
-* pitch anyting.
-*
-* use turret_stdproc_aim* or Make your own.
-* Make sure you update tur_enemy_dist and tur_enemy_adist
-* with the apropriate info, if you do.
-
-removed.
-*/
-/// function used to aim, usualy turret_stdproc_aim_generic
-//.vector() turret_aim;
-
-/*
-* This is where the acctual turret turning should take place
-* Use turret_stdproc_track or make your own.
-wkacked to save mem.
-*/
-// Function used to turn and pitch the .tur_head usualy turret_stdproc_track
-//.void() turret_track;
-
-/*
-* Target selection, preferably but not nessesarely
-* return a normalized result.
-*/
-/// Function to use for target evaluation. usualy turret_stdproc_targetscore_generic
-.float(entity e_turret, entity e_target) turret_score_target;
-
-/*
-* Damage, death and respawn.
-*/
-//void turret_gibs_precash();
-// generalized so save mem (on fields)
-// Function to handle incomming damage. usualy turret_stdproc_damage
-//.void(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce) turret_damagefunc;
-// Function to handle the event of death. usualy turret_stdproc_die
-//.void() turret_diefunc;
-// Function that handles rebirth. usualy turret_stdproc_respawn
-//.void() turret_spawnfunc;
-
-/*
-* Stuff to plug into requierd but unused callbacks.
-*/
-/// Always return 1
-float turret_stdproc_true();
-/// Always return 0
-float turret_stdproc_false();
-/// Always return nothing at all
-void turret_stdproc_nothing();
-
-/*
-* Target selection
-*/
-/// "closeer is beter" selection
-float   turret_stdproc_targetscore_close(entity e_turret, entity e_target);
-/// "further is beter" selection
-float   turret_stdproc_targetscore_far(entity e_turret, entity e_target);
-/// only target_range_optimal
-float   turret_stdproc_targetscore_optimal(entity e_turret, entity e_target);
-/// defendpos
-float   turret_stdproc_targetscore_defend(entity e_turret, entity e_target);
-/// Generic fairly smart bias-aware target selection.
-float   turret_stdproc_targetscore_generic(entity e_turret, entity e_target);
-/// Experimental supportunits targetselector
-float   turret_stdproc_targetscore_support(entity e_turret,entity e_target);
-
-/*
-* Aim functions
-*/
-/// Generic aimer guided by self.aim_flags
-vector turret_stdproc_aim_generic()
-// Straight line, current location
-//vector  turret_stdproc_aim_simple()
-
-/*
-* Turret turning & pitch
-*/
-/// Tries to line up the turret head with the aimpos
-void turret_stdproc_track();
-
-/// Generic damage handeling. blows up the turret when health <= 0
-void turret_stdproc_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce);
-/// Spawns a explotion, does some damage & trows bits arround.
-void turret_stdproc_die();
-/// reassembles the turret.
-void turret_stdproc_respawn();
-
-/// Evaluate target validity
-float turret_validate_target(entity e_turret,entity e_target,float validate_flags);
-/// Turret Head Angle Diff Vector. updated by a sucsessfull call to turret_validate_target
-vector tvt_thadv;
-/// Turret Angle Diff Vector. updated by a sucsessfull call to turret_validate_target
-vector tvt_tadv;
-/// Turret Head Angle Diff Float. updated by a sucsessfull call to turret_validate_target
-float  tvt_thadf;
-/// Turret Angle Diff Float. updated by a sucsessfull call to turret_validate_target
-float  tvt_tadf;
-/// Distance. updated by a sucsessfull call to turret_validate_target
-float  tvt_dist;
-
-/// updates aim org, shot org, shot dir and enemy org for selected turret
-void turret_do_updates(entity e_turret);
-.vector tur_aimorg_updated;
-.vector tur_shotorg_updated;
-.vector tur_shotdir_updated;
-
-void turrets_precash();
-#endif // TTURRETS_ENABLED

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets.qh (from rev 4862, trunk/data/qcsrc/server/tturrets/include/turrets.qh)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets.qh	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets.qh	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,28 @@
+#ifdef TTURRETS_ENABLED
+
+// Include section.
+#include "../system/system_misc.qc"       /// Assorted junk & jewls
+#include "../system/system_main.qc"       /// And routines
+#include "../system/system_aimprocs.qc"   /// Aiming realted stuff
+#include "../system/system_scoreprocs.qc" /// Target calssification
+#include "../system/system_damage.qc"     /// Outch, they are hurting me! what should i do?
+
+#include "../units/unit_common.qc"   /// Some "make life easyer" funcs.
+
+// Non combat units
+#include "../units/unit_fusionreactor.qc"  /// Supply unites that need it with power
+#include "../units/unit_targettrigger.qc"  /// Hit me!
+
+// Combat units
+#include "../units/unit_plasma.qc"  /// Basic energy cannon
+#include "../units/unit_mlrs.qc"    /// Basic multibay RL
+#include "../units/unit_hellion.qc" /// Seeking missiles MLRS
+#include "../units/unit_flac.qc"    /// anti missile turret
+#include "../units/unit_phaser.qc"   /// ZzzapT
+#include "../units/unit_hk.qc"      /// Hunter killers
+#include "../units/unit_machinegun.qc" /// whacka
+#include "../units/unit_tessla.qc"  /// Chain lightning capabale turret
+#include "../units/unit_walker.qc"
+
+
+#endif // TTURRETS_ENABLED

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh (from rev 4862, trunk/data/qcsrc/server/tturrets/include/turrets_early.qh)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,472 @@
+// Comment out below to skip turrets
+#define TTURRETS_ENABLED
+
+#ifdef TTURRETS_ENABLED
+
+#message "with tZork turrets rc2"
+
+vector real_origin(entity ent);
+
+/// target selection flags
+.float target_select_flags;
+.float target_validate_flags;
+/// Dont select a target on its own.
+#define TFL_TARGETSELECT_NO            1024
+/// Need line of sight
+#define TFL_TARGETSELECT_LOS           2
+/// Players are valid targets
+#define TFL_TARGETSELECT_PLAYERS       4
+/// Missiles are valid targets
+#define TFL_TARGETSELECT_MISSILES      8
+/// Responds to turret_trigger_target events
+#define TFL_TARGETSELECT_TRIGGERTARGET 16
+/// Angular limitations of turret head limits target selection
+#define TFL_TARGETSELECT_ANGLELIMITS   32
+/// Range limits apply in targetselection
+#define TFL_TARGETSELECT_RANGELIMTS    64
+/// DOnt select targets with a .team matching its own
+#define TFL_TARGETSELECT_TEAMCHECK     4096
+/// Cant select targets on its own. needs to be triggerd or slaved.
+#define TFL_TARGETSELECT_NOBUILTIN     256
+/// TFL_TARGETSELECT_TEAMCHECK is inverted (selects only mebers of own .team)
+#define TFL_TARGETSELECT_OWNTEAM       2048
+/// Turrets aren't valid targets
+#define TFL_TARGETSELECT_NOTURRETS     128
+
+/// aim flags
+.float aim_flags;
+/// Dont aim.
+#define TFL_AIM_NO                  1
+/// Go for ground, not direct hit
+#define TFL_AIM_GROUND              2
+/// Go for ground, not direct hit if target is on ground too
+#define TFL_AIM_GROUND2              4
+/// Use balistic aim (not implemented)
+#define TFL_AIM_BALISTIC            8
+/// Try to predict target movement (does not account for gravity)
+#define TFL_AIM_LEAD                16
+/// Compensate for shot traveltime when lead
+#define TFL_AIM_SHOTTIMECOMPENSATE  32
+/// Aim slightly in front of target
+#define TFL_AIM_INFRONT             64
+/// Aim slightly behind target
+#define TFL_AIM_BEHIND              128
+/// blend real and predicted z positions. (fake bounce prediction)
+#define TFL_AIM_ZEASE               256
+/// Try to do real prediction of targets z pos at impact.
+//#define TFL_AIM_ZPREDICT            256
+/// Just poitn at target's current location
+#define TFL_AIM_SIMPLE              512
+
+/// track (turn and pitch head) flags
+.float track_flags;
+/// Dont move head
+#define TFL_TRACK_NO    2
+/// Pitch the head
+#define TFL_TRACK_PITCH 4
+/// Rotate the head
+#define TFL_TRACK_ROT   8
+
+/// How tracking is preformed
+.float track_type;
+/// Hard angle increments. Ugly for fast turning, best accuracy.
+#define TFL_TRACKTYPE_STEPMOTOR    1
+/// Smoth absolute movement. Looks ok, fair accuracy.
+#define TFL_TRACKTYPE_FLUIDPRECISE 2
+/// Simulated inertia. "Wobbly mode" Looks kool, can mean terrible accuracy depending on how the feilds below are set
+#define TFL_TRACKTYPE_FLUIDINERTIA 3
+/// TFL_TRACKTYPE_FLUIDINERTIA: pitch multiplier
+.float track_accel_pitch;
+/// TFL_TRACKTYPE_FLUIDINERTIA: rotation multiplier
+.float  track_accel_rot;
+/// TFL_TRACKTYPE_FLUIDINERTIA: Blendrate with old rotation (inertia simulation) 1  = only old, 0 = only new
+.float  track_blendrate;
+
+/// How prefire check is preformed
+.float firecheck_flags;
+/// Dont do any chekcs
+#define TFL_FIRECHECK_NO          8192
+/// Dont kill the world
+#define TFL_FIRECHECK_WORLD       2
+/// Dont kill the dead
+#define TFL_FIRECHECK_DEAD        4
+/// Range limits apply
+#define TFL_FIRECHECK_DISTANCES   8
+/// Line Of Sight needs to be clear
+#define TFL_FIRECHECK_LOS         16
+/// Consider distance inpactpoint<->aimspot
+#define TFL_FIRECHECK_AIMDIST     32
+/// Consider enemy origin<->impactpoint
+#define TFL_FIRECHECK_REALDIST    64
+/// Consider angular diff head<->aimspot
+#define TFL_FIRECHECK_ANGLEDIST  128
+/// (re)consider target.team<->self.team
+#define TFL_FIRECHECK_TEAMCECK   256
+/// Try to avoid friendly fire
+#define TFL_FIRECHECK_AFF        512
+/// Own .ammo needs to be >= then own .shot_dmg
+#define TFL_FIRECHECK_OWM_AMMO   1024
+/// Others ammo need to be < others .ammo_max
+#define TFL_FIRECHECK_OTHER_AMMO 2048
+/// Check own .attack_finished_single vs time
+#define TFL_FIRECHECK_REFIRE     4096
+
+/// How shooting is done
+.float shoot_flags;
+/// Dont shoot
+#define  TFL_SHOOT_NO          64
+/// Fire in vollys (partial implementation through .shot_volly)
+#define  TFL_SHOOT_VOLLY       2
+/// Always do a full volly, even if target is lost or dead. (not implemented)
+#define  TFL_SHOOT_VOLLYALWAYS 4
+/// Loop though all valid tarters, and hit them.
+#define  TFL_SHOOT_HITALLVALID 8
+/// Fiering makes unit loose target (after volly is done, if in volly mode)
+#define  TFL_SHOOT_CLEARTARGET 16
+///Custom shooting;
+#define  TFL_SHOOT_CUSTOM 32
+
+/// Information aboute the units capabilities
+.float turrcaps_flags;
+/// No kown capabilities
+#define  TFL_TURRCAPS_NONE        0
+/// Capable of sniping
+#define  TFL_TURRCAPS_SNIPER      2
+/// Capable of splasdamage
+#define  TFL_TURRCAPS_RADIUSDMG   4
+/// Has one or more cannons with zero shot traveltime
+#define  TFL_TURRCAPS_HITSCAN     8
+/// More then one (type of) gun
+#define  TFL_TURRCAPS_MULTIGUN    16
+/// Carries at least one guided weapon
+#define  TFL_TURRCAPS_GUIDED      32
+/// At least one gun fiers slow projectiles
+#define  TFL_TURRCAPS_SLOWPROJ    64
+/// At least one gun fiers medium speed projectiles
+#define  TFL_TURRCAPS_MEDPROJ     128
+/// At least one gun fiers fast projectiles
+#define  TFL_TURRCAPS_FASTPROJ    256
+/// At least one gun capable of damaging players
+#define  TFL_TURRCAPS_PLAYERKILL  512
+/// At least one gun that can shoot town missiles
+#define  TFL_TURRCAPS_MISSILEKILL 1024
+/// Has support capabilities. powerplants and sutch.
+#define  TFL_TURRCAPS_SUPPORT     2048
+/// Proveides at least one type of ammmo
+#define  TFL_TURRCAPS_AMMOSOURCE  4096
+/// Can recive targets from external sources
+#define TFL_TURRCAPS_RECIVETARGETS 8192
+/// Capable of self-transport
+#define TFL_TURRCAPS_MOVE 16384
+/// Will roam arround even if not chasing anyting
+#define TFL_TURRCAPS_ROAM 32768
+#define TFL_TURRCAPS_LINKED 65536
+
+/// Ammo types needed and/or provided
+.float ammo_flags;
+/// Has and needs no ammo
+#define  TFL_AMMO_NONE     64
+/// Uses power
+#define  TFL_AMMO_ENERGY   2
+/// Uses bullets
+#define  TFL_AMMO_BULLETS  4
+/// Uses explosives
+#define  TFL_AMMO_ROCKETS  8
+/// Regenerates ammo on its own
+#define  TFL_AMMO_RECHARGE 16
+/// Can recive ammo from others
+#define  TFL_AMMO_RECIVE   32
+
+/// How incomming damage is handeld
+.float damage_flags;
+/// Cant be hurt
+#define  TFL_DMG_NO              256
+/// Can be damaged
+#define  TFL_DMG_YES             2
+/// Can be damaged  by teammates
+#define  TFL_DMG_TAKEFROMTEAM    4
+/// Traget attackers
+#define  TFL_DMG_RETALIATE       8
+/// Target attackers, even is on own team
+#define  TFL_DMG_RETALIATEONTEAM 16
+/// Loses target when damaged
+#define  TFL_DMG_TARGETLOSS      32
+/// Reciving damage trows off aim
+#define  TFL_DMG_AIMSHAKE        64
+/// Reciving damage slaps the head arround
+#define  TFL_DMG_HEADSHAKE       128
+/// Die and stay dead.
+#define  TFL_DMG_DEATH_NORESPAWN 256
+
+// Spawnflags
+/// Spawn in teambased modes
+#define TFL_SPAWN_TEAM      2
+/// Spawn in FFA modes
+#define TFL_SPAWN_FFA       4
+/// Respawn after death
+#define TFL_SPAWN_RESPAWN   8
+
+/*
+* Fields commnly used by turrets
+*/
+/// Turrets internal ai speed
+.float      ticrate;
+/// Where to point the head when no target
+.vector     idle_aim;
+/// Top part of turret
+.entity     tur_head;
+/// Start/respawn health
+.float      tur_health;
+/// Defend this entity (or ratehr this entitys position)
+.entity     tur_defend;
+/// on/off toggle.
+.float      tur_active;
+/// Aim from this point,
+.vector     tur_aimorg;
+/// and shoot from here. (could be non constant, think MLRS)
+.vector     tur_shotorg;
+/// Aim at this spot
+.vector     tur_aimpos;
+/// Predicted time the round will impact
+.float      tur_impacttime;
+/// Predicted place the round will impact
+.vector     tur_impactpoint;
+/// What entity the aimtrace hit, if any.
+.entity     tur_impactent;
+/// Distance to enemy
+.float      tur_dist_enemy;
+/// Distance impact<->aim
+.float      tur_dist_toaimpos;
+/// Decresment counter form .shot_volly to 0.
+.float      volly_counter;
+
+/*
+* Projectile/missile. its up to the individual turret implementation to
+** deal the damage, blow upp the missile or whatever.
+*/
+/// Track then refireing is possible
+//.float attack_finished; = attack_finished_single
+/// Shoot this often
+.float shot_refire;
+/// Shots travel this fast, when appliable
+.float shot_speed;
+/// Inaccuracy
+.float shot_spread;
+/// Estimated (core) damage of projectiles. also reduce on ammo with this amount when fiering
+.float shot_dmg;
+/// If radius dmg, this is how big that radius is.
+.float shot_radius;
+/// Max force exserted by round impact
+.float shot_force;
+/// < 1 = shoot # times at target (if possible)
+.float shot_volly;
+/// Refire after a compleated or borken volly.
+.float shot_volly_refire;
+
+/// Consider targets within this range
+.float target_range;
+/// Dont consider targets closer then
+.float target_range_min;
+/// Engage fire routine on targets within
+.float target_range_fire;
+/// Targets closer to this are prefered
+.float target_range_optimal;
+
+/*
+* The standard targetselection tries to select a target based on
+* range, angle offset, target type, "is old target"
+* Thise biases will allow score scaling to (dis)favor diffrent targets
+*/
+/// (dis)Favor best range this mutch
+.float target_select_rangebias;
+/// (dis)Favor targeting my old enemy this mutch
+.float target_select_samebias;
+/// (dis)Favor targeting the enemy closest to my guns current angle this mutch
+.float target_select_anglebias;
+/// (dis)Favor Missiles? (-1 to diable targeting compleatly)
+.float target_select_missilebias;
+/// (dis)Favot living players (-1 to diable targeting compleatly)
+.float target_select_playerbias;
+
+/*
+* Aim refers to real aiming, not gun pos (thats done by track)
+*/
+/// Maximum offset between impact and aim spot to fire
+.float aim_firetolerance_dist;
+/// Maximum angular offset between head and aimspot to fire
+//.float aim_firetolerance_angle;
+/// How fast can i rotate/pitch (per second in stepmotor mode, base force in smooth modes)
+.float aim_speed;
+/// cant aim higher/lower then this
+.float aim_maxpitch;
+/// I cant rotate more then this
+.float aim_maxrot;
+
+// Ammo/power. keeping dmg and ammo on a one to one ratio is preferable (for rating)
+/// Staring & current ammo
+.float ammo;
+/// Regenerate this mutch ammo (per second)
+.float ammo_recharge;
+/// Max amount of ammo i can hold
+.float ammo_max;
+
+
+// Uncomment below to enable various debug output.
+//#define TURRET_DEBUG
+//#define TURRET_DEBUG_TARGETVALIDATE
+//#define TURRET_DEBUG_TARGETSELECT
+
+#ifdef TURRET_DEBUG
+.float tur_dbg_dmg_t_h; // Total dmg that hit something (can be more then tur_dbg_dmg_t_f since it should count radius dmg.
+.float tur_dbg_dmg_t_f; // Total damage spent
+.float tur_dbg_start;   // When did i go online?
+.float tur_dbg_tmr1;    // timer for random use
+.float tur_dbg_tmr2;    // timer for random use
+.float tur_dbg_tmr3;    // timer for random use
+.vector tur_dbg_rvec;   // Random vector, mainly for coloruing stuff'
+#endif
+
+// System main's
+/// Main AI loop
+void turret_think();
+/// Prefire checks and sutch
+void turret_fire();
+
+// Callbacks
+/// implements the actual fiering
+.void()  turret_firefunc;
+/// prefire checks go here. return 1 to go bang, 0 not to.
+.float() turret_firecheckfunc;
+// Execure BEFORE main ai loop. return 0 to cancel any following proccessing.
+//.float() turret_prethink;
+/// Execure AFTER main AI loop UNLESS turret_prethink returnd 0
+.void()  turret_postthink;
+
+/// Add a target
+.float(entity e_target,entity e_sender) turret_addtarget;
+
+//.float call_diehook;
+//.float call_respwnhook;
+.void() turret_diehook;
+.void() turret_respawnhook;
+
+/*
+#define TEH_THINK 2
+#define TEH_DAMAGE 4
+#define TEH_DIE 8
+#define TEH_RESPAWN 16
+#define TEH_TRACK 32
+#define TEH_AIM 64
+#define TEH_SELECT 128
+.float(float event_id) turret_eventhook;
+*/
+
+/*
+* Some turrets need other aimsystems then other.
+* This should return the place to aim at, not acctualy turn or
+* pitch anyting.
+*
+* use turret_stdproc_aim* or Make your own.
+* Make sure you update tur_enemy_dist and tur_enemy_adist
+* with the apropriate info, if you do.
+
+removed.
+*/
+/// function used to aim, usualy turret_stdproc_aim_generic
+//.vector() turret_aim;
+
+/*
+* This is where the acctual turret turning should take place
+* Use turret_stdproc_track or make your own.
+wkacked to save mem.
+*/
+// Function used to turn and pitch the .tur_head usualy turret_stdproc_track
+//.void() turret_track;
+
+/*
+* Target selection, preferably but not nessesarely
+* return a normalized result.
+*/
+/// Function to use for target evaluation. usualy turret_stdproc_targetscore_generic
+.float(entity e_turret, entity e_target) turret_score_target;
+
+/*
+* Damage, death and respawn.
+*/
+//void turret_gibs_precash();
+// generalized so save mem (on fields)
+// Function to handle incomming damage. usualy turret_stdproc_damage
+//.void(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce) turret_damagefunc;
+// Function to handle the event of death. usualy turret_stdproc_die
+//.void() turret_diefunc;
+// Function that handles rebirth. usualy turret_stdproc_respawn
+//.void() turret_spawnfunc;
+
+/*
+* Stuff to plug into requierd but unused callbacks.
+*/
+/// Always return 1
+float turret_stdproc_true();
+/// Always return 0
+float turret_stdproc_false();
+/// Always return nothing at all
+void turret_stdproc_nothing();
+
+/*
+* Target selection
+*/
+/// "closeer is beter" selection
+float   turret_stdproc_targetscore_close(entity e_turret, entity e_target);
+/// "further is beter" selection
+float   turret_stdproc_targetscore_far(entity e_turret, entity e_target);
+/// only target_range_optimal
+float   turret_stdproc_targetscore_optimal(entity e_turret, entity e_target);
+/// defendpos
+float   turret_stdproc_targetscore_defend(entity e_turret, entity e_target);
+/// Generic fairly smart bias-aware target selection.
+float   turret_stdproc_targetscore_generic(entity e_turret, entity e_target);
+/// Experimental supportunits targetselector
+float   turret_stdproc_targetscore_support(entity e_turret,entity e_target);
+
+/*
+* Aim functions
+*/
+/// Generic aimer guided by self.aim_flags
+vector turret_stdproc_aim_generic()
+// Straight line, current location
+//vector  turret_stdproc_aim_simple()
+
+/*
+* Turret turning & pitch
+*/
+/// Tries to line up the turret head with the aimpos
+void turret_stdproc_track();
+
+/// Generic damage handeling. blows up the turret when health <= 0
+void turret_stdproc_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce);
+/// Spawns a explotion, does some damage & trows bits arround.
+void turret_stdproc_die();
+/// reassembles the turret.
+void turret_stdproc_respawn();
+
+/// Evaluate target validity
+float turret_validate_target(entity e_turret,entity e_target,float validate_flags);
+/// Turret Head Angle Diff Vector. updated by a sucsessfull call to turret_validate_target
+vector tvt_thadv;
+/// Turret Angle Diff Vector. updated by a sucsessfull call to turret_validate_target
+vector tvt_tadv;
+/// Turret Head Angle Diff Float. updated by a sucsessfull call to turret_validate_target
+float  tvt_thadf;
+/// Turret Angle Diff Float. updated by a sucsessfull call to turret_validate_target
+float  tvt_tadf;
+/// Distance. updated by a sucsessfull call to turret_validate_target
+float  tvt_dist;
+
+/// updates aim org, shot org, shot dir and enemy org for selected turret
+void turret_do_updates(entity e_turret);
+.vector tur_aimorg_updated;
+.vector tur_shotorg_updated;
+.vector tur_shotdir_updated;
+
+void turrets_precash();
+#endif // TTURRETS_ENABLED

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_aimprocs.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/system/system_aimprocs.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_aimprocs.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_aimprocs.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,140 @@
+/*
+* Straight line, Dead-on (no prediction)
+* Usefull for "stupid turrets" or ones
+* that launch guided weapons and just need to apeer to
+* somewhat face (and/or track) the target.
+
+supports:
+TFL_AIM_NO
+*/
+/*
+vector turret_stdproc_aim_simple()
+{
+    float s_bu;     // Solidity backup (for ground shooters)
+    vector aim_pos;
+
+    if (self.aim_flags & TFL_AIM_NO) return self.idle_aim;
+
+    aim_pos = self.enemy.origin;
+
+    // Target ground?
+    if (self.aim_flags & TFL_AIM_GROUND)
+    {
+        s_bu = self.enemy.solid;
+        self.enemy.solid = SOLID_NOT;
+        traceline(self.enemy.origin + '0 0 128',self.enemy.origin + '0 0 -99999',1,self.enemy);
+        self.enemy.solid = s_bu;
+        aim_pos = trace_endpos;
+    }
+
+    // This is where its at.
+    return aim_pos;
+}
+*/
+
+/*
+* Generic aim
+
+supports:
+TFL_AIM_NO
+TFL_AIM_GROUND
+TFL_AIM_LEAD
+TFL_AIM_SHOTTIMECOMPENSATE
+TFL_AIM_INFRONT
+TFL_AIM_BEHIND
+TFL_AIM_ZEASE
+
+not supported:
+TFL_AIM_BALISTIC
+*/
+
+
+vector turret_stdproc_aim_generic()
+{
+    vector pre_pos;
+    // entity mover;
+
+    if (self.aim_flags == TFL_AIM_NO)
+        return self.idle_aim;
+
+    // Baseline
+    pre_pos = real_origin(self.enemy);
+
+    if(self.aim_flags & TFL_AIM_SIMPLE)
+        return pre_pos;
+
+    // Lead?
+    //pre_pos = pre_pos + bot_shotlead(self.enemy.origin, self.enemy.velocity, self.shot_speed, 0.01); //self.enemy.velocity;  * (self.tur_dist_enemy / self.shot_speed);
+    if (self.aim_flags & TFL_AIM_LEAD)
+        if (self.aim_flags & TFL_AIM_SHOTTIMECOMPENSATE)       // Need to conpensate for shot traveltime
+        {
+            pre_pos = pre_pos + self.enemy.velocity  * (self.tur_dist_enemy / self.shot_speed);
+
+            // FIXME slow projectiles misspredict (well all do, bit the slow ons miss :P)
+        }
+        else if (self.turrcaps_flags & TFL_TURRCAPS_HITSCAN)   // Hitscan gun, conpensate for frametime and posibly refire offset.
+            pre_pos = pre_pos + self.enemy.velocity * (frametime + min(max(self.attack_finished_single - time,0),self.ticrate*2));
+        else                                                   // No lead
+            pre_pos += self.enemy.velocity;
+
+
+    // Smooth out predict-Z?
+    /*
+    if (self.aim_flags & TFL_AIM_ZEASE)
+    {
+        vector v;
+        v = real_origin(self.enemy);
+        pre_pos_z = (pre_pos_z  + v_z) * 0.5;
+    }
+    */
+
+    /*
+    if (self.aim_flags & TFL_AIM_INFRONT)   // Aim a bit in front of the target
+        pre_pos -= normalize(self.tur_aimorg_updated - pre_pos) * 32;
+
+    if (self.aim_flags & TFL_AIM_BEHIND)    // Aim a bit behind the target
+        pre_pos += normalize(self.tur_aimorg_updated - pre_pos) * 32;
+
+    */
+    // This turret should hit the ground neer a target rather the do a direct hit
+
+    if ( (self.aim_flags & TFL_AIM_GROUND) ||
+         ((self.aim_flags & TFL_AIM_GROUND2) && (self.enemy.flags & FL_ONGROUND)) )
+    {
+        traceline(pre_pos + '0 0 8',pre_pos - '0 0 10000',1,self.enemy);
+        pre_pos = trace_endpos;
+    }
+
+
+
+
+
+
+
+    return pre_pos;
+}
+
+
+/*
+* Aim where it is
+supports:
+TFL_AIM_NO
+*/
+/*
+vector turret_stdproc_aim_rail()
+{
+    vector pre_pos;
+
+    if (self.aim_flags & TFL_AIM_NO)
+        return self.idle_aim;
+
+    pre_pos = real_origin(self.enemy);
+
+    self.tur_dist_toaimpos = vlen(self.enemy.origin - self.tur_aimorg_updated);
+
+    self.tur_impacttime = time;
+
+    return pre_pos;
+
+}
+*/

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_damage.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/system/system_damage.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_damage.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_damage.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,319 @@
+/*
+* Trow a turret gib
+*/
+void turret_gib_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
+{
+    self.velocity += vforce;
+}
+
+void turret_trowgib(
+    vector v_from, vector v_to, vector v_colormod,
+    string smodel,
+    float f_lifetime, float f_fadetime, float b_burn)
+{
+    local entity gib;
+    local entity burn;
+
+    gib = spawn();
+
+    gib.classname = "turret_gib";
+    setmodel(gib,smodel);
+    setorigin(gib,v_from);
+    SUB_SetFade(gib,time + f_lifetime,2);
+
+    gib.solid              = SOLID_BBOX;
+
+    gib.movetype           = MOVETYPE_BOUNCE;
+    gib.takedamage         = DAMAGE_YES;
+    gib.event_damage       = turret_gib_damage;
+    gib.health             = -1;
+    gib.effects            = EF_LOWPRECISION;
+    gib.flags              = FL_NOTARGET;
+    gib.colormod           = v_colormod;
+    gib.velocity           = v_to;
+
+    if (b_burn)
+    {
+        burn = spawn();
+        burn.effects        = EF_LOWPRECISION|EF_FLAME;
+        setattachment(burn,gib,"");
+        setorigin(burn,(gib.mins + gib.maxs) * 0.5);
+        SUB_SetFade(burn,time + (f_lifetime * 0.5) ,2);
+    }
+}
+
+void turret_gib_boom()
+{
+    entity gib;
+    float i;
+    string s;
+
+    for (i = 1; i < 5; i = i +1)
+    {
+        gib = spawn();
+        gib.classname = "turret_gib";
+
+        s = strcat("models/turrets/head-gib",ftos(i));
+        s = strcat(s,".md3");
+        // bprint("s:",s,"\n");
+        setmodel(gib,s);
+
+        setorigin(gib,self.origin);
+
+        SUB_SetFade(gib,time + 5,2);
+
+        gib.solid              = SOLID_BBOX;
+
+        gib.movetype           = MOVETYPE_BOUNCE;
+        gib.gravity            = 0.5;
+        gib.damageforcescale   = 2;
+        gib.takedamage         = DAMAGE_YES;
+        gib.event_damage       = turret_gib_damage;
+        gib.health             = -1;
+        gib.effects            = EF_LOWPRECISION;
+        gib.flags              = FL_NOTARGET;
+        gib.velocity           = self.velocity + (randomvec() * 700);
+        gib.avelocity          = randomvec() * 64;
+    }
+
+    WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
+    WriteByte (MSG_BROADCAST, 78);
+    WriteCoord (MSG_BROADCAST, self.origin_x);
+    WriteCoord (MSG_BROADCAST, self.origin_y);
+    WriteCoord (MSG_BROADCAST, self.origin_z);
+
+    remove(self);
+}
+
+void turret_trowgib2(
+    vector v_from, vector v_to, vector v_colormod,
+    entity e_mimic, float boomtime)
+{
+    entity gib;
+
+    gib = spawn();
+
+    gib.classname = "turret_gib";
+    setmodel(gib,e_mimic.model);
+    setorigin(gib,v_from);
+
+    gib.solid              = SOLID_BBOX;
+
+    gib.movetype           = MOVETYPE_BOUNCE;
+    gib.gravity            = 0.75;
+    gib.damageforcescale   = 2;
+    gib.takedamage         = DAMAGE_YES;
+    gib.event_damage       = turret_gib_damage;
+    gib.health             = -1;
+    gib.effects            = EF_LOWPRECISION;
+    gib.flags              = FL_NOTARGET;
+    gib.colormod           = v_colormod;
+    gib.velocity           = v_to;
+    gib.avelocity          = randomvec() * 32;
+    gib.think              = turret_gib_boom;
+    gib.nextthink          = boomtime;
+    gib.effects            = EF_FLAME;
+
+
+}
+/*
+* Spawn a boom, trow fake bits arround
+* and hide the real ones.
+*/
+void turret_stdproc_die()
+{
+    vector org2;
+    vector t_dir;
+
+    // self.tur_active = 0;
+
+    self.deadflag = DEAD_DEAD;
+    self.tur_head.deadflag = self.deadflag;
+
+    sound (self, CHAN_PLAYER, "weapons/rocket_impact.wav", 1, ATTN_NORM);
+    org2 = self.origin + '0 0 40';
+
+// Explotion grafix
+    WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
+    WriteByte (MSG_BROADCAST, 78);
+    WriteCoord (MSG_BROADCAST, org2_x);
+    WriteCoord (MSG_BROADCAST, org2_y);
+    WriteCoord (MSG_BROADCAST, org2_z);
+
+// Unsolidify and hide real parts
+    self.solid = SOLID_NOT;
+    self.tur_head.solid   = self.solid;
+
+    self.alpha = -1;
+    self.tur_head.alpha = -1;
+
+    self.takedamage = DAMAGE_NO;
+    self.tur_head.takedamage    = self.takedamage;
+
+    self.effects = 0;
+    self.tur_head.effects   = self.effects;
+
+    self.health             = 0;
+
+
+// Trow fake parts arround
+
+    // base
+    makevectors(self.angles);
+    if (random() > 0.5)
+    {
+        turret_trowgib(self.origin, '0 0 0','1 1 1',"models/turrets/base-gib2.md3",min(self.respawntime,20),1,1);
+        t_dir = (v_up * 700) + (randomvec() * 300);
+        turret_trowgib(self.origin, t_dir,'1 1 1',"models/turrets/base-gib3.md3",min(self.respawntime,10),1,1);
+        t_dir = (v_up * 700) + (randomvec() * 300);
+        turret_trowgib(self.origin, t_dir,'1 1 1',"models/turrets/base-gib4.md3",min(self.respawntime,10),1,1);
+    }
+    else
+    {
+        turret_trowgib(self.origin, '0 0 0','1 1 1',"models/turrets/base-gib1.md3",min(self.respawntime,20),1,1);
+    }
+
+    // Blow the top part up into the air
+    turret_trowgib2( self.origin + (v_up * 50),
+                     v_up * 150 + randomvec() * 50,
+                     '0.2 0.2 0.2',
+                     self.tur_head,time + 0.5 + (random() * 0.5));
+
+
+// Go boom
+    RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,0,world);
+
+    if(self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
+    {
+        if (self.turret_diehook)
+            self.turret_diehook();
+
+        remove(self.tur_head);
+        remove(self);
+    }
+    else
+    {
+    // Setup respawn
+        self.nextthink      = time + self.respawntime;
+        //self.think          = self.turret_spawnfunc;
+        self.think          = turret_stdproc_respawn;
+        if (self.turret_diehook)
+            self.turret_diehook();
+    }
+
+}
+
+void turret_stdproc_respawn()
+{
+    // self.tur_active = 1;
+
+    // Make sure all parts belong to the same team since
+    // this function doubles as "teamchange" function.
+    self.tur_head.team = self.team;
+	if (self.team == COLOR_TEAM1)
+		self.colormod = '1.4 0.8 0.8';
+	else if (self.team == COLOR_TEAM2)
+		self.colormod = '0.8 0.8 1.4';
+	else
+		self.colormod = '0 0 0'; // reset
+
+    self.deadflag = DEAD_NO;
+    self.tur_head.deadflag = self.deadflag;
+    self.effects = self.tur_head.effects = 0;
+
+    self.solid = SOLID_BBOX;
+    self.tur_head.solid   = self.solid;
+
+    self.alpha = 1;
+    self.tur_head.alpha     = self.alpha;
+
+    self.takedamage = DAMAGE_YES;
+    self.tur_head.takedamage    = self.takedamage;
+
+    self.avelocity = '0 0 0';
+    self.tur_head.avelocity    = self.avelocity;
+    self.tur_head.angles = self.idle_aim;
+
+    self.health             = self.tur_health;
+
+    self.enemy          = world;
+    self.volly_counter  = self.shot_volly;
+    self.ammo           = self.ammo_max;
+
+    self.nextthink  = time + self.ticrate;
+    self.think      = turret_think;
+
+    if (self.turret_respawnhook)
+        self.turret_respawnhook();
+
+}
+
+/*
+* Standard damage proc.
+*/
+void turret_stdproc_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
+{
+    entity baseent,oldself;
+    // entity player;
+
+    if (self.health <= 0) return;
+
+    // Damage func is shared on all parts as standard, we need to know what the master entity of this turret is.
+    // if ((self.classname == "turret_head")||(self.classname == "turret_gun")||(self.classname == "turret_badge"))
+    if (self.owner)
+        baseent = self.owner;
+    else
+        baseent = self;
+
+    if (teamplay != 0)
+    {
+        if (self.team == attacker.team)
+        {
+            sprint(attacker, "\{1}Turret tells you: I'm on your team!\n");
+            return;
+        }
+        else
+        {
+            /*
+            // This will get enoying fast...
+            FOR_EACH_PLAYER(player)
+            	if(player.team == self.team)
+            		sprint(player, "The enemy is attacking your base!");
+
+            */
+        }
+
+    }
+
+    baseent.health = baseent.health - damage;
+
+    // thorw head slightly off aim when hit?
+    if ((self.classname == "turret_head") || (self.classname == "turret_gun"))
+        if (self.damage_flags & TFL_DMG_HEADSHAKE)
+        {
+            // makevectors(baseent.tur_head.v_angle);
+            baseent.tur_head.angles = baseent.tur_head.angles + randomvec() * damage;
+        }
+
+    if (self.turrcaps_flags & TFL_TURRCAPS_MOVE)
+    {
+        self.velocity = self.velocity + vforce;
+    }
+
+
+    // Start burning when we have 10% or less health left
+    if (self.health < (self.tur_health * 0.1))
+        self.effects = EF_FLAME;
+
+    if (self.health <= 0)
+    {
+        oldself = self;
+        self = baseent;
+        turret_stdproc_die();
+        self = oldself;
+
+        //baseent.turret_diefunc();
+    }
+}
+
+

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/system/system_main.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,1104 @@
+#define cvar_base "g_turrets_unit_"
+
+//.float tur_lastscore;
+.string cvar_basename;
+
+string cvar_gets(string s_base,string s_add)
+{
+    return strcat(s_base,s_add);
+}
+
+.float turret_scale_damage;
+.float turret_scale_range;
+.float turret_scale_refire;
+.float turret_scale_ammo;
+.float turret_scale_aim;
+.float turret_scale_health;
+.float turret_scale_respawn;
+
+void load_unit_settings(entity ent,string unitname,float is_reload)
+{
+
+    string sbase;
+
+    if (ent == world)
+        return;
+
+    if (!ent.turret_scale_damage)    ent.turret_scale_damage  = 1;
+    if (!ent.turret_scale_range)     ent.turret_scale_range   = 1;
+    if (!ent.turret_scale_refire)    ent.turret_scale_refire  = 1;
+    if (!ent.turret_scale_ammo)      ent.turret_scale_ammo    = 1;
+    if (!ent.turret_scale_aim)       ent.turret_scale_aim     = 1;
+    if (!ent.turret_scale_health)    ent.turret_scale_health  = 1;
+    if (!ent.turret_scale_respawn)   ent.turret_scale_respawn = 1;
+
+    sbase = strcat(cvar_base,unitname);
+    if (is_reload)
+    {
+        ent.enemy = world;
+        ent.tur_head.avelocity = '0 0 0';
+        ent.tur_head.angles = ent.angles;
+    }
+    ent.health = cvar(cvar_gets(sbase,"_health")) * ent.turret_scale_health;
+    ent.respawntime = cvar(cvar_gets(sbase,"_respawntime")) * ent.turret_scale_respawn;
+
+    ent.shot_dmg = cvar(cvar_gets(sbase,"_shot_dmg")) * ent.turret_scale_damage;
+    ent.shot_refire = cvar(cvar_gets(sbase,"_shot_refire")) * ent.turret_scale_refire;
+    ent.shot_radius = cvar(cvar_gets(sbase,"_shot_radius")) * ent.turret_scale_damage;
+    ent.shot_speed = cvar(cvar_gets(sbase,"_shot_speed"));
+    ent.shot_spread = cvar(cvar_gets(sbase,"_shot_spread"));
+    ent.shot_force = cvar(cvar_gets(sbase,"_shot_force")) * ent.turret_scale_damage;
+    ent.shot_volly = cvar(cvar_gets(sbase,"_shot_volly"));
+    ent.shot_volly_refire = cvar(cvar_gets(sbase,"_shot_volly_refire")) * ent.turret_scale_refire;
+
+    ent.target_range = cvar(cvar_gets(sbase,"_target_range")) * ent.turret_scale_range;
+    ent.target_range_min = cvar(cvar_gets(sbase,"_target_range_min")) * ent.turret_scale_range;
+    ent.target_range_fire = cvar(cvar_gets(sbase,"_target_range_fire")) * ent.turret_scale_range;
+    ent.target_range_optimal = cvar(cvar_gets(sbase,"_target_range_optimal")) * ent.turret_scale_range;
+
+    ent.target_select_rangebias = cvar(cvar_gets(sbase,"_target_select_rangebias"));
+    ent.target_select_samebias = cvar(cvar_gets(sbase,"_target_select_samebias"));
+    ent.target_select_anglebias = cvar(cvar_gets(sbase,"_target_select_anglebias"));
+    ent.target_select_playerbias = cvar(cvar_gets(sbase,"_target_select_playerbias"));
+
+    ent.ammo_max = cvar(cvar_gets(sbase,"_ammo_max")) * ent.turret_scale_ammo;
+    //ent.ammo = cvar(cvar_gets(sbase,"_ammo"));
+    ent.ammo_recharge = cvar(cvar_gets(sbase,"_ammo_recharge")) * ent.turret_scale_ammo;
+
+    ent.aim_firetolerance_dist = cvar(cvar_gets(sbase,"_aim_firetolerance_dist"));
+//    ent.aim_firetolerance_angle = cvar(cvar_gets(sbase,"_aim_firetolerance_angle"));
+    ent.aim_speed = cvar(cvar_gets(sbase,"_aim_speed")) * ent.turret_scale_aim;
+    ent.aim_maxrot = cvar(cvar_gets(sbase,"_aim_maxrot"));
+    ent.aim_maxpitch = cvar(cvar_gets(sbase,"_aim_maxpitch"));
+
+    ent.track_type = cvar(cvar_gets(sbase,"_track_type"));
+    ent.track_accel_pitch = cvar(cvar_gets(sbase,"_track_accel_pitch"));
+    ent.track_accel_rot = cvar(cvar_gets(sbase,"_track_accel_rot"));
+    ent.track_blendrate = cvar(cvar_gets(sbase,"_track_blendrate"));
+}
+
+float turret_stdproc_true()
+{
+    return 1;
+}
+
+float turret_stdproc_false()
+{
+    return 0;
+}
+
+void turret_stdproc_nothing()
+{
+    return;
+}
+
+/**
+** updates enemy distances, preicted impact point/time
+** & aim<->predict impact distance.
+** Also translates shoot & aimorgs by current rotation.
+**/
+void turret_do_updates(entity e_turret)
+{
+    if (self.turrcaps_flags & TFL_TURRCAPS_LINKED)
+    {
+        e_turret.tur_head.angles_x = e_turret.tur_head.angles_x * -1;
+        e_turret.angles_x = e_turret.angles_x * -1;
+        makevectors(e_turret.tur_head.angles + e_turret.angles);
+        e_turret.tur_head.angles_x = e_turret.tur_head.angles_x * -1;
+        e_turret.angles_x = e_turret.angles_x * -1;
+    }
+    else
+    {
+        e_turret.tur_head.angles_x = e_turret.tur_head.angles_x * -1;
+        makevectors(e_turret.tur_head.angles);
+        e_turret.tur_head.angles_x = e_turret.tur_head.angles_x * -1;
+    }
+    // v_right = (v_right * -1);
+    e_turret.tur_shotorg_updated = e_turret.origin + v_forward * e_turret.tur_shotorg_x + v_right * e_turret.tur_shotorg_y + v_up * e_turret.tur_shotorg_z;
+
+    e_turret.tur_shotdir_updated = normalize((e_turret.tur_shotorg_updated + v_forward) - e_turret.tur_shotorg_updated);
+    e_turret.tur_aimorg_updated = e_turret.origin + v_forward * e_turret.tur_aimorg_x + v_right * e_turret.tur_aimorg_y + v_up * e_turret.tur_aimorg_z;
+
+
+    e_turret.tur_dist_enemy = vlen(e_turret.tur_aimorg_updated - real_origin(e_turret.enemy));
+
+    traceline(e_turret.tur_aimorg_updated,e_turret.tur_aimorg_updated+(e_turret.tur_shotdir_updated * e_turret.tur_dist_enemy),MOVE_NORMAL,e_turret);
+
+    e_turret.tur_impactpoint = trace_endpos;
+    e_turret.tur_impactent = trace_ent;
+    //e_turret.tur_impacttime = e_turret.tur_dist_enemy / e_turret.shot_speed;
+    e_turret.tur_impacttime = e_turret.tur_dist_enemy / e_turret.shot_speed;
+    e_turret.tur_dist_toaimpos = vlen(trace_endpos - e_turret.tur_aimpos);
+}
+
+/**
+** Handles head rotation according to
+** the units .track_type and .track_flags
+**/
+void turret_stdproc_track()
+{
+    vector wish_angle;  // This is where we'd need to be
+
+    vector real_angle;  // This is where we can go
+    float f_tmp;
+
+
+    if (self.track_flags == TFL_TRACK_NO)
+        return;
+
+    if(!self.tur_active)
+    {
+        wish_angle = self.idle_aim - ('1 0 0' * self.aim_maxpitch);
+    }
+    else if (self.enemy == world)
+    {
+        if (self.turrcaps_flags & TFL_TURRCAPS_LINKED)
+            wish_angle = self.idle_aim + self.angles;
+        else
+            if(cvar("g_turrets_aimidle_delay") > (time - self.lip))
+                wish_angle = self.idle_aim;
+            else
+                wish_angle = self.tur_head.angles;
+
+    }
+    else
+    {
+        // Find the direction
+        if (self.turrcaps_flags & TFL_TURRCAPS_LINKED)
+            wish_angle = normalize(self.tur_aimpos - self.origin);
+        else
+            wish_angle = normalize(self.tur_aimpos - self.tur_head.origin);
+
+        wish_angle = vectoangles(wish_angle); // And make a angle
+    }
+
+    // Find the diffrence between where we currently aim and where we want to aim
+    if (self.turrcaps_flags & TFL_TURRCAPS_LINKED)
+        real_angle = wish_angle - (self.angles + self.tur_head.angles);
+    else
+    {
+        //if(vlen(wish_angle - self.tur_head.angles) > vlen(self.tur_head.angles - wish_angle))
+        real_angle = wish_angle - self.tur_head.angles;
+        //else
+        //    real_angle =  self.tur_head.angles - wish_angle;
+    }
+
+    /*
+    if(real_angle_y > 180)
+        bprint("^3");
+    if(real_angle_y < -180)
+        bprint("^1");
+    string s;
+    s = vtos(real_angle);
+    bprint("RA1: ",s);
+    */
+
+
+    if (real_angle_x < 0) real_angle_x += 360;
+    if (real_angle_x > 180) real_angle_x -= 360;
+
+    if (real_angle_y < 0) real_angle_y += 360;
+    if (real_angle_y >= 180) real_angle_y -= 360;
+
+    //s = vtos(real_angle);
+    //bprint(" RA2: ",s,"\n");
+
+    // Limit pitch
+
+    if (self.track_flags & TFL_TRACK_PITCH)
+        real_angle_x = bound(self.aim_maxpitch * -1,real_angle_x,self.aim_maxpitch);
+
+    // Limit rot
+    if (self.track_flags & TFL_TRACK_ROT)
+        real_angle_y = bound(self.aim_maxrot * -1,real_angle_y,self.aim_maxrot);
+
+
+    if (self.track_type == TFL_TRACKTYPE_STEPMOTOR)
+    {
+        f_tmp = self.aim_speed * self.ticrate; // dgr/sec -> dgr/tic
+
+        // Limit turning speed
+        real_angle_x = bound((-1 * f_tmp),real_angle_x, f_tmp);
+        real_angle_y = bound((-1 * f_tmp),real_angle_y, f_tmp);
+
+        // Limit pich and rot.
+        if (self.track_flags & TFL_TRACK_PITCH)
+            self.tur_head.angles_x = bound((-1 * self.aim_maxpitch),self.tur_head.angles_x + real_angle_x,self.aim_maxpitch);
+
+        if (self.track_flags & TFL_TRACK_ROT)
+            self.tur_head.angles_y = bound((-1 * self.aim_maxrot),self.tur_head.angles_y  + real_angle_y,self.aim_maxrot);
+
+        return;
+    }
+
+    if (self.track_type == TFL_TRACKTYPE_FLUIDPRECISE)
+    {
+        if (self.track_flags & TFL_TRACK_PITCH)
+            self.tur_head.avelocity_x = real_angle_x;
+
+        if (self.track_flags & TFL_TRACK_ROT)
+            self.tur_head.avelocity_y = real_angle_y;
+    }
+    else if (self.track_type == TFL_TRACKTYPE_FLUIDINERTIA)
+    {
+        f_tmp = self.aim_speed * self.ticrate;
+
+        real_angle_y = bound(self.aim_speed * -1,real_angle_y * self.track_accel_rot * f_tmp,self.aim_speed);
+        real_angle_x = bound(self.aim_speed * -1,real_angle_x * self.track_accel_pitch * f_tmp,self.aim_speed);
+        real_angle = (self.tur_head.avelocity * self.track_blendrate) + (real_angle * (1 - self.track_blendrate));
+
+        if (self.track_flags & TFL_TRACK_PITCH) self.tur_head.avelocity_x = real_angle_x;
+        if (self.track_flags & TFL_TRACK_ROT)   self.tur_head.avelocity_y = real_angle_y;
+        self.tur_head.avelocity_z = real_angle_z;
+    }
+
+    // Limit pitch
+    /*
+    if (self.track_flags & TFL_TRACK_PITCH)
+    {
+        if (self.tur_head.angles_x > self.aim_maxpitch)
+        {
+            self.tur_head.angles_x = self.aim_maxpitch;
+            self.tur_head.avelocity_x = 0;
+        }
+        else if (self.tur_head.angles_x < (self.aim_maxpitch * -1))
+        {
+            self.tur_head.angles_x = (self.aim_maxpitch * -1);
+            self.tur_head.avelocity_x = 0;
+        }
+    }
+
+    // Limit rot
+    if (self.track_flags & TFL_TRACK_ROT)
+    {
+        if (self.tur_head.angles_y > self.aim_maxrot)
+        {
+            self.tur_head.angles_y = self.aim_maxrot;
+            self.tur_head.avelocity_y = 0;
+        }
+        else if (self.tur_head.angles_y < (self.aim_maxrot * -1))
+        {
+            self.tur_head.angles_y = (self.aim_maxrot * -1);
+            self.tur_head.avelocity_y = 0;
+        }
+    }
+    */
+
+
+}
+
+/*
+ + = implemented
+ - = not implemented
+
+ + TFL_FIRECHECK_NO
+ + TFL_FIRECHECK_WORLD
+ + TFL_FIRECHECK_DEAD
+ + TFL_FIRECHECK_DISTANCES
+ - TFL_FIRECHECK_LOS
+ + TFL_FIRECHECK_AIMDIST
+ + TFL_FIRECHECK_REALDIST
+ - TFL_FIRECHECK_ANGLEDIST
+ - TFL_FIRECHECK_TEAMCECK
+ + TFL_FIRECHECK_AFF
+ + TFL_FIRECHECK_OWM_AMMO
+ + TFL_FIRECHECK_OTHER_AMMO
+ + TFL_FIRECHECK_REFIRE
+*/
+
+/**
+** Preforms pre-fire checks based on the uints firecheck_flags
+**/
+float turret_stdproc_firecheck()
+{
+    // This one just dont care =)
+    if (self.firecheck_flags & TFL_FIRECHECK_NO) return 1;
+
+    // Ready?
+    if (self.firecheck_flags & TFL_FIRECHECK_REFIRE)
+        if (self.attack_finished_single >= time) return 0;
+
+    //
+    if (self.firecheck_flags & TFL_FIRECHECK_DEAD)
+        if (self.enemy.deadflag != DEAD_NO) return 0;
+
+    // Plz stop killing the world!
+    if (self.firecheck_flags & TFL_FIRECHECK_WORLD)
+        if (self.enemy == world) return 0;
+
+    // Own ammo?
+    if (self.firecheck_flags & TFL_FIRECHECK_OWM_AMMO)
+        if (self.ammo < self.shot_dmg) return 0;
+
+    // Other's ammo? (carefull using this...)
+    if (self.firecheck_flags & TFL_FIRECHECK_OTHER_AMMO)
+        if (self.enemy.ammo >= self.enemy.ammo_max) return 0;
+
+    if (self.firecheck_flags & TFL_FIRECHECK_DISTANCES)
+    {
+        // Not close enougth?
+        if (self.tur_dist_enemy > self.target_range_fire) return 0;
+
+        // To close?
+        if (self.tur_dist_enemy < self.target_range_min) return 0;
+    }
+
+    // Try to avoid FF?
+    if (self.firecheck_flags & TFL_FIRECHECK_AFF)
+        if (self.tur_impactent.team == self.team) return 0;
+
+    // aim<->predicted impact
+    if (self.firecheck_flags & TFL_FIRECHECK_AIMDIST)
+        if (self.tur_dist_toaimpos  > self.aim_firetolerance_dist) return 0;
+
+    // Volly status
+    if (self.shot_volly > 1)
+    {
+        if (self.volly_counter == self.shot_volly)
+            if (self.ammo < (self.shot_dmg * self.shot_volly))
+                return 0;
+    }
+
+    //if(self.tur_enemy_adist >= self.aim_firetolerance) return 0;
+
+
+    return 1;
+}
+
+/*
+ + TFL_TARGETSELECT_NO
+ + TFL_TARGETSELECT_LOS
+ + TFL_TARGETSELECT_PLAYERS
+ + TFL_TARGETSELECT_MISSILES
+ - TFL_TARGETSELECT_TRIGGERTARGET
+ + TFL_TARGETSELECT_ANGLELIMITS
+ + TFL_TARGETSELECT_RANGELIMTS
+ + TFL_TARGETSELECT_TEAMCHECK
+ - TFL_TARGETSELECT_NOBUILTIN
+ + TFL_TARGETSELECT_OWNTEAM
+*/
+
+/**
+** Evaluate a entity for target valitity based on validate_flags
+**/
+float turret_validate_target(entity e_turret,entity e_target,float validate_flags)
+{
+    vector v_tmp;
+
+    //if(!validate_flags & TFL_TARGETSELECT_NOBUILTIN)
+    //    return -0.5;
+
+    if (!e_target)// == world)
+        return -1;
+
+    if (e_target.classname == "grapplinghook")
+        return - 1.5;
+
+	if(g_onslaught)
+		if (substring(e_target.classname, 0, 10) == "onslaught_") // don't attack onslaught targets, that's the player's job!
+			return - 1.75;
+
+    if (validate_flags & TFL_TARGETSELECT_NO)
+        return -2;
+
+    // If only this was used more..
+    if (e_target.flags & FL_NOTARGET)
+        return -3;
+
+    // Cant touch this
+    if ((e_target.takedamage == DAMAGE_NO) || (e_target.health < 0))
+        return -4;
+
+    // player
+    if (e_target.flags & FL_CLIENT)
+    {
+        if (!(validate_flags & TFL_TARGETSELECT_PLAYERS))
+            return -5;
+
+        if (e_target.deadflag != DEAD_NO)
+            return -6;
+    }
+
+	// enemy turrets
+	if (e_target.turret_firefunc || e_target.owner.tur_head == e_target)
+	{
+		if (validate_flags & TFL_TARGETSELECT_NOTURRETS)
+			return -5.5;
+	}
+
+    // Missile
+    if (e_target.flags & FL_PROJECTILE)
+    {
+        if (!(validate_flags & TFL_TARGETSELECT_MISSILES))
+            return -7;
+    }
+
+    // Team check
+    if (validate_flags & TFL_TARGETSELECT_TEAMCHECK)
+    {
+        if (validate_flags & TFL_TARGETSELECT_OWNTEAM)
+        {
+            if (e_target.team != e_turret.team)
+                return -8;
+
+            if (e_turret.team != e_target.owner.team)
+                return -8.5;
+        }
+        else
+        {
+            if (e_target.team == e_turret.team)
+                return -9;
+
+            if (e_turret.team == e_target.owner.team)
+                return -9.5;
+        }
+    }
+
+    // Line of sight?
+    if (validate_flags & TFL_TARGETSELECT_LOS)
+    {
+        v_tmp = real_origin(e_target) + ((e_target.mins + e_target.maxs) * 0.5);
+        //v_tmp = e_target.origin;
+        traceline(e_turret.origin,v_tmp,0,e_turret);
+
+        if (e_turret.aim_firetolerance_dist < vlen(v_tmp - trace_endpos))
+            return -10;
+    }
+
+    // Can we even aim this thing? (anglecheck)
+    tvt_thadv = angleofs(e_turret.tur_head,e_target);
+    tvt_tadv  = angleofs(e_turret,e_target);
+    tvt_thadf = vlen(tvt_thadv);
+    tvt_tadf  = vlen(tvt_tadv);
+
+    if (validate_flags & TFL_TARGETSELECT_ANGLELIMITS)
+    {
+        if (fabs(tvt_tadv_x) > e_turret.aim_maxpitch)
+            return -11;
+
+        if (fabs(tvt_tadv_y) > e_turret.aim_maxrot)
+            return -12;
+    }
+
+    // Range limits?
+    tvt_dist = vlen(e_turret.origin - real_origin(e_target));
+    if (validate_flags & TFL_TARGETSELECT_RANGELIMTS)
+    {
+        if (tvt_dist < e_turret.target_range_min)
+            return -13;
+
+        if (tvt_dist > e_turret.target_range)
+            return -14;
+    }
+
+#ifdef TURRET_DEBUG_TARGETSELECT
+    bprint("Target:",e_target.netname," is a valid target for ",e_turret.netname,"\n");
+#endif
+
+    return 1;
+}
+
+entity turret_select_target()
+{
+    entity e;        // target looper entity
+    entity e_enemy;  // currently best scoreing enemy
+
+    float score;     // current target (e) score
+    float m_score;   // current best target (e_enemy) score
+    float f;
+    // string s;
+    e = findradius(self.origin,self.target_range);
+
+    // Nothing to aim at.
+    if (!e) return world;
+
+    m_score = 0;
+
+    while (e)
+    {
+        f = turret_validate_target(self,e,self.target_select_flags);
+        //s = ftos(f);
+        //bprint(e.netname, " = ",s,"\n");
+        if (f > 0)
+        {
+
+            score = self.turret_score_target(self,e);
+
+            if ((score > m_score) && (score > 0))
+            {
+                e_enemy = e;
+                m_score = score;
+            }
+        }
+
+        e = e.chain;
+    }
+
+//    self.tur_lastscore = m_score;
+
+    //if (self.enemy != e_enemy)
+    //self.volly_counter = 0;
+
+    return e_enemy;
+}
+
+void turret_think()
+{
+    entity e;
+
+    self.nextthink = (time + self.ticrate);
+
+    // ONS uses somewhat backwards linking.
+    if (teamplay)
+    {
+        if (g_onslaught)
+        {
+
+        }
+        else
+        {
+            if (self.target)
+            {
+                e = find(world,targetname,self.target);
+                if (e != world)
+                    self.team = e.team;
+            }
+        }
+
+        if (self.team != self.tur_head.team)
+            turret_stdproc_respawn();
+    }
+
+
+    if (cvar("g_turrets_reloadcvars") == 1)
+    {
+        e = nextent(world);
+        while (e)
+        {
+            if (e.tur_head != world)
+            {
+
+                load_unit_settings(e,e.cvar_basename,1);
+                e.turret_postthink();
+            }
+
+            e = nextent(e);
+        }
+
+        cvar_set("g_turrets_reloadcvars","0");
+    }
+
+#ifdef TURRET_DEBUG
+    if (self.tur_dbg_tmr1 < time)
+    {
+        if (self.enemy) paint_target (self.enemy,128,self.tur_dbg_rvec,0.9);
+        paint_target(self,256,self.tur_dbg_rvec,0.9);
+        self.tur_dbg_tmr1 = time + 1;
+    }
+#endif
+
+    //Do custom prethink, and bail if it fails.
+    //if (!self.turret_prethink()) return;
+
+    // Handle ammo
+    if (self.ammo < self.ammo_max)
+        self.ammo = min(self.ammo + self.ammo_recharge,self.ammo_max);
+
+
+    // Inactive turrets needs to run the think loop too
+    // So they can handle animation and wake up if need be.
+    if(!self.tur_active)
+    {
+        turret_stdproc_track();
+        return;
+    }
+
+    //This is just wrong :|
+    if(self.deadflag != DEAD_NO)
+    {
+        dprint("Warning:dead turret running the think function!\n");
+        //self.enemy = world;
+        //turret_stdproc_track();
+        return;
+    }
+
+    // This is typicaly used for zaping every target in range
+    // turret_fusionreactor uses this to recharge friendlys.
+    if (self.shoot_flags & TFL_SHOOT_HITALLVALID)
+    {
+
+        // Do a self.turret_fire for every valid target.
+        e = findradius(self.origin,self.target_range);
+
+        while (e)
+        {
+            if (turret_validate_target(self,e,self.target_validate_flags))
+            {
+                self.enemy = e;
+
+                turret_do_updates(self);
+
+                if ( self.turret_firecheckfunc() ) turret_fire();
+            }
+
+            e = e.chain;
+        }
+        self.enemy = world;
+
+    }
+    else
+    {
+        // Check if we have a vailid enemy, and try to find one if we dont.
+        if ((turret_validate_target(self,self.enemy,self.target_validate_flags) <= 0) || (self.cnt < time))
+        {
+            self.enemy = turret_select_target();
+            self.cnt = time + cvar("g_turrets_targetscan_mindelay");
+        }
+
+
+        // No target, just go to idle, do any custom stuff and bail.
+        if (self.enemy == world)
+        {
+            // Turn & pitch
+            if (!self.track_flags & TFL_TRACK_NO)
+                turret_stdproc_track();
+
+            // do any per-turret stuff
+            self.turret_postthink();
+
+            // And bail.
+            return;
+        }
+        else
+            self.lip = time; // Keep track of the last time we had a target.
+
+        turret_do_updates(self);
+
+        // Predict or whatnot
+        if not((self.aim_flags & TFL_AIM_NO))
+            self.tur_aimpos = turret_stdproc_aim_generic();
+
+        // Fire?
+        if (self.turret_firecheckfunc() != 0)
+            turret_fire();
+
+        turret_do_updates(self);
+
+        // Turn & pitch
+        if (!self.track_flags & TFL_TRACK_NO)
+            turret_stdproc_track();
+
+        turret_do_updates(self);
+
+        // Fire?
+        if (self.turret_firecheckfunc() != 0)
+            turret_fire();
+    }
+
+    // do any per-turret stuff
+    self.turret_postthink();
+}
+
+void turret_fire()
+{
+    if (cvar("g_turrets_nofire") != 0)   return;
+    if ((!self.tur_active) || (self.deadflag != DEAD_NO)) return;
+
+    self.turret_firefunc();
+
+    self.attack_finished_single    = time + self.shot_refire;
+    self.ammo               = self.ammo - self.shot_dmg;
+    self.volly_counter      = self.volly_counter - 1;
+
+
+    if (self.volly_counter <= 0)
+    {
+        self.volly_counter = self.shot_volly;
+        if (self.shoot_flags & TFL_SHOOT_CLEARTARGET) self.enemy = world;
+
+        if (self.shot_volly > 1)
+            self.attack_finished_single = time + self.shot_volly_refire;
+    }
+
+
+#ifdef TURRET_DEBUG
+    if (self.enemy) paint_target3(self.tur_aimpos ,64,self.tur_dbg_rvec,self.tur_impacttime+0.25);
+#endif
+}
+
+void turret_stdproc_fire()
+{
+    dprint("^1Bang, ^3your dead^7 ",self.enemy.netname,"! ^1(turret with no real firefunc)\n");
+}
+
+void turret_stdproc_use()
+{
+    // bprint("Used:",self.netname, " By ",other.netname,"\n");
+
+    // ONS Uses _use to communicate.
+    if (g_onslaught)
+    {
+        entity e;
+
+        if (self.targetname)
+        {
+            e = find(world,target,self.targetname);
+            if (e != world)
+                self.team = e.team;
+        }
+
+        if (self.team != self.tur_head.team)
+            turret_stdproc_respawn();
+
+        if(self.team == 0)
+            self.tur_active = 0;
+        else
+            self.tur_active = 1;
+
+    }
+    else
+    {
+        if (self.tur_active)
+            self.tur_active = 0;
+        else
+            self.tur_active = 1;
+    }
+
+}
+
+/*
+* Standard turret initialization. use this!
+* (unless you have a very good reason not to.)
+* Any special stuff like multiple cannon models should be done
+* after this is proc called.
+* if the return value is 0, the turret should be removed.
+*/
+float turret_stdproc_init (string cvar_base_name)
+{
+	entity e;
+
+    // Are turrets allowed atm?
+    if (cvar("g_turrets") == 0) return 0;
+
+    // Better more then once then never.
+    // turret_gibs_precash();
+
+    if (self.spawnflags & 2)
+    {
+        entity tb;
+        precache_model("models/turrets/terrainbase.md3");
+        tb = spawn();
+        setmodel(tb,"models/turrets/terrainbase.md3");
+        setorigin(tb,self.origin);
+        tb.solid = SOLID_BBOX;
+        makestatic(tb);
+    }
+
+    self.cvar_basename = cvar_base_name;
+    load_unit_settings(self,self.cvar_basename,0);
+
+    // Group all turrets into the same team if in non teamplaymode, so they dont try to kill eachother.
+    if (cvar("g_assult") != 0)
+    {
+        if (!self.team)
+            self.team = 14; // Assume turrets are on the defending side if not explicitly set otehrwize
+    }
+    else if (!teamplay)
+		self.team = MAX_SHOT_DISTANCE;
+	else if(g_onslaught && self.targetname)
+	{
+		e = find(world,target,self.targetname);
+		if(e != world)
+			self.team = e.team;
+	}
+	else if(!self.team)
+		self.team = MAX_SHOT_DISTANCE;
+
+
+    /*
+    * Try to guess some reasonaly defaults
+    * for missing params and do sanety checks
+    * thise checks could produce some "interesting" results
+    * if it hits a glitch in my logic :P so try to set as mutch
+    * as possible beforehand.
+    */
+    if (self.turrcaps_flags & TFL_TURRCAPS_SUPPORT)
+    {
+        // Support units generaly dont need to have a high speed ai-loop
+        if (!self.ticrate) self.ticrate = 0.25;     // Speed of this turrets AI loop
+    }
+    else
+    {
+        if (!self.ticrate) self.ticrate = 0.1;     // Speed of this turrets AI loop
+    }
+
+    self.ticrate = bound(0.01,self.ticrate,60);  // keep it sane plz
+
+// General stuff
+    if (self.netname == "")  self.netname        = "turret";
+
+    if (!self.respawntime) self.respawntime = 60;
+    self.respawntime = max(-1,self.respawntime);
+
+    if (!self.health)        self.health         = 1000;
+    self.tur_health = max(1,self.health);
+
+    if (!self.turrcaps_flags) self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
+
+    if (!self.damage_flags) self.damage_flags = TFL_DMG_YES | TFL_DMG_RETALIATE | TFL_DMG_AIMSHAKE;
+
+// Shot stuff.
+    if (!self.shot_refire) self.shot_refire     = 1;
+    self.shot_refire = bound(0.01,self.shot_refire,9999);
+
+    if (!self.shot_dmg) self.shot_dmg        = self.shot_refire * 50;
+    self.shot_dmg = max(1,self.shot_dmg);
+
+    if (!self.shot_radius) self.shot_radius     = self.shot_dmg * 0.5;
+    self.shot_radius = max(1,self.shot_radius);
+
+    if (!self.shot_speed) self.shot_speed      = 2500;
+    self.shot_speed = max(1,self.shot_speed);
+
+    if (!self.shot_spread) self.shot_spread     = 0.0125;
+    self.shot_spread = bound(0.0001,self.shot_spread,500);
+
+    if (!self.shot_force) self.shot_force      = self.shot_dmg * 0.5 + self.shot_radius * 0.5;
+    self.shot_force = bound(0.001,self.shot_force,MAX_SHOT_DISTANCE * 0.5);
+
+    if (!self.shot_volly) self.shot_volly = 1;
+    self.shot_volly = bound(1,self.shot_volly,floor(self.ammo_max / self.shot_dmg));
+
+    if (!self.shot_volly_refire) self.shot_volly_refire = self.shot_refire * self.shot_volly;
+    self.shot_volly_refire = bound(self.shot_refire,self.shot_volly_refire,60);
+
+    if (!self.firecheck_flags)
+        self.firecheck_flags = TFL_FIRECHECK_WORLD | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES |
+                               TFL_FIRECHECK_LOS | TFL_FIRECHECK_AIMDIST | TFL_FIRECHECK_TEAMCECK |
+                               TFL_FIRECHECK_OWM_AMMO | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_WORLD;
+
+// Range stuff.
+    if (!self.target_range) self.target_range               = self.shot_speed * 0.5;
+    self.target_range = bound(0,self.target_range,MAX_SHOT_DISTANCE);
+
+    if (!self.target_range_min)          self.target_range_min           = self.shot_radius * 2;
+    self.target_range_min = bound(0,self.target_range_min,MAX_SHOT_DISTANCE);
+
+    if (!self.target_range_fire)         self.target_range_fire          = self.target_range * 0.8;
+    self.target_range_fire = bound(0,self.target_range_fire,MAX_SHOT_DISTANCE);
+
+    if (!self.target_range_optimal)      self.target_range_optimal       = self.target_range_fire * 0.5;
+    self.target_range_optimal = bound(0,self.target_range_optimal,MAX_SHOT_DISTANCE);
+
+
+// Aim stuff.
+    if (!self.aim_maxrot)    self.aim_maxrot    = 45;
+    self.aim_maxrot = bound(0,self.aim_maxrot,361);
+
+    if (!self.aim_maxpitch)  self.aim_maxpitch  = 20;
+    self.aim_maxpitch = bound(0,self.aim_maxpitch,90);
+
+    if (!self.aim_speed)     self.aim_speed     = 36;
+    self.aim_speed  = bound(0.1,self.aim_speed, 1000);
+
+    if (!self.aim_firetolerance_dist)     self.aim_firetolerance_dist  = 5 + (self.shot_radius * 2);
+    self.aim_firetolerance_dist = bound(0.1,self.aim_firetolerance_dist,MAX_SHOT_DISTANCE);
+
+//    if (!self.aim_firetolerance_angle)     self.aim_firetolerance_angle  = 10;
+//    self.aim_firetolerance_angle = bound(0.1,self.aim_firetolerance_angle,360);
+
+    if (!self.aim_flags) self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZEASE;
+
+    // Sill the most tested (and aim-effective)
+    if (!self.track_type) self.track_type = TFL_TRACKTYPE_STEPMOTOR;
+
+    if (self.track_type != TFL_TRACKTYPE_STEPMOTOR)
+    {
+        // Fluid / Ineria mode. Looks mutch nicer, bit experimental &
+        // Can inmapt aim preformance alot.
+        // needs a bit diffrent aimspeed
+        if (!self.aim_speed) self.aim_speed = 180;
+        self.aim_speed  = bound(0.1,self.aim_speed, 1000);
+
+        if (!self.track_accel_pitch) self.track_accel_pitch = 0.75;
+        if (!self.track_accel_rot)   self.track_accel_rot   = 0.75;
+        if (!self.track_blendrate)   self.track_blendrate   = 0.35;
+    }
+
+    if (!self.track_flags) self.track_flags = TFL_TRACK_PITCH | TFL_TRACK_ROT;
+
+
+// Target selection stuff.
+    if (!self.target_select_rangebias)   self.target_select_rangebias     = 1;
+    self.target_select_rangebias = bound(-10,self.target_select_rangebias,10);
+
+    if (!self.target_select_samebias)    self.target_select_samebias      = 1;
+    self.target_select_samebias = bound(-10,self.target_select_samebias,10);
+
+    if (!self.target_select_anglebias)   self.target_select_anglebias     = 1;
+    self.target_select_anglebias = bound(-10,self.target_select_anglebias,10);
+
+    if (!self.target_select_missilebias)   self.target_select_missilebias = -10;
+    self.target_select_missilebias = bound(-10,self.target_select_missilebias,10);
+    self.target_select_playerbias = bound(-10,self.target_select_playerbias,10);
+
+    if (!self.target_select_flags)
+        if (self.turrcaps_flags & TFL_TURRCAPS_MISSILEKILL)
+            self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_MISSILES |
+                                       TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_ANGLELIMITS;
+        else
+            self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS |
+                                       TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_ANGLELIMITS;
+
+    //if(!self.target_validate_flags)
+    self.target_validate_flags = self.target_select_flags;
+
+
+// Ammo stuff
+    if (!self.ammo_max)          self.ammo_max       = self.shot_dmg * 10;
+    self.ammo_max = max(self.shot_dmg,self.ammo_max);
+
+    if (!self.ammo)              self.ammo           = self.shot_dmg * 5;
+    self.ammo = bound(0,self.ammo,self.ammo_max);
+
+    if (!self.ammo_recharge)     self.ammo_recharge = self.shot_dmg / 2;
+    self.ammo_recharge = max(0,self.ammo_recharge);
+
+    // Convert the recharge from X per sec to X per ticrate
+    self.ammo_recharge = self.ammo_recharge * self.ticrate;
+
+    if (!self.ammo_flags) self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE;
+
+// Offsets & origins
+    if (!self.tur_aimorg)    self.tur_aimorg = '0 0 50';
+    if (!self.tur_shotorg)   self.tur_shotorg = '50 0 50';
+
+// End of default & sanety checks, start building the turret.
+
+// Spawn extra bits
+    self.tur_head   = spawn();
+
+    self.tur_head.netname = self.tur_head.classname     = "turret_head";
+    self.tur_head.team = self.team;
+
+    // Defend mode?
+    if (self.target != "")
+    {
+        self.tur_defend = find(world, targetname, self.target);
+        if (self.tur_defend == world)
+        {
+            self.target = "";
+            dprint("Turret has invalid defendpoint!\n");
+        }
+    }
+
+// Claim ownership
+    self.tur_head.owner   = self;
+
+// Put pices in place
+
+    if (!(self.turrcaps_flags & TFL_TURRCAPS_LINKED))
+        setorigin(self.tur_head,self.origin);
+
+    // In target defense mode, aim on the spot to defens when idle.
+    if (self.tur_defend)
+        self.idle_aim  = self.tur_head.angles + angleofs(self.tur_head,self.tur_defend);
+    else
+        self.idle_aim  = self.angles;
+
+    if (!(self.turrcaps_flags & TFL_TURRCAPS_LINKED))
+        self.tur_head.angles    = self.idle_aim;
+
+    if (!self.health) self.health  = 150;
+    self.tur_health = self.health;
+
+    //Solid bbox for preformance reasons
+    self.solid              = SOLID_BBOX;
+    self.tur_head.solid     = SOLID_BBOX;
+
+    self.takedamage             = DAMAGE_AIM;
+    self.tur_head.takedamage    = DAMAGE_AIM;
+
+    self.movetype            = MOVETYPE_NOCLIP;
+    self.tur_head.movetype   = MOVETYPE_NOCLIP;
+
+    // Team colouring?track
+    if (self.team == COLOR_TEAM1) self.colormod = '1.4 0.8 0.8';
+    if (self.team == COLOR_TEAM2) self.colormod = '0.8 0.8 1.4';
+
+    // Attach stdprocs. override when and what needed
+    if (self.turrcaps_flags & TFL_TURRCAPS_SUPPORT)
+    {
+        //self.turret_prethink        = turret_stdproc_true;
+        self.turret_score_target    = turret_stdproc_targetscore_support;
+        //self.turret_aim             = turret_stdproc_aim_generic;
+        //self.turret_track           = turret_stdproc_track;
+        self.turret_firecheckfunc   = turret_stdproc_firecheck;
+        self.turret_firefunc        = turret_stdproc_fire;
+        self.turret_postthink       = turret_stdproc_nothing;
+
+        //self.turret_damagefunc          = turret_stdproc_damage;
+        self.event_damage               = turret_stdproc_damage;
+        self.tur_head.event_damage      = turret_stdproc_damage;
+
+        //self.turret_diefunc             = turret_stdproc_die;
+        //self.turret_spawnfunc           = turret_stdproc_respawn;
+
+    }
+    else
+    {
+
+        //self.turret_prethink        = turret_stdproc_true;
+        self.turret_score_target    = turret_stdproc_targetscore_generic;
+
+        //if (self.aim_flags & TFL_AIM_SIMPLE)
+        //    self.turret_aim             = turret_stdproc_aim_simple;
+        //else
+        //    self.turret_aim             = turret_stdproc_aim_generic;
+
+        //self.turret_track           = turret_stdproc_track;
+        self.turret_firecheckfunc   = turret_stdproc_firecheck;
+        self.turret_firefunc        = turret_stdproc_fire;
+        self.turret_postthink       = turret_stdproc_nothing;
+
+        //self.turret_damagefunc          = turret_stdproc_damage;
+        self.event_damage               = turret_stdproc_damage;
+        self.tur_head.event_damage      = turret_stdproc_damage;
+
+        //self.turret_diefunc             = turret_stdproc_die;
+        //self.turret_spawnfunc           = turret_stdproc_respawn;
+        self.turret_addtarget           = turret_stdproc_false;
+    }
+
+    self.use = turret_stdproc_use;
+    self.bot_attack = TRUE;
+
+    // Initiate the main AI loop
+    self.think     = turret_think;
+    self.nextthink = time + self.ticrate;
+
+    self.tur_head.team = self.team;
+    self.view_ofs = '0 0 0';
+
+#ifdef TURRET_DEBUG
+    self.tur_dbg_start = self.nextthink;
+    while (vlen(self.tur_dbg_rvec) < 2)
+        self.tur_dbg_rvec  = randomvec() * 4;
+
+    self.tur_dbg_rvec_x = fabs(self.tur_dbg_rvec_x);
+    self.tur_dbg_rvec_y = fabs(self.tur_dbg_rvec_y);
+    self.tur_dbg_rvec_z = fabs(self.tur_dbg_rvec_z);
+#endif
+
+    // Its all good.
+    self.classname = "turret_main";
+
+    self.tur_active = 1;
+
+    if (g_onslaught)
+        self.use();
+
+    return 1;
+}
+
+

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_misc.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/system/system_misc.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_misc.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_misc.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,123 @@
+//--// Some support routines //--//
+
+// Get real origin
+vector real_origin(entity ent)
+{
+    entity e;
+    vector v;
+
+    e = ent.tag_entity;
+    while(e)
+    {
+        // v = v + e.origin;
+        v = v + ((e.absmin + e.absmax) * 0.5);
+        e = e.tag_entity;
+    }
+    //v = v + ent.origin;
+    v = v + ((ent.absmin + ent.absmax) * 0.5);
+    return v;
+
+}
+
+// Plug this into wherever precashing is done.
+void g_turrets_common_precash()
+{
+    precache_model ("models/turrets/c512.md3");
+}
+
+/*
+* Paint a v_color colord circle on target onwho
+* that fades away over f_time
+*/
+void paint_target(entity onwho, float f_size, vector v_color, float f_time)
+{
+    entity e;
+
+    e = spawn();
+    setmodel(e, "models/turrets/c512.md3"); // precision set above
+    e.scale = (f_size/512);
+    //setsize(e, '0 0 0', '0 0 0');
+    //setattachment(e,onwho,"");
+    setorigin(e,onwho.origin + '0 0 1');
+    e.alpha = 0.15;
+    e.movetype = MOVETYPE_FLY;
+
+    e.velocity = (v_color * 32); // + '0 0 1' * 64;
+
+    e.colormod = v_color;
+    SUB_SetFade(e,time,f_time);
+}
+
+void paint_target2(entity onwho, float f_size, vector v_color, float f_time)
+{
+    entity e;
+
+    e = spawn();
+    setmodel(e, "models/turrets/c512.md3"); // precision set above
+    e.scale = (f_size/512);
+    setsize(e, '0 0 0', '0 0 0');
+
+    setorigin(e,onwho.origin + '0 0 1');
+    e.alpha = 0.15;
+    e.movetype = MOVETYPE_FLY;
+
+    e.velocity = (v_color * 32); // + '0 0 1' * 64;
+    e.avelocity_x = -128;
+
+    e.colormod = v_color;
+    SUB_SetFade(e,time,f_time);
+}
+
+void paint_target3(vector where, float f_size, vector v_color, float f_time)
+{
+    entity e;
+    e = spawn();
+    setmodel(e, "models/turrets/c512.md3"); // precision set above
+    e.scale = (f_size/512);
+    setsize(e, '0 0 0', '0 0 0');
+    setorigin(e,where+ '0 0 1');
+    e.movetype = MOVETYPE_NONE;
+    e.velocity = '0 0 0';
+    e.colormod = v_color;
+    SUB_SetFade(e,time,f_time);
+}
+
+/*
+* Return the angle between two enteties
+*/
+vector angleofs(entity from, entity to)
+{
+    vector v_res;
+
+    // makevectors(from.angles);
+    v_res = normalize(to.origin - from.origin);
+    v_res = vectoangles(v_res);
+    v_res = v_res - from.angles;
+
+    if (v_res_x < 0) v_res_x += 360;
+    if (v_res_x > 180) v_res_x -= 360;
+
+    if (v_res_y < 0) v_res_y += 360;
+    if (v_res_y > 180) v_res_y -= 360;
+
+    return v_res;
+}
+
+vector angleofs2(entity from, vector to)
+{
+    vector v_res;
+
+    // makevectors(from.angles);
+    v_res = normalize(to - from.origin);
+    v_res = vectoangles(v_res);
+    v_res = v_res - from.angles;
+
+    if (v_res_x < 0) v_res_x += 360;
+    if (v_res_x > 180) v_res_x -= 360;
+
+    if (v_res_y < 0) v_res_y += 360;
+    if (v_res_y > 180) v_res_y -= 360;
+
+    return v_res;
+}
+

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_scoreprocs.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/system/system_scoreprocs.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_scoreprocs.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_scoreprocs.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,164 @@
+/*
+.float target_select_flags; /// target selection flags
+float TFL_TARGETSELECT_NO            = 1;   /// Dont select a target on its own.
+float TFL_TARGETSELECT_LOS           = 2;   /// Need line of sight
+float TFL_TARGETSELECT_PLAYERS       = 4;   /// Players are valid targets
+float TFL_TARGETSELECT_MISSILES      = 8;   /// Missiles are valid targets
+float TFL_TARGETSELECT_TRIGGERTARGET = 16;  /// Responds to turret_trigger_target events
+float TFL_TARGETSELECT_ANGLELIMITS   = 32;  /// Angular limitations of turret head limits target selection
+float TFL_TARGETSELECT_RANGELIMTS    = 64;  /// Range limits apply in targetselection
+float TFL_TARGETSELECT_TEAMCHECK     = 128; /// Consider team own <-> targets team
+float TFL_TARGETSELECT_NOBUILTIN     = 256; /// Cant select targets on its own. needs to be triggerd or slaved.
+float TFL_TARGETSELECT_OWNTEAM       = 512;
+*/
+
+float turret_stdproc_targetscore_support(entity e_turret,entity e_target)
+{
+    float score;        // Total score
+    float s_score,d_score;
+
+    if (e_turret.enemy == e_target) s_score = 1;
+
+    d_score = min(e_turret.target_range_optimal,tvt_dist) / max(e_turret.target_range_optimal,tvt_dist);
+
+    score = (d_score * e_turret.target_select_rangebias) +
+            (s_score * e_turret.target_select_samebias);
+
+    return score;
+}
+
+/*
+* Generic bias aware score system.
+*/
+float turret_stdproc_targetscore_generic(entity e_turret,entity e_target)
+{
+    //vector v_tmp;
+    float d_dist;       // Defendmode Distance
+
+    float score;        // Total score
+    float d_score;      // Distance score
+    //float da_score;     // Distance from aimpoint score
+    float a_score;      // Angular score
+    float s_score;      // samescore (same target as last time)
+    float m_score;      // missile score
+    float p_score;      // player score
+
+    float ikr;          // ideal kill range
+
+    if(!e_target) return 0;
+
+    if (e_target == e_turret.enemy) s_score = 1;
+
+    if (e_turret.tur_defend)
+    {
+        d_dist = vlen(real_origin(e_target) - e_turret.tur_defend.origin);
+        ikr = vlen(e_turret.origin - e_turret.tur_defend.origin);
+        d_score = 1 - d_dist / e_turret.target_range;
+    }
+    else
+    {
+        // Make a normlized value base on the targets distance from our optimal killzone
+        ikr = e_turret.target_range_optimal;
+        d_score = min(ikr,tvt_dist) / max(ikr,tvt_dist);
+    }
+
+    /*
+    // Determine the maximum time it could take this turrent to aim at someting.
+    max_aim_delay = (max(e_turret.aim_maxrot,e_turret.aim_maxpitch) / e_turret.aim_speed * 2);
+
+    // Find out how long it would take to aim at this taget.
+    aim_delay = (thadf+0.01) / e_turret.aim_speed;
+
+    // Turn this info into a normalized value.
+    aim_delay = (min(max_aim_delay,aim_delay) / max_aim_delay);
+    a_score = 1 - aim_delay;
+    */
+
+    //a_score = 1 - (tvt_thadf / max(e_turret.aim_maxrot,e_turret.aim_maxpitch));
+    a_score = 1 - tvt_thadf / e_turret.aim_maxrot;
+
+    if ((e_turret.target_select_missilebias > 0) && (e_target.flags & FL_PROJECTILE))
+        m_score = 1;
+
+    if ((e_turret.target_select_playerbias > 0) && (e_target.flags & FL_CLIENT))
+        p_score = 1;
+
+    d_score = max(d_score,0);
+    s_score = max(s_score,0);
+    a_score = max(a_score,0);
+    m_score = max(m_score,0);
+    p_score = max(p_score,0);
+
+    score = (d_score * e_turret.target_select_rangebias) +
+            (s_score * e_turret.target_select_samebias) +
+            (a_score * e_turret.target_select_anglebias) +
+            (m_score * e_turret.target_select_missilebias) +
+            (p_score * e_turret.target_select_playerbias);
+
+    if(e_turret.target_range_fire < vlen(e_turret.tur_shotorg_updated - real_origin(e_target)))
+        score *= 0.1;
+
+#ifdef TURRET_DEBUG
+    string sd,sv,sa,sm,sp,ss;
+    string sdt,svt,sat,smt,spt;
+
+    sd = ftos(d_score);
+    d_score *= e_turret.target_select_rangebias;
+    sdt = ftos(d_score);
+
+    //sv = ftos(v_score);
+    //v_score *= e_turret.target_select_samebias;
+    //svt = ftos(v_score);
+
+    sa = ftos(a_score);
+    a_score *= e_turret.target_select_anglebias;
+    sat = ftos(a_score);
+
+    sm = ftos(m_score);
+    m_score *= e_turret.target_select_missilebias;
+    smt = ftos(m_score);
+
+    sp = ftos(p_score);
+    p_score *= e_turret.target_select_playerbias;
+    spt = ftos(p_score);
+
+
+    ss = ftos(score);
+    bprint("^3Target scores^7 \[  ",e_turret.netname, "  \] ^3for^7 \[  ", e_target.netname,"  \]\n");
+    bprint("^5Range:\[  ",sd,  "  \]^2+bias:\[  ",sdt,"  \]\n");
+    //bprint("^5Volly:\[  ",sv,  "  \]^2+bias:\[  ",svt,"  \]\n");
+    bprint("^5Angle:\[  ",sa,  "  \]^2+bias:\[  ",sat,"  \]\n");
+    bprint("^5Missile:\[  ",sm,"  \]^2+bias:\[  ",smt,"  \]\n");
+    bprint("^5Player:\[  ",sp, "  \]^2+bias:\[  ",spt,"  \]\n");
+    bprint("^3Total (w/bias):\[^1",ss,"\]\n");
+
+#endif
+
+    return score;
+}
+
+float turret_stdproc_targetscore_close(entity e_turret,entity e_target)
+{
+    return 1 - (tvt_dist / e_turret.target_range);
+}
+
+float turret_stdproc_targetscore_far (entity e_turret,entity e_target)
+{
+    return  tvt_dist / e_turret.target_range;
+}
+
+float turret_stdproc_targetscore_optimal(entity e_turret,entity e_target)
+{
+    return  min(e_turret.target_range_optimal,tvt_dist) / max(e_turret.target_range_optimal,tvt_dist);
+}
+
+float turret_stdproc_score_angular(entity e_turret,entity e_target)
+{
+    return 1 - (tvt_thadf / e_turret.aim_maxrot);
+}
+
+float turret_stdproc_targetscore_defend(entity e_turret,entity e_target)
+{
+    return 0;
+    //min(e_target.origin,e_turret.tur_defend.origin) / max(e_target.origin,e_turret.tur_defend.origin);
+}

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_aimprocs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_aimprocs.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_aimprocs.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,120 +0,0 @@
-/*
-* Straight line, Dead-on (no prediction)
-* Usefull for "stupid turrets" or ones
-* that launch guided weapons and just need to apeer to
-* somewhat face (and/or track) the target.
-
-supports:
-TFL_AIM_NO
-*/
-vector turret_stdproc_aim_simple()
-{
-    float s_bu;     // Solidity backup (for ground shooters)
-    vector aim_pos;
-
-    if (self.aim_flags & TFL_AIM_NO) return self.idle_aim;
-
-    aim_pos = self.enemy.origin;
-
-    // Target ground?
-    if (self.aim_flags & TFL_AIM_GROUND)
-    {
-        s_bu = self.enemy.solid;
-        self.enemy.solid = SOLID_NOT;
-        traceline(self.enemy.origin + '0 0 128',self.enemy.origin + '0 0 -99999',1,self.enemy);
-        self.enemy.solid = s_bu;
-        aim_pos = trace_endpos;
-    }
-
-    // This is where its at.
-    return aim_pos;
-}
-
-/*
-* Generic aim
-
-supports:
-TFL_AIM_NO
-TFL_AIM_GROUND
-TFL_AIM_LEAD
-TFL_AIM_SHOTTIMECOMPENSATE
-TFL_AIM_INFRONT
-TFL_AIM_BEHIND
-TFL_AIM_ZEASE
-
-not supported:
-TFL_AIM_BALISTIC
-*/
-vector turret_stdproc_aim_generic()
-{
-    vector pre_pos;
-
-    if (self.aim_flags == TFL_AIM_NO)
-        return self.idle_aim;
-
-    // Baseline
-    pre_pos = real_origin(self.enemy);
-
-    // Lead?
-    if (self.aim_flags & TFL_AIM_LEAD)
-        if (self.aim_flags & TFL_AIM_SHOTTIMECOMPENSATE)       // Need to conpensate for shot traveltime
-            pre_pos += self.enemy.velocity * (self.tur_dist_enemy / self.shot_speed);
-        else if (self.turrcaps_flags & TFL_TURRCAPS_HITSCAN)   // Hitscan gun, conpensate for frametime and posibly refire offset.
-            pre_pos += self.enemy.velocity * (frametime + min(max(self.attack_finished_single - time,0),self.ticrate*2));
-        else                                                   // No lead
-            pre_pos += self.enemy.velocity;
-
-    // Smooth out predict-Z?
-    if (self.aim_flags & TFL_AIM_ZEASE)
-    {
-        vector v;
-        v = real_origin(self.enemy);
-        //pre_pos_z = (pre_pos_z * 0.5) + (v_z * 0.5);
-        pre_pos_z = (pre_pos_z  + v_z) * 0.5;
-    }
-
-    if (self.aim_flags & TFL_AIM_INFRONT)   // Aim a bit in front of the target
-        pre_pos -= normalize(self.tur_aimorg_updated - pre_pos) * 32;
-
-    if (self.aim_flags & TFL_AIM_BEHIND)    // Aim a bit behind the target
-        pre_pos += normalize(self.tur_aimorg_updated - pre_pos) * 32;
-
-
-    // This turret should hit the ground neer a target rather the do a direct hit
-    if ( (self.aim_flags & TFL_AIM_GROUND) ||
-         ((self.aim_flags & TFL_AIM_GROUND2) && (self.enemy.flags & FL_ONGROUND)) )
-    {
-        traceline(pre_pos + '0 0 512',pre_pos - '0 0 2048',1,self.enemy);
-        pre_pos = trace_endpos;
-    }
-
-    // self.tur_impacttime = vlen(pre_pos - self.origin) / self.shot_speed;
-
-    return pre_pos;
-}
-
-
-/*
-* Aim where it is
-supports:
-TFL_AIM_NO
-*/
-vector turret_stdproc_aim_rail()
-{
-    vector pre_pos;
-
-    if (self.aim_flags & TFL_AIM_NO)
-        return self.idle_aim;
-
-    pre_pos = real_origin(self.enemy);
-
-    self.tur_dist_toaimpos = vlen(self.enemy.origin - self.tur_aimorg_updated);
-
-    self.tur_impacttime = time;
-
-    return pre_pos;
-
-}
-
-
-

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_damage.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_damage.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_damage.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,304 +0,0 @@
-/*
-* Trow a turret gib
-*/
-void turret_gib_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
-{
-    self.velocity += vforce;
-}
-
-void turret_trowgib(
-    vector v_from, vector v_to, vector v_colormod,
-    string smodel,
-    float f_lifetime, float f_fadetime, float b_burn)
-{
-    local entity gib;
-    local entity burn;
-
-    gib = spawn();
-
-    gib.classname = "turret_gib";
-    setmodel(gib,smodel);
-    setorigin(gib,v_from);
-    SUB_SetFade(gib,time + f_lifetime,2);
-
-    gib.solid              = SOLID_BBOX;
-
-    gib.movetype           = MOVETYPE_BOUNCE;
-    gib.takedamage         = DAMAGE_YES;
-    gib.event_damage       = turret_gib_damage;
-    gib.health             = -1;
-    gib.effects            = EF_LOWPRECISION;
-    gib.flags              = FL_NOTARGET;
-    gib.colormod           = v_colormod;
-    gib.velocity           = v_to;
-
-    if (b_burn)
-    {
-        burn = spawn();
-        burn.effects        = EF_LOWPRECISION|EF_FLAME;
-        setattachment(burn,gib,"");
-        setorigin(burn,(gib.mins + gib.maxs) * 0.5);
-        SUB_SetFade(burn,time + (f_lifetime * 0.5) ,2);
-    }
-}
-
-void turret_gib_boom()
-{
-    entity gib;
-    float i;
-    string s;
-
-    for (i = 1; i < 5; i = i +1)
-    {
-        gib = spawn();
-        gib.classname = "turret_gib";
-
-        s = strcat("models/turrets/head-gib",ftos(i));
-        s = strcat(s,".md3");
-        // bprint("s:",s,"\n");
-        setmodel(gib,s);
-
-        setorigin(gib,self.origin);
-
-        SUB_SetFade(gib,time + 5,2);
-
-        gib.solid              = SOLID_BBOX;
-
-        gib.movetype           = MOVETYPE_BOUNCE;
-        gib.gravity            = 0.5;
-        gib.damageforcescale   = 2;
-        gib.takedamage         = DAMAGE_YES;
-        gib.event_damage       = turret_gib_damage;
-        gib.health             = -1;
-        gib.effects            = EF_LOWPRECISION;
-        gib.flags              = FL_NOTARGET;
-        gib.velocity           = self.velocity + (randomvec() * 700);
-        gib.avelocity          = randomvec() * 64;
-    }
-
-    WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
-    WriteByte (MSG_BROADCAST, 78);
-    WriteCoord (MSG_BROADCAST, self.origin_x);
-    WriteCoord (MSG_BROADCAST, self.origin_y);
-    WriteCoord (MSG_BROADCAST, self.origin_z);
-
-    remove(self);
-}
-
-void turret_trowgib2(
-    vector v_from, vector v_to, vector v_colormod,
-    entity e_mimic, float boomtime)
-{
-    entity gib;
-
-    gib = spawn();
-
-    gib.classname = "turret_gib";
-    setmodel(gib,e_mimic.model);
-    setorigin(gib,v_from);
-
-    gib.solid              = SOLID_BBOX;
-
-    gib.movetype           = MOVETYPE_BOUNCE;
-    gib.gravity            = 0.75;
-    gib.damageforcescale   = 2;
-    gib.takedamage         = DAMAGE_YES;
-    gib.event_damage       = turret_gib_damage;
-    gib.health             = -1;
-    gib.effects            = EF_LOWPRECISION;
-    gib.flags              = FL_NOTARGET;
-    gib.colormod           = v_colormod;
-    gib.velocity           = v_to;
-    gib.avelocity          = randomvec() * 32;
-    gib.think              = turret_gib_boom;
-    gib.nextthink          = boomtime;
-    gib.effects            = EF_FLAME;
-
-
-}
-/*
-* Spawn a boom, trow fake bits arround
-* and hide the real ones.
-*/
-void turret_stdproc_die()
-{
-    vector org2;
-    vector t_dir;
-
-    // self.tur_active = 0;
-
-    self.deadflag = DEAD_DEAD;
-    self.tur_head.deadflag = self.deadflag;
-
-    sound (self, CHAN_PLAYER, "weapons/rocket_impact.wav", 1, ATTN_NORM);
-    org2 = self.origin + '0 0 40';
-
-// Explotion grafix
-    WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
-    WriteByte (MSG_BROADCAST, 78);
-    WriteCoord (MSG_BROADCAST, org2_x);
-    WriteCoord (MSG_BROADCAST, org2_y);
-    WriteCoord (MSG_BROADCAST, org2_z);
-
-// Unsolidify and hide real parts
-    self.solid = SOLID_NOT;
-    self.tur_head.solid   = self.solid;
-
-    self.alpha = -1;
-    self.tur_head.alpha = -1;
-
-    self.takedamage = DAMAGE_NO;
-    self.tur_head.takedamage    = self.takedamage;
-
-    self.effects = 0;
-    self.tur_head.effects   = self.effects;
-
-    self.health             = 0;
-
-
-// Trow fake parts arround
-
-    // base
-    makevectors(self.angles);
-    if (random() > 0.5)
-    {
-        turret_trowgib(self.origin, '0 0 0','1 1 1',"models/turrets/base-gib2.md3",min(self.respawntime,20),1,1);
-        t_dir = (v_up * 700) + (randomvec() * 300);
-        turret_trowgib(self.origin, t_dir,'1 1 1',"models/turrets/base-gib3.md3",min(self.respawntime,10),1,1);
-        t_dir = (v_up * 700) + (randomvec() * 300);
-        turret_trowgib(self.origin, t_dir,'1 1 1',"models/turrets/base-gib4.md3",min(self.respawntime,10),1,1);
-    }
-    else
-    {
-        turret_trowgib(self.origin, '0 0 0','1 1 1',"models/turrets/base-gib1.md3",min(self.respawntime,20),1,1);
-    }
-
-    // Blow the top part up into the air
-    turret_trowgib2( self.origin + (v_up * 50),
-                     v_up * 150 + randomvec() * 50,
-                     '0.2 0.2 0.2',
-                     self.tur_head,time + 0.5 + (random() * 0.5));
-
-
-// Go boom
-    RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,0,world);
-
-// Setup respawn
-    self.nextthink      = time + self.respawntime;
-    //self.think          = self.turret_spawnfunc;
-    self.think          = turret_stdproc_respawn;
-
-    if (self.turret_diehook)
-        self.turret_diehook();
-}
-
-void turret_stdproc_respawn()
-{
-    // self.tur_active = 1;
-
-    // Make sure all parts belong to the same team since
-    // this function doubles as "teamchange" function.
-    self.tur_head.team = self.team;
-    if (self.team == COLOR_TEAM1) self.colormod = '1.4 0.8 0.8';
-    if (self.team == COLOR_TEAM2) self.colormod = '0.8 0.8 1.4';
-
-    self.deadflag = DEAD_NO;
-    self.tur_head.deadflag = self.deadflag;
-    self.effects = self.tur_head.effects = 0;
-
-    self.solid = SOLID_BBOX;
-    self.tur_head.solid   = self.solid;
-
-    self.alpha = 1;
-    self.tur_head.alpha     = self.alpha;
-
-    self.takedamage = DAMAGE_YES;
-    self.tur_head.takedamage    = self.takedamage;
-
-    self.avelocity = '0 0 0';
-    self.tur_head.avelocity    = self.avelocity;
-    self.tur_head.angles = self.idle_aim;
-
-    self.health             = self.tur_health;
-
-    self.enemy          = world;
-    self.volly_counter  = self.shot_volly;
-    self.ammo           = self.ammo_max;
-
-    self.nextthink  = time + self.ticrate;
-    self.think      = turret_think;
-
-    if (self.turret_respawnhook)
-        self.turret_respawnhook();
-
-}
-
-/*
-* Standard damage proc.
-*/
-void turret_stdproc_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
-{
-    entity baseent,oldself;
-    // entity player;
-
-    if (self.health <= 0) return;
-
-    // Damage func is shared on all parts as standard, we need to know what the master entity of this turret is.
-    // if ((self.classname == "turret_head")||(self.classname == "turret_gun")||(self.classname == "turret_badge"))
-    if (self.owner)
-        baseent = self.owner;
-    else
-        baseent = self;
-
-    if (teamplay != 0)
-    {
-        if (self.team == attacker.team)
-        {
-            sprint(attacker,"Turret: Im on your team!\n");
-            return;
-        }
-        else
-        {
-            /*
-            // This will get enoying fast...
-            FOR_EACH_PLAYER(player)
-            	if(player.team == self.team)
-            		sprint(player, "The enemy is attacking your base!");
-
-            */
-        }
-
-    }
-
-    baseent.health = baseent.health - damage;
-
-    // thorw head slightly off aim when hit?
-    if ((self.classname == "turret_head") || (self.classname == "turret_gun"))
-        if (self.damage_flags & TFL_DMG_HEADSHAKE)
-        {
-            // makevectors(baseent.tur_head.v_angle);
-            baseent.tur_head.angles = baseent.tur_head.angles + randomvec() * damage;
-        }
-
-    if (self.turrcaps_flags & TFL_TURRCAPS_MOVE)
-    {
-        self.velocity = self.velocity + vforce;
-    }
-
-
-    // Start burning when we have 10% or less health left
-    if (self.health < (self.tur_health * 0.1))
-        self.effects = EF_FLAME;
-
-    if (self.health <= 0)
-    {
-        oldself = self;
-        self = baseent;
-        turret_stdproc_die();
-        self = oldself;
-
-        //baseent.turret_diefunc();
-    }
-}
-
-

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_main.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_main.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,1041 +0,0 @@
-#define cvar_base "g_turrets_unit_"
-
-//.float tur_lastscore;
-.string cvar_basename;
-
-string cvar_gets(string s_base,string s_add)
-{
-    return strcat(s_base,s_add);
-}
-
-.float turret_scale_damage;
-.float turret_scale_range;
-.float turret_scale_refire;
-.float turret_scale_ammo;
-.float turret_scale_aim;
-.float turret_scale_health;
-.float turret_scale_respawn;
-
-void load_unit_settings(entity ent,string unitname,float is_reload)
-{
-
-    string sbase;
-
-    if (ent == world)
-        return;
-
-    if (!ent.turret_scale_damage)    ent.turret_scale_damage  = 1;
-    if (!ent.turret_scale_range)     ent.turret_scale_range   = 1;
-    if (!ent.turret_scale_refire)    ent.turret_scale_refire  = 1;
-    if (!ent.turret_scale_ammo)      ent.turret_scale_ammo    = 1;
-    if (!ent.turret_scale_aim)       ent.turret_scale_aim     = 1;
-    if (!ent.turret_scale_health)    ent.turret_scale_health  = 1;
-    if (!ent.turret_scale_respawn)   ent.turret_scale_respawn = 1;
-
-    sbase = strcat(cvar_base,unitname);
-    if (is_reload)
-    {
-        ent.enemy = world;
-        ent.tur_head.avelocity = '0 0 0';
-        ent.tur_head.angles = ent.angles;
-    }
-    ent.health = cvar(cvar_gets(sbase,"_health")) * ent.turret_scale_health;
-    ent.respawntime = cvar(cvar_gets(sbase,"_respawntime")) * ent.turret_scale_respawn;
-
-    ent.shot_dmg = cvar(cvar_gets(sbase,"_shot_dmg")) * ent.turret_scale_damage;
-    ent.shot_refire = cvar(cvar_gets(sbase,"_shot_refire")) * ent.turret_scale_refire;
-    ent.shot_radius = cvar(cvar_gets(sbase,"_shot_radius")) * ent.turret_scale_damage;
-    ent.shot_speed = cvar(cvar_gets(sbase,"_shot_speed"));
-    ent.shot_spread = cvar(cvar_gets(sbase,"_shot_spread"));
-    ent.shot_force = cvar(cvar_gets(sbase,"_shot_force")) * ent.turret_scale_damage;
-    ent.shot_volly = cvar(cvar_gets(sbase,"_shot_volly"));
-    ent.shot_volly_refire = cvar(cvar_gets(sbase,"_shot_volly_refire")) * ent.turret_scale_refire;
-
-    ent.target_range = cvar(cvar_gets(sbase,"_target_range")) * ent.turret_scale_range;
-    ent.target_range_min = cvar(cvar_gets(sbase,"_target_range_min")) * ent.turret_scale_range;
-    ent.target_range_fire = cvar(cvar_gets(sbase,"_target_range_fire")) * ent.turret_scale_range;
-    ent.target_range_optimal = cvar(cvar_gets(sbase,"_target_range_optimal")) * ent.turret_scale_range;
-
-    ent.target_select_rangebias = cvar(cvar_gets(sbase,"_target_select_rangebias"));
-    ent.target_select_samebias = cvar(cvar_gets(sbase,"_target_select_samebias"));
-    ent.target_select_anglebias = cvar(cvar_gets(sbase,"_target_select_anglebias"));
-    ent.target_select_playerbias = cvar(cvar_gets(sbase,"_target_select_playerbias"));
-
-    ent.ammo_max = cvar(cvar_gets(sbase,"_ammo_max")) * ent.turret_scale_ammo;
-    //ent.ammo = cvar(cvar_gets(sbase,"_ammo"));
-    ent.ammo_recharge = cvar(cvar_gets(sbase,"_ammo_recharge")) * ent.turret_scale_ammo;
-
-    ent.aim_firetolerance_dist = cvar(cvar_gets(sbase,"_aim_firetolerance_dist"));
-//    ent.aim_firetolerance_angle = cvar(cvar_gets(sbase,"_aim_firetolerance_angle"));
-    ent.aim_speed = cvar(cvar_gets(sbase,"_aim_speed")) * ent.turret_scale_aim;
-    ent.aim_maxrot = cvar(cvar_gets(sbase,"_aim_maxrot"));
-    ent.aim_maxpitch = cvar(cvar_gets(sbase,"_aim_maxpitch"));
-
-    ent.track_type = cvar(cvar_gets(sbase,"_track_type"));
-    ent.track_accel_pitch = cvar(cvar_gets(sbase,"_track_accel_pitch"));
-    ent.track_accel_rot = cvar(cvar_gets(sbase,"_track_accel_rot"));
-    ent.track_blendrate = cvar(cvar_gets(sbase,"_track_blendrate"));
-}
-
-float turret_stdproc_true()
-{
-    return 1;
-}
-
-float turret_stdproc_false()
-{
-    return 0;
-}
-
-void turret_stdproc_nothing()
-{
-    return;
-}
-
-/**
-** updates enemy distances, preicted impact point/time
-** & aim<->predict impact distance.
-** Also translates shoot & aimorgs by current rotation.
-**/
-void turret_do_updates(entity e_turret)
-{
-    //vector trueaimpoint;
-
-    if (self.turrcaps_flags & TFL_TURRCAPS_LINKED)
-    {
-        e_turret.tur_head.angles_x = e_turret.tur_head.angles_x * -1;
-        e_turret.angles_x = e_turret.angles_x * -1;
-        makevectors(e_turret.tur_head.angles + e_turret.angles);
-        e_turret.tur_head.angles_x = e_turret.tur_head.angles_x * -1;
-        e_turret.angles_x = e_turret.angles_x * -1;
-    }
-    else
-    {
-        e_turret.tur_head.angles_x = e_turret.tur_head.angles_x * -1;
-        makevectors(e_turret.tur_head.angles);
-        e_turret.tur_head.angles_x = e_turret.tur_head.angles_x * -1;
-    }
-
-    //traceline_hitcorpse(e_turret, e_turret.origin, e_turret.origin + v_forward * MAX_SHOT_DISTANCE, MOVE_NOMONSTERS, e_turret);
-    //trueaimpoint = trace_endpos;
-
-    e_turret.tur_shotorg_updated = e_turret.origin + v_forward * e_turret.tur_shotorg_x + v_right * e_turret.tur_shotorg_y + v_up * e_turret.tur_shotorg_z;
-    //e_turret.tur_shotdir_updated = normalize(trueaimpoint - e_turret.tur_shotorg_updated);
-    e_turret.tur_shotdir_updated = normalize((e_turret.tur_shotorg_updated + v_forward * 512) - e_turret.tur_shotorg_updated);
-    e_turret.tur_aimorg_updated = e_turret.origin + v_forward * e_turret.tur_aimorg_x + v_right * e_turret.tur_aimorg_y + v_up * e_turret.tur_aimorg_z;
-    //e_turret.tur_aimorg_updated = e_turret.tur_shotorg_updated;
-
-    e_turret.tur_dist_enemy = vlen(e_turret.tur_aimorg_updated - real_origin(e_turret.enemy));
-    //e_turret.tur_dist_enemy = vlen(e_turret.tur_aimpos - e_turret.tur_shotorg_updated);
-
-    traceline(e_turret.tur_aimorg_updated,e_turret.tur_aimorg_updated+(e_turret.tur_shotdir_updated * e_turret.tur_dist_enemy),TRUE,e_turret);
-
-    e_turret.tur_impactpoint = trace_endpos;
-    e_turret.tur_impactent = trace_ent;
-    e_turret.tur_impacttime = e_turret.tur_dist_enemy / e_turret.shot_speed;
-    e_turret.tur_dist_toaimpos = vlen(trace_endpos - e_turret.tur_aimpos);
-}
-
-/**
-** Handles head rotation according to
-** the units .track_type and .track_flags
-**/
-void turret_stdproc_track()
-{
-    vector wish_angle;  // This is where we'd need to be
-
-    vector real_angle;  // This is where we can go
-    float f_tmp;
-
-
-    if (self.track_flags == TFL_TRACK_NO)
-        return;
-
-    if (self.enemy == world)
-    {
-        if (self.turrcaps_flags & TFL_TURRCAPS_LINKED)
-            wish_angle = self.idle_aim + self.angles;
-        else
-            wish_angle = self.idle_aim;
-    }
-    else
-    {
-        // Find the direction
-        if (self.turrcaps_flags & TFL_TURRCAPS_LINKED)
-            wish_angle = normalize(self.tur_aimpos - self.origin);
-        else
-            wish_angle = normalize(self.tur_aimpos - self.tur_head.origin);
-
-        wish_angle = vectoangles(wish_angle); // And make a angle
-    }
-
-    // Find the diffrence between where we currently aim and where we want to aim
-    if (self.turrcaps_flags & TFL_TURRCAPS_LINKED)
-        real_angle = wish_angle - (self.angles + self.tur_head.angles);
-    else
-    {
-        //if(vlen(wish_angle - self.tur_head.angles) > vlen(self.tur_head.angles - wish_angle))
-            real_angle = wish_angle - self.tur_head.angles;
-        //else
-        //    real_angle =  self.tur_head.angles - wish_angle;
-    }
-
-    // Constrain it within +/- 360
-    if (real_angle_x <= 0) real_angle_x += 360;
-    if (real_angle_x >= 180) real_angle_x -= 360;
-
-    //if (real_angle_y <= 0) real_angle_y += 360;
-    if (real_angle_y >= 180) real_angle_y -= 360;
-
-
-    if (self.track_type == TFL_TRACKTYPE_STEPMOTOR)
-    {
-        f_tmp = self.aim_speed * self.ticrate; // dgr/sec -> dgr/tic
-
-        // Limit turning speed
-        real_angle_x = bound((-1 * f_tmp),real_angle_x, f_tmp);
-        real_angle_y = bound((-1 * f_tmp),real_angle_y, f_tmp);
-
-        // Limit pich and rot.
-        if (self.track_flags & TFL_TRACK_PITCH)
-            self.tur_head.angles_x = bound((-1 * self.aim_maxpitch),self.tur_head.angles_x + real_angle_x,self.aim_maxpitch);
-
-        if (self.track_flags & TFL_TRACK_ROT)
-            self.tur_head.angles_y = bound((-1 * self.aim_maxrot),self.tur_head.angles_y  + real_angle_y,self.aim_maxrot);
-
-        return;
-    }
-
-    if (self.track_type == TFL_TRACKTYPE_FLUIDPRECISE)
-    {
-        if (self.track_flags & TFL_TRACK_PITCH)
-            self.tur_head.avelocity_x = real_angle_x;
-
-        if (self.track_flags & TFL_TRACK_ROT)
-            self.tur_head.avelocity_y = real_angle_y;
-    }
-    else if (self.track_type == TFL_TRACKTYPE_FLUIDINERTIA)
-    {
-        f_tmp = self.aim_speed * self.ticrate;
-
-        real_angle_y = bound(self.aim_speed * -1,real_angle_y * self.track_accel_rot * f_tmp,self.aim_speed);
-        real_angle_x = bound(self.aim_speed * -1,real_angle_x * self.track_accel_pitch * f_tmp,self.aim_speed);
-        real_angle = (self.tur_head.avelocity * self.track_blendrate) + (real_angle * (1 - self.track_blendrate));
-
-        if (self.track_flags & TFL_TRACK_PITCH) self.tur_head.avelocity_x = real_angle_x;
-        if (self.track_flags & TFL_TRACK_ROT)   self.tur_head.avelocity_y = real_angle_y;
-        self.tur_head.avelocity_z = real_angle_z;
-    }
-
-    // Limit pitch
-    if (self.track_flags & TFL_TRACK_PITCH)
-    {
-        if (self.tur_head.angles_x > self.aim_maxpitch)
-        {
-            self.tur_head.angles_x = self.aim_maxpitch;
-            self.tur_head.avelocity_x = 0;
-        }
-        else if (self.tur_head.angles_x < (self.aim_maxpitch * -1))
-        {
-            self.tur_head.angles_x = (self.aim_maxpitch * -1);
-            self.tur_head.avelocity_x = 0;
-        }
-    }
-
-    // Limit rot
-    if (self.track_flags & TFL_TRACK_ROT)
-    {
-        if (self.tur_head.angles_y > self.aim_maxrot)
-        {
-            self.tur_head.angles_y = self.aim_maxrot;
-            self.tur_head.avelocity_y = 0;
-        }
-        else if (self.tur_head.angles_y < (self.aim_maxrot * -1))
-        {
-            self.tur_head.angles_y = (self.aim_maxrot * -1);
-            self.tur_head.avelocity_y = 0;
-        }
-    }
-
-
-}
-
-/*
- + = implemented
- - = not implemented
-
- + TFL_FIRECHECK_NO
- + TFL_FIRECHECK_WORLD
- + TFL_FIRECHECK_DEAD
- + TFL_FIRECHECK_DISTANCES
- - TFL_FIRECHECK_LOS
- + TFL_FIRECHECK_AIMDIST
- + TFL_FIRECHECK_REALDIST
- - TFL_FIRECHECK_ANGLEDIST
- - TFL_FIRECHECK_TEAMCECK
- + TFL_FIRECHECK_AFF
- + TFL_FIRECHECK_OWM_AMMO
- + TFL_FIRECHECK_OTHER_AMMO
- + TFL_FIRECHECK_REFIRE
-*/
-
-/**
-** Preforms pre-fire checks based on the uints firecheck_flags
-**/
-float turret_stdproc_firecheck()
-{
-    // This one just dont care =)
-    if (self.firecheck_flags & TFL_FIRECHECK_NO) return 1;
-
-    // Ready?
-    if (self.firecheck_flags & TFL_FIRECHECK_REFIRE)
-        if (self.attack_finished_single >= time) return 0;
-
-    //
-    if (self.firecheck_flags & TFL_FIRECHECK_DEAD)
-        if (self.enemy.deadflag != DEAD_NO) return 0;
-
-    // Plz stop killing the world!
-    if (self.firecheck_flags & TFL_FIRECHECK_WORLD)
-        if (self.enemy == world) return 0;
-
-    // Own ammo?
-    if (self.firecheck_flags & TFL_FIRECHECK_OWM_AMMO)
-        if (self.ammo < self.shot_dmg) return 0;
-
-    // Other's ammo? (carefull using this...)
-    if (self.firecheck_flags & TFL_FIRECHECK_OTHER_AMMO)
-        if (self.enemy.ammo >= self.enemy.ammo_max) return 0;
-
-    if (self.firecheck_flags & TFL_FIRECHECK_DISTANCES)
-    {
-        // Not close enougth?
-        if (self.tur_dist_enemy > self.target_range_fire) return 0;
-
-        // To close?
-        if (self.tur_dist_enemy < self.target_range_min) return 0;
-    }
-
-    // Try to avoid FF?
-    if (self.firecheck_flags & TFL_FIRECHECK_AFF)
-        if (self.tur_impactent.team == self.team) return 0;
-
-    // aim<->predicted impact
-    if (self.firecheck_flags & TFL_FIRECHECK_AIMDIST)
-        if (self.tur_dist_toaimpos  > self.aim_firetolerance_dist) return 0;
-
-    // Volly status
-    if (self.shot_volly > 1)
-    {
-        if (self.volly_counter == self.shot_volly)
-            if (self.ammo < (self.shot_dmg * self.shot_volly))
-                return 0;
-    }
-
-    //if(self.tur_enemy_adist >= self.aim_firetolerance) return 0;
-
-
-    return 1;
-}
-
-/*
- + TFL_TARGETSELECT_NO
- + TFL_TARGETSELECT_LOS
- + TFL_TARGETSELECT_PLAYERS
- + TFL_TARGETSELECT_MISSILES
- - TFL_TARGETSELECT_TRIGGERTARGET
- + TFL_TARGETSELECT_ANGLELIMITS
- + TFL_TARGETSELECT_RANGELIMTS
- + TFL_TARGETSELECT_TEAMCHECK
- - TFL_TARGETSELECT_NOBUILTIN
- + TFL_TARGETSELECT_OWNTEAM
-*/
-
-/**
-** Evaluate a entity for target valitity based on validate_flags
-**/
-float turret_validate_target(entity e_turret,entity e_target,float validate_flags)
-{
-    vector v_tmp;
-
-    //if(!validate_flags & TFL_TARGETSELECT_NOBUILTIN)
-    //    return -0.5;
-
-    if (!e_target)// == world)
-        return -1;
-
-    if (e_target.classname == "grapplinghook")
-        return - 1.5;
-
-    if (validate_flags & TFL_TARGETSELECT_NO)
-        return -2;
-
-    // If only this was used more..
-    if (e_target.flags & FL_NOTARGET)
-        return -3;
-
-    // Cant touch this
-    if ((e_target.takedamage == DAMAGE_NO) || (e_target.health < 0))
-        return -4;
-
-    // player
-    if (e_target.flags & FL_CLIENT)
-    {
-        if (!(validate_flags & TFL_TARGETSELECT_PLAYERS))
-            return -5;
-
-        if (e_target.deadflag != DEAD_NO)
-            return -6;
-    }
-
-    // Missile
-    if (e_target.flags & FL_PROJECTILE)
-    {
-        if (!(validate_flags & TFL_TARGETSELECT_MISSILES))
-            return -7;
-    }
-
-    // Team check
-    if (validate_flags & TFL_TARGETSELECT_TEAMCHECK)
-    {
-        if (validate_flags & TFL_TARGETSELECT_OWNTEAM)
-        {
-            if (e_target.team != e_turret.team)
-                return -8;
-
-            if (e_turret.team != e_target.owner.team)
-                return -8.5;
-        }
-        else
-        {
-            if (e_target.team == e_turret.team)
-                return -9;
-
-            if (e_turret.team == e_target.owner.team)
-                return -9.5;
-        }
-    }
-
-    // Line of sight?
-    if (validate_flags & TFL_TARGETSELECT_LOS)
-    {
-        v_tmp = real_origin(e_target) + ((e_target.mins + e_target.maxs) * 0.5);
-        //v_tmp = e_target.origin;
-        traceline(e_turret.origin,v_tmp,0,e_turret);
-
-        if (e_turret.aim_firetolerance_dist < vlen(v_tmp - trace_endpos))
-            return -10;
-    }
-
-    // Can we even aim this thing? (anglecheck)
-    tvt_thadv = angleofs(e_turret.tur_head,e_target);
-    tvt_tadv  = angleofs(e_turret,e_target);
-    tvt_thadf = vlen(tvt_thadv);
-    tvt_tadf  = vlen(tvt_tadv);
-
-    if (validate_flags & TFL_TARGETSELECT_ANGLELIMITS)
-    {
-        if (fabs(tvt_tadv_x) > e_turret.aim_maxpitch)
-            return -11;
-
-        if (fabs(tvt_tadv_y) > e_turret.aim_maxrot)
-            return -12;
-    }
-
-    // Range limits?
-    tvt_dist = vlen(e_turret.origin - real_origin(e_target));
-    if (validate_flags & TFL_TARGETSELECT_RANGELIMTS)
-    {
-        if (tvt_dist < e_turret.target_range_min)
-            return -13;
-
-        if (tvt_dist > e_turret.target_range)
-            return -14;
-    }
-
-#ifdef TURRET_DEBUG_TARGETSELECT
-    bprint("Target:",e_target.netname," is a valid target for ",e_turret.netname,"\n");
-#endif
-
-    return 1;
-}
-
-entity turret_select_target()
-{
-    entity e;        // target looper entity
-    entity e_enemy;  // currently best scoreing enemy
-
-    float score;     // current target (e) score
-    float m_score;   // current best target (e_enemy) score
-    float f;
-    // string s;
-    e = findradius(self.origin,self.target_range);
-
-    // Nothing to aim at.
-    if (!e) return world;
-
-    m_score = 0;
-
-    while (e)
-    {
-        f = turret_validate_target(self,e,self.target_select_flags);
-        //s = ftos(f);
-        //bprint(e.netname, " = ",s,"\n");
-        if (f > 0)
-        {
-
-            score = self.turret_score_target(self,e);
-
-            if ((score > m_score) && (score > 0))
-            {
-                e_enemy = e;
-                m_score = score;
-            }
-        }
-
-        e = e.chain;
-    }
-
-//    self.tur_lastscore = m_score;
-
-    //if (self.enemy != e_enemy)
-    //self.volly_counter = 0;
-
-    return e_enemy;
-}
-
-void turret_think()
-{
-    entity e;
-
-    self.nextthink = (time + self.ticrate);
-
-    // ONS uses somewhat backwards linking.
-    if(teamplay)
-    {
-        if(g_onslaught)
-        {
-
-            /*
-            // see turret_stdproc_use()
-            if(self.targetname)
-            {
-                e = find(world,target,self.targetname);
-                if(e != world)
-                    self.team = e.team;
-            }*/
-        }
-        else
-        {
-            if(self.target)
-            {
-                e = find(world,targetname,self.target);
-                if(e != world)
-                    self.team = e.team;
-            }
-        }
-
-        if(self.team != self.tur_head.team)
-            turret_stdproc_respawn();
-    }
-
-
-    if (cvar("g_turrets_reloadcvars") == 1)
-    {
-        e = nextent(world);
-        while (e)
-        {
-            if (e.tur_head != world)
-            {
-
-                load_unit_settings(e,e.cvar_basename,1);
-                e.turret_postthink();
-            }
-
-            e = nextent(e);
-        }
-
-        cvar_set("g_turrets_reloadcvars","0");
-    }
-
-#ifdef TURRET_DEBUG
-    if (self.tur_dbg_tmr1 < time)
-    {
-        if (self.enemy) paint_target (self.enemy,128,self.tur_dbg_rvec,0.9);
-        paint_target(self,256,self.tur_dbg_rvec,0.9);
-        self.tur_dbg_tmr1 = time + 1;
-    }
-#endif
-
-    //Do custom prethink, and bail if it fails.
-    //if (!self.turret_prethink()) return;
-
-    // Handle ammo
-    if (self.ammo < self.ammo_max)
-        self.ammo = min(self.ammo + self.ammo_recharge,self.ammo_max);
-
-
-    if ((!self.tur_active) || (self.deadflag != DEAD_NO))
-    {
-        dprint("Warning: Inactive or dead turret running the think function!\n");
-        self.enemy = world;
-        //self.turret_track();
-        turret_stdproc_track();
-        return;
-    }
-
-    if (self.shoot_flags & TFL_SHOOT_HITALLVALID)
-    {
-
-        // Do a self.turret_fire for every valid target.
-        e = findradius(self.origin,self.target_range);
-
-        while (e)
-        {
-            if (turret_validate_target(self,e,self.target_validate_flags))
-            {
-                self.enemy = e;
-
-                turret_do_updates(self);
-
-                if ( self.turret_firecheckfunc() ) turret_fire();
-            }
-
-            e = e.chain;
-        }
-        self.enemy = world;
-
-    }
-    else
-    {
-        // Check if we have a vailid enemy, and get one if we dont.
-            // turret_do_updates(self);
-        if ((turret_validate_target(self,self.enemy,self.target_validate_flags) <= 0) || (self.cnt < time))
-        {
-            self.enemy = turret_select_target();
-            self.cnt = time + self.ticrate * 3;
-        }
-
-
-        // No target, just go to idle, do any custom stuff and bail.
-        if (self.enemy == world)
-        {
-            // Turn & pitch
-            if (!self.track_flags & TFL_TRACK_NO)
-                turret_stdproc_track();
-
-            // do any per-turret stuff
-            self.turret_postthink();
-
-            // And bail.
-            return;
-        }
-        // te_lightning1(world,self.origin,self.enemy.origin);
-        // Update
-        turret_do_updates(self);
-
-        // Predict or whatnot
-        if (!self.aim_flags & TFL_AIM_NO)
-            self.tur_aimpos = turret_stdproc_aim_generic();
-            //self.tur_aimpos = self.turret_aim();
-
-        // Turn & pitch
-        if (!self.track_flags & TFL_TRACK_NO)
-            turret_stdproc_track();
-            //self.turret_track();
-
-        // Update
-        turret_do_updates(self);
-
-        // Fire?
-        if (self.turret_firecheckfunc() != 0)
-            turret_fire();
-    }
-
-    // do any per-turret stuff
-    self.turret_postthink();
-}
-
-void turret_fire()
-{
-    if (cvar("g_turrets_nofire") != 0)   return;
-    if ((!self.tur_active) || (self.deadflag != DEAD_NO)) return;
-
-    self.turret_firefunc();
-
-    self.attack_finished_single    = time + self.shot_refire;
-    self.ammo               = self.ammo - self.shot_dmg;
-    self.volly_counter      = self.volly_counter - 1;
-
-
-    if (self.volly_counter <= 0)
-    {
-        self.volly_counter = self.shot_volly;
-        if (self.shoot_flags & TFL_SHOOT_CLEARTARGET) self.enemy = world;
-
-        if (self.shot_volly > 1)
-            self.attack_finished_single = time + self.shot_volly_refire;
-    }
-
-
-#ifdef TURRET_DEBUG
-    if (self.enemy) paint_target3(self.tur_aimpos ,64,self.tur_dbg_rvec,self.tur_impacttime+0.25);
-#endif
-}
-
-void turret_stdproc_fire()
-{
-    dprint("^1Bang, ^3your dead^7 ",self.enemy.netname,"! ^1(turret with no real firefunc)\n");
-}
-
-void turret_stdproc_use()
-{
-    // bprint("Used:",self.netname, " By ",other.netname,"\n");
-
-    if(g_onslaught)
-    {
-        entity e;
-
-        if(self.targetname)
-        {
-            e = find(world,target,self.targetname);
-            if(e != world)
-                self.team = e.team;
-        }
-
-        if(self.team != self.tur_head.team)
-            turret_stdproc_respawn();
-    }
-    else
-    {
-        if (self.tur_active)
-            self.tur_active = 0;
-        else
-            self.tur_active = 1;
-    }
-
-}
-
-/*
-* Standard turret initialization. use this!
-* (unless you have a very good reason not to.)
-* Any special stuff like multiple cannon models should be done
-* after this is proc called.
-* if the return value is 0, the turret should be removed.
-*/
-float turret_stdproc_init (string cvar_base_name)
-{
-    // Are turrets allowed atm?
-    if (cvar("g_turrets") == 0) return 0;
-
-    // Better more then once then never.
-    // turret_gibs_precash();
-
-    if (self.spawnflags & 2)
-    {
-        entity tb;
-        precache_model("models/turrets/terrainbase.md3");
-        tb = spawn();
-        setmodel(tb,"models/turrets/terrainbase.md3");
-        setorigin(tb,self.origin);
-        tb.solid = SOLID_BBOX;
-        makestatic(tb);
-    }
-
-    self.cvar_basename = cvar_base_name;
-    load_unit_settings(self,self.cvar_basename,0);
-
-    // Group all turrets into the same team if in non teamplaymode, so they dont try to kill eachother.
-    if (cvar("g_assult") != 0)
-    {
-        if (!self.team)
-            self.team = 14; // Assume turrets are on the defending side if not explicitly set otehrwize
-    }
-    else
-        if ((!teamplay) || (!self.team))
-            self.team = MAX_SHOT_DISTANCE;
-
-
-    /*
-    * Try to guess some reasonaly defaults
-    * for missing params and do sanety checks
-    * thise checks could produce some "interesting" results
-    * if it hits a glitch in my logic :P so try to set as mutch
-    * as possible beforehand.
-    */
-    if (self.turrcaps_flags & TFL_TURRCAPS_SUPPORT)
-    {
-        // Support units generaly dont need to have a high speed ai-loop
-        if (!self.ticrate) self.ticrate = 0.25;     // Speed of this turrets AI loop
-    }
-    else
-    {
-        if (!self.ticrate) self.ticrate = 0.1;     // Speed of this turrets AI loop
-    }
-
-    self.ticrate = bound(0.01,self.ticrate,60);  // keep it sane plz
-
-// General stuff
-    if (self.netname == "")  self.netname        = "turret";
-
-    if (!self.respawntime) self.respawntime = 60;
-    self.respawntime = max(-1,self.respawntime);
-
-    if (!self.health)        self.health         = 1000;
-    self.tur_health = max(1,self.health);
-
-    if (!self.turrcaps_flags) self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
-
-    if (!self.damage_flags) self.damage_flags = TFL_DMG_YES | TFL_DMG_RETALIATE | TFL_DMG_AIMSHAKE;
-
-// Shot stuff.
-    if (!self.shot_refire) self.shot_refire     = 1;
-    self.shot_refire = bound(0.01,self.shot_refire,9999);
-
-    if (!self.shot_dmg) self.shot_dmg        = self.shot_refire * 50;
-    self.shot_dmg = max(1,self.shot_dmg);
-
-    if (!self.shot_radius) self.shot_radius     = self.shot_dmg * 0.5;
-    self.shot_radius = max(1,self.shot_radius);
-
-    if (!self.shot_speed) self.shot_speed      = 2500;
-    self.shot_speed = max(1,self.shot_speed);
-
-    if (!self.shot_spread) self.shot_spread     = 0.0125;
-    self.shot_spread = bound(0.0001,self.shot_spread,500);
-
-    if (!self.shot_force) self.shot_force      = self.shot_dmg * 0.5 + self.shot_radius * 0.5;
-    self.shot_force = bound(0.001,self.shot_force,MAX_SHOT_DISTANCE * 0.5);
-
-    if (!self.shot_volly) self.shot_volly = 1;
-    self.shot_volly = bound(1,self.shot_volly,floor(self.ammo_max / self.shot_dmg));
-
-    if (!self.shot_volly_refire) self.shot_volly_refire = self.shot_refire * self.shot_volly;
-    self.shot_volly_refire = bound(self.shot_refire,self.shot_volly_refire,60);
-
-    if (!self.firecheck_flags)
-        self.firecheck_flags = TFL_FIRECHECK_WORLD | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES |
-                               TFL_FIRECHECK_LOS | TFL_FIRECHECK_AIMDIST | TFL_FIRECHECK_TEAMCECK |
-                               TFL_FIRECHECK_OWM_AMMO | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_WORLD;
-
-// Range stuff.
-    if (!self.target_range) self.target_range               = self.shot_speed * 0.5;
-    self.target_range = bound(0,self.target_range,MAX_SHOT_DISTANCE);
-
-    if (!self.target_range_min)          self.target_range_min           = self.shot_radius * 2;
-    self.target_range_min = bound(0,self.target_range_min,MAX_SHOT_DISTANCE);
-
-    if (!self.target_range_fire)         self.target_range_fire          = self.target_range * 0.8;
-    self.target_range_fire = bound(0,self.target_range_fire,MAX_SHOT_DISTANCE);
-
-    if (!self.target_range_optimal)      self.target_range_optimal       = self.target_range_fire * 0.5;
-    self.target_range_optimal = bound(0,self.target_range_optimal,MAX_SHOT_DISTANCE);
-
-
-// Aim stuff.
-    if (!self.aim_maxrot)    self.aim_maxrot    = 45;
-    self.aim_maxrot = bound(0,self.aim_maxrot,361);
-
-    if (!self.aim_maxpitch)  self.aim_maxpitch  = 20;
-    self.aim_maxpitch = bound(0,self.aim_maxpitch,90);
-
-    if (!self.aim_speed)     self.aim_speed     = 36;
-    self.aim_speed  = bound(0.1,self.aim_speed, 1000);
-
-    if (!self.aim_firetolerance_dist)     self.aim_firetolerance_dist  = 5 + (self.shot_radius * 2);
-    self.aim_firetolerance_dist = bound(0.1,self.aim_firetolerance_dist,MAX_SHOT_DISTANCE);
-
-//    if (!self.aim_firetolerance_angle)     self.aim_firetolerance_angle  = 10;
-//    self.aim_firetolerance_angle = bound(0.1,self.aim_firetolerance_angle,360);
-
-    if (!self.aim_flags) self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZEASE;
-
-    // Sill the most tested (and aim-effective)
-    if (!self.track_type) self.track_type = TFL_TRACKTYPE_STEPMOTOR;
-
-    if (self.track_type != TFL_TRACKTYPE_STEPMOTOR)
-    {
-        // Fluid / Ineria mode. Looks mutch nicer, bit experimental &
-        // Can inmapt aim preformance alot.
-        // needs a bit diffrent aimspeed
-        if (!self.aim_speed) self.aim_speed = 180;
-        self.aim_speed  = bound(0.1,self.aim_speed, 1000);
-
-        if (!self.track_accel_pitch) self.track_accel_pitch = 0.75;
-        if (!self.track_accel_rot)   self.track_accel_rot   = 0.75;
-        if (!self.track_blendrate)   self.track_blendrate   = 0.35;
-    }
-
-    if (!self.track_flags) self.track_flags = TFL_TRACK_PITCH | TFL_TRACK_ROT;
-
-
-// Target selection stuff.
-    if (!self.target_select_rangebias)   self.target_select_rangebias     = 1;
-    self.target_select_rangebias = bound(-10,self.target_select_rangebias,10);
-
-    if (!self.target_select_samebias)    self.target_select_samebias      = 1;
-    self.target_select_samebias = bound(-10,self.target_select_samebias,10);
-
-    if (!self.target_select_anglebias)   self.target_select_anglebias     = 1;
-    self.target_select_anglebias = bound(-10,self.target_select_anglebias,10);
-
-    if (!self.target_select_missilebias)   self.target_select_missilebias = -10;
-    self.target_select_missilebias = bound(-10,self.target_select_missilebias,10);
-    self.target_select_playerbias = bound(-10,self.target_select_playerbias,10);
-
-    if (!self.target_select_flags)
-        if (self.turrcaps_flags & TFL_TURRCAPS_MISSILEKILL)
-            self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_MISSILES |
-                                       TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_ANGLELIMITS;
-        else
-            self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS |
-                                       TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_ANGLELIMITS;
-
-    //if(!self.target_validate_flags)
-    self.target_validate_flags = self.target_select_flags;
-
-
-// Ammo stuff
-    if (!self.ammo_max)          self.ammo_max       = self.shot_dmg * 10;
-    self.ammo_max = max(self.shot_dmg,self.ammo_max);
-
-    if (!self.ammo)              self.ammo           = self.shot_dmg * 5;
-    self.ammo = bound(0,self.ammo,self.ammo_max);
-
-    if (!self.ammo_recharge)     self.ammo_recharge = self.shot_dmg / 2;
-    self.ammo_recharge = max(0,self.ammo_recharge);
-
-    // Convert the recharge from X per sec to X per ticrate
-    self.ammo_recharge = self.ammo_recharge * self.ticrate;
-
-    if (!self.ammo_flags) self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE;
-
-// Offsets & origins
-    if (!self.tur_aimorg)    self.tur_aimorg = '0 0 50';
-    if (!self.tur_shotorg)   self.tur_shotorg = '50 0 50';
-
-// End of default & sanety checks, start building the turret.
-
-// Spawn extra bits
-    self.tur_head   = spawn();
-
-    self.tur_head.netname = self.tur_head.classname     = "turret_head";
-    self.tur_head.team = self.team;
-
-    // Defend mode?
-    if (self.target != "")
-    {
-        self.tur_defend = find(world, targetname, self.target);
-        if (self.tur_defend == world)
-        {
-            self.target = "";
-            dprint("Turret has invalid defendpoint!\n");
-        }
-    }
-
-// Claim ownership
-    self.tur_head.owner   = self;
-
-// Put pices in place
-
-    if (!(self.turrcaps_flags & TFL_TURRCAPS_LINKED))
-        setorigin(self.tur_head,self.origin);
-
-    // In target defense mode, aim on the spot to defens when idle.
-    if (self.tur_defend)
-        self.idle_aim  = self.tur_head.angles + angleofs(self.tur_head,self.tur_defend);
-    else
-        self.idle_aim  = self.angles;
-
-    if (!(self.turrcaps_flags & TFL_TURRCAPS_LINKED))
-        self.tur_head.angles    = self.idle_aim;
-
-    if (!self.health) self.health  = 150;
-    self.tur_health = self.health;
-
-    //Solid bbox for preformance reasons
-    self.solid              = SOLID_BBOX;
-    self.tur_head.solid     = SOLID_BBOX;
-
-    self.takedamage             = DAMAGE_AIM;
-    self.tur_head.takedamage    = DAMAGE_AIM;
-
-    self.movetype            = MOVETYPE_NOCLIP;
-    self.tur_head.movetype   = MOVETYPE_NOCLIP;
-
-    // Team colouring?track
-    if (self.team == COLOR_TEAM1) self.colormod = '1.4 0.8 0.8';
-    if (self.team == COLOR_TEAM2) self.colormod = '0.8 0.8 1.4';
-
-    // Attach stdprocs. override when and what needed
-    if (self.turrcaps_flags & TFL_TURRCAPS_SUPPORT)
-    {
-        //self.turret_prethink        = turret_stdproc_true;
-        self.turret_score_target    = turret_stdproc_targetscore_support;
-        //self.turret_aim             = turret_stdproc_aim_generic;
-        //self.turret_track           = turret_stdproc_track;
-        self.turret_firecheckfunc   = turret_stdproc_firecheck;
-        self.turret_firefunc        = turret_stdproc_fire;
-        self.turret_postthink       = turret_stdproc_nothing;
-
-        //self.turret_damagefunc          = turret_stdproc_damage;
-        self.event_damage               = turret_stdproc_damage;
-        self.tur_head.event_damage      = turret_stdproc_damage;
-
-        //self.turret_diefunc             = turret_stdproc_die;
-        //self.turret_spawnfunc           = turret_stdproc_respawn;
-
-    }
-    else
-    {
-
-        //self.turret_prethink        = turret_stdproc_true;
-        self.turret_score_target    = turret_stdproc_targetscore_generic;
-
-        //if (self.aim_flags & TFL_AIM_SIMPLE)
-        //    self.turret_aim             = turret_stdproc_aim_simple;
-        //else
-        //    self.turret_aim             = turret_stdproc_aim_generic;
-
-        //self.turret_track           = turret_stdproc_track;
-        self.turret_firecheckfunc   = turret_stdproc_firecheck;
-        self.turret_firefunc        = turret_stdproc_fire;
-        self.turret_postthink       = turret_stdproc_nothing;
-
-        //self.turret_damagefunc          = turret_stdproc_damage;
-        self.event_damage               = turret_stdproc_damage;
-        self.tur_head.event_damage      = turret_stdproc_damage;
-
-        //self.turret_diefunc             = turret_stdproc_die;
-        //self.turret_spawnfunc           = turret_stdproc_respawn;
-        self.turret_addtarget           = turret_stdproc_false;
-    }
-
-    self.use = turret_stdproc_use;
-
-    // Initiate the main AI loop
-    self.think     = turret_think;
-    self.nextthink = time + self.ticrate;
-
-    self.tur_head.team = self.team;
-    self.view_ofs = '0 0 0';
-
-#ifdef TURRET_DEBUG
-    self.tur_dbg_start = self.nextthink;
-    while (vlen(self.tur_dbg_rvec) < 2)
-        self.tur_dbg_rvec  = randomvec() * 4;
-
-    self.tur_dbg_rvec_x = fabs(self.tur_dbg_rvec_x);
-    self.tur_dbg_rvec_y = fabs(self.tur_dbg_rvec_y);
-    self.tur_dbg_rvec_z = fabs(self.tur_dbg_rvec_z);
-#endif
-
-    // Its all good.
-    self.classname = "turret_main";
-
-    self.tur_active = 1;
-
-    return 1;
-}
-
-

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_misc.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_misc.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_misc.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,123 +0,0 @@
-//--// Some support routines //--//
-
-// Get real origin
-vector real_origin(entity ent)
-{
-    entity e;
-    vector v;
-
-    e = ent.tag_entity;
-    while(e)
-    {
-        // v = v + e.origin;
-        v = v + ((e.absmin + e.absmax) * 0.5);
-        e = e.tag_entity;
-    }
-    //v = v + ent.origin;
-    v = v + ((ent.absmin + ent.absmax) * 0.5);
-    return v;
-
-}
-
-// Plug this into wherever precashing is done.
-void g_turrets_common_precash()
-{
-    precache_model ("models/turrets/c512.md3");
-}
-
-/*
-* Paint a v_color colord circle on target onwho
-* that fades away over f_time
-*/
-void paint_target(entity onwho, float f_size, vector v_color, float f_time)
-{
-    entity e;
-
-    e = spawn();
-    setmodel(e, "models/turrets/c512.md3"); // precision set above
-    e.scale = (f_size/512);
-    setsize(e, '0 0 0', '0 0 0');
-    //setattachment(e,onwho,"");
-    setorigin(e,onwho.origin + '0 0 1');
-    e.alpha = 0.15;
-    e.movetype = MOVETYPE_FLY;
-
-    e.velocity = (v_color * 32); // + '0 0 1' * 64;
-
-    e.colormod = v_color;
-    SUB_SetFade(e,time,f_time);
-}
-
-void paint_target2(entity onwho, float f_size, vector v_color, float f_time)
-{
-    entity e;
-
-    e = spawn();
-    setmodel(e, "models/turrets/c512.md3"); // precision set above
-    e.scale = (f_size/512);
-    setsize(e, '0 0 0', '0 0 0');
-
-    setorigin(e,onwho.origin + '0 0 1');
-    e.alpha = 0.15;
-    e.movetype = MOVETYPE_FLY;
-
-    e.velocity = (v_color * 32); // + '0 0 1' * 64;
-    e.avelocity_x = -128;
-
-    e.colormod = v_color;
-    SUB_SetFade(e,time,f_time);
-}
-
-void paint_target3(vector where, float f_size, vector v_color, float f_time)
-{
-    entity e;
-    e = spawn();
-    setmodel(e, "models/turrets/c512.md3"); // precision set above
-    e.scale = (f_size/512);
-    setsize(e, '0 0 0', '0 0 0');
-    setorigin(e,where+ '0 0 1');
-    e.movetype = MOVETYPE_NONE;
-    e.velocity = '0 0 0';
-    e.colormod = v_color;
-    SUB_SetFade(e,time,f_time);
-}
-
-/*
-* Return the angle between two enteties
-*/
-vector angleofs(entity from, entity to)
-{
-    vector v_res;
-
-    // makevectors(from.angles);
-    v_res = normalize(to.origin - from.origin);
-    v_res = vectoangles(v_res);
-    v_res = v_res - from.angles;
-
-    if (v_res_x < 0) v_res_x += 360;
-    if (v_res_x > 180) v_res_x -= 360;
-
-    if (v_res_y < 0) v_res_y += 360;
-    if (v_res_y > 180) v_res_y -= 360;
-
-    return v_res;
-}
-
-vector angleofs2(entity from, vector to)
-{
-    vector v_res;
-
-    // makevectors(from.angles);
-    v_res = normalize(to - from.origin);
-    v_res = vectoangles(v_res);
-    v_res = v_res - from.angles;
-
-    if (v_res_x < 0) v_res_x += 360;
-    if (v_res_x > 180) v_res_x -= 360;
-
-    if (v_res_y < 0) v_res_y += 360;
-    if (v_res_y > 180) v_res_y -= 360;
-
-    return v_res;
-}
-

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_scoreprocs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_scoreprocs.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/turret_system_scoreprocs.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,164 +0,0 @@
-/*
-.float target_select_flags; /// target selection flags
-float TFL_TARGETSELECT_NO            = 1;   /// Dont select a target on its own.
-float TFL_TARGETSELECT_LOS           = 2;   /// Need line of sight
-float TFL_TARGETSELECT_PLAYERS       = 4;   /// Players are valid targets
-float TFL_TARGETSELECT_MISSILES      = 8;   /// Missiles are valid targets
-float TFL_TARGETSELECT_TRIGGERTARGET = 16;  /// Responds to turret_trigger_target events
-float TFL_TARGETSELECT_ANGLELIMITS   = 32;  /// Angular limitations of turret head limits target selection
-float TFL_TARGETSELECT_RANGELIMTS    = 64;  /// Range limits apply in targetselection
-float TFL_TARGETSELECT_TEAMCHECK     = 128; /// Consider team own <-> targets team
-float TFL_TARGETSELECT_NOBUILTIN     = 256; /// Cant select targets on its own. needs to be triggerd or slaved.
-float TFL_TARGETSELECT_OWNTEAM       = 512;
-*/
-
-float turret_stdproc_targetscore_support(entity e_turret,entity e_target)
-{
-    float score;        // Total score
-    float s_score,d_score;
-
-    if (e_turret.enemy == e_target) s_score = 1;
-
-    d_score = min(e_turret.target_range_optimal,tvt_dist) / max(e_turret.target_range_optimal,tvt_dist);
-
-    score = (d_score * e_turret.target_select_rangebias) +
-            (s_score * e_turret.target_select_samebias);
-
-    return score;
-}
-
-/*
-* Generic bias aware score system.
-*/
-float turret_stdproc_targetscore_generic(entity e_turret,entity e_target)
-{
-    //vector v_tmp;
-    float d_dist;       // Defendmode Distance
-
-    float score;        // Total score
-    float d_score;      // Distance score
-    //float da_score;     // Distance from aimpoint score
-    float a_score;      // Angular score
-    float s_score;      // samescore (same target as last time)
-    float m_score;      // missile score
-    float p_score;      // player score
-
-    float ikr;          // ideal kill range
-
-    if(!e_target) return 0;
-
-    if (e_target == e_turret.enemy) s_score = 1;
-
-    if (e_turret.tur_defend)
-    {
-        d_dist = vlen(real_origin(e_target) - e_turret.tur_defend.origin);
-        ikr = vlen(e_turret.origin - e_turret.tur_defend.origin);
-        d_score = 1 - d_dist / e_turret.target_range;
-    }
-    else
-    {
-        // Make a normlized value base on the targets distance from our optimal killzone
-        ikr = e_turret.target_range_optimal;
-        d_score = min(ikr,tvt_dist) / max(ikr,tvt_dist);
-    }
-
-    /*
-    // Determine the maximum time it could take this turrent to aim at someting.
-    max_aim_delay = (max(e_turret.aim_maxrot,e_turret.aim_maxpitch) / e_turret.aim_speed * 2);
-
-    // Find out how long it would take to aim at this taget.
-    aim_delay = (thadf+0.01) / e_turret.aim_speed;
-
-    // Turn this info into a normalized value.
-    aim_delay = (min(max_aim_delay,aim_delay) / max_aim_delay);
-    a_score = 1 - aim_delay;
-    */
-
-    //a_score = 1 - (tvt_thadf / max(e_turret.aim_maxrot,e_turret.aim_maxpitch));
-    a_score = 1 - tvt_thadf / e_turret.aim_maxrot;
-
-    if ((e_turret.target_select_missilebias > 0) && (e_target.flags & FL_PROJECTILE))
-        m_score = 1;
-
-    if ((e_turret.target_select_playerbias > 0) && (e_target.flags & FL_CLIENT))
-        p_score = 1;
-
-    d_score = max(d_score,0);
-    s_score = max(s_score,0);
-    a_score = max(a_score,0);
-    m_score = max(m_score,0);
-    p_score = max(p_score,0);
-
-    score = (d_score * e_turret.target_select_rangebias) +
-            (s_score * e_turret.target_select_samebias) +
-            (a_score * e_turret.target_select_anglebias) +
-            (m_score * e_turret.target_select_missilebias) +
-            (p_score * e_turret.target_select_playerbias);
-
-    if(e_turret.target_range_fire < vlen(e_turret.tur_shotorg_updated - real_origin(e_target)))
-        score *= 0.1;
-
-#ifdef TURRET_DEBUG
-    string sd,sv,sa,sm,sp,ss;
-    string sdt,svt,sat,smt,spt;
-
-    sd = ftos(d_score);
-    d_score *= e_turret.target_select_rangebias;
-    sdt = ftos(d_score);
-
-    //sv = ftos(v_score);
-    //v_score *= e_turret.target_select_samebias;
-    //svt = ftos(v_score);
-
-    sa = ftos(a_score);
-    a_score *= e_turret.target_select_anglebias;
-    sat = ftos(a_score);
-
-    sm = ftos(m_score);
-    m_score *= e_turret.target_select_missilebias;
-    smt = ftos(m_score);
-
-    sp = ftos(p_score);
-    p_score *= e_turret.target_select_playerbias;
-    spt = ftos(p_score);
-
-
-    ss = ftos(score);
-    bprint("^3Target scores^7 \[  ",e_turret.netname, "  \] ^3for^7 \[  ", e_target.netname,"  \]\n");
-    bprint("^5Range:\[  ",sd,  "  \]^2+bias:\[  ",sdt,"  \]\n");
-    //bprint("^5Volly:\[  ",sv,  "  \]^2+bias:\[  ",svt,"  \]\n");
-    bprint("^5Angle:\[  ",sa,  "  \]^2+bias:\[  ",sat,"  \]\n");
-    bprint("^5Missile:\[  ",sm,"  \]^2+bias:\[  ",smt,"  \]\n");
-    bprint("^5Player:\[  ",sp, "  \]^2+bias:\[  ",spt,"  \]\n");
-    bprint("^3Total (w/bias):\[^1",ss,"\]\n");
-
-#endif
-
-    return score;
-}
-
-float turret_stdproc_targetscore_close(entity e_turret,entity e_target)
-{
-    return 1 - (tvt_dist / e_turret.target_range);
-}
-
-float turret_stdproc_targetscore_far (entity e_turret,entity e_target)
-{
-    return  tvt_dist / e_turret.target_range;
-}
-
-float turret_stdproc_targetscore_optimal(entity e_turret,entity e_target)
-{
-    return  min(e_turret.target_range_optimal,tvt_dist) / max(e_turret.target_range_optimal,tvt_dist);
-}
-
-float turret_stdproc_score_angular(entity e_turret,entity e_target)
-{
-    return 1 - (tvt_thadf / e_turret.aim_maxrot);
-}
-
-float turret_stdproc_targetscore_defend(entity e_turret,entity e_target)
-{
-    return 0;
-    //min(e_target.origin,e_turret.tur_defend.origin) / max(e_target.origin,e_turret.tur_defend.origin);
-}

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_common.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_common.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_common.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,148 +0,0 @@
-float turret_tag_setup(float linked)
-{
-    vector v;
-    float f;
-
-    // Laters dooz
-    if (linked)
-        return 0;
-
-    f = gettagindex(self,"tag_head");
-    v = gettaginfo(self,f);
-    v = v + self.origin;
-    setorigin(self.tur_head,v);
-
-    f = gettagindex(self.tur_head,"tag_fire");
-    v = gettaginfo(self.tur_head,f) + (self.tur_head.origin - self.origin);
-    v_y *= -1;
-    self.tur_shotorg = v;
-
-    f = gettagindex(self.tur_head,"tag_aim");
-    v = gettaginfo(self.tur_head,f) + (self.tur_head.origin - self.origin);
-    self.tur_aimorg  = v;
-
-    return 1;
-}
-
-float turret_tag_fire_update()
-{
-    vector v;
-    float f;
-
-    f = gettagindex(self.tur_head,"tag_fire");
-    v = gettaginfo(self.tur_head,f) + (self.tur_head.origin - self.origin);
-    v_y *= -1;
-    self.tur_shotorg = v;
-
-    f = gettagindex(self.tur_head,"tag_aim");
-    v = gettaginfo(self.tur_head,f) + (self.tur_head.origin - self.origin);
-    self.tur_aimorg  = v;
-
-    return 1;
-}
-
-void FireImoBeam (vector start,vector end,vector smin,vector smax,
-                  float bforce,float f_dmg,float f_velfactor, float deathtype)
-
-{
-    local vector hitloc, force, endpoint, dir;
-    local entity ent;
-
-    dir = normalize(end - start);
-    force = dir * bforce;
-
-    // go a little bit into the wall because we need to hit this wall later
-    end = end + dir;
-
-    // trace multiple times until we hit a wall, each obstacle will be made unsolid.
-    // note down which entities were hit so we can damage them later
-    while (1)
-    {
-        tracebox(start, smin, smax, end, FALSE, self);
-
-        // if it is world we can't hurt it so stop now
-        if (trace_ent == world || trace_fraction == 1)
-            break;
-
-        if (trace_ent.solid == SOLID_BSP)
-            break;
-
-        // make the entity non-solid so we can hit the next one
-        trace_ent.railgunhit = TRUE;
-        trace_ent.railgunhitloc = end;
-        trace_ent.railgunhitsolidbackup = trace_ent.solid;
-
-        // stop if this is a wall
-
-
-        // make the entity non-solid
-        trace_ent.solid = SOLID_NOT;
-    }
-
-    endpoint = trace_endpos;
-
-    // find all the entities the railgun hit and restore their solid state
-    ent = findfloat(world, railgunhit, TRUE);
-    while (ent)
-    {
-        // restore their solid type
-        ent.solid = ent.railgunhitsolidbackup;
-        ent = findfloat(ent, railgunhit, TRUE);
-    }
-
-    // find all the entities the railgun hit and hurt them
-    ent = findfloat(world, railgunhit, TRUE);
-    while (ent)
-    {
-        // get the details we need to call the damage function
-        hitloc = ent.railgunhitloc;
-        ent.railgunhitloc = '0 0 0';
-        ent.railgunhitsolidbackup = SOLID_NOT;
-        ent.railgunhit = FALSE;
-
-        // apply the damage
-        if (ent.takedamage)
-        {
-            Damage (ent, self, self, f_dmg, deathtype, hitloc, force);
-            ent.velocity = ent.velocity * f_velfactor;
-            //ent.alpha = 0.25 + random() * 0.75;
-        }
-
-        // advance to the next entity
-        ent = findfloat(ent, railgunhit, TRUE);
-    }
-    trace_endpos = endpoint;
-}
-
-void turrets_precash()
-{
-    precache_sound ("turrets/phaser.ogg");
-
-    precache_model ("models/turrets/base-gib1.md3");
-    precache_model ("models/turrets/base-gib2.md3");
-    precache_model ("models/turrets/base-gib3.md3");
-    precache_model ("models/turrets/base-gib4.md3");
-
-    precache_model ("models/turrets/head-gib1.md3");
-    precache_model ("models/turrets/head-gib2.md3");
-    precache_model ("models/turrets/head-gib3.md3");
-    precache_model ("models/turrets/head-gib4.md3");
-
-    precache_model ("models/turrets/base.md3");
-    precache_model ("models/turrets/flac.md3");
-    precache_model ("models/turrets/pd_proj.md3");
-    precache_model ("models/turrets/reactor.md3");
-    precache_model ("models/turrets/mlrs_rocket.md3");
-    precache_model ("models/turrets/hellion.md3");
-    precache_model ("models/turrets/hunter2.md3");
-    precache_model ("models/turrets/hk.md3");
-    precache_model ("models/turrets/machinegun.md3");
-    precache_model ("models/turrets/rocket.md3");
-    precache_model ("models/turrets/mlrs.md3");
-    precache_model ("models/turrets/phaser.md3");
-    precache_model ("models/turrets/phaser_beam.md3");
-    precache_model ("models/turrets/plasmad.md3");
-    precache_model ("models/turrets/plasma.md3");
-    precache_model ("models/turrets/tesla_head.md3");
-    precache_model ("models/turrets/tesla_base.md3");
-}

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_flac.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_flac.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_flac.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,103 +0,0 @@
-void spawnfunc_turret_flac();
-void turret_flac_dinit();
-void turret_flac_attack();
-void turret_flac_projectile_explode();
-
-void turret_flac_attack()
-{
-    local entity proj;
-
-    turret_tag_fire_update();
-
-    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", 1, ATTN_NORM);
-    proj = spawn ();
-    setorigin(proj, self.tur_shotorg_updated);
-    setmodel(proj, "models/turrets/pd_proj.md3");
-    setsize(proj, '0 0 0', '0 0 0');
-    proj.classname          = "turret_fire";
-    proj.owner              = self;
-    proj.bot_dodge          = TRUE;
-    proj.bot_dodgerating    = self.shot_dmg;
-    proj.solid              = SOLID_NOT;
-    proj.movetype           = MOVETYPE_FLYMISSILE;
-    proj.flags              = FL_PROJECTILE;
-    proj.effects            = EF_LOWPRECISION;
-    proj.takedamage         = DAMAGE_YES;
-    proj.health             = 10;
-    proj.velocity           = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
-    proj.angles             = vectoangles(proj.velocity);
-    proj.touch              = turret_flac_projectile_explode;
-    proj.think              = turret_flac_projectile_explode;
-    proj.nextthink          = time + (vlen(self.tur_aimpos - self.tur_shotorg_updated) / self.shot_speed) + (random() * self.shot_spread);
-
-    self.tur_head.frame = self.tur_head.frame + 1;
-    if (self.tur_head.frame >= 4) self.tur_head.frame = 0;
-
-}
-
-void turret_flac_projectile_explode()
-{
-    float ftmp;
-
-    te_explosion (self.origin);
-
-    ftmp = crandom();
-    if (ftmp<-0.7)
-        sound (self, CHAN_PROJECTILE, "weapons/hagexp1.wav", 1, ATTN_NORM);
-    else if (ftmp<0.4)
-        sound (self, CHAN_PROJECTILE, "weapons/hagexp2.wav", 1, ATTN_NORM);
-    else if (ftmp<1)
-        sound (self, CHAN_PROJECTILE, "weapons/hagexp3.wav", 1, ATTN_NORM);
-
-
-    self.event_damage = SUB_Null;
-
-    ftmp = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
-
-#ifdef TURRET_DEBUG
-    self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
-    self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
-#endif
-
-    remove (self);
-}
-
-
-void turret_flac_dinit()
-{
-    if (self.netname == "")      self.netname  = "FLAC Cannon";
-
-
-    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_FASTPROJ | TFL_TURRCAPS_MISSILEKILL;
-    self.ammo_flags     = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
-    self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
-
-    if (turret_stdproc_init("flac_std") == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/flac.md3");
-
-    if (!turret_tag_setup(0))
-        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
-    // Our fire routine
-    self.turret_firefunc  = turret_flac_attack;
-
-}
-/*QUAKED turret_flac (0 .5 .8) ?
-*/
-
-void spawnfunc_turret_flac()
-{
-    //precache_model ("models/turrets/base.md3");
-    //precache_model ("models/turrets/flac.md3");
-    //precache_model("models/turrets/pd_proj.md3");
-
-    self.think = turret_flac_dinit;
-    self.nextthink = time + 0.5;
-}
-

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_fusionreactor.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_fusionreactor.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_fusionreactor.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,81 +0,0 @@
-void spawnfunc_turret_fusionreactor();
-void turret_fusionreactor_dinit();
-void turret_fusionreactor_fire();
-
-float turret_fusionreactor_firecheck()
-{
-    if (self.enemy == world) return 0;
-
-    if (!self.enemy.ammo_flags & TFL_AMMO_RECIVE) return 0;
-    if (!self.enemy.ammo_flags & TFL_AMMO_ENERGY) return 0;
-
-    if (self.ammo < self.shot_dmg) return 0;
-    if (self.enemy.ammo >= self.enemy.ammo_max) return 0;
-    if (self.tur_dist_enemy > self.target_range_fire) return 0;
-    if (self.tur_dist_enemy < self.target_range_min) return 0;
-
-    return 1;
-}
-
-
-void turret_fusionreactor_fire()
-{
-    self.enemy.ammo = min(self.enemy.ammo + self.shot_dmg,self.enemy.ammo_max);
-    //te_lightning1(world,self.origin,self.enemy.origin);
-}
-
-void turret_fusionreactor_postthink()
-{
-}
-
-
-void turret_fusionreactor_dinit()
-{
-    if (self.netname == "")      self.netname     = "Fusionreactor";
-
-    self.turrcaps_flags =TFL_TURRCAPS_SUPPORT | TFL_TURRCAPS_AMMOSOURCE;
-
-    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE;
-
-    self.target_select_flags = TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_OWNTEAM | TFL_TARGETSELECT_RANGELIMTS;
-
-    self.firecheck_flags = TFL_FIRECHECK_OWM_AMMO | TFL_FIRECHECK_OTHER_AMMO | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_WORLD;
-
-    self.shoot_flags = TFL_SHOOT_HITALLVALID;
-
-    self.aim_flags = TFL_AIM_NO;
-
-    self.track_flags = TFL_TRACK_NO;
-
-    if (turret_stdproc_init("fusreac_std") == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/reactor.md3");
-
-    //if(!turret_tag_setup(0))
-    //    dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
-    self.tur_head.scale = 0.75;
-    setorigin(self.tur_head,self.origin + '0 0 25');
-    self.tur_head.avelocity = '0 50 0';
-
-    self.turret_firecheckfunc = turret_fusionreactor_firecheck;
-    self.turret_firefunc = turret_fusionreactor_fire;
-
-    self.turret_postthink = turret_fusionreactor_postthink;
-}
-
-/*QUAKED turret_fusionreactor (0 .5 .8) ?
-*/
-void spawnfunc_turret_fusionreactor()
-{
-    //precache_model ("models/turrets/reactor.md3");
-    //precache_model ("models/turrets/base.md3");
-
-    self.think = turret_fusionreactor_dinit;
-    self.nextthink = time + 0.5;
-}

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_hellion.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_hellion.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_hellion.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,221 +0,0 @@
-.float      shot_speed_max;
-.float      shot_speed_gain;
-
-void spawnfunc_turret_hellion();
-void turret_hellion_dinit();
-void turret_hellion_attack();
-void turret_hellion_missile_explode();
-void turret_hellion_missile_think();
-void turret_hellion_missile_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
-
-void turret_hellion_postthink()
-{
-    if (cvar("g_turrets_reloadcvars"))
-    {
-        if (!self.shot_speed_max)  self.shot_speed_max  = cvar("g_turrets_unit_hellion_std_shot_speed_max");
-        if (!self.shot_speed_gain) self.shot_speed_gain = cvar("g_turrets_unit_hellion_std_shot_speed_gain");
-    }
-
-    if (self.tur_head.frame != 0)
-        self.tur_head.frame = self.tur_head.frame + 1;
-
-    if (self.tur_head.frame > 7)
-        self.tur_head.frame = 0;
-}
-
-void turret_hellion_attack()
-{
-    local entity missile;
-
-    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", 1, ATTN_NORM);
-
-    missile = spawn ();
-    setorigin(missile, self.tur_shotorg_updated);
-    sound (missile, CHAN_PROJECTILE, "weapons/rocket_fly.wav", 0.4, ATTN_NORM);
-    setmodel (missile, "models/turrets/mlrs_rocket.md3"); // precision set below
-    setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
-
-    missile.classname          = "hellion_missile";
-    missile.owner              = self;
-    missile.bot_dodge          = TRUE;
-    missile.bot_dodgerating    = self.shot_dmg;
-    missile.takedamage         = DAMAGE_YES;
-    missile.damageforcescale   = 2;
-    missile.health             = 50;
-    missile.enemy              = self.enemy;
-    missile.think              = turret_hellion_missile_think;
-    missile.nextthink          = time + 0.2;
-    missile.solid              = SOLID_BBOX;
-    missile.movetype           = MOVETYPE_FLYMISSILE;
-    missile.effects            = EF_LOWPRECISION;
-    missile.velocity           = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed; // + ('0 0 1' * self.shot_speed * 0.15);
-    missile.angles             = vectoangles(missile.velocity);
-    missile.touch              = turret_hellion_missile_explode;
-    missile.flags              = FL_PROJECTILE;
-    missile.solid              = SOLID_BBOX;
-    missile.tur_health         = time + 9;
-    missile.tur_aimpos         = randomvec() * 128;
-    te_explosion (missile.origin);
-
-    // switch tubes
-    self.tur_shotorg_y = self.tur_shotorg_y * -1;
-
-    if (self.tur_head.frame == 0)
-        self.tur_head.frame = self.tur_head.frame + 1;
-
-}
-
-void turret_hellion_missile_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
-{
-    self.health = self.health - damage;
-    self.velocity = self.velocity + vforce;
-    if (self.health <= 0) turret_hellion_missile_explode();
-}
-
-void turret_hellion_missile_think()
-{
-    vector olddir,newdir;
-    vector pre_pos;
-    float itime;
-
-    self.nextthink          = time + 0.1;
-
-    // Enemy in range?
-    if (vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 0.25)
-        turret_hellion_missile_explode();
-
-    olddir = normalize(self.velocity);
-
-    if (self.tur_health < time) turret_hellion_missile_explode();
-
-    // Enemy dead? just keep on the current heading then.
-    if ((self.enemy == world) || (self.enemy.deadflag != DEAD_NO))
-    {
-
-        // Make sure we dont return to tracking a respawned player
-        self.enemy = world;
-
-        // Accelerate
-        self.velocity = olddir * min(vlen(self.velocity) * self.owner.shot_speed_gain,self.owner.shot_speed_max);
-
-        // Turn model
-        self.angles = vectoangles(self.velocity);
-
-        //if ( (vlen(self.origin - self.owner.origin)) > (self.owner.shot_radius * 10) )
-        //    turret_hellion_missile_explode();
-
-        // return;
-    }
-
-    olddir = normalize(self.velocity);
-
-    if (self.enemy)
-    {
-        // Predict enemy position
-        itime = vlen(self.enemy.origin - self.origin) / vlen(self.velocity);
-        pre_pos = self.enemy.origin + self.enemy.velocity * itime;
-    }
-    else
-    {
-        pre_pos = self.origin + olddir * 1024;
-    }
-
-    pre_pos = (pre_pos + self.enemy.origin) * 0.5;
-
-    //pre_pos += randomvec() * 128; //self.tur_aimpos * (sin(32) * time) ;
-
-
-    // Find out the direction to that place
-    newdir = normalize(pre_pos - self.origin);
-
-    // Turn
-    newdir = normalize(olddir + newdir * 0.5);
-
-    // Accelerate
-    self.velocity = newdir * min(vlen(self.velocity) * self.owner.shot_speed_gain,self.owner.shot_speed_max);
-
-    // Turn model
-    self.angles = vectoangles(self.velocity);
-
-    if (time+itime < time+0.1)
-    {
-        self.think = turret_hellion_missile_explode;
-        self.nextthink = time + itime;
-    }
-}
-
-void turret_hellion_missile_explode()
-{
-    vector org2;
-    float d;
-
-    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", 1, ATTN_NORM);
-    org2 = findbetterlocation (self.origin, 16);
-
-    // LordHavoc: TE_TEI_BIGEXPLOSION
-    WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
-    WriteByte (MSG_BROADCAST, 78);
-    WriteCoord (MSG_BROADCAST, org2_x);
-    WriteCoord (MSG_BROADCAST, org2_y);
-    WriteCoord (MSG_BROADCAST, org2_z);
-
-    self.event_damage = SUB_Null;
-    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
-
-#ifdef TURRET_DEBUG
-    self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
-    self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
-#endif
-
-    // Target dead, get another is still targeting the same.
-    if ((self.enemy.deadflag != DEAD_NO) && (self.enemy == self.owner.enemy))
-        self.owner.enemy = world;
-
-    remove (self);
-}
-
-void turret_hellion_dinit()
-{
-    if (self.netname == "")      self.netname  = "Hellion Missile Turret";
-
-    if (!self.shot_speed_max)  self.shot_speed_max  = cvar("g_turrets_unit_hellion_std_shot_speed_max");
-    if (!self.shot_speed_gain) self.shot_speed_gain = cvar("g_turrets_unit_hellion_std_shot_speed_gain");
-
-    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_FASTPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
-    self.aim_flags = TFL_AIM_SIMPLE;
-    self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TRIGGERTARGET | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK ;
-    self.firecheck_flags = TFL_FIRECHECK_WORLD | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_TEAMCECK | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF | TFL_FIRECHECK_OWM_AMMO;
-    self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
-
-    if (turret_stdproc_init("hellion_std") == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/hellion.md3");
-
-    if (!turret_tag_setup(0))
-        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
-    // Our fire routine
-    self.turret_firefunc  = turret_hellion_attack;
-
-    // Custom animations and sutch
-    self.turret_postthink = turret_hellion_postthink;
-}
-
-/*QUAKED turret_hellion (0 .5 .8) ?
-*/
-void spawnfunc_turret_hellion()
-{
-    //precache_model ( "models/turrets/mlrs_rocket.md3");
-    //precache_model ("models/turrets/hellion.md3");
-    //precache_model ("models/turrets/base.md3");
-
-    self.think = turret_hellion_dinit;
-    self.nextthink = time + 0.5;
-}
-
-

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_hk.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_hk.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_hk.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,471 +0,0 @@
-//#define TURRET_DEBUG_HK
-
-#ifdef TURRET_DEBUG_HK
-.float atime;
-#endif
-
-void spawnfunc_turret_hk();
-void turret_hk_dinit();
-void turret_hk_attack();
-void turret_hk_missile_explode();
-void turret_hk_missile_think();
-void turret_hk_missile_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
-float turret_hk_addtarget(entity e_target,entity e_sender);
-//void turret_hk_missile_touch();
-
-float hk_maxspeed;
-float hk_minspeed;
-float hk_accel;
-float hk_accel2;
-float hk_decel;
-
-float turret_hk_addtarget(entity e_target,entity e_sender)
-{
-    if (e_target)
-    {
-        if (turret_validate_target(self,e_target,self.target_validate_flags) > 0)
-        {
-            self.enemy = e_target;
-            return 1;
-        }
-    }
-
-    return 0;
-}
-
-float hk_is_valid_target(entity e_target)
-{
-    if (e_target == world)
-        return 0;
-
-    // If only this was used more..
-    if (e_target.flags & FL_NOTARGET)
-        return 0;
-
-    // Cant touch this
-    if ((e_target.takedamage == DAMAGE_NO) || (e_target.health < 0))
-        return 0;
-
-    // player
-    if (e_target.flags & FL_CLIENT)
-    {
-        if (self.owner.target_select_playerbias < 0)
-            return 0;
-
-        if (e_target.deadflag != DEAD_NO)
-            return 0;
-    }
-
-    // Missile
-    if ((e_target.flags & FL_PROJECTILE) && (self.owner.target_select_missilebias < 0))
-        return 0;
-
-    // Team check
-    if ((e_target.team == self.owner.team) || (self.owner.team == e_target.owner.team))
-        return 0;
-
-    return 1;
-}
-
-void turret_hk_missile_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
-    if (attacker.team == self.team)
-        damage *= 0.5;
-
-    self.velocity += force;
-
-    self.health -= damage;
-
-    if (self.health <= 0)
-        turret_hk_missile_explode();
-}
-
-void turret_hk_attack()
-{
-    local entity missile;
-    //local entity flash2;
-
-    sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", 1, ATTN_NORM);
-
-    missile                    = spawn ();
-    missile.solid            = SOLID_BBOX;
-    setmodel (missile, "models/turrets/hunter2.md3"); // precision set below
-    setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
-    sound    (missile, CHAN_PROJECTILE, "weapons/rocket_fly.wav", 0.4, ATTN_NORM);
-    setorigin(missile, self.tur_shotorg_updated);
-
-    missile.scale            = 1;
-    missile.classname        = "hk_missile";
-    missile.owner            = self;
-    missile.bot_dodge        = TRUE;
-    missile.bot_dodgerating  = self.shot_dmg;
-    missile.takedamage       = DAMAGE_YES;
-    missile.damageforcescale = 2;
-    missile.health           = 35;
-    missile.think            = turret_hk_missile_think;
-    missile.event_damage     = turret_hk_missile_damage;
-    missile.nextthink        = time + 0.25;
-    missile.movetype         = MOVETYPE_BOUNCEMISSILE;
-    missile.effects          = EF_LOWPRECISION;
-    missile.velocity         = self.tur_shotdir_updated * (self.shot_speed * 0.75);
-    missile.angles           = vectoangles(missile.velocity);
-    missile.touch            = turret_hk_missile_explode; //turret_hk_missile_touch;
-    missile.flags            = FL_PROJECTILE;
-    missile.enemy            = self.enemy;
-    missile.team             = self.team;
-    missile.cnt              = time + 30;
-    missile.ticrate          = max(cvar("sys_ticrate"),0.05);
-
-    te_explosion (missile.origin);
-
-    if (self.tur_head.frame == 0)
-        self.tur_head.frame = self.tur_head.frame + 1;
-
-}
-
-/*
-void turret_hk_missile_touch()
-{
-    if(other == self.enemy)
-        turret_hk_missile_explode();
-    else
-    {
-        if(self.cnt < time)
-        {
-            self.cnt = time + 0.25;
-            self.health = self.health - 5;
-            if(self.health <= 0)
-                turret_hk_missile_explode();
-
-        }
-    }
-}
-*/
-
-void turret_hk_missile_think()
-{
-    vector vu, vd, vf, vl, vr, ve;  // Vector (direction)
-    float  fu, fd, ff, fl, fr, fe;  // Fraction to solid
-    vector olddir,wishdir,newdir;   // Final direction
-    float lt_for;   // Length of Trace FORwrad
-    float lt_seek;  // Length of Trace SEEK (left, right, up down)
-    float pt_seek;  // Pitch of Trace SEEK (How mutch to angele left, right up, down trace towards v_forward)
-    vector pre_pos;
-    float myspeed;
-    entity e;
-    float ad;
-
-    self.nextthink = time + self.ticrate;
-
-    //if (self.cnt < time)
-    //    turret_hk_missile_explode();
-
-    if (self.enemy.deadflag != DEAD_NO)
-        self.enemy = world;
-
-    // Pick the closest valid target.
-    if (!self.enemy)
-    {
-        e = findradius(self.origin, 5000);
-        while (e)
-        {
-            if (hk_is_valid_target(e))
-            {
-                if (!self.enemy)
-                    self.enemy = e;
-                else
-                    if (vlen(self.origin - e.origin) < vlen(self.origin - self.enemy.origin))
-                        self.enemy = e;
-            }
-            e = e.chain;
-        }
-    }
-
-    self.angles = vectoangles(self.velocity);
-    self.angles_x = self.angles_x * -1;
-    makevectors(self.angles);
-    self.angles_x = self.angles_x * -1;
-
-    if (self.enemy)
-    {
-        // Close enougth to do decent damage?
-        if ( vlen(self.origin - self.enemy.origin) <= (self.owner.shot_radius * 0.25) )
-        {
-            turret_hk_missile_explode();
-            return;
-        }
-
-        // Get data on enemy position
-        pre_pos = self.enemy.origin +
-                  self.enemy.velocity *
-                  min((vlen(self.enemy.origin - self.origin) / vlen(self.velocity)),0.5);
-
-        traceline(self.origin, pre_pos,TRUE,self.enemy);
-        ve = normalize(pre_pos - self.origin);
-        fe = trace_fraction;
-
-    }
-    else
-    {
-        fe = 0;
-    }
-
-    if ((fe != 1) || (self.enemy == world))
-    {
-        myspeed = vlen(self.velocity);
-
-        lt_for  = myspeed * 2;
-        lt_seek = myspeed * 1.5;
-
-        // Trace forward
-        traceline(self.origin, self.origin + v_forward * lt_for,FALSE,self);
-        vf = trace_endpos;
-        ff = trace_fraction;
-
-        // Find angular offset
-        ad = vlen(vectoangles(normalize(self.enemy.origin - self.origin)) - self.angles);
-
-        //Calculate new speed
-
-        // To close to something, Slow down!
-        if ( ((ff < 0.7) || (ad > 5)) && (myspeed > hk_minspeed) )
-            myspeed = max(myspeed * hk_decel,hk_minspeed);
-
-        // Failry clear, accelerate.
-        if ( (ff > 0.7) && (myspeed < hk_maxspeed) )
-            myspeed = min(myspeed * hk_accel,hk_maxspeed);
-
-        // Setup trace pitch
-        pt_seek = 1 - ff;
-        pt_seek = bound(0.125,pt_seek,0.8);
-        if (ff < 0.5) pt_seek = 1;
-
-        // Trace left
-        traceline(self.origin, self.origin + (-1 * (v_right * pt_seek) + (v_forward * ff)) * lt_seek,FALSE,self);
-        vl = trace_endpos;
-        fl = trace_fraction;
-
-        // Trace right
-        traceline(self.origin,  self.origin + ((v_right * pt_seek) + (v_forward * ff)) * lt_seek ,FALSE,self);
-        vr = trace_endpos;
-        fr = trace_fraction;
-
-        // Trace up
-        traceline(self.origin,  self.origin + ((v_up * pt_seek) + (v_forward * ff)) * lt_seek ,FALSE,self);
-        vu = trace_endpos;
-        fu = trace_fraction;
-
-        // Trace down
-        traceline(self.origin,  self.origin + (-1 * (v_up * pt_seek) + (v_forward * ff)) * lt_seek ,FALSE,self);
-        vd = trace_endpos;
-        fd = trace_fraction;
-
-        vl = normalize(vl - self.origin);
-        vr = normalize(vr - self.origin);
-        vu = normalize(vu - self.origin);
-        vd = normalize(vd - self.origin);
-
-        // Panic tresh passed, find a single direction and turn as hard as we can
-        if (pt_seek == 1)
-        {
-            wishdir = v_right;
-            if (fl > fr) wishdir = -1 * v_right;
-            if (fu > fl) wishdir = v_up;
-            if (fd > fu) wishdir = -1 * v_up;
-        }
-        else
-        {
-            // Normalize our trace vectors to make a smooth path
-            wishdir = normalize( (vl * fl) + (vr * fr) +  (vu * fu) +  (vd * fd) );
-        }
-
-        if (self.enemy)
-        {
-            if (fe < 0.1) fe = 0.1; // Make sure we always try to move sligtly towards our target
-            wishdir = (wishdir * (1 - fe)) + (ve * fe);
-        }
-    }
-    else
-    {
-        // Got a clear path to target, speed up fast (if not at full speed) and go straight for it.
-        myspeed = vlen(self.velocity);
-        if (myspeed < hk_maxspeed)
-            myspeed = min(myspeed * hk_accel2,hk_maxspeed);
-
-        wishdir = ve;
-        //wishdir = normalize(self.enemy.origin - (self.enemy.origin + self.enemy.velocity));
-    }
-
-    if ((myspeed > hk_minspeed) && (self.cnt > time))
-        myspeed = min(myspeed * hk_accel2,hk_maxspeed);
-
-    // Ranoutagazfish?
-    if (self.cnt < time)
-    {
-        self.cnt = time + 0.25;
-        self.nextthink = 0;
-        self.movetype         = MOVETYPE_BOUNCE;
-        sound    (self, CHAN_VOICE, "", 0.4, ATTN_NORM);
-        return;
-    }
-
-    // Calculate new heading
-    olddir = normalize(self.velocity);
-
-    newdir = normalize(olddir + wishdir * cvar("g_turrets_unit_hk_std_shot_speed_turnrate"));
-
-    //fu = (1 / hk_maxspeed) * myspeed;
-    //fd = fu - (0.75 - 0.25);
-    //newdir = normalize(olddir + wishdir * fd);
-
-    // Set heading & speed
-    self.velocity = newdir * myspeed;
-
-    // Align model with new heading
-    self.angles = vectoangles(self.velocity);
-
-
-#ifdef TURRET_DEBUG_HK
-    //if(self.atime < time) {
-    if (fe <= 0.99)
-    {
-        te_lightning2(world,self.origin, self.origin + vr * lt_seek);
-        te_lightning2(world,self.origin, self.origin + vl * lt_seek);
-        te_lightning2(world,self.origin, self.origin + vu * lt_seek);
-        te_lightning2(world,self.origin, self.origin + vd * lt_seek);
-        te_lightning2(world,self.origin, vf);
-    }
-    else
-    {
-        te_lightning2(world,self.origin, self.enemy.origin);
-    }
-    bprint("Speed: ", ftos(rint(myspeed)), "\n");
-    bprint("Trace to solid: ", ftos(rint(ff * 100)), "%\n");
-    bprint("Trace to target:", ftos(rint(fe * 100)), "%\n");
-    self.atime = time + 0.2;
-    //}
-#endif
-}
-
-void turret_hk_missile_explode()
-{
-    vector org2;
-    float d;
-
-    if ((other == self.owner)||(other == self.owner.tur_head))
-        return;
-
-    //vector	org2;
-    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", 1, ATTN_NORM);
-    org2 = findbetterlocation (self.origin, 16);
-
-    // LordHavoc: TE_TEI_BIGEXPLOSION
-    WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
-    WriteByte (MSG_BROADCAST, 78);
-    WriteCoord (MSG_BROADCAST, org2_x);
-    WriteCoord (MSG_BROADCAST, org2_y);
-    WriteCoord (MSG_BROADCAST, org2_z);
-
-    self.event_damage = SUB_Null;
-    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
-
-#ifdef TURRET_DEBUG
-    self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
-    self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
-#endif
-
-    // Target dead, get another is still targeting the same.
-    if ((self.enemy.deadflag != DEAD_NO) && (self.enemy == self.owner.enemy))
-        self.owner.enemy = world;
-
-    remove (self);
-}
-
-void turret_hk_postthink()
-{
-    if (cvar("g_turrets_reloadcvars"))
-    {
-        hk_maxspeed = cvar("g_turrets_unit_hk_std_shot_speed_max");
-        hk_minspeed = cvar("g_turrets_unit_hk_std_shot_speed");
-        hk_accel    = cvar("g_turrets_unit_hk_std_shot_speed_accel");
-        hk_accel2   = cvar("g_turrets_unit_hk_std_shot_speed_accel2");
-        hk_decel    = cvar("g_turrets_unit_hk_std_shot_speed_decel");
-    }
-
-    if (self.tur_head.frame != 0)
-        self.tur_head.frame = self.tur_head.frame + 1;
-
-    if (self.tur_head.frame > 5)
-        self.tur_head.frame = 0;
-
-}
-
-void turret_hk_dinit()
-{
-    if (self.netname == "")      self.netname  = "Hunter-killer turret";
-
-    hk_maxspeed = cvar("g_turrets_unit_hk_std_shot_speed_max");
-    hk_minspeed = cvar("g_turrets_unit_hk_std_shot_speed");
-    hk_accel    = cvar("g_turrets_unit_hk_std_shot_speed_accel");
-    hk_accel2   = cvar("g_turrets_unit_hk_std_shot_speed_accel2");
-    hk_decel    = cvar("g_turrets_unit_hk_std_shot_speed_decel");
-
-    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_RECIVETARGETS;
-
-    self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
-
-    self.aim_flags = TFL_AIM_SIMPLE;
-
-    self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TRIGGERTARGET | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
-
-    self.firecheck_flags = TFL_FIRECHECK_WORLD | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_TEAMCECK  | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF;
-
-    self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TRIGGERTARGET | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
-
-    self.shoot_flags = TFL_SHOOT_CLEARTARGET;
-
-    if (turret_stdproc_init("hk_std") == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TEAMCHECK;
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/hk.md3");
-
-    if (!turret_tag_setup(0))
-        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
-    // Our fire routine
-    self.turret_firefunc  = turret_hk_attack;
-
-    // re-color badge & handle recoil effect
-    self.turret_postthink = turret_hk_postthink;
-
-    // What to do when reciveing foreign target data
-    self.turret_addtarget = turret_hk_addtarget;
-}
-
-/*
-* Turret that fires Hunter-killer missiles.
-* Missiles seek their target and try to avoid obstacles. If target dies early, they
-* pick a new one on their own.
-*/
-
-/*QUAKED turret_hk (0 .5 .8) ?
-hunter-killer missiles.
-*/
-
-void spawnfunc_turret_hk()
-{
-    //precache_model ( "models/turrets/hunter2.md3");
-    //precache_model ("models/turrets/base.md3");
-    //precache_model ("models/turrets/hk.md3");
-
-    self.think = turret_hk_dinit;
-    self.nextthink = time + 0.5;
-}
-
-

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_machinegun.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_machinegun.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_machinegun.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,71 +0,0 @@
-void spawnfunc_turret_machinegun();
-void turret_machinegun_std_init();
-void turret_machinegun_attack();
-
-//.float bulletcounter;
-void turret_machinegun_attack()
-{
-
-    entity flash;
-    sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", 1, ATTN_NORM);
-    fireBullet (self.tur_shotorg_updated, self.tur_shotdir_updated,self.shot_spread, self.shot_dmg, self.shot_force, DEATH_TURRET, FALSE);
-
-    te_smallflash(self.tur_shotorg_updated);
-    trailparticles(self,particleeffectnum("EF_MGTURRETTRAIL"),self.tur_shotorg_updated,trace_endpos);
-
-    // muzzle flash for 3rd person view
-    flash = spawn();
-    //setorigin(flash, '43 1 8');
-    setmodel(flash, "models/uziflash.md3"); // precision set below
-    setattachment(flash, self.tur_head, "tag_fire");
-    flash.think = W_Uzi_Flash_Go;
-    flash.nextthink = time + 0.02;
-    flash.frame = 2;
-    flash.angles_z = flash.v_angle_z + random() * 180;
-    flash.alpha = 1;
-    flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
-}
-
-
-void turret_machinegun_std_init()
-{
-    if (self.netname == "")      self.netname     = "Machinegun Turret";
-
-    self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
-    self.turrcaps_flags = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL;
-    self.aim_flags = TFL_AIM_LEAD | TFL_AIM_ZEASE;
-
-    if (turret_stdproc_init("machinegun_std") == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/machinegun.md3");
-
-    if (!turret_tag_setup(0))
-        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
-    // Our fire routine
-    self.turret_firefunc  = turret_machinegun_attack;
-
-}
-
-
-
-/*
-* machinegun turret. does what you'd expect
-*/
-
-/*QUAKED turret_machinegun (0 .5 .8) ?
-*/
-void spawnfunc_turret_machinegun()
-{
-    //precache_model ("models/turrets/machinegun.md3");
-    //precache_model ("models/turrets/base.md3");
-
-    self.think = turret_machinegun_std_init;
-    self.nextthink = time + 0.5;
-}
-

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_mlrs.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_mlrs.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_mlrs.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,117 +0,0 @@
-void spawnfunc_turret_mlrs();
-void turret_mlrs_dinit();
-void turret_mlrs_attack();
-void turret_mlrs_projectile_explode();
-
-void turret_mlrs_postthink()
-{
-
-    if ((self.tur_head.frame >= 6) && (self.attack_finished_single <= time))
-        self.tur_head.frame = 0;
-}
-
-void turret_mlrs_attack()
-{
-    entity missile;
-
-    turret_tag_fire_update();
-
-    sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", 1, ATTN_NORM);
-
-    missile                    = spawn ();
-    setmodel (missile, "models/turrets/rocket.md3"); // precision set below
-    setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
-    sound (missile, CHAN_PROJECTILE, "weapons/rocket_fly.wav", 0.4, ATTN_NORM);
-    setorigin(missile, self.tur_shotorg_updated);
-    missile.classname          = "mlrs_missile";
-    missile.owner              = self;
-    missile.bot_dodge          = TRUE;
-    missile.bot_dodgerating    = self.shot_dmg;
-    missile.takedamage         = DAMAGE_YES;
-    missile.damageforcescale   = 4;
-    missile.health             = 30;
-    missile.think              = turret_mlrs_projectile_explode;
-    missile.nextthink          = time + max(self.tur_impacttime,(self.shot_radius * 2) / self.shot_speed);
-    missile.solid              = SOLID_BBOX;
-    missile.movetype           = MOVETYPE_FLYMISSILE;
-    missile.effects            = EF_LOWPRECISION;
-    missile.velocity           = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
-    missile.angles             = vectoangles(missile.velocity);
-    missile.touch              = turret_mlrs_projectile_explode;
-    missile.flags              = FL_PROJECTILE;
-    missile.solid              = SOLID_BBOX;
-    missile.enemy              = self.enemy;
-
-    te_explosion (missile.origin);
-
-    self.tur_head.frame = 7 - self.volly_counter;
-}
-
-void turret_mlrs_projectile_explode()
-{
-    vector org2;
-
-    //vector	org2;
-    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", 1, ATTN_NORM);
-    org2 = findbetterlocation (self.origin, 16);
-    pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
-
-    self.event_damage = SUB_Null;
-
-#ifdef TURRET_DEBUG
-    float d;
-
-    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
-    self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
-    self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
-#else
-    RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
-#endif
-
-    // Target dead, get another is still targeting the same.
-    if ((self.enemy.deadflag != DEAD_NO) && (self.enemy == self.owner.enemy))
-        self.owner.enemy = world;
-
-    remove (self);
-}
-
-void turret_mlrs_dinit()
-{
-    if (self.netname == "")      self.netname  = "MLRS turret";
-
-    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
-    self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
-    self.aim_flags = TFL_AIM_LEAD | TFL_AIM_ZEASE | TFL_AIM_SHOTTIMECOMPENSATE;
-
-    if (turret_stdproc_init("mlrs_std") == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/mlrs.md3");
-
-    if (!turret_tag_setup(0))
-        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
-    // Our fire routine
-    self.turret_firefunc  = turret_mlrs_attack;
-    self.turret_postthink = turret_mlrs_postthink;
-
-}
-
-/*QUAKED turret_mlrs (0 .5 .8) ?
-*/
-
-void spawnfunc_turret_mlrs()
-{
-    //precache_model ( "models/turrets/rocket.md3");
-    //precache_model ("models/turrets/mlrs.md3");
-    //precache_model ("models/turrets/base.md3");
-
-    self.think = turret_mlrs_dinit;
-    self.nextthink = time + 0.5;
-}
-
-

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_phaser.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_phaser.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_phaser.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,148 +0,0 @@
-void spawnfunc_turret_phaser();
-void turret_phaser_dinit();
-void turret_phaser_attack();
-
-.float fireflag;
-
-float turret_phaser_firecheck()
-{
-    if (self.fireflag != 0) return 0;
-    return turret_stdproc_firecheck();
-}
-
-void turret_phaser_postthink()
-{
-    if (self.tur_head.frame == 0)
-        return;
-
-    if (self.fireflag == 1)
-    {
-        if (self.tur_head.frame == 10)
-            self.tur_head.frame = 1;
-        else
-            self.tur_head.frame = self.tur_head.frame +1;
-    }
-    else if (self.fireflag == 2 )
-    {
-        self.tur_head.frame = self.tur_head.frame +1;
-        if (self.tur_head.frame == 15)
-        {
-            self.tur_head.frame = 0;
-            self.fireflag = 0;
-        }
-    }
-}
-
-void beam_think()
-{
-    if ((time > self.cnt)||(self.owner.deadflag != DEAD_NO))
-    {
-        self.owner.attack_finished_single = time + self.owner.shot_refire;
-        self.owner.fireflag = 2;
-        self.owner.tur_head.frame = 10;
-        sound (self, CHAN_PROJECTILE, "", 1, ATTN_NORM);
-        remove(self);
-        return;
-    }
-
-    turret_do_updates(self.owner);
-
-    if (time - self.shot_spread > 0)
-    {
-        self.shot_spread = time + 2;
-        sound (self, CHAN_VOICE, "turrets/phaser.ogg", 1, ATTN_NORM);
-    }
-
-
-    self.nextthink = time + self.ticrate;
-
-    self.owner.attack_finished_single = time + frametime;
-    entity oldself;
-    oldself = self;
-    self = self.owner;
-    FireImoBeam (   self.tur_shotorg_updated,
-                    self.tur_shotorg_updated + self.tur_shotdir_updated * self.target_range_fire,
-                    '-1 -1 -1' * self.shot_radius,
-                    '1 1 1' * self.shot_radius,
-                    self.shot_force,
-                    oldself.shot_dmg,
-                    0.75,
-                    DEATH_TURRET);
-    self = oldself;
-    self.scale = vlen(self.owner.tur_shotorg_updated - trace_endpos) / 256;
-
-}
-
-void turret_phaser_attack()
-{
-    entity beam;
-
-    beam = spawn();
-    beam.ticrate = 0.1; //cvar("sys_ticrate");
-    setmodel(beam,"models/turrets/phaser_beam.md3");
-    beam.effects = EF_LOWPRECISION;
-    beam.solid = SOLID_NOT;
-    beam.think = beam_think;
-    beam.cnt = time + self.shot_speed;
-    beam.shot_spread = time + 2;
-    beam.nextthink = time;
-    beam.owner = self;
-    beam.shot_dmg = self.shot_dmg / (self.shot_speed / beam.ticrate);
-    beam.scale = self.target_range_fire / 256;
-    beam.movetype = MOVETYPE_NONE;
-    beam.enemy = self.enemy;
-    beam.bot_dodge = TRUE;
-    beam.bot_dodgerating = beam.shot_dmg;
-    sound (beam, CHAN_PROJECTILE, "turrets/phaser.ogg", 1, ATTN_NORM);
-    self.fireflag = 1;
-
-    beam.attack_finished_single = self.attack_finished_single;
-    self.attack_finished_single = time; // + cvar("sys_ticrate");
-
-    setattachment(beam,self.tur_head,"tag_fire");
-
-    soundat (self, trace_endpos, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
-
-    if (self.tur_head.frame == 0)
-        self.tur_head.frame = 1;
-}
-
-void turret_phaser_dinit()
-{
-    if (self.netname == "")      self.netname  = "Phaser Cannon";
-
-    self.turrcaps_flags = TFL_TURRCAPS_SNIPER|TFL_TURRCAPS_HITSCAN|TFL_TURRCAPS_PLAYERKILL;
-    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
-    self.aim_flags = TFL_AIM_ZEASE | TFL_AIM_LEAD;
-
-    if (turret_stdproc_init("phaser_std") == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/phaser.md3");
-
-    if (!turret_tag_setup(0))
-        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
-    self.turret_firecheckfunc = turret_phaser_firecheck;
-    self.turret_firefunc  = turret_phaser_attack;
-    self.turret_postthink = turret_phaser_postthink;
-
-}
-
-/*QUAKED turret_phaser(0 .5 .8) ?
-*/
-void spawnfunc_turret_phaser()
-{
-    //precache_sound ("turrets/phaser.ogg");
-    //precache_model ("models/turrets/phaser.md3");
-    //precache_model ("models/turrets/phaser_beam.md3");
-    //precache_model ("models/turrets/base.md3");
-
-    self.think = turret_phaser_dinit;
-    self.nextthink = time + 0.5;
-}
-

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_plasma.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_plasma.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_plasma.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,183 +0,0 @@
-void spawnfunc_turret_plasma();
-void spawnfunc_turret_plasma_dual();
-
-void turret_plasma_std_init();
-void turret_plasma_dual_init();
-
-void turret_plasma_attack();
-void turret_plasma_projectile_explode();
-
-void turret_plasma_postthink()
-{
-    if (self.tur_head.frame != 0)
-        self.tur_head.frame = self.tur_head.frame + 1;
-
-    if (self.classname == "turret_plasma_dual")
-    {
-        if (self.tur_head.frame >= 6)
-            self.tur_head.frame = 0;
-    }
-    else
-    {
-        if (self.tur_head.frame >= 5)
-            self.tur_head.frame = 0;
-    }
-}
-
-void turret_plasma_attack()
-{
-    entity proj;
-
-    turret_tag_fire_update();
-
-    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", 1, ATTN_NORM);
-    proj                    = spawn ();
-    setorigin(proj, self.tur_shotorg_updated);
-    setsize(proj, '0 0 0', '0 0 0');
-    setmodel(proj, "models/elaser.mdl"); // precision set above
-    proj.classname       = "plasmabomb";
-    proj.owner           = self;
-    proj.bot_dodge       = TRUE;
-    proj.bot_dodgerating = self.shot_dmg;
-    proj.think           = turret_plasma_projectile_explode;
-    proj.nextthink       = time + 9;
-    proj.solid           = SOLID_BBOX;
-    proj.movetype        = MOVETYPE_FLYMISSILE;
-    proj.velocity        = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
-    proj.angles          = vectoangles(proj.velocity);
-    proj.touch           = turret_plasma_projectile_explode;
-    proj.flags           = FL_PROJECTILE;
-    proj.effects         = EF_LOWPRECISION |  EF_BRIGHTFIELD;
-    proj.enemy           = self.enemy;
-    proj.flags           = FL_PROJECTILE | FL_NOTARGET;
-
-    if (self.tur_head.frame == 0)
-        self.tur_head.frame = 1;
-
-    // trailparticles(proj,particleeffectnum("TR_REDPLASMA"),proj.origin,proj.origin + proj.velocity);
-
-    // Snapback the head
-    // self.tur_head.angles_x = self.tur_head.angles_x + min((self.shot_dmg * 0.05),self.aim_maxpitch);
-
-    //if(self.classname == "turret_plasma_dual")
-    //    self.tur_shotorg_y = self.tur_shotorg_y * -1;
-
-}
-
-void turret_plasma_projectile_explode()
-{
-    vector org2;
-
-    org2 = findbetterlocation (self.origin, 8);
-    WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
-    WriteByte (MSG_BROADCAST, 79);
-    WriteCoord (MSG_BROADCAST, org2_x);
-    WriteCoord (MSG_BROADCAST, org2_y);
-    WriteCoord (MSG_BROADCAST, org2_z);
-    WriteCoord (MSG_BROADCAST, 0);		// SeienAbunae: groan... Useless clutter
-    WriteCoord (MSG_BROADCAST, 0);
-    WriteCoord (MSG_BROADCAST, 0);
-    WriteByte (MSG_BROADCAST, 155);
-
-    self.event_damage = SUB_Null;
-
-
-#ifdef TURRET_DEBUG
-    float d;
-
-    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
-    self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
-    self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
-#else
-    RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
-#endif
-    sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", 1, ATTN_NORM);
-
-    remove (self);
-}
-
-void turret_plasma_std_init()
-{
-    if (self.netname == "")      self.netname     = "Plasma Cannon";
-
-    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
-    self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZEASE | TFL_AIM_GROUND2;
-
-    if (turret_stdproc_init("plasma_std") == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/plasma.md3");
-
-
-    if (!turret_tag_setup(0))
-        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
-    // Our fire routine
-    self.turret_firefunc  = turret_plasma_attack;
-
-    // re-color badge & handle recoil effect
-    self.turret_postthink = turret_plasma_postthink;
-}
-
-
-void turret_plasma_dual_init()
-{
-    if (self.netname == "")      self.netname     = "Dual Plasma Cannon";
-
-    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
-
-    if (turret_stdproc_init("plasma_dual") == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    setmodel(self,"models/turrets/base.md3");
-    setmodel(self.tur_head,"models/turrets/plasmad.md3");
-
-    if (!turret_tag_setup(0))
-        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
-    // select aim
-    self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZEASE;
-
-    // Our fire routine
-    self.turret_firefunc  = turret_plasma_attack;
-
-    // re-color badge & handle recoil effect
-    self.turret_postthink = turret_plasma_postthink;
-}
-
-
-/*
-* Basic moderate (std) or fast (dual) fireing, short-mid range energy cannon.
-* Not too mutch of a therat on its own, but can be rather dangerous in groups.
-* Regenerates ammo slowly, support with a fusionreactor(s) to do some real damage.
-*/
-
-/*QUAKED turret_plasma (0 .5 .8) ?
-*/
-void spawnfunc_turret_plasma()
-{
-    //precache_model ("models/turrets/plasma.md3");
-    //precache_model ("models/turrets/base.md3");
-
-    self.think = turret_plasma_std_init;
-    self.nextthink = time + 0.5;
-}
-
-/*QUAKED turret_plasma_dual (0 .5 .8) ?
-*/
-void spawnfunc_turret_plasma_dual()
-{
-    //precache_model ("models/turrets/plasmad.md3");
-    //precache_model ("models/turrets/base.md3");
-
-    self.think = turret_plasma_dual_init;
-    self.nextthink = time + 0.5;
-}
-

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_targettrigger.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_targettrigger.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_targettrigger.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,41 +0,0 @@
-void spawnfunc_turret_targettrigger();
-void turret_targettrigger_touch();
-
-void turret_targettrigger_touch()
-{
-    entity e;
-    if (self.cnt > time) return;
-    entity oldself;
-    oldself = self;
-
-    e = find(world, targetname, self.target);
-    while (e)
-    {
-        if (e.turrcaps_flags & TFL_TURRCAPS_RECIVETARGETS)
-        {
-            self = e;
-            e.turret_addtarget(other,oldself);
-        }
-
-        e = find(e, targetname, oldself.target);
-    }
-
-    oldself.cnt = time + 0.5;
-
-    self = oldself;
-}
-
-/*QUAKED turret_targettrigger (.5 .5 .5) ?
-*/
-void spawnfunc_turret_targettrigger()
-{
-    if (!cvar("g_turrets"))
-    {
-        remove(self);
-        return;
-    }
-
-    InitTrigger ();
-
-    self.touch = turret_targettrigger_touch;
-}

Deleted: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_tessla.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_tessla.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/turret_unit_tessla.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,147 +0,0 @@
-void spawnfunc_turret_tesla();
-void turret_tesla_dinit();
-void turret_tesla_fire();
-
-.float toasted;
-entity toast(entity from, float range, float damage)
-{
-    entity e;
-    entity etarget;
-    float d,dd;
-
-    dd = range + 1;
-
-    e = findradius(from.origin,range);
-    while (e)
-    {
-        if ((e.toasted != 1) && (e != from))
-            if (turret_validate_target(self,e,self.target_validate_flags) > 0)
-            {
-
-                traceline(from.origin,e.origin,0,from);
-                if (trace_fraction > 0.9)
-                {
-                    d = vlen(e.origin - from.origin);
-                    if (d < dd)
-                    {
-                        dd = d;
-                        etarget = e;
-                    }
-                }
-            }
-        e = e.chain;
-    }
-
-    if (etarget)
-    {
-        te_smallflash(etarget.origin);
-        te_lightning1(world,from.origin,etarget.origin);
-        Damage(etarget,self,self,damage,DEATH_TURRET,etarget.origin,'0 0 0');
-        etarget.toasted = 1;
-    }
-
-    return etarget;
-}
-
-void turret_tesla_fire()
-{
-    entity e,t;
-    float d,r,i;
-
-    if (cvar("g_turrets_nofire") != 0)
-        return;
-
-    if (self.attack_finished_single > time) return;
-
-    d = self.shot_dmg;
-    r = self.target_range;
-    e = spawn();
-    setorigin(e,self.origin + self.tur_shotorg);
-
-
-    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
-                                 TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
-
-    t = toast(e,r,d);
-    remove(e);
-
-    if (t == world) return;
-
-    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
-                                 TFL_TARGETSELECT_TEAMCHECK;
-
-    self.attack_finished_single = time + self.shot_refire;
-    self.ammo = self.ammo - self.shot_dmg;
-    for (i = 0;i < 10;i = i + 1)
-    {
-        d *= 0.5;
-        r *= 0.75;
-        t = toast(t,r,d);
-        if (t == world) break;
-    }
-
-    e = findchainfloat(toasted, 1);
-    while (e)
-    {
-        e.toasted = 0;
-        e = e.chain;
-    }
-}
-
-void turret_tesla_postthink()
-{
-    turret_tesla_fire();
-
-    self.tur_head.frame = self.tur_head.frame + 1;
-
-    if (self.tur_head.frame >= 11)
-        self.tur_head.frame = 0;
-
-    if (self.tur_head.avelocity == '0 0 0')
-        self.tur_head.avelocity = '0 35 0';
-}
-
-
-void turret_tesla_dinit()
-{
-    if (self.netname == "")      self.netname     = "Tesla Coil";
-
-    self.turrcaps_flags = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
-    self.target_select_flags = TFL_TARGETSELECT_NO;
-    self.firecheck_flags = TFL_FIRECHECK_REFIRE;
-    self.shoot_flags = TFL_SHOOT_CUSTOM;
-    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
-    self.aim_flags = TFL_AIM_NO;
-    self.track_flags = TFL_TRACK_NO;
-
-    if (turret_stdproc_init("tesla_std") == 0)
-    {
-        remove(self);
-        return;
-    }
-
-    setmodel(self,"models/turrets/tesla_base.md3");
-    setmodel(self.tur_head,"models/turrets/tesla_head.md3");
-
-    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
-                                 TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
-
-    if (!turret_tag_setup(0))
-        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
-
-    self.turret_firefunc = turret_stdproc_nothing;
-    self.turret_postthink = turret_tesla_postthink;
-}
-
-/*QUAKED turret_tesla (0 .5 .8) ?
-*/
-void spawnfunc_turret_tesla()
-{
-    //precache_model ("models/turrets/tesla_head.md3");
-    //precache_model ("models/turrets/tesla_base.md3");
-
-
-    self.think = turret_tesla_dinit;
-    self.nextthink = time + 0.5;
-}
-

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_checkpoint.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/units/unit_checkpoint.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_checkpoint.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_checkpoint.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,41 @@
+void checkpoint_think()
+{
+    if(self.goalcurrent != world)
+        te_lightning1(self,self.origin,self.goalcurrent.origin);
+
+
+    self.nextthink = time + 0.5;
+}
+
+void turret_checkpoint_dinit()
+{
+    entity e;
+
+
+    if(self.target != "")
+    {
+        e = find(world,targetname,self.target);
+        if(!e)
+        {
+            bprint("turret_checkpoint without valid target! (",vtos(self.origin),")\n");
+            remove(self);
+            return;
+        }
+
+        // TODO:: ADD WORLD-INTERACTIVE PATH SUBDEVISION IF PATH NOT CLEAR
+        self.goalcurrent = e;
+    }
+
+}
+
+/**
+.wait
+**/
+void spawnfunc_turret_checkpoint()
+{
+    if(!self.wait)
+        self.wait = 5;
+
+    self.think = turret_checkpoint_dinit;
+    self.nextthink = time + 0.25;
+}

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_common.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/units/unit_common.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_common.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_common.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,150 @@
+float turret_tag_setup(float linked)
+{
+    vector v;
+    float f;
+
+    // Laters dooz
+    if (linked)
+        return 0;
+
+    f = gettagindex(self,"tag_head");
+    v = gettaginfo(self,f);
+    v = v + self.origin;
+    setorigin(self.tur_head,v);
+
+    f = gettagindex(self.tur_head,"tag_fire");
+    v = gettaginfo(self.tur_head,f) + (self.tur_head.origin - self.origin);
+    v_y *= -1;
+    self.tur_shotorg = v;
+
+    f = gettagindex(self.tur_head,"tag_aim");
+    v = gettaginfo(self.tur_head,f) + (self.tur_head.origin - self.origin);
+    self.tur_aimorg  = v;
+
+    return 1;
+}
+
+float turret_tag_fire_update()
+{
+    vector v;
+    float f;
+
+    f = gettagindex(self.tur_head,"tag_fire");
+    v = gettaginfo(self.tur_head,f) + (self.tur_head.origin - self.origin);
+    v_y *= -1;
+    self.tur_shotorg = v;
+
+    f = gettagindex(self.tur_head,"tag_aim");
+    v = gettaginfo(self.tur_head,f) + (self.tur_head.origin - self.origin);
+    self.tur_aimorg  = v;
+
+    return 1;
+}
+
+void FireImoBeam (vector start,vector end,vector smin,vector smax,
+                  float bforce,float f_dmg,float f_velfactor, float deathtype)
+
+{
+    local vector hitloc, force, endpoint, dir;
+    local entity ent;
+
+    dir = normalize(end - start);
+    force = dir * bforce;
+
+    // go a little bit into the wall because we need to hit this wall later
+    end = end + dir;
+
+    // trace multiple times until we hit a wall, each obstacle will be made unsolid.
+    // note down which entities were hit so we can damage them later
+    while (1)
+    {
+        tracebox(start, smin, smax, end, FALSE, self);
+
+        // if it is world we can't hurt it so stop now
+        if (trace_ent == world || trace_fraction == 1)
+            break;
+
+        if (trace_ent.solid == SOLID_BSP)
+            break;
+
+        // make the entity non-solid so we can hit the next one
+        trace_ent.railgunhit = TRUE;
+        trace_ent.railgunhitloc = end;
+        trace_ent.railgunhitsolidbackup = trace_ent.solid;
+
+        // stop if this is a wall
+
+
+        // make the entity non-solid
+        trace_ent.solid = SOLID_NOT;
+    }
+
+    endpoint = trace_endpos;
+
+    // find all the entities the railgun hit and restore their solid state
+    ent = findfloat(world, railgunhit, TRUE);
+    while (ent)
+    {
+        // restore their solid type
+        ent.solid = ent.railgunhitsolidbackup;
+        ent = findfloat(ent, railgunhit, TRUE);
+    }
+
+    // find all the entities the railgun hit and hurt them
+    ent = findfloat(world, railgunhit, TRUE);
+    while (ent)
+    {
+        // get the details we need to call the damage function
+        hitloc = ent.railgunhitloc;
+        ent.railgunhitloc = '0 0 0';
+        ent.railgunhitsolidbackup = SOLID_NOT;
+        ent.railgunhit = FALSE;
+
+        // apply the damage
+        if (ent.takedamage)
+        {
+            Damage (ent, self, self, f_dmg, deathtype, hitloc, force);
+            ent.velocity = ent.velocity * f_velfactor;
+            //ent.alpha = 0.25 + random() * 0.75;
+        }
+
+        // advance to the next entity
+        ent = findfloat(ent, railgunhit, TRUE);
+    }
+    trace_endpos = endpoint;
+}
+
+void turrets_precash()
+{
+    precache_model ("models/turrets/c512.md3");
+
+    precache_sound ("turrets/phaser.ogg");
+
+    precache_model ("models/turrets/base-gib1.md3");
+    precache_model ("models/turrets/base-gib2.md3");
+    precache_model ("models/turrets/base-gib3.md3");
+    precache_model ("models/turrets/base-gib4.md3");
+
+    precache_model ("models/turrets/head-gib1.md3");
+    precache_model ("models/turrets/head-gib2.md3");
+    precache_model ("models/turrets/head-gib3.md3");
+    precache_model ("models/turrets/head-gib4.md3");
+
+    precache_model ("models/turrets/base.md3");
+    precache_model ("models/turrets/flac.md3");
+    precache_model ("models/turrets/pd_proj.md3");
+    precache_model ("models/turrets/reactor.md3");
+    precache_model ("models/turrets/mlrs_rocket.md3");
+    precache_model ("models/turrets/hellion.md3");
+    precache_model ("models/turrets/hunter2.md3");
+    precache_model ("models/turrets/hk.md3");
+    precache_model ("models/turrets/machinegun.md3");
+    precache_model ("models/turrets/rocket.md3");
+    precache_model ("models/turrets/mlrs.md3");
+    precache_model ("models/turrets/phaser.md3");
+    precache_model ("models/turrets/phaser_beam.md3");
+    precache_model ("models/turrets/plasmad.md3");
+    precache_model ("models/turrets/plasma.md3");
+    precache_model ("models/turrets/tesla_head.md3");
+    precache_model ("models/turrets/tesla_base.md3");
+}

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_flac.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/units/unit_flac.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_flac.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_flac.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,106 @@
+void spawnfunc_turret_flac();
+void turret_flac_dinit();
+void turret_flac_attack();
+void turret_flac_projectile_explode();
+
+void turret_flac_attack()
+{
+    local entity proj;
+
+    turret_tag_fire_update();
+
+    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", 1, ATTN_NORM);
+    proj = spawn ();
+    setorigin(proj, self.tur_shotorg_updated);
+    setmodel(proj, "models/turrets/pd_proj.md3");
+    setsize(proj, '0 0 0', '0 0 0');
+    proj.classname          = "turret_fire";
+    proj.owner              = self;
+    proj.bot_dodge          = TRUE;
+    proj.bot_dodgerating    = self.shot_dmg;
+    proj.solid              = SOLID_NOT;
+    proj.movetype           = MOVETYPE_FLYMISSILE;
+    proj.flags              = FL_PROJECTILE;
+    proj.effects            = EF_LOWPRECISION;
+    proj.takedamage         = DAMAGE_YES;
+    proj.health             = 10;
+    proj.velocity           = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+    proj.angles             = vectoangles(proj.velocity);
+    proj.touch              = turret_flac_projectile_explode;
+    proj.think              = turret_flac_projectile_explode;
+    proj.nextthink          = time + (vlen(self.tur_aimpos - self.tur_shotorg_updated) / self.shot_speed) + (random() * self.shot_spread);
+
+    self.tur_head.frame = self.tur_head.frame + 1;
+    if (self.tur_head.frame >= 4) self.tur_head.frame = 0;
+
+}
+
+void turret_flac_projectile_explode()
+{
+    float ftmp;
+
+    te_explosion (self.origin);
+
+    ftmp = crandom();
+    if (ftmp<-0.7)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp1.wav", 1, ATTN_NORM);
+    else if (ftmp<0.4)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp2.wav", 1, ATTN_NORM);
+    else if (ftmp<1)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp3.wav", 1, ATTN_NORM);
+
+
+    self.event_damage = SUB_Null;
+
+
+#ifdef TURRET_DEBUG
+
+    ftmp = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + ftmp; //self.owner.shot_dmg;
+    self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
+#else
+    RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+#endif
+
+    remove (self);
+}
+
+
+void turret_flac_dinit()
+{
+    if (self.netname == "")      self.netname  = "FLAC Cannon";
+
+
+    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_FASTPROJ | TFL_TURRCAPS_MISSILEKILL;
+    self.ammo_flags     = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
+    self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
+
+    if (turret_stdproc_init("flac_std") == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/flac.md3");
+
+    if (!turret_tag_setup(0))
+        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
+    // Our fire routine
+    self.turret_firefunc  = turret_flac_attack;
+
+}
+/*QUAKED turret_flac (0 .5 .8) ?
+*/
+
+void spawnfunc_turret_flac()
+{
+    //precache_model ("models/turrets/base.md3");
+    //precache_model ("models/turrets/flac.md3");
+    //precache_model("models/turrets/pd_proj.md3");
+
+    self.think = turret_flac_dinit;
+    self.nextthink = time + 0.5;
+}
+

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_fusionreactor.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,81 @@
+void spawnfunc_turret_fusionreactor();
+void turret_fusionreactor_dinit();
+void turret_fusionreactor_fire();
+
+float turret_fusionreactor_firecheck()
+{
+    if (self.enemy == world) return 0;
+
+    if (!self.enemy.ammo_flags & TFL_AMMO_RECIVE) return 0;
+    if (!self.enemy.ammo_flags & TFL_AMMO_ENERGY) return 0;
+
+    if (self.ammo < self.shot_dmg) return 0;
+    if (self.enemy.ammo >= self.enemy.ammo_max) return 0;
+    if (self.tur_dist_enemy > self.target_range_fire) return 0;
+    if (self.tur_dist_enemy < self.target_range_min) return 0;
+
+    return 1;
+}
+
+
+void turret_fusionreactor_fire()
+{
+    self.enemy.ammo = min(self.enemy.ammo + self.shot_dmg,self.enemy.ammo_max);
+    //te_lightning1(world,self.origin,self.enemy.origin);
+}
+
+void turret_fusionreactor_postthink()
+{
+}
+
+
+void turret_fusionreactor_dinit()
+{
+    if (self.netname == "")      self.netname     = "Fusionreactor";
+
+    self.turrcaps_flags =TFL_TURRCAPS_SUPPORT | TFL_TURRCAPS_AMMOSOURCE;
+
+    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE;
+
+    self.target_select_flags = TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_OWNTEAM | TFL_TARGETSELECT_RANGELIMTS;
+
+    self.firecheck_flags = TFL_FIRECHECK_OWM_AMMO | TFL_FIRECHECK_OTHER_AMMO | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_WORLD;
+
+    self.shoot_flags = TFL_SHOOT_HITALLVALID;
+
+    self.aim_flags = TFL_AIM_NO;
+
+    self.track_flags = TFL_TRACK_NO;
+
+    if (turret_stdproc_init("fusreac_std") == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/reactor.md3");
+
+    //if(!turret_tag_setup(0))
+    //    dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
+    self.tur_head.scale = 0.75;
+    setorigin(self.tur_head,self.origin + '0 0 25');
+    self.tur_head.avelocity = '0 50 0';
+
+    self.turret_firecheckfunc = turret_fusionreactor_firecheck;
+    self.turret_firefunc = turret_fusionreactor_fire;
+
+    self.turret_postthink = turret_fusionreactor_postthink;
+}
+
+/*QUAKED turret_fusionreactor (0 .5 .8) ?
+*/
+void spawnfunc_turret_fusionreactor()
+{
+    //precache_model ("models/turrets/reactor.md3");
+    //precache_model ("models/turrets/base.md3");
+
+    self.think = turret_fusionreactor_dinit;
+    self.nextthink = time + 0.5;
+}

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hellion.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/units/unit_hellion.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hellion.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hellion.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,221 @@
+.float      shot_speed_max;
+.float      shot_speed_gain;
+
+void spawnfunc_turret_hellion();
+void turret_hellion_dinit();
+void turret_hellion_attack();
+void turret_hellion_missile_explode();
+void turret_hellion_missile_think();
+void turret_hellion_missile_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
+
+void turret_hellion_postthink()
+{
+    if (cvar("g_turrets_reloadcvars"))
+    {
+        if (!self.shot_speed_max)  self.shot_speed_max  = cvar("g_turrets_unit_hellion_std_shot_speed_max");
+        if (!self.shot_speed_gain) self.shot_speed_gain = cvar("g_turrets_unit_hellion_std_shot_speed_gain");
+    }
+
+    if (self.tur_head.frame != 0)
+        self.tur_head.frame = self.tur_head.frame + 1;
+
+    if (self.tur_head.frame > 7)
+        self.tur_head.frame = 0;
+}
+
+void turret_hellion_attack()
+{
+    local entity missile;
+
+    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", 1, ATTN_NORM);
+
+    missile = spawn ();
+    setorigin(missile, self.tur_shotorg_updated);
+    sound (missile, CHAN_PROJECTILE, "weapons/rocket_fly.wav", 0.4, ATTN_NORM);
+    setmodel (missile, "models/turrets/mlrs_rocket.md3"); // precision set below
+    setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
+
+    missile.classname          = "hellion_missile";
+    missile.owner              = self;
+    missile.bot_dodge          = TRUE;
+    missile.bot_dodgerating    = self.shot_dmg;
+    missile.takedamage         = DAMAGE_YES;
+    missile.damageforcescale   = 2;
+    missile.health             = 50;
+    missile.enemy              = self.enemy;
+    missile.think              = turret_hellion_missile_think;
+    missile.nextthink          = time + 0.2;
+    missile.solid              = SOLID_BBOX;
+    missile.movetype           = MOVETYPE_FLYMISSILE;
+    missile.effects            = EF_LOWPRECISION;
+    missile.velocity           = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed; // + ('0 0 1' * self.shot_speed * 0.15);
+    missile.angles             = vectoangles(missile.velocity);
+    missile.touch              = turret_hellion_missile_explode;
+    missile.flags              = FL_PROJECTILE;
+    missile.solid              = SOLID_BBOX;
+    missile.tur_health         = time + 9;
+    missile.tur_aimpos         = randomvec() * 128;
+    te_explosion (missile.origin);
+
+    // switch tubes
+    self.tur_shotorg_y = self.tur_shotorg_y * -1;
+
+    if (self.tur_head.frame == 0)
+        self.tur_head.frame = self.tur_head.frame + 1;
+
+}
+
+void turret_hellion_missile_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
+{
+    self.health = self.health - damage;
+    self.velocity = self.velocity + vforce;
+    if (self.health <= 0) turret_hellion_missile_explode();
+}
+
+void turret_hellion_missile_think()
+{
+    vector olddir,newdir;
+    vector pre_pos;
+    float itime;
+
+    self.nextthink          = time + 0.1;
+
+    // Enemy in range?
+    if (vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 0.25)
+        turret_hellion_missile_explode();
+
+    olddir = normalize(self.velocity);
+
+    if (self.tur_health < time) turret_hellion_missile_explode();
+
+    // Enemy dead? just keep on the current heading then.
+    if ((self.enemy == world) || (self.enemy.deadflag != DEAD_NO))
+    {
+
+        // Make sure we dont return to tracking a respawned player
+        self.enemy = world;
+
+        // Accelerate
+        self.velocity = olddir * min(vlen(self.velocity) * self.owner.shot_speed_gain,self.owner.shot_speed_max);
+
+        // Turn model
+        self.angles = vectoangles(self.velocity);
+
+        //if ( (vlen(self.origin - self.owner.origin)) > (self.owner.shot_radius * 10) )
+        //    turret_hellion_missile_explode();
+
+        // return;
+    }
+
+    olddir = normalize(self.velocity);
+
+    if (self.enemy)
+    {
+        // Predict enemy position
+        itime = vlen(self.enemy.origin - self.origin) / vlen(self.velocity);
+        pre_pos = self.enemy.origin + self.enemy.velocity * itime;
+    }
+    else
+    {
+        pre_pos = self.origin + olddir * 1024;
+    }
+
+    pre_pos = (pre_pos + self.enemy.origin) * 0.5;
+
+    //pre_pos += randomvec() * 128; //self.tur_aimpos * (sin(32) * time) ;
+
+
+    // Find out the direction to that place
+    newdir = normalize(pre_pos - self.origin);
+
+    // Turn
+    newdir = normalize(olddir + newdir * 0.5);
+
+    // Accelerate
+    self.velocity = newdir * min(vlen(self.velocity) * self.owner.shot_speed_gain,self.owner.shot_speed_max);
+
+    // Turn model
+    self.angles = vectoangles(self.velocity);
+
+    if (time+itime < time+0.1)
+    {
+        self.think = turret_hellion_missile_explode;
+        self.nextthink = time + itime;
+    }
+}
+
+void turret_hellion_missile_explode()
+{
+    vector org2;
+    float d;
+
+    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", 1, ATTN_NORM);
+    org2 = findbetterlocation (self.origin, 16);
+
+    // LordHavoc: TE_TEI_BIGEXPLOSION
+    WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
+    WriteByte (MSG_BROADCAST, 78);
+    WriteCoord (MSG_BROADCAST, org2_x);
+    WriteCoord (MSG_BROADCAST, org2_y);
+    WriteCoord (MSG_BROADCAST, org2_z);
+
+    self.event_damage = SUB_Null;
+    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+
+#ifdef TURRET_DEBUG
+    self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
+    self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
+#endif
+
+    // Target dead, get another is still targeting the same.
+    if ((self.enemy.deadflag != DEAD_NO) && (self.enemy == self.owner.enemy))
+        self.owner.enemy = world;
+
+    remove (self);
+}
+
+void turret_hellion_dinit()
+{
+    if (self.netname == "")      self.netname  = "Hellion Missile Turret";
+
+    if (!self.shot_speed_max)  self.shot_speed_max  = cvar("g_turrets_unit_hellion_std_shot_speed_max");
+    if (!self.shot_speed_gain) self.shot_speed_gain = cvar("g_turrets_unit_hellion_std_shot_speed_gain");
+
+    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_FASTPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
+    self.aim_flags = TFL_AIM_SIMPLE;
+    self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TRIGGERTARGET | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK ;
+    self.firecheck_flags = TFL_FIRECHECK_WORLD | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_TEAMCECK | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF | TFL_FIRECHECK_OWM_AMMO;
+    self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
+
+    if (turret_stdproc_init("hellion_std") == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/hellion.md3");
+
+    if (!turret_tag_setup(0))
+        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
+    // Our fire routine
+    self.turret_firefunc  = turret_hellion_attack;
+
+    // Custom animations and sutch
+    self.turret_postthink = turret_hellion_postthink;
+}
+
+/*QUAKED turret_hellion (0 .5 .8) ?
+*/
+void spawnfunc_turret_hellion()
+{
+    //precache_model ( "models/turrets/mlrs_rocket.md3");
+    //precache_model ("models/turrets/hellion.md3");
+    //precache_model ("models/turrets/base.md3");
+
+    self.think = turret_hellion_dinit;
+    self.nextthink = time + 0.5;
+}
+
+

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hk.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/units/unit_hk.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hk.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_hk.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,470 @@
+//#define TURRET_DEBUG_HK
+
+#ifdef TURRET_DEBUG_HK
+.float atime;
+#endif
+
+void spawnfunc_turret_hk();
+void turret_hk_dinit();
+void turret_hk_attack();
+void turret_hk_missile_explode();
+void turret_hk_missile_think();
+void turret_hk_missile_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
+float turret_hk_addtarget(entity e_target,entity e_sender);
+//void turret_hk_missile_touch();
+
+float hk_maxspeed;
+float hk_minspeed;
+float hk_accel;
+float hk_accel2;
+float hk_decel;
+
+float turret_hk_addtarget(entity e_target,entity e_sender)
+{
+    if (e_target)
+    {
+        if (turret_validate_target(self,e_target,self.target_validate_flags) > 0)
+        {
+            self.enemy = e_target;
+            return 1;
+        }
+    }
+
+    return 0;
+}
+
+float hk_is_valid_target(entity e_target)
+{
+    if (e_target == world)
+        return 0;
+
+    // If only this was used more..
+    if (e_target.flags & FL_NOTARGET)
+        return 0;
+
+    // Cant touch this
+    if ((e_target.takedamage == DAMAGE_NO) || (e_target.health < 0))
+        return 0;
+
+    // player
+    if (e_target.flags & FL_CLIENT)
+    {
+        if (self.owner.target_select_playerbias < 0)
+            return 0;
+
+        if (e_target.deadflag != DEAD_NO)
+            return 0;
+    }
+
+    // Missile
+    if ((e_target.flags & FL_PROJECTILE) && (self.owner.target_select_missilebias < 0))
+        return 0;
+
+    // Team check
+    if ((e_target.team == self.owner.team) || (self.owner.team == e_target.owner.team))
+        return 0;
+
+    return 1;
+}
+
+void turret_hk_missile_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+    if (attacker.team == self.team)
+        damage *= 0.5;
+
+    self.velocity += force;
+
+    self.health -= damage;
+
+    if (self.health <= 0)
+        turret_hk_missile_explode();
+}
+
+void turret_hk_attack()
+{
+    local entity missile;
+    //local entity flash2;
+
+    sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", 1, ATTN_NORM);
+
+    missile                    = spawn ();
+    missile.solid            = SOLID_BBOX;
+    setmodel (missile, "models/turrets/hunter2.md3"); // precision set below
+    setsize (missile, missile.mins,missile.maxs); // give it some size so it can be shot
+    sound    (missile, CHAN_PROJECTILE, "weapons/rocket_fly.wav", 0.4, ATTN_NORM);
+    setorigin(missile, self.tur_shotorg_updated);
+
+    missile.scale            = 1;
+    missile.classname        = "hk_missile";
+    missile.owner            = self;
+    missile.bot_dodge        = TRUE;
+    missile.bot_dodgerating  = self.shot_dmg;
+    missile.takedamage       = DAMAGE_YES;
+    missile.damageforcescale = 4;
+    missile.health           = 10;
+    missile.think            = turret_hk_missile_think;
+    missile.event_damage     = turret_hk_missile_damage;
+    missile.nextthink        = time + 0.25;
+    missile.movetype         = MOVETYPE_BOUNCEMISSILE;
+    missile.effects          = EF_LOWPRECISION;
+    missile.velocity         = self.tur_shotdir_updated * (self.shot_speed * 0.75);
+    missile.angles           = vectoangles(missile.velocity);
+    missile.touch            = turret_hk_missile_explode; //turret_hk_missile_touch;
+    missile.flags            = FL_PROJECTILE;
+    missile.enemy            = self.enemy;
+    missile.team             = self.team;
+    missile.cnt              = time + 30;
+    missile.ticrate          = max(cvar("sys_ticrate"),0.05);
+
+    te_explosion (missile.origin);
+
+    if (self.tur_head.frame == 0)
+        self.tur_head.frame = self.tur_head.frame + 1;
+
+}
+
+/*
+void turret_hk_missile_touch()
+{
+    if(other == self.enemy)
+        turret_hk_missile_explode();
+    else
+    {
+        if(self.cnt < time)
+        {
+            self.cnt = time + 0.25;
+            self.health = self.health - 5;
+            if(self.health <= 0)
+                turret_hk_missile_explode();
+
+        }
+    }
+}
+*/
+
+void turret_hk_missile_think()
+{
+    vector vu, vd, vf, vl, vr, ve;  // Vector (direction)
+    float  fu, fd, ff, fl, fr, fe;  // Fraction to solid
+    vector olddir,wishdir,newdir;   // Final direction
+    float lt_for;   // Length of Trace FORwrad
+    float lt_seek;  // Length of Trace SEEK (left, right, up down)
+    float pt_seek;  // Pitch of Trace SEEK (How mutch to angele left, right up, down trace towards v_forward)
+    vector pre_pos;
+    float myspeed;
+    entity e;
+    float ad,edist;
+
+    self.nextthink = time + self.ticrate;
+
+    //if (self.cnt < time)
+    //    turret_hk_missile_explode();
+
+    if (self.enemy.deadflag != DEAD_NO)
+        self.enemy = world;
+
+    // Pick the closest valid target.
+    if (!self.enemy)
+    {
+        e = findradius(self.origin, 5000);
+        while (e)
+        {
+            if (hk_is_valid_target(e))
+            {
+                if (!self.enemy)
+                    self.enemy = e;
+                else
+                    if (vlen(self.origin - e.origin) < vlen(self.origin - self.enemy.origin))
+                        self.enemy = e;
+            }
+            e = e.chain;
+        }
+    }
+
+    self.angles = vectoangles(self.velocity);
+    self.angles_x = self.angles_x * -1;
+    makevectors(self.angles);
+    self.angles_x = self.angles_x * -1;
+
+    if (self.enemy)
+    {
+        edist = vlen(self.origin - self.enemy.origin);
+        // Close enougth to do decent damage?
+        if ( edist <= (self.owner.shot_radius * 0.25) )
+        {
+            turret_hk_missile_explode();
+            return;
+        }
+
+        // Get data on enemy position
+        pre_pos = self.enemy.origin +
+                  self.enemy.velocity *
+                  min((vlen(self.enemy.origin - self.origin) / vlen(self.velocity)),0.5);
+
+        traceline(self.origin, pre_pos,TRUE,self.enemy);
+        ve = normalize(pre_pos - self.origin);
+        fe = trace_fraction;
+
+    }
+    else
+    {
+        fe = 0;
+    }
+
+    if ((fe != 1) || (self.enemy == world) || (edist > 1000))
+    {
+        myspeed = vlen(self.velocity);
+
+        lt_for  = myspeed * 3;
+        lt_seek = myspeed * 2.95;
+
+        // Trace forward
+        traceline(self.origin, self.origin + v_forward * lt_for,FALSE,self);
+        vf = trace_endpos;
+        ff = trace_fraction;
+
+        // Find angular offset
+        ad = vlen(vectoangles(normalize(self.enemy.origin - self.origin)) - self.angles);
+
+        // To close to something, Slow down!
+        if ( ((ff < 0.7) || (ad > 4)) && (myspeed > hk_minspeed) )
+            myspeed = max(myspeed * hk_decel,hk_minspeed);
+
+        // Failry clear, accelerate.
+        if ( (ff > 0.7) && (myspeed < hk_maxspeed) )
+            myspeed = min(myspeed * hk_accel,hk_maxspeed);
+
+        // Setup trace pitch
+        pt_seek = 1 - ff;
+        pt_seek = bound(0.15,pt_seek,0.8);
+        if (ff < 0.5) pt_seek = 1;
+
+        // Trace left
+        traceline(self.origin, self.origin + (-1 * (v_right * pt_seek) + (v_forward * ff)) * lt_seek,FALSE,self);
+        vl = trace_endpos;
+        fl = trace_fraction;
+
+        // Trace right
+        traceline(self.origin,  self.origin + ((v_right * pt_seek) + (v_forward * ff)) * lt_seek ,FALSE,self);
+        vr = trace_endpos;
+        fr = trace_fraction;
+
+        // Trace up
+        traceline(self.origin,  self.origin + ((v_up * pt_seek) + (v_forward * ff)) * lt_seek ,FALSE,self);
+        vu = trace_endpos;
+        fu = trace_fraction;
+
+        // Trace down
+        traceline(self.origin,  self.origin + (-1 * (v_up * pt_seek) + (v_forward * ff)) * lt_seek ,FALSE,self);
+        vd = trace_endpos;
+        fd = trace_fraction;
+
+        vl = normalize(vl - self.origin);
+        vr = normalize(vr - self.origin);
+        vu = normalize(vu - self.origin);
+        vd = normalize(vd - self.origin);
+
+        // Panic tresh passed, find a single direction and turn as hard as we can
+        if (pt_seek == 1)
+        {
+            wishdir = v_right;
+            if (fl > fr) wishdir = -1 * v_right;
+            if (fu > fl) wishdir = v_up;
+            if (fd > fu) wishdir = -1 * v_up;
+        }
+        else
+        {
+            // Normalize our trace vectors to make a smooth path
+            wishdir = normalize( (vl * fl) + (vr * fr) +  (vu * fu) +  (vd * fd) );
+        }
+
+        if (self.enemy)
+        {
+            if (fe < 0.1) fe = 0.1; // Make sure we always try to move sligtly towards our target
+            wishdir = (wishdir * (1 - fe)) + (ve * fe);
+        }
+    }
+    else
+    {
+        // Got a clear path to target, speed up fast (if not at full speed) and go straight for it.
+        myspeed = vlen(self.velocity);
+        if (myspeed < hk_maxspeed)
+            myspeed = min(myspeed * hk_accel2,hk_maxspeed);
+
+        wishdir = ve;
+        //wishdir = normalize(self.enemy.origin - (self.enemy.origin + self.enemy.velocity));
+    }
+
+    if ((myspeed > hk_minspeed) && (self.cnt > time))
+        myspeed = min(myspeed * hk_accel2,hk_maxspeed);
+
+    // Ranoutagazfish?
+    if (self.cnt < time)
+    {
+        self.cnt = time + 0.25;
+        self.nextthink = 0;
+        self.movetype         = MOVETYPE_BOUNCE;
+        sound    (self, CHAN_VOICE, "", 0.4, ATTN_NORM);
+        return;
+    }
+
+    // Calculate new heading
+    olddir = normalize(self.velocity);
+
+    newdir = normalize(olddir + wishdir * cvar("g_turrets_unit_hk_std_shot_speed_turnrate"));
+
+    //fu = (1 / hk_maxspeed) * myspeed;
+    //fd = fu - (0.75 - 0.25);
+    //newdir = normalize(olddir + wishdir * fd);
+
+    // Set heading & speed
+    self.velocity = newdir * myspeed;
+
+    // Align model with new heading
+    self.angles = vectoangles(self.velocity);
+
+
+#ifdef TURRET_DEBUG_HK
+    //if(self.atime < time) {
+    if ((fe <= 0.99)||(edist > 1000))
+    {
+        te_lightning2(world,self.origin, self.origin + vr * lt_seek);
+        te_lightning2(world,self.origin, self.origin + vl * lt_seek);
+        te_lightning2(world,self.origin, self.origin + vu * lt_seek);
+        te_lightning2(world,self.origin, self.origin + vd * lt_seek);
+        te_lightning2(world,self.origin, vf);
+    }
+    else
+    {
+        te_lightning2(world,self.origin, self.enemy.origin);
+    }
+    bprint("Speed: ", ftos(rint(myspeed)), "\n");
+    bprint("Trace to solid: ", ftos(rint(ff * 100)), "%\n");
+    bprint("Trace to target:", ftos(rint(fe * 100)), "%\n");
+    self.atime = time + 0.2;
+    //}
+#endif
+}
+
+void turret_hk_missile_explode()
+{
+    vector org2;
+    float d;
+
+    if ((other == self.owner)||(other == self.owner.tur_head))
+        return;
+
+    //vector	org2;
+    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", 1, ATTN_NORM);
+    org2 = findbetterlocation (self.origin, 16);
+
+    // LordHavoc: TE_TEI_BIGEXPLOSION
+    WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
+    WriteByte (MSG_BROADCAST, 78);
+    WriteCoord (MSG_BROADCAST, org2_x);
+    WriteCoord (MSG_BROADCAST, org2_y);
+    WriteCoord (MSG_BROADCAST, org2_z);
+
+    self.event_damage = SUB_Null;
+    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+
+#ifdef TURRET_DEBUG
+    self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
+    self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
+#endif
+
+    // Target dead, get another is still targeting the same.
+    if ((self.enemy.deadflag != DEAD_NO) && (self.enemy == self.owner.enemy))
+        self.owner.enemy = world;
+
+    remove (self);
+}
+
+void turret_hk_postthink()
+{
+    if (cvar("g_turrets_reloadcvars"))
+    {
+        hk_maxspeed = cvar("g_turrets_unit_hk_std_shot_speed_max");
+        hk_minspeed = cvar("g_turrets_unit_hk_std_shot_speed");
+        hk_accel    = cvar("g_turrets_unit_hk_std_shot_speed_accel");
+        hk_accel2   = cvar("g_turrets_unit_hk_std_shot_speed_accel2");
+        hk_decel    = cvar("g_turrets_unit_hk_std_shot_speed_decel");
+    }
+
+    if (self.tur_head.frame != 0)
+        self.tur_head.frame = self.tur_head.frame + 1;
+
+    if (self.tur_head.frame > 5)
+        self.tur_head.frame = 0;
+
+}
+
+void turret_hk_dinit()
+{
+    if (self.netname == "")      self.netname  = "Hunter-killer turret";
+
+    hk_maxspeed = cvar("g_turrets_unit_hk_std_shot_speed_max");
+    hk_minspeed = cvar("g_turrets_unit_hk_std_shot_speed");
+    hk_accel    = cvar("g_turrets_unit_hk_std_shot_speed_accel");
+    hk_accel2   = cvar("g_turrets_unit_hk_std_shot_speed_accel2");
+    hk_decel    = cvar("g_turrets_unit_hk_std_shot_speed_decel");
+
+    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_RECIVETARGETS;
+
+    self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
+
+    self.aim_flags = TFL_AIM_SIMPLE;
+
+    self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TRIGGERTARGET | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
+
+    self.firecheck_flags = TFL_FIRECHECK_WORLD | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_TEAMCECK  | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF;
+
+    self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TRIGGERTARGET | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
+
+    self.shoot_flags = TFL_SHOOT_CLEARTARGET;
+
+    if (turret_stdproc_init("hk_std") == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TEAMCHECK;
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/hk.md3");
+
+    if (!turret_tag_setup(0))
+        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
+    // Our fire routine
+    self.turret_firefunc  = turret_hk_attack;
+
+    // re-color badge & handle recoil effect
+    self.turret_postthink = turret_hk_postthink;
+
+    // What to do when reciveing foreign target data
+    self.turret_addtarget = turret_hk_addtarget;
+}
+
+/*
+* Turret that fires Hunter-killer missiles.
+* Missiles seek their target and try to avoid obstacles. If target dies early, they
+* pick a new one on their own.
+*/
+
+/*QUAKED turret_hk (0 .5 .8) ?
+hunter-killer missiles.
+*/
+
+void spawnfunc_turret_hk()
+{
+    //precache_model ( "models/turrets/hunter2.md3");
+    //precache_model ("models/turrets/base.md3");
+    //precache_model ("models/turrets/hk.md3");
+
+    self.think = turret_hk_dinit;
+    self.nextthink = time + 0.5;
+}
+
+

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_machinegun.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/units/unit_machinegun.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_machinegun.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_machinegun.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,71 @@
+void spawnfunc_turret_machinegun();
+void turret_machinegun_std_init();
+void turret_machinegun_attack();
+
+//.float bulletcounter;
+void turret_machinegun_attack()
+{
+
+    entity flash;
+    sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", 1, ATTN_NORM);
+    fireBullet (self.tur_shotorg_updated, self.tur_shotdir_updated,self.shot_spread, self.shot_dmg, self.shot_force, DEATH_TURRET, FALSE);
+
+    te_smallflash(self.tur_shotorg_updated);
+    trailparticles(self,particleeffectnum("EF_MGTURRETTRAIL"),self.tur_shotorg_updated,trace_endpos);
+
+    // muzzle flash for 3rd person view
+    flash = spawn();
+    //setorigin(flash, '43 1 8');
+    setmodel(flash, "models/uziflash.md3"); // precision set below
+    setattachment(flash, self.tur_head, "tag_fire");
+    flash.think = W_Uzi_Flash_Go;
+    flash.nextthink = time + 0.02;
+    flash.frame = 2;
+    flash.angles_z = flash.v_angle_z + random() * 180;
+    flash.alpha = 1;
+    flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
+}
+
+
+void turret_machinegun_std_init()
+{
+    if (self.netname == "")      self.netname     = "Machinegun Turret";
+
+    self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
+    self.turrcaps_flags = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL;
+    self.aim_flags = TFL_AIM_LEAD | TFL_AIM_ZEASE;
+
+    if (turret_stdproc_init("machinegun_std") == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/machinegun.md3");
+
+    if (!turret_tag_setup(0))
+        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
+    // Our fire routine
+    self.turret_firefunc  = turret_machinegun_attack;
+
+}
+
+
+
+/*
+* machinegun turret. does what you'd expect
+*/
+
+/*QUAKED turret_machinegun (0 .5 .8) ?
+*/
+void spawnfunc_turret_machinegun()
+{
+    //precache_model ("models/turrets/machinegun.md3");
+    //precache_model ("models/turrets/base.md3");
+
+    self.think = turret_machinegun_std_init;
+    self.nextthink = time + 0.5;
+}
+

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_mlrs.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/units/unit_mlrs.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_mlrs.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_mlrs.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,121 @@
+void spawnfunc_turret_mlrs();
+void turret_mlrs_dinit();
+void turret_mlrs_attack();
+void turret_mlrs_projectile_explode();
+
+void turret_mlrs_postthink()
+{
+
+    // 0 = full, 6 = empty
+
+    self.tur_head.frame = rint(6 - (self.ammo / self.shot_dmg));
+
+    //if ((self.tur_head.frame >= 6) && (self.attack_finished_single <= time))
+    //    self.tur_head.frame = 0;
+}
+
+void turret_mlrs_attack()
+{
+    entity missile;
+
+    turret_tag_fire_update();
+
+    sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", 1, ATTN_NORM);
+
+    missile                    = spawn ();
+    setmodel (missile, "models/turrets/rocket.md3"); // precision set below
+    setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
+    sound (missile, CHAN_PROJECTILE, "weapons/rocket_fly.wav", 0.4, ATTN_NORM);
+    setorigin(missile, self.tur_shotorg_updated);
+    missile.classname          = "mlrs_missile";
+    missile.owner              = self;
+    missile.bot_dodge          = TRUE;
+    missile.bot_dodgerating    = self.shot_dmg;
+    missile.takedamage         = DAMAGE_YES;
+    missile.damageforcescale   = 4;
+    missile.health             = 30;
+    missile.think              = turret_mlrs_projectile_explode;
+    missile.nextthink          = time + max(self.tur_impacttime,(self.shot_radius * 2) / self.shot_speed);
+    missile.solid              = SOLID_BBOX;
+    missile.movetype           = MOVETYPE_FLYMISSILE;
+    missile.effects            = EF_LOWPRECISION;
+    missile.velocity           = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+    missile.angles             = vectoangles(missile.velocity);
+    missile.touch              = turret_mlrs_projectile_explode;
+    missile.flags              = FL_PROJECTILE;
+    missile.solid              = SOLID_BBOX;
+    missile.enemy              = self.enemy;
+
+    te_explosion (missile.origin);
+
+    //self.tur_head.frame = 7 - self.volly_counter;
+}
+
+void turret_mlrs_projectile_explode()
+{
+    vector org2;
+
+    //vector	org2;
+    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", 1, ATTN_NORM);
+    org2 = findbetterlocation (self.origin, 16);
+    pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
+
+    self.event_damage = SUB_Null;
+
+#ifdef TURRET_DEBUG
+    float d;
+
+    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
+    self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
+#else
+    RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+#endif
+
+    // Target dead, get another is still targeting the same.
+    if ((self.enemy.deadflag != DEAD_NO) && (self.enemy == self.owner.enemy))
+        self.owner.enemy = world;
+
+    remove (self);
+}
+
+void turret_mlrs_dinit()
+{
+    if (self.netname == "")      self.netname  = "MLRS turret";
+
+    self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
+    self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
+    self.aim_flags = TFL_AIM_LEAD | TFL_AIM_ZEASE | TFL_AIM_SHOTTIMECOMPENSATE;
+
+    if (turret_stdproc_init("mlrs_std") == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/mlrs.md3");
+
+    if (!turret_tag_setup(0))
+        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
+    // Our fire routine
+    self.turret_firefunc  = turret_mlrs_attack;
+    self.turret_postthink = turret_mlrs_postthink;
+
+}
+
+/*QUAKED turret_mlrs (0 .5 .8) ?
+*/
+
+void spawnfunc_turret_mlrs()
+{
+    //precache_model ( "models/turrets/rocket.md3");
+    //precache_model ("models/turrets/mlrs.md3");
+    //precache_model ("models/turrets/base.md3");
+
+    self.think = turret_mlrs_dinit;
+    self.nextthink = time + 0.5;
+}
+
+

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_phaser.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/units/unit_phaser.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_phaser.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_phaser.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,148 @@
+void spawnfunc_turret_phaser();
+void turret_phaser_dinit();
+void turret_phaser_attack();
+
+.float fireflag;
+
+float turret_phaser_firecheck()
+{
+    if (self.fireflag != 0) return 0;
+    return turret_stdproc_firecheck();
+}
+
+void turret_phaser_postthink()
+{
+    if (self.tur_head.frame == 0)
+        return;
+
+    if (self.fireflag == 1)
+    {
+        if (self.tur_head.frame == 10)
+            self.tur_head.frame = 1;
+        else
+            self.tur_head.frame = self.tur_head.frame +1;
+    }
+    else if (self.fireflag == 2 )
+    {
+        self.tur_head.frame = self.tur_head.frame +1;
+        if (self.tur_head.frame == 15)
+        {
+            self.tur_head.frame = 0;
+            self.fireflag = 0;
+        }
+    }
+}
+
+void beam_think()
+{
+    if ((time > self.cnt)||(self.owner.deadflag != DEAD_NO))
+    {
+        self.owner.attack_finished_single = time + self.owner.shot_refire;
+        self.owner.fireflag = 2;
+        self.owner.tur_head.frame = 10;
+        sound (self, CHAN_PROJECTILE, "", 1, ATTN_NORM);
+        remove(self);
+        return;
+    }
+
+    turret_do_updates(self.owner);
+
+    if (time - self.shot_spread > 0)
+    {
+        self.shot_spread = time + 2;
+        sound (self, CHAN_VOICE, "turrets/phaser.ogg", 1, ATTN_NORM);
+    }
+
+
+    self.nextthink = time + self.ticrate;
+
+    self.owner.attack_finished_single = time + frametime;
+    entity oldself;
+    oldself = self;
+    self = self.owner;
+    FireImoBeam (   self.tur_shotorg_updated,
+                    self.tur_shotorg_updated + self.tur_shotdir_updated * self.target_range_fire,
+                    '-1 -1 -1' * self.shot_radius,
+                    '1 1 1' * self.shot_radius,
+                    self.shot_force,
+                    oldself.shot_dmg,
+                    0.75,
+                    DEATH_TURRET);
+    self = oldself;
+    self.scale = vlen(self.owner.tur_shotorg_updated - trace_endpos) / 256;
+
+}
+
+void turret_phaser_attack()
+{
+    entity beam;
+
+    beam = spawn();
+    beam.ticrate = 0.1; //cvar("sys_ticrate");
+    setmodel(beam,"models/turrets/phaser_beam.md3");
+    beam.effects = EF_LOWPRECISION;
+    beam.solid = SOLID_NOT;
+    beam.think = beam_think;
+    beam.cnt = time + self.shot_speed;
+    beam.shot_spread = time + 2;
+    beam.nextthink = time;
+    beam.owner = self;
+    beam.shot_dmg = self.shot_dmg / (self.shot_speed / beam.ticrate);
+    beam.scale = self.target_range_fire / 256;
+    beam.movetype = MOVETYPE_NONE;
+    beam.enemy = self.enemy;
+    beam.bot_dodge = TRUE;
+    beam.bot_dodgerating = beam.shot_dmg;
+    sound (beam, CHAN_PROJECTILE, "turrets/phaser.ogg", 1, ATTN_NORM);
+    self.fireflag = 1;
+
+    beam.attack_finished_single = self.attack_finished_single;
+    self.attack_finished_single = time; // + cvar("sys_ticrate");
+
+    setattachment(beam,self.tur_head,"tag_fire");
+
+    soundat (self, trace_endpos, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
+
+    if (self.tur_head.frame == 0)
+        self.tur_head.frame = 1;
+}
+
+void turret_phaser_dinit()
+{
+    if (self.netname == "")      self.netname  = "Phaser Cannon";
+
+    self.turrcaps_flags = TFL_TURRCAPS_SNIPER|TFL_TURRCAPS_HITSCAN|TFL_TURRCAPS_PLAYERKILL;
+    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
+    self.aim_flags = TFL_AIM_ZEASE | TFL_AIM_LEAD;
+
+    if (turret_stdproc_init("phaser_std") == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/phaser.md3");
+
+    if (!turret_tag_setup(0))
+        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
+    self.turret_firecheckfunc = turret_phaser_firecheck;
+    self.turret_firefunc  = turret_phaser_attack;
+    self.turret_postthink = turret_phaser_postthink;
+
+}
+
+/*QUAKED turret_phaser(0 .5 .8) ?
+*/
+void spawnfunc_turret_phaser()
+{
+    //precache_sound ("turrets/phaser.ogg");
+    //precache_model ("models/turrets/phaser.md3");
+    //precache_model ("models/turrets/phaser_beam.md3");
+    //precache_model ("models/turrets/base.md3");
+
+    self.think = turret_phaser_dinit;
+    self.nextthink = time + 0.5;
+}
+

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_plasma.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/units/unit_plasma.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_plasma.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_plasma.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,218 @@
+void spawnfunc_turret_plasma();
+void spawnfunc_turret_plasma_dual();
+
+void turret_plasma_std_init();
+void turret_plasma_dual_init();
+
+void turret_plasma_attack();
+void turret_plasma_projectile_explode();
+
+void turret_plasma_postthink()
+{
+    if (self.tur_head.frame != 0)
+        self.tur_head.frame = self.tur_head.frame + 1;
+
+    if (self.tur_head.frame >= 5)
+        self.tur_head.frame = 0;
+
+}
+
+void turret_plasma_dualpostthink()
+{
+    if (self.tur_head.frame != 0)
+        self.tur_head.frame = self.tur_head.frame + 1;
+
+    if (self.tur_head.frame >= 6)
+        self.tur_head.frame = 0;
+}
+
+void turret_plasma_attack()
+{
+    entity proj;
+
+    turret_tag_fire_update();
+
+    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", 1, ATTN_NORM);
+    proj                    = spawn ();
+    setorigin(proj, self.tur_shotorg_updated);
+    setsize(proj, '-0.5 -0.5 -0.5', '0.5 0.5 0.5');
+    setmodel(proj, "models/elaser.mdl"); // precision set above
+    proj.classname       = "plasmabomb";
+    proj.owner           = self;
+    proj.bot_dodge       = FALSE;
+    //proj.bot_dodgerating = self.shot_dmg;
+    proj.think           = turret_plasma_projectile_explode;
+    proj.nextthink       = time + 9;
+    proj.solid           = SOLID_BBOX;
+    proj.movetype        = MOVETYPE_FLYMISSILE;
+    proj.velocity        = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+    proj.angles          = vectoangles(proj.velocity);
+    proj.touch           = turret_plasma_projectile_explode;
+    proj.flags           = FL_PROJECTILE;
+    proj.effects         = EF_LOWPRECISION |  EF_BRIGHTFIELD;
+    proj.enemy           = self.enemy;
+    proj.flags           = FL_PROJECTILE | FL_NOTARGET;
+
+    if (self.tur_head.frame == 0)
+        self.tur_head.frame = 1;
+
+    // Snapback the head
+    // self.tur_head.angles_x = self.tur_head.angles_x + min((self.shot_dmg * 0.05),self.aim_maxpitch);
+
+}
+
+void turret_plasma_dual_attack()
+{
+    entity proj;
+
+    if (self.tur_head.frame > 2)
+        self.tur_head.frame = 1;
+
+    turret_tag_fire_update();
+
+    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", 1, ATTN_NORM);
+    proj                    = spawn ();
+    setorigin(proj, self.tur_shotorg_updated);
+    setsize(proj, '0 0 0', '0 0 0');
+    setmodel(proj, "models/elaser.mdl"); // precision set above
+    proj.classname       = "plasmabomb";
+    proj.owner           = self;
+    proj.bot_dodge       = TRUE;
+    proj.bot_dodgerating = self.shot_dmg;
+    proj.think           = turret_plasma_projectile_explode;
+    proj.nextthink       = time + 9;
+    proj.solid           = SOLID_BBOX;
+    proj.movetype        = MOVETYPE_FLYMISSILE;
+    proj.velocity        = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+    proj.angles          = vectoangles(proj.velocity);
+    proj.touch           = turret_plasma_projectile_explode;
+    proj.flags           = FL_PROJECTILE;
+    proj.effects         = EF_LOWPRECISION |  EF_BRIGHTFIELD;
+    proj.enemy           = self.enemy;
+    proj.flags           = FL_PROJECTILE | FL_NOTARGET;
+
+    if (self.tur_head.frame == 0)
+        self.tur_head.frame = 1;
+
+    // Snapback the head
+    // self.tur_head.angles_x = self.tur_head.angles_x + min((self.shot_dmg * 0.05),self.aim_maxpitch);
+
+}
+
+void turret_plasma_projectile_explode()
+{
+    vector org2;
+
+    org2 = findbetterlocation (self.origin, 8);
+    WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
+    WriteByte (MSG_BROADCAST, 79);
+    WriteCoord (MSG_BROADCAST, org2_x);
+    WriteCoord (MSG_BROADCAST, org2_y);
+    WriteCoord (MSG_BROADCAST, org2_z);
+    WriteCoord (MSG_BROADCAST, 0);		// SeienAbunae: groan... Useless clutter
+    WriteCoord (MSG_BROADCAST, 0);
+    WriteCoord (MSG_BROADCAST, 0);
+    WriteByte (MSG_BROADCAST, 155);
+
+    self.event_damage = SUB_Null;
+
+
+#ifdef TURRET_DEBUG
+    float d;
+
+    d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+    self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d; //self.owner.shot_dmg;
+    self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
+#else
+    RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+#endif
+    sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", 1, ATTN_NORM);
+
+    remove (self);
+}
+
+void turret_plasma_std_init()
+{
+    if (self.netname == "")      self.netname     = "Plasma Cannon";
+
+    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
+    self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZEASE | TFL_AIM_GROUND2;
+
+    if (turret_stdproc_init("plasma_std") == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/plasma.md3");
+
+
+    if (!turret_tag_setup(0))
+        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
+    // Our fire routine
+    self.turret_firefunc  = turret_plasma_dual_attack;
+
+    // re-color badge & handle recoil effect
+    self.turret_postthink = turret_plasma_dualpostthink;
+}
+
+
+void turret_plasma_dual_init()
+{
+    if (self.netname == "")      self.netname     = "Dual Plasma Cannon";
+
+    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
+
+    if (turret_stdproc_init("plasma_dual") == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    setmodel(self,"models/turrets/base.md3");
+    setmodel(self.tur_head,"models/turrets/plasmad.md3");
+
+    if (!turret_tag_setup(0))
+        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
+    // select aim
+    self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_ZEASE | TFL_AIM_GROUND2;
+
+    // Our fire routine
+    self.turret_firefunc  = turret_plasma_attack;
+
+    // re-color badge & handle recoil effect
+    self.turret_postthink = turret_plasma_postthink;
+}
+
+
+/*
+* Basic moderate (std) or fast (dual) fireing, short-mid range energy cannon.
+* Not too mutch of a therat on its own, but can be rather dangerous in groups.
+* Regenerates ammo slowly, support with a fusionreactor(s) to do some real damage.
+*/
+
+/*QUAKED turret_plasma (0 .5 .8) ?
+*/
+void spawnfunc_turret_plasma()
+{
+    //precache_model ("models/turrets/plasma.md3");
+    //precache_model ("models/turrets/base.md3");
+
+    self.think = turret_plasma_std_init;
+    self.nextthink = time + 0.5;
+}
+
+/*QUAKED turret_plasma_dual (0 .5 .8) ?
+*/
+void spawnfunc_turret_plasma_dual()
+{
+    //precache_model ("models/turrets/plasmad.md3");
+    //precache_model ("models/turrets/base.md3");
+
+    self.think = turret_plasma_dual_init;
+    self.nextthink = time + 0.5;
+}
+

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_targettrigger.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/units/unit_targettrigger.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_targettrigger.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_targettrigger.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,41 @@
+void spawnfunc_turret_targettrigger();
+void turret_targettrigger_touch();
+
+void turret_targettrigger_touch()
+{
+    entity e;
+    if (self.cnt > time) return;
+    entity oldself;
+    oldself = self;
+
+    e = find(world, targetname, self.target);
+    while (e)
+    {
+        if (e.turrcaps_flags & TFL_TURRCAPS_RECIVETARGETS)
+        {
+            self = e;
+            e.turret_addtarget(other,oldself);
+        }
+
+        e = find(e, targetname, oldself.target);
+    }
+
+    oldself.cnt = time + 0.5;
+
+    self = oldself;
+}
+
+/*QUAKED turret_targettrigger (.5 .5 .5) ?
+*/
+void spawnfunc_turret_targettrigger()
+{
+    if (!cvar("g_turrets"))
+    {
+        remove(self);
+        return;
+    }
+
+    InitTrigger ();
+
+    self.touch = turret_targettrigger_touch;
+}

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_tessla.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/units/unit_tessla.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_tessla.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_tessla.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,147 @@
+void spawnfunc_turret_tesla();
+void turret_tesla_dinit();
+void turret_tesla_fire();
+
+.float toasted;
+entity toast(entity from, float range, float damage)
+{
+    entity e;
+    entity etarget;
+    float d,dd;
+
+    dd = range + 1;
+
+    e = findradius(from.origin,range);
+    while (e)
+    {
+        if ((e.toasted != 1) && (e != from))
+            if (turret_validate_target(self,e,self.target_validate_flags) > 0)
+            {
+
+                traceline(from.origin,e.origin,0,from);
+                if (trace_fraction > 0.9)
+                {
+                    d = vlen(e.origin - from.origin);
+                    if (d < dd)
+                    {
+                        dd = d;
+                        etarget = e;
+                    }
+                }
+            }
+        e = e.chain;
+    }
+
+    if (etarget)
+    {
+        te_smallflash(etarget.origin);
+        te_lightning1(world,from.origin,etarget.origin);
+        Damage(etarget,self,self,damage,DEATH_TURRET,etarget.origin,'0 0 0');
+        etarget.toasted = 1;
+    }
+
+    return etarget;
+}
+
+void turret_tesla_fire()
+{
+    entity e,t;
+    float d,r,i;
+
+    if (cvar("g_turrets_nofire") != 0)
+        return;
+
+    if (self.attack_finished_single > time) return;
+
+    d = self.shot_dmg;
+    r = self.target_range;
+    e = spawn();
+    setorigin(e,self.origin + self.tur_shotorg);
+
+
+    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
+                                 TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
+
+    t = toast(e,r,d);
+    remove(e);
+
+    if (t == world) return;
+
+    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
+                                 TFL_TARGETSELECT_TEAMCHECK;
+
+    self.attack_finished_single = time + self.shot_refire;
+    self.ammo = self.ammo - self.shot_dmg;
+    for (i = 0;i < 10;i = i + 1)
+    {
+        d *= 0.5;
+        r *= 0.75;
+        t = toast(t,r,d);
+        if (t == world) break;
+    }
+
+    e = findchainfloat(toasted, 1);
+    while (e)
+    {
+        e.toasted = 0;
+        e = e.chain;
+    }
+}
+
+void turret_tesla_postthink()
+{
+    turret_tesla_fire();
+
+    self.tur_head.frame = self.tur_head.frame + 1;
+
+    if (self.tur_head.frame >= 11)
+        self.tur_head.frame = 0;
+
+    if (self.tur_head.avelocity == '0 0 0')
+        self.tur_head.avelocity = '0 35 0';
+}
+
+
+void turret_tesla_dinit()
+{
+    if (self.netname == "")      self.netname     = "Tesla Coil";
+
+    self.turrcaps_flags = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
+    self.target_select_flags = TFL_TARGETSELECT_NO;
+    self.firecheck_flags = TFL_FIRECHECK_REFIRE;
+    self.shoot_flags = TFL_SHOOT_CUSTOM;
+    self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
+    self.aim_flags = TFL_AIM_NO;
+    self.track_flags = TFL_TRACK_NO;
+
+    if (turret_stdproc_init("tesla_std") == 0)
+    {
+        remove(self);
+        return;
+    }
+
+    setmodel(self,"models/turrets/tesla_base.md3");
+    setmodel(self.tur_head,"models/turrets/tesla_head.md3");
+
+    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
+                                 TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
+
+    if (!turret_tag_setup(0))
+        dprint("Warning: Turret ",self.classname, " faild to initialize md3 tags\n");
+
+    self.turret_firefunc = turret_stdproc_nothing;
+    self.turret_postthink = turret_tesla_postthink;
+}
+
+/*QUAKED turret_tesla (0 .5 .8) ?
+*/
+void spawnfunc_turret_tesla()
+{
+    //precache_model ("models/turrets/tesla_head.md3");
+    //precache_model ("models/turrets/tesla_base.md3");
+
+
+    self.think = turret_tesla_dinit;
+    self.nextthink = time + 0.5;
+}
+

Copied: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc (from rev 4862, trunk/data/qcsrc/server/tturrets/units/unit_walker.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,798 @@
+#define ANIM_NO 0
+#define ANIM_WALK 1
+#define ANIM_RUN 1.1
+#define ANIM_STRAFE_L 2
+#define ANIM_STRAFE_R 3
+#define ANIM_TURN 2
+#define ANIM_JUMP 4
+#define ANIM_LAND 5
+#define ANIM_PAIN 6
+#define ANIM_MEELE 7
+.float animflag;
+
+.entity wkr_props;
+.entity wkr_spawn;
+
+#define WALKER_MIN '-70 -70 5'
+#define WALKER_MAX '70 70 70'
+
+/*
+.entity goalcurrent, goalstack01, goalstack02, goalstack03;
+.entity goalstack04, goalstack05, goalstack06, goalstack07;
+.entity goalstack08, goalstack09, goalstack10, goalstack11;
+.entity goalstack12, goalstack13, goalstack14, goalstack15;
+.entity goalstack16, goalstack17, goalstack18, goalstack19;
+.entity goalstack20, goalstack21, goalstack22, goalstack23;
+.entity goalstack24, goalstack25, goalstack26, goalstack27;
+.entity goalstack28, goalstack29, goalstack30, goalstack31;
+*/
+
+float walker_firecheck()
+{
+    if (!turret_stdproc_firecheck()) return 0;
+    //if(self.tur_cannon.frame != 0) return 0;
+
+    //if(self.walking  == 1) self.walking = 2;
+    //if(self.walking != 0)
+    //    return 0;
+
+    return 1;
+}
+
+void walker_meele_dmg()
+{
+    vector where;
+    entity e;
+
+    makevectors(self.angles);
+    where = self.origin + v_forward * 128;
+
+    e = findradius(where,80);
+    while(e)
+    {
+        if(turret_validate_target(self,e,self.target_validate_flags))
+            if(e != self)
+                Damage(e,self,self,cvar("g_turrets_unit_walker_std_meele_dmg "),DEATH_TURRET,'0 0 0', v_forward * cvar("g_turrets_unit_walker_std_meele_force") );
+
+        e = e.chain;
+    }
+}
+
+void walker_animate()
+{
+
+    if(self.tur_head.frame != 0)
+        self.tur_head.frame = self.tur_head.frame +1;
+
+    if(self.tur_head.frame > 12)
+        self.tur_head.frame = 0;
+
+
+    switch(self.animflag)
+    {
+        case ANIM_NO:
+            //if(self.frame != 0)
+            //    self.frame = 0;
+        break;
+
+        case ANIM_WALK:
+            self.frame = self.frame + 1;
+            if(self.frame > 25)
+                self.frame = 5;
+        break;
+
+        case ANIM_RUN:
+            self.frame = self.frame + 2;
+            if(self.frame > 25)
+                self.frame = 5;
+        break;
+
+        case ANIM_STRAFE_L:
+            if(self.frame < 35) self.frame = 35;
+            self.frame = self.frame + 1;
+            if(self.frame > 55) self.frame = 35;
+        break;
+
+        case ANIM_STRAFE_R:
+            if(self.frame < 65) self.frame = 65;
+            self.frame = self.frame + 1;
+            if(self.frame > 85) self.frame = 65;
+        break;
+
+        case ANIM_JUMP:
+            if(self.frame < 95) self.frame = 95;
+            if(self.frame > 100)
+            self.frame = self.frame + 1;
+
+        break;
+
+        case ANIM_LAND:
+            if(self.frame < 100) self.frame = 100;
+            self.frame = self.frame + 1;
+            if(self.frame > 107)
+                self.animflag = ANIM_NO;
+        break;
+
+        case ANIM_PAIN:
+            if(self.frame < 90) self.frame = 90;
+            self.frame = self.frame + 1;
+            if(self.frame > 95)
+                self.animflag = ANIM_NO;
+        break;
+
+        case ANIM_MEELE:
+            if(self.frame < 123) self.frame = 123;
+            self.frame = self.frame + 1;
+
+            if(self.frame == 133)
+                walker_meele_dmg();
+
+            if(self.frame > 140)
+                self.animflag = ANIM_NO;
+
+    }
+}
+
+
+
+
+
+void walker_rocket_explode()
+{
+    vector org2;
+
+    sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", 1, ATTN_NORM);
+    org2 = findbetterlocation (self.origin, 16);
+
+    WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
+    WriteByte (MSG_BROADCAST, 78);
+    WriteCoord (MSG_BROADCAST, org2_x);
+    WriteCoord (MSG_BROADCAST, org2_y);
+    WriteCoord (MSG_BROADCAST, org2_z);
+
+    self.event_damage = SUB_Null;
+
+    RadiusDamage (self, self.owner, cvar("g_turrets_unit_walker_std_rocket_dmg"), 0, cvar("g_turrets_unit_walker_std_rocket_radius"), world, cvar("g_turrets_unit_walker_std_rocket_force"), DEATH_TURRET, world);
+
+    remove (self);
+}
+
+void walker_rocket_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
+{
+    self.health = self.health - damage;
+    self.velocity = self.velocity + vforce;
+    if (self.health <= 0) walker_rocket_explode();
+}
+
+
+/*
+g_turrets_unit_walker_std_rocket_refire
+g_turrets_unit_walker_std_rocket_dmg
+g_turrets_unit_walker_std_rocket_radius
+g_turrets_unit_walker_std_rocket_force
+g_turrets_unit_walker_std_rocket_tunrate
+g_turrets_unit_walker_std_rocket_speed
+g_turrets_unit_walker_std_rocket_speed_add
+*/
+
+void walker_rocket_loop();
+void walker_rocket_think()
+{
+    vector olddir,newdir;
+    float edist;
+    float itime;
+    float m_speed;
+
+    self.nextthink          = time + 0.1;
+
+    olddir = normalize(self.velocity);
+    edist = vlen(self.enemy.origin - self.origin);
+
+    // Simulate crudely guidance
+    if(self.cnt < time)
+    {
+        if(edist < 1000)
+            self.tur_shotorg = randomvec() * min(edist,64);
+        else
+            self.tur_shotorg = randomvec() * min(edist,256);
+        self.cnt = time + 0.5;
+    }
+    if(edist < 256)
+        self.tur_shotorg = '0 0 0';
+
+
+    if (self.tur_health < time)
+    {
+        self.think = walker_rocket_explode;
+        self.nextthink = time;
+        return;
+    }
+
+    if((random() < 0.01) && (self.shot_dmg != 1337))
+    {
+        walker_rocket_loop();
+        return;
+    }
+
+    olddir = normalize(self.velocity);
+
+    // Accelerate
+    m_speed = vlen(self.velocity) + cvar("g_turrets_unit_walker_std_rocket_speed_add");
+
+    // Enemy dead? just keep on the current heading then.
+    if ((self.enemy == world) || (self.enemy.deadflag != DEAD_NO))
+    {
+
+        // Make sure we dont return to tracking a respawned player
+        self.enemy = world;
+
+        // Turn model
+        self.angles = vectoangles(self.velocity);
+    }
+
+    if (self.enemy)
+    {
+        // Predict enemy position
+        itime = max(edist / m_speed,1);
+        newdir = normalize((self.enemy.origin + self.tur_shotorg) - self.origin);
+    }
+    else
+    {
+        //pre_pos = self.origin + olddir;
+        newdir  = olddir;
+    }
+
+    // Turn
+    newdir = normalize(olddir + newdir * cvar("g_turrets_unit_walker_std_rocket_tunrate"));
+
+    self.velocity = newdir * m_speed;
+
+    // Turn model
+    self.angles = vectoangles(self.velocity);
+
+    if (time+itime < time+0.1)
+    {
+        self.think = turret_hellion_missile_explode;
+        self.nextthink = time + itime;
+    }
+}
+
+void walker_rocket_loop3()
+{
+    self.nextthink = time + 0.1;
+    if(vlen(self.origin - self.tur_shotorg) < 128 )
+    {
+        self.think = walker_rocket_think;
+        return;
+    }
+
+    vector newdir;
+    vector olddir;
+    float m_speed;
+
+    m_speed = vlen(self.velocity) + cvar("g_turrets_unit_walker_std_rocket_speed_add");
+
+    olddir = normalize(self.velocity);
+
+
+    newdir = normalize(self.tur_shotorg  - self.origin);
+
+    newdir = normalize(olddir + newdir * cvar("g_turrets_unit_walker_std_rocket_tunrate"));
+
+
+    self.velocity = newdir * m_speed;
+    self.angles = vectoangles(self.velocity);
+}
+
+void walker_rocket_loop2()
+{
+    self.nextthink = time + 0;
+
+    if(vlen(self.origin - self.tur_shotorg) < 128 )
+    {
+        self.tur_shotorg = self.origin - '0 0 200';
+        self.think = walker_rocket_loop3;
+        return;
+    }
+
+    vector newdir;
+    vector olddir;
+    float m_speed;
+
+    m_speed = vlen(self.velocity) + cvar("g_turrets_unit_walker_std_rocket_speed_add");
+
+    olddir = normalize(self.velocity);
+
+    newdir = normalize(self.tur_shotorg  - self.origin);
+
+    newdir = normalize(olddir + newdir * cvar("g_turrets_unit_walker_std_rocket_tunrate"));
+
+    self.velocity = newdir * m_speed;
+
+    self.angles = vectoangles(self.velocity);
+
+}
+
+void walker_rocket_loop()
+{
+
+    self.nextthink= time + 0;
+
+    self.tur_shotorg = self.origin + '0 0 400';
+
+    self.think = walker_rocket_loop2;
+
+    self.shot_dmg = 1337;
+}
+
+
+
+void walker_fire_rocket(vector org)
+{
+
+    entity rocket;
+
+
+    //self.angles_x *= -1;
+    makevectors(self.angles);
+    //self.angles_x *= -1;
+
+    rocket = spawn ();
+    setorigin(rocket, org);
+
+    sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", 1, ATTN_NORM);
+    sound (rocket, CHAN_PROJECTILE, "weapons/rocket_fly.wav", 0.4, ATTN_NORM);
+    setmodel (rocket, "models/turrets/rocket.md3"); // precision set below
+    setsize (rocket, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
+
+    rocket.classname          = "walker_rocket";
+    rocket.owner              = self;
+    rocket.bot_dodge          = TRUE;
+    rocket.bot_dodgerating    = 50;
+    rocket.takedamage         = DAMAGE_YES;
+
+    rocket.damageforcescale   = 2;
+    rocket.health             = 10;
+    rocket.tur_shotorg        = randomvec() * 512;
+    rocket.cnt                = time + 1;
+    rocket.enemy              = self.enemy;
+
+    if(random() < 0.01)
+        rocket.think          = walker_rocket_loop;
+    else
+        rocket.think          = walker_rocket_think;
+
+    rocket.nextthink          = time + 0.2;
+    rocket.solid              = SOLID_BBOX;
+    rocket.movetype           = MOVETYPE_FLYMISSILE;
+    rocket.effects            = EF_LOWPRECISION;
+    rocket.velocity           = ((v_forward + v_up * 0.5) +(randomvec() * 0.15))* cvar("g_turrets_unit_walker_std_rocket_speed");
+    rocket.angles             = vectoangles(rocket.velocity);
+    rocket.touch              = walker_rocket_explode;
+    rocket.flags              = FL_PROJECTILE;
+    rocket.solid              = SOLID_BBOX;
+    rocket.tur_health         = time + 9;
+
+    te_explosion (rocket.origin);
+
+}
+
+#define s_turn 10
+#define s_walk 100
+#define s_run 300
+#define s_accel1 8
+#define s_accel2 16
+#define s_decel 8
+
+void rv_think()
+{
+    float f;
+    vector org;
+
+    self.cnt = self.cnt -1;
+    if(self.cnt < 0)
+    {
+        remove(self);
+        return;
+    }
+
+    if(self.cnt> 1)
+        f = gettagindex(self.owner,"tag_rocket01");
+    else
+        f = gettagindex(self.owner,"tag_rocket02");
+
+    org = self.owner.origin + gettaginfo(self.owner,f);
+
+
+    self.nextthink = time + 0.2;
+
+    self = self.owner;
+    walker_fire_rocket(org);
+}
+
+void walker_postthink()
+{
+    vector wish_angle;
+    vector real_angle;
+    float turn_limit;
+
+
+
+    if(self.flags & FL_ONGROUND)
+    {
+        self.animflag = ANIM_NO;
+    }
+
+    if(self.enemy)
+    {
+        if(self.tur_head.attack_finished_single < time)
+        {
+            entity rv;
+            rv = spawn();
+            rv.think = rv_think;
+            rv.nextthink = time;
+            rv.cnt = 4;
+            rv.owner = self;
+
+            self.tur_head.attack_finished_single = time + cvar("g_turrets_unit_walker_std_rocket_refire");
+        }
+
+    }
+
+    if(self.goalcurrent)
+    {
+        //if(self.enemy && (self.tur_dist_enemy < self.target_range_fire))
+        //   self.animflag = ANIM_TURN;
+        //else
+        //{
+            if(vlen(self.origin  - self.goalcurrent.origin) < 64)
+                if(self.goalcurrent.goalcurrent == world)
+                    self.goalcurrent = world; // Path endpoint reached, go roaming.
+                else
+                    self.goalcurrent = self.goalcurrent.goalcurrent;
+
+            self.animflag = ANIM_WALK;
+        //}
+
+
+    }
+    else // Roaming mode
+    {
+
+        if(self.enemy)
+        {
+            wish_angle = angleofs(self,self.enemy); //normalize(self.origin-self.enemy.origin);
+
+            if(self.tur_dist_enemy < cvar("g_turrets_unit_walker_std_meele_range"))
+            {
+
+                if(fabs(wish_angle_y) < 15)
+                    self.animflag = ANIM_MEELE;
+            }
+            else
+            {
+                if(fabs(wish_angle_y) < 15)
+                    self.animflag = ANIM_RUN;
+                else if(fabs(wish_angle_y) < 30)
+                    self.animflag = ANIM_WALK;
+                else
+                    self.animflag = ANIM_TURN;
+            }
+
+        }
+        else
+            self.animflag = ANIM_NO;
+    }
+
+
+    float s_speed;
+
+    s_speed = vlen(self.velocity);
+
+    // Turn on the spot
+    if (self.animflag == ANIM_TURN) {
+        if(self.enemy)
+            wish_angle = normalize(self.enemy.origin - self.origin);
+        else
+            wish_angle = normalize(self.goalcurrent.origin - self.origin);        wish_angle = vectoangles(wish_angle);                  // And make a angle
+
+        real_angle = wish_angle - self.angles;
+
+        if (real_angle_x < 0) real_angle_x += 360;
+        if (real_angle_x > 180) real_angle_x -= 360;
+
+        if (real_angle_y < 0) real_angle_y += 360;
+        if (real_angle_y > 180) real_angle_y -= 360;
+
+        turn_limit = cvar("g_turrets_unit_walker_turn_turnrate");
+        // Convert from dgr/sec to dgr/tic
+        turn_limit  = turn_limit / (1 / self.ticrate);
+
+        //real_angle_x = bound((-1 * turn_limit),real_angle_x, turn_limit);
+        real_angle_y = bound((-1 * turn_limit),real_angle_y, turn_limit);
+
+        self.angles_y = self.angles_y + real_angle_y;
+
+        if(self.enemy)
+            v_forward = normalize(self.enemy.origin - self.origin);
+        else
+            v_forward = normalize(self.goalcurrent.origin - self.origin);
+
+        makevectors(self.angles);
+
+        if(s_speed > s_turn)
+            self.velocity = (v_forward * max((s_speed - s_decel),s_turn));
+        if(s_speed < s_turn)
+            self.velocity = (v_forward * min((s_speed + s_accel1),s_turn));
+    }
+    else if (self.animflag == ANIM_WALK) // Gg walking
+    {
+        if(self.goalcurrent)
+            wish_angle = normalize(self.goalcurrent.origin - self.origin);
+        else
+            if(self.enemy)
+                wish_angle = normalize(self.enemy.origin - self.origin);
+            else
+                wish_angle = self.angles;
+
+
+        wish_angle = vectoangles(wish_angle);                  // And make a angle
+        real_angle = wish_angle - self.angles;
+
+        if (real_angle_x < 0) real_angle_x += 360;
+        if (real_angle_x > 180) real_angle_x -= 360;
+
+        if (real_angle_y < 0) real_angle_y += 360;
+        if (real_angle_y > 180) real_angle_y -= 360;
+
+        turn_limit = cvar("g_turrets_unit_walker_walk_turnrate");
+        // Convert from dgr/sec to dgr/tic
+        turn_limit  = turn_limit / (1 / self.ticrate);
+
+        //real_angle_x = bound((-1 * turn_limit),real_angle_x, turn_limit);
+        real_angle_y = bound((-1 * turn_limit),real_angle_y, turn_limit);
+
+        self.angles_y = self.angles_y + real_angle_y;
+
+        if(self.goalcurrent)
+            v_forward = normalize(self.goalcurrent.origin - self.origin);
+        else
+            if(self.enemy)
+                v_forward = normalize(self.enemy.origin - self.origin);
+
+        makevectors(self.angles);
+        //self.velocity = v_forward * s_walk;
+
+        //if(self.flags & FL_ONGROUND)
+        {
+            if(s_speed > s_walk)
+                self.velocity = (v_forward * max((s_speed - s_decel),s_walk));
+            if(s_speed <= s_walk)
+                self.velocity = (v_forward * min((s_speed + s_accel1),s_walk));
+        }
+
+
+    }
+    else if (self.animflag == ANIM_RUN) // Move fast, turn slow
+    {
+        if(self.goalcurrent)
+            wish_angle = normalize(self.goalcurrent.origin - self.origin);
+        else
+            if(self.enemy)
+                wish_angle = normalize(self.enemy.origin - self.origin);
+            else
+                wish_angle = self.angles;
+
+        wish_angle = vectoangles(wish_angle);                  // And make a angle
+        real_angle = wish_angle - self.angles;
+
+        if (real_angle_x < 0) real_angle_x += 360;
+        if (real_angle_x > 180) real_angle_x -= 360;
+
+        if (real_angle_y < 0) real_angle_y += 360;
+        if (real_angle_y > 180) real_angle_y -= 360;
+
+        turn_limit = cvar("g_turrets_unit_walker_run_turnrate");
+        // Convert from dgr/sec to dgr/tic
+        turn_limit  = turn_limit / (1 / self.ticrate);
+
+        //real_angle_x = bound((-1 * turn_limit),real_angle_x, turn_limit);
+        real_angle_y = bound((-1 * turn_limit),real_angle_y, turn_limit);
+
+        self.angles_y = self.angles_y + real_angle_y;
+
+
+        if(self.enemy)
+            v_forward = normalize(self.enemy.origin - self.origin);
+        else
+            v_forward = normalize(self.goalcurrent.origin - self.origin);
+
+        makevectors(self.angles);
+
+        if(self.flags & FL_ONGROUND)
+        {
+            if(s_speed > s_run)
+                self.velocity = (v_forward * max((s_speed - s_decel),s_run));
+            if(s_speed <= s_run)
+                self.velocity = (v_forward * min((s_speed + s_accel2),s_run));
+        }
+    } else {
+
+        if(self.flags & FL_ONGROUND)
+        {
+            makevectors(self.angles);
+            if(s_speed > 0)
+                self.velocity = min(s_speed - s_decel,0) * v_forward;
+        }
+    }
+
+
+
+    walker_animate();
+
+
+}
+
+void walker_attack()
+{
+    entity flash;
+
+    //turret_do_updates(self);
+
+    self.tur_head.frame = self.tur_head.frame + 1;
+
+    sound (self, CHAN_WEAPON, "weapons/uzi_fire.wav", 1, ATTN_NORM);
+
+
+    fireBullet (self.tur_shotorg_updated, self.tur_shotdir_updated,self.shot_spread, self.shot_dmg, self.shot_force, DEATH_TURRET, FALSE);
+
+    te_smallflash(self.tur_shotorg_updated);
+
+    if(!(self.uzi_bulletcounter & 3))
+    {
+
+        trailparticles(self,particleeffectnum("EF_MGTURRETTRAIL"),self.tur_shotorg_updated,trace_endpos);
+        // te_lightning1(self,self.tur_shotorg_updated,trace_endpos);
+        flash = spawn();
+        setmodel(flash, "models/uziflash.md3"); // precision set below
+        setattachment(flash, self.tur_head, "tag_fire");
+        flash.scale = 3;
+        flash.think = W_Uzi_Flash_Go;
+        flash.nextthink = time + 0.02;
+        flash.frame = 2;
+        flash.angles_z = flash.v_angle_z + random() * 180;
+        flash.alpha = 1;
+        flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
+    }
+
+    self.uzi_bulletcounter = self.uzi_bulletcounter + 1;
+}
+
+void walker_respawnhook()
+{
+    vector vtmp;
+    self.origin = self.wkr_spawn.origin;
+    self.wkr_props.solid = SOLID_BBOX;
+    self.wkr_props.alpha = 1;
+
+    self.angles = self.wkr_spawn.angles;
+    vtmp = self.origin;
+    vtmp_z +=self.wkr_spawn.origin_z + self.wkr_spawn.maxs_z;
+    setorigin(self,vtmp);
+
+}
+void walker_diehook()
+{
+    self.wkr_props.solid = SOLID_NOT;
+    self.wkr_props.alpha = -1;
+}
+
+//.string target_start;
+void turret_walker_dinit()
+{
+    entity e;
+
+    if (self.netname == "")      self.netname     = "Walker Turret";
+
+    if(self.target != "")
+    {
+        e = find(world,targetname,self.target);
+        if(!e)
+        {
+            bprint("Warning! initital waypoint for Walker does NOT exsist!\n");
+            self.target = "";
+
+            //remove(self);
+            //return;
+        }
+
+        if(e.classname != "walker_checkpoint")
+            dprint("Warning: not a walker path\n");
+        else
+            self.goalcurrent = e;
+    }
+
+
+
+
+    self.wkr_props = spawn();
+    self.wkr_spawn = spawn();
+
+    self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
+    self.turrcaps_flags = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE | TFL_TURRCAPS_ROAM | TFL_TURRCAPS_LINKED;
+    self.aim_flags = TFL_AIM_LEAD | TFL_AIM_ZEASE;
+
+    self.turret_respawnhook = walker_respawnhook;
+    self.turret_diehook = walker_diehook;
+
+    self.ticrate = 0.05;
+    if (turret_stdproc_init("walker_std") == 0)
+    {
+        remove(self);
+        return;
+    }
+    // self.scale = 1.5;
+    //setsize(self,'38 38 55','-38 -38 1');
+
+    self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
+    self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
+
+    //self.flags      = FL_CLIENT;
+    self.iscreature = TRUE;
+    self.movetype   = MOVETYPE_WALK;
+    self.solid      = SOLID_BBOX;// SOLID_SLIDEBOX;
+    self.takedamage = DAMAGE_AIM;
+
+    setmodel(self.wkr_props,"models/turrets/walker_props.md3");
+    setmodel(self.wkr_spawn,"models/turrets/walker_spawn.md3");
+    setorigin(self.wkr_spawn,self.origin);
+
+    self.wkr_spawn.angles   = self.angles;
+    self.wkr_spawn.solid    = SOLID_NOT;
+
+    traceline(self.wkr_spawn.origin + '0 0 10', self.wkr_spawn.origin - '0 0 10000', MOVE_NOMONSTERS, self);
+    setorigin(self.wkr_spawn,trace_endpos + '0 0 4');
+
+    setmodel(self,"models/turrets/walker_body.md3");
+    setmodel(self.tur_head,"models/turrets/walker_head_minigun.md3");
+
+    setattachment(self.tur_head,self,"tag_head");
+    setattachment(self.wkr_props,self,"tag_head");
+
+    vector v;
+    float f;
+    f = gettagindex(self.tur_head,"tag_fire");
+    v = gettaginfo(self.tur_head,f);
+    v_y = v_y * -1;
+
+    setsize(self,WALKER_MIN,WALKER_MAX);
+    //setsize(self,'-70 -70 0','70 70 55');
+
+    self.tur_shotorg = v;
+    self.tur_aimorg  = v;
+
+    self.idle_aim = '0 0 0';
+
+//    self.v_home = self.origin;
+
+    self.turret_firecheckfunc   = walker_firecheck;
+
+    // Our fire routine
+    self.turret_firefunc  = walker_attack;
+
+    self.turret_postthink = walker_postthink;
+
+}
+
+
+void spawnfunc_turret_walker()
+{
+    precache_model ("models/turrets/walker_head_minigun.md3");
+    precache_model ("models/turrets/walker_body.md3");
+    precache_model ("models/turrets/walker_props.md3");
+    precache_model ("models/turrets/walker_spawn.md3");
+    precache_model ( "models/turrets/rocket.md3");
+
+    self.think = turret_walker_dinit;
+    self.nextthink = time + 0.5;
+}

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_crylink.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_crylink.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_crylink.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -69,7 +69,7 @@
 	local entity proj;
 	local vector s;
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_crylink_primary_ammo");
 
 	W_SetupShot (self, '25 8 -8', FALSE, 2, "weapons/crylink_fire.wav");
@@ -134,7 +134,7 @@
 	local float counter, shots;
 	local entity proj;
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_crylink_secondary_ammo");
 
 	W_SetupShot (self, '25 8 -8', FALSE, 2, "weapons/crylink_fire.wav");
@@ -184,7 +184,7 @@
 // experimental lightning gun
 void W_Crylink_Attack3 (void)
 {
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_crylink_primary_ammo");
 	W_SetupShot (self, '25 8 -8', TRUE, 0, "weapons/crylink_fire.wav");
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_electro.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_electro.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_electro.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -108,7 +108,7 @@
 	proj.projectiledeathtype = WEP_ELECTRO;
 	setorigin(proj, w_shotorg);
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_electro_primary_ammo");
 	proj.effects = EF_BRIGHTFIELD | EF_LOWPRECISION;
 	proj.movetype = MOVETYPE_FLY;
@@ -144,7 +144,7 @@
 	proj.projectiledeathtype = WEP_ELECTRO | HITTYPE_SECONDARY;
 	setorigin(proj, w_shotorg);
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_electro_secondary_ammo");
 	proj.effects = EF_LOWPRECISION;
 	//proj.glow_size = 50;

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_grenadelauncher.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_grenadelauncher.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_grenadelauncher.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -91,7 +91,7 @@
 {
 	local entity gren;
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_grenadelauncher_primary_ammo");
 	W_SetupShot (self, '25 6 -8', FALSE, 4, "weapons/grenade_fire.wav");
 	//W_SetupShot (self, '25 8 -8', FALSE, 4, "weapons/grenade_fire.wav"); // TODO: move model to the right a little
@@ -128,7 +128,7 @@
 {
 	local entity gren;
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_grenadelauncher_secondary_ammo");
 	W_SetupShot (self, '25 6 -8', FALSE, 4, "weapons/grenade_fire.wav");
 	//W_SetupShot (self, '25 8 -8', FALSE, 4, "weapons/grenade_fire.wav"); // TODO: move model to the right a little

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_hagar.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_hagar.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_hagar.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -81,7 +81,7 @@
 {
 	local entity missile;
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_hagar_primary_ammo");
 	W_SetupShot (self, '25 5 -8', FALSE, 2, "weapons/hagar_fire.wav");
 	//W_SetupShot (self, '25 8 -8', FALSE, 2, "weapons/hagar_fire.wav"); // TODO: move model a little to the right
@@ -122,7 +122,7 @@
 {
 	local entity missile;
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_hagar_secondary_ammo");
 	W_SetupShot (self, '25 5 -8', FALSE, 2, "weapons/hagar_fire.wav");
 	//W_SetupShot (self, '25 8 -8', FALSE, 2, "weapons/hagar_fire.wav"); // TODO: move model a little to the right

Copied: branches/nexuiz-2.0/data/qcsrc/server/w_hlac.qc (from rev 4862, trunk/data/qcsrc/server/w_hlac.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_hlac.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_hlac.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,257 @@
+.float HLAC_bulletcounter;
+void W_HLAC_Touch (void)
+{
+	vector	dir;
+	vector org2;
+	vector normal;
+
+	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+	{
+		remove(self);
+		return;
+	}
+
+	if (other == self.owner)
+		return;
+
+	normal = trace_plane_normal;
+	dir = normalize (self.owner.origin - self.origin);
+	org2 = findbetterlocation (self.origin, 8);
+
+	pointparticles(particleeffectnum("laser_impact"), org2, normal * 1000, 1);
+
+	self.event_damage = SUB_Null;
+
+    RadiusDamage (self, self.owner, cvar("g_balance_hlac_primary_damage"), cvar("g_balance_hlac_primary_edgedamage"), cvar("g_balance_hlac_primary_radius"), world, cvar("g_balance_hlac_primary_force"), self.projectiledeathtype, other);
+	sound (self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+
+	remove (self);
+}
+
+void W_HLAC_Touch2 (void)
+{
+	vector	dir;
+	vector org2;
+	vector normal;
+
+	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+	{
+		remove(self);
+		return;
+	}
+
+	if (other == self.owner)
+		return;
+
+	normal = trace_plane_normal;
+	dir = normalize (self.owner.origin - self.origin);
+	org2 = findbetterlocation (self.origin, 8);
+
+	pointparticles(particleeffectnum("laser_impact"), org2, normal * 1000, 1);
+
+	//self.event_damage = SUB_Null;
+
+    RadiusDamage (self, self.owner, cvar("g_balance_hlac_secondary_damage"), cvar("g_balance_hlac_secondary_edgedamage"), cvar("g_balance_hlac_secondary_radius"), world, cvar("g_balance_hlac_secondary_force"), self.projectiledeathtype, other);
+	sound (self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+
+	remove (self);
+}
+
+void W_HLAC_Attack (void)
+{
+	local entity missile;
+    float spread;
+
+    if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+    {
+        self.ammo_cells = self.ammo_cells - cvar("g_balance_hlac_primary_ammo");
+    }
+
+    spread = cvar("g_balance_hlac_primary_spread_min") + (cvar("g_balance_hlac_primary_spread_add") * self.HLAC_bulletcounter);
+    spread = min(spread,cvar("g_balance_hlac_primary_spread_max"));
+    if(self.crouch)
+        spread = spread * cvar("g_balance_hlac_primary_spread_crouchmod");
+
+	W_SetupShot (self, '25 8 -8', FALSE, 3, "weapons/lasergun_fire.wav");
+	pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+	if (!g_norecoil)
+	{
+		self.punchangle_x = random () - 0.5;
+		self.punchangle_y = random () - 0.5;
+	}
+
+	missile = spawn ();
+	missile.owner = self;
+	missile.classname = "hlacbolt";
+	// missile.dmg = issecondary;
+	missile.bot_dodge = TRUE;
+
+    missile.bot_dodgerating = cvar("g_balance_hlac_primary_damage");
+
+	missile.movetype = MOVETYPE_FLY;
+	missile.solid = SOLID_BBOX;
+
+	setmodel (missile, "models/laser.mdl"); // precision set below
+	setsize (missile, '0 0 0', '0 0 0');
+	setorigin (missile, w_shotorg);
+
+    missile.velocity = (w_shotdir + randomvec() * spread) * cvar("g_balance_hlac_primary_speed");
+
+	W_SetupProjectileVelocity(missile);
+	missile.angles = vectoangles (missile.velocity);
+
+	missile.touch = W_HLAC_Touch;
+	missile.think = SUB_Remove;
+
+    missile.nextthink = time + cvar("g_balance_hlac_primary_lifetime");
+
+	missile.effects = EF_LOWPRECISION;
+	missile.flags = FL_PROJECTILE;
+	missile.projectiledeathtype = WEP_HLAC;
+}
+
+void W_HLAC_Attack2f (void)
+{
+	local entity missile;
+    float spread;
+
+    spread = cvar("g_balance_hlac_secondary_spread");
+
+
+    if(self.crouch)
+        spread = spread * cvar("g_balance_hlac_secondary_spread_crouchmod");
+
+	W_SetupShot (self, '25 8 -8', FALSE, 3, "weapons/lasergun_fire.wav");
+	pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+
+	missile = spawn ();
+	missile.owner = self;
+	missile.classname = "hlacbolt";
+	// missile.dmg = issecondary;
+	missile.bot_dodge = TRUE;
+
+    missile.bot_dodgerating = cvar("g_balance_hlac_secondary_damage");
+
+	missile.movetype = MOVETYPE_FLY;
+	missile.solid = SOLID_BBOX;
+
+	setmodel (missile, "models/laser.mdl"); // precision set below
+	setsize (missile, '0 0 0', '0 0 0');
+	setorigin (missile, w_shotorg);
+
+    missile.velocity = (w_shotdir + randomvec() * spread) * cvar("g_balance_hlac_secondary_speed");
+
+	W_SetupProjectileVelocity(missile);
+	missile.angles = vectoangles (missile.velocity);
+
+	missile.touch = W_HLAC_Touch2;
+	missile.think = SUB_Remove;
+
+    missile.nextthink = time + cvar("g_balance_hlac_secondary_lifetime");
+
+	missile.effects = EF_LOWPRECISION;
+	missile.flags = FL_PROJECTILE;
+	missile.projectiledeathtype = WEP_HLAC | HITTYPE_SECONDARY;
+}
+
+void W_HLAC_Attack2 (void)
+{
+    float i;
+
+    if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+    {
+        self.ammo_cells = self.ammo_cells - cvar("g_balance_hlac_secondary_ammo");
+    }
+
+    for(i=0;i<6;++i)
+        W_HLAC_Attack2f();
+
+	if (!g_norecoil)
+	{
+		self.punchangle_x = random () - 0.5;
+		self.punchangle_y = random () - 0.5;
+	}
+
+	// ATTACK_FINISHED(self) = time + cvar("g_balance_hlac_secondary_refire");
+}
+
+
+// weapon frames
+void HLAC_fire1_02()
+{
+	if(self.weapon != self.switchweapon) // abort immediately if switching
+	{
+		w_ready();
+		return;
+	}
+
+	if (self.BUTTON_ATCK)
+	{
+		if (!weapon_action(self.weapon, WR_CHECKAMMO1))
+		{
+			W_SwitchWeapon_Force(self, w_getbestweapon(self));
+			w_ready();
+			return;
+		}
+
+		ATTACK_FINISHED(self) = time + cvar("g_balance_hlac_primary_refire");
+		W_HLAC_Attack();
+		self.HLAC_bulletcounter = self.HLAC_bulletcounter + 1;
+        weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hlac_primary_refire"), HLAC_fire1_02);
+	}
+	else
+	{
+		weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hlac_primary_animtime"), w_ready);
+	}
+};
+
+void spawnfunc_weapon_hlac (void)
+{
+	weapon_defaultspawnfunc(WEP_HLAC);
+}
+
+float w_hlac(float req)
+{
+	if (req == WR_AIM)
+        self.BUTTON_ATCK = bot_aim(cvar("g_balance_hlac_primary_speed"), 0, cvar("g_balance_hlac_primary_lifetime"), FALSE);
+	else if (req == WR_THINK)
+	{
+		if (self.BUTTON_ATCK)
+		if (weapon_prepareattack(0, cvar("g_balance_hlac_primary_refire")))
+		{
+			self.HLAC_bulletcounter = 0;
+			W_HLAC_Attack();
+			weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hlac_primary_refire"), HLAC_fire1_02);
+		}
+
+		if (self.BUTTON_ATCK2)
+		if (weapon_prepareattack(1, cvar("g_balance_hlac_secondary_refire")))
+		{
+			W_HLAC_Attack2();
+			weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_hlac_secondary_animtime"), w_ready);
+		}
+
+	}
+	else if (req == WR_PRECACHE)
+	{
+	    precache_sound ("weapons/laserimpact.wav");
+        precache_sound ("weapons/lasergun_fire.wav");
+
+        precache_model ("models/weapons/g_hlac.md3");
+		precache_model ("models/weapons/v_hlac.md3");
+		precache_model ("models/weapons/w_hlac.zym");
+		precache_sound ("weapons/lasergun_fire.wav");
+
+	}
+	else if (req == WR_SETUP)
+		weapon_setup(WEP_HLAC);
+	else if (req == WR_CHECKAMMO1)
+		return self.ammo_cells >= cvar("g_balance_hlac_primary_ammo");
+	else if (req == WR_CHECKAMMO2)
+		return self.ammo_cells >= cvar("g_balance_hlac_secondary_ammo");
+	else if (req == WR_SUICIDEMESSAGE)
+		w_deathtypestring = "should have used a smaller gun";
+	else if (req == WR_KILLMESSAGE)
+		w_deathtypestring = "was cut down by";
+	return TRUE;
+};

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_hook.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_hook.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_hook.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -26,7 +26,7 @@
 {
 	local entity gren;
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_hook_secondary_ammo");
 	W_SetupShot (self, '25 6 -8', FALSE, 4, "weapons/hookbomb_fire.wav");
 
@@ -81,7 +81,7 @@
 			if not(self.hook_state & HOOK_WAITING_FOR_RELEASE)
 			if (weapon_prepareattack(0, cvar("g_balance_hook_primary_refire")))
 			{
-				if not(self.items & IT_UNLIMITED_AMMO)
+				if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 					self.ammo_cells = self.ammo_cells - cvar("g_balance_hook_primary_ammo");
 				self.hook_state |= HOOK_FIRING;
 				weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_hook_primary_animtime"), w_ready);

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_minstanex.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_minstanex.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_minstanex.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -45,7 +45,7 @@
 	// play a sound
 	soundat (self, trace_endpos, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 	{
 		if (g_minstagib)
 			self.ammo_cells = self.ammo_cells - 1;

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_nex.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_nex.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_nex.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -21,7 +21,7 @@
 	// play a sound
 	soundat (self, trace_endpos, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 	{
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_nex_ammo");
 	}

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_porto.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_porto.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_porto.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -76,9 +76,9 @@
 		return; // handled by the portal
 
 	norm = trace_plane_normal;
-	if(trace_ent.movetype == MOVETYPE_WALK)
+	if(trace_ent.iscreature)
 	{
-		traceline(trace_ent.origin, trace_ent.origin + '0 0 2' * PL_MIN_z, MOVE_NORMAL, self);
+		traceline(trace_ent.origin, trace_ent.origin + '0 0 2' * PL_MIN_z, MOVE_WORLDONLY, self);
 		if(trace_fraction >= 1)
 			return;
 		if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK || trace_dphitcontents & DPCONTENTS_PLAYERCLIP)
@@ -152,7 +152,7 @@
 {
 	local entity gren;
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_SUPERWEAPONS)
 		self.weapons = self.weapons - (self.weapons & WEPBIT_PORTO);
 	W_SetupShot (self, '0 0 0', FALSE, 4, "porto/fire.ogg");
 

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,5 +1,4 @@
-
-.float rl_sound;
+.float rl_release;
 .float rl_detonate_later;
 
 void W_Rocket_Explode (void)
@@ -135,13 +134,6 @@
 	{
 		if(g_laserguided_missile)
 		{
-			if(!self.owner.BUTTON_ATCK)
-				self.ltime = -1; // indicate that the player has let go of the button
-
-
-			if(self.owner.deadflag == DEAD_NO)
-			if (self.owner.BUTTON_ATCK && self.ltime < 0) // if the player let go of the button and then pushed it again
-				self.rl_detonate_later = TRUE;
 			if(self.rl_detonate_later)
 				W_Rocket_RemoteExplode();
 
@@ -180,8 +172,6 @@
 		}
 		else
 		{
-			if (self.owner.BUTTON_ATCK2)
-				self.rl_detonate_later = TRUE;
 			if(self.rl_detonate_later)
 				W_Rocket_RemoteExplode();
 		}
@@ -217,7 +207,7 @@
 	local entity missile;
 	local entity flash, flash2;
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_rocketlauncher_ammo");
 
 	W_SetupShot (self, '25 3 -4', FALSE, 5, "weapons/rocket_fire.wav");
@@ -231,7 +221,7 @@
 		missile.spawnshieldtime = time + cvar("g_balance_rocketlauncher_detonatedelay");
 	else
 		missile.spawnshieldtime = -1;
-	missile.classname = "missile";
+	missile.classname = "rocket";
 	missile.bot_dodge = TRUE;
 	missile.bot_dodgerating = cvar("g_balance_rocketlauncher_primary_damage") * 2; // * 2 because it can be detonated inflight which makes it even more dangerous
 
@@ -292,6 +282,8 @@
 
 float w_rlauncher(float req)
 {
+	entity rock;
+	float rockfound;
 	if (req == WR_AIM)
 	{
 		// aim and decide to fire if appropriate
@@ -310,12 +302,12 @@
 			teamdamage = 0;
 			enemydamage = 0;
 			targetlist = findchainfloat(bot_attack, TRUE);
-			missile = find(world, classname, "missile");
+			missile = find(world, classname, "rocket");
 			while (missile)
 			{
 				if (missile.owner != self)
 				{
-					missile = find(missile, classname, "missile");
+					missile = find(missile, classname, "rocket");
 					continue;
 				}
 				targ = targetlist;
@@ -332,7 +324,7 @@
 						enemydamage = enemydamage + d;
 					targ = targ.chain;
 				}
-				missile = find(missile, classname, "missile");
+				missile = find(missile, classname, "rocket");
 			}
 			local float desirabledamage;
 			desirabledamage = enemydamage;
@@ -341,12 +333,12 @@
 			if (self.team && teamplay == 2)
 				desirabledamage = desirabledamage - teamdamage;
 
-			missile = find(world, classname, "missile");
+			missile = find(world, classname, "rocket");
 			while (missile)
 			{
 				if (missile.owner != self)
 				{
-					missile = find(missile, classname, "missile");
+					missile = find(missile, classname, "rocket");
 					continue;
 				}
 				makevectors(missile.v_angle);
@@ -374,7 +366,7 @@
 				//	dprint(ftos(random()/distance*300),">");dprint(ftos(frametime*bound(0,(10-skill)*0.2,1)),"\n");
 				}
 
-				missile = find(missile, classname, "missile");
+				missile = find(missile, classname, "rocket");
 			}
 			// if we would be doing at X percent of the core damage, detonate it
 			// but don't fire a new shot at the same time!
@@ -389,28 +381,62 @@
 	}
 	else if (req == WR_THINK)
 	{
-		if (self.BUTTON_ATCK)
-		if (weapon_prepareattack(0, cvar("g_balance_rocketlauncher_refire")))
+		if(g_laserguided_missile)
 		{
-			W_Rocket_Attack();
-			weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_rocketlauncher_animtime"), w_ready);
+			if (self.BUTTON_ATCK && self.rl_release)
+			{
+				rockfound = 0;
+				for(rock = world; (rock = find(rock, classname, "rocket")); ) if(rock.owner == self)
+				{
+					rock.rl_detonate_later = TRUE;
+					rockfound = 1;
+				}
+				if(rockfound)
+					sound (self, CHAN_WEAPON2, "weapons/rocket_det.wav", 0.5 * VOL_BASE, ATTN_NORM);
+				else
+				{
+					if (weapon_prepareattack(0, cvar("g_balance_rocketlauncher_refire")))
+					{
+						W_Rocket_Attack();
+						weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_rocketlauncher_animtime"), w_ready);
+					}
+				}
+				self.rl_release = 0;
+			}
+			if (!self.BUTTON_ATCK)
+				self.rl_release = 1;
+			if (self.BUTTON_ATCK2)
+			if(self.exteriorweaponentity.attack_finished_single < time)
+			{
+				self.exteriorweaponentity.attack_finished_single = time + 0.4;
+				self.laser_on = !self.laser_on;
+				// UGLY WORKAROUND: play this on CHAN_WEAPON2 so it can't cut off fire sounds
+				sound (self, CHAN_WEAPON2, "weapons/tink1.wav", VOL_BASE, ATTN_NORM);
+			}
 		}
-		if (self.BUTTON_ATCK2)
-		if(time > self.rl_sound)
+		else
 		{
-			self.rl_sound = time + 1;
-			// UGLY WORKAROUND: play this on CHAN_WEAPON2 so it can't cut off fire sounds
-			sound (self, CHAN_WEAPON2, "weapons/rocket_det.wav", 0.5 * VOL_BASE, ATTN_NORM);
+			if (self.BUTTON_ATCK)
+			if (weapon_prepareattack(0, cvar("g_balance_rocketlauncher_refire")))
+			{
+				W_Rocket_Attack();
+				weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_rocketlauncher_animtime"), w_ready);
+			}
+			if (self.BUTTON_ATCK2 && self.rl_release)
+			{
+				rockfound = 0;
+				for(rock = world; (rock = find(rock, classname, "rocket")); ) if(rock.owner == self)
+				{
+					rock.rl_detonate_later = TRUE;
+					rockfound = 1;
+				}
+				if(rockfound)
+					sound (self, CHAN_WEAPON2, "weapons/rocket_det.wav", 0.5 * VOL_BASE, ATTN_NORM);
+				self.rl_release = 0;
+			}
+			if (!self.BUTTON_ATCK2)
+				self.rl_release = 1;
 		}
-		if (self.BUTTON_ATCK2)
-		if(g_laserguided_missile)
-		if(self.exteriorweaponentity.attack_finished_single < time)
-		{
-			self.exteriorweaponentity.attack_finished_single = time + 0.4;
-			self.laser_on = !self.laser_on;
-			// UGLY WORKAROUND: play this on CHAN_WEAPON2 so it can't cut off fire sounds
-			sound (self, CHAN_WEAPON2, "weapons/tink1.wav", VOL_BASE, ATTN_NORM);
-		}
 	}
 	else if (req == WR_PRECACHE)
 	{
@@ -427,7 +453,10 @@
 			precache_model ("models/laser_dot.mdl"); // rocket launcher
 	}
 	else if (req == WR_SETUP)
+	{
 		weapon_setup(WEP_ROCKET_LAUNCHER);
+		self.rl_release = 1;
+	}
 	else if (req == WR_CHECKAMMO1)
 	{
 		// don't switch while guiding a missile

Copied: branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc (from rev 4862, trunk/data/qcsrc/server/w_seeker.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc	                        (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_seeker.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,516 @@
+//.float speed; = switchweapon
+//.float proxytime; = autoswitch
+//.float tl; = wait
+
+void Seeker_Missile_Explode ()
+{
+    vector	org2;
+    float b;
+    org2 = findbetterlocation (self.origin, 12);
+    te_explosion (org2);
+
+    b = crandom();
+    if (b<-0.7)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp1.wav", 1, ATTN_NORM);
+    else if (b<0.4)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp2.wav", 1, ATTN_NORM);
+    else if (b<1)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp3.wav", 1, ATTN_NORM);
+
+    self.event_damage = SUB_Null;
+    RadiusDamage (self, self.owner, cvar("g_balance_seeker_missile_damage"), cvar("g_balance_seeker_missile_edgedamage"), cvar("g_balance_seeker_missile_radius"), world, cvar("g_balance_seeker_missile_force"), self.projectiledeathtype, other);
+
+    remove (self);
+}
+
+void Seeker_Missile_Touch()
+{
+    if (other == self.owner)
+        return;
+
+    Seeker_Missile_Explode();
+}
+
+void Seeker_Missile_Think()
+{
+    entity e;
+    vector desireddir, olddir, newdir;
+    float turnrate;
+    float dist;
+
+    if (time > self.cnt)
+        Seeker_Missile_Explode();
+
+    if (!self.switchweapon)
+        self.switchweapon = cvar("g_balance_seeker_missile_speed");
+
+    if ((self.switchweapon < cvar("g_balance_seeker_missile_speed_max")) && cvar("g_balance_seeker_missile_speed_accel"))
+        self.switchweapon = self.switchweapon * cvar("g_balance_seeker_missile_accel");
+
+    if (self.switchweapon > cvar("g_balance_seeker_missile_speed_max"))
+        self.switchweapon = self.switchweapon * cvar("g_balance_seeker_missile_decel");
+
+    if (self.enemy != world)
+    {
+        e               = self.enemy;
+        turnrate        = cvar("g_balance_seeker_missile_turnrate");		    // how fast to turn
+        desireddir      = normalize(e.origin - self.origin);
+        olddir          = normalize(self.velocity);				            // get my current direction
+        dist            = vlen(e.origin - self.origin);
+
+        // Do evasive maneuvers for world objects? ( this should be a cpu hog. :P )
+        if (cvar("g_balance_seeker_missile_smart") && (dist > cvar("g_balance_seeker_missile_smart_mindist")))
+        {
+            // Is it a better idea (shorter distance) to trace to the target itself?
+            if ( vlen(self.origin + olddir * self.wait) < dist)
+                traceline(self.origin, self.origin + olddir * self.wait, FALSE, self);
+            else
+                traceline(self.origin, self.enemy.origin, FALSE, self);
+
+            // Setup adaptive tracelength
+            self.wait = vlen(self.origin - trace_endpos);
+            if (self.wait < cvar("g_balance_seeker_missile_smart_trace_min")) self.wait = cvar("g_balance_seeker_missile_smart_trace_min");
+            if (self.wait > cvar("g_balance_seeker_missile_smart_trace_max")) self.wait = cvar("g_balance_seeker_missile_smart_trace_max");
+
+            // Calc how important it is that we turn and add this to the desierd (enemy) dir.
+            desireddir  = normalize(((trace_plane_normal * (1 - trace_fraction)) + (desireddir * trace_fraction)) * 0.5);
+        }
+
+        //newdir = normalize((olddir + desireddir * turnrate) * 0.5);// take the average of the 2 directions; not the best method but simple & easy
+        newdir = normalize(olddir + desireddir * turnrate);// take the average of the 2 directions; not the best method but simple & easy
+
+        self.velocity = newdir * self.switchweapon;			                    // make me fly in the new direction at my flight speed
+    }
+
+    // Proxy
+    if (cvar("g_balance_seeker_missile_proxy"))
+    {
+        if ( dist <= cvar("g_balance_seeker_missile_proxy_maxrange"))
+        {
+            if (self.autoswitch == 0)
+            {
+                self.autoswitch = time + cvar("g_balance_seeker_missile_proxy_delay");
+            }
+            else
+            {
+                if (self.autoswitch <= time)
+                {
+                    Seeker_Missile_Explode();
+                    self.autoswitch = 0;
+                }
+            }
+        }
+        else
+        {
+            if (self.autoswitch != 0)
+                self.autoswitch = 0;
+        }
+    }
+    ///////////////
+
+    if (self.enemy.deadflag != DEAD_NO)
+    {
+        self.enemy = world;
+        self.cnt = time + 1 + (random() * 4);
+        self.nextthink = self.cnt;
+        return;
+    }
+
+    self.angles = vectoangles(self.velocity);			// turn model in the new flight direction
+    self.nextthink = time + 0.05;
+
+}
+
+
+
+void Seeker_Missile_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+
+    float d;
+    d = damage;
+
+    if (self.owner == attacker)
+        d = d * 0.25;
+
+    self.health = self.health - d;
+
+    if (self.health <= 0)
+        Seeker_Missile_Explode();
+}
+
+#define EF_ROCKET				16777216
+void Seeker_Missile_Animate()
+{
+    self.frame = self.frame +1;
+    self.nextthink = time + 0.05;
+
+    if(self.frame == 5)
+    {   self.think           = Seeker_Missile_Think;
+        self.nextthink       = time + cvar("g_balance_seeker_missile_activate_delay");
+        self.effects         = EF_LOWPRECISION | EF_NOSHADOW | EF_ROCKET;
+
+        if (cvar("g_balance_seeker_guided_proxy"))
+            self.movetype    = MOVETYPE_BOUNCEMISSILE;
+        else
+            self.movetype    = MOVETYPE_FLYMISSILE;
+
+    }
+}
+
+void Seeker_Fire_Missile(vector f_org)
+{
+    local entity missile;
+
+    if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+        self.ammo_rockets = self.ammo_rockets - cvar("g_balance_seeker_missile_ammo");
+
+    makevectors(self.v_angle);
+    W_SetupShot (self, f_org, FALSE, 2, "weapons/hagar_fire.wav");
+    pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+
+    //self.detornator         = FALSE;
+
+    missile                 = spawn();
+    missile.owner           = self;
+    missile.classname       = "seeker_missile";
+    missile.bot_dodge       = TRUE;
+    missile.bot_dodgerating = cvar("g_balance_seeker_missile_damage");
+
+    missile.think           = Seeker_Missile_Animate;
+
+    //if (!cvar("g_balance_seeker_missile_proxy"))
+    missile.touch           = Seeker_Missile_Touch;
+
+    missile.event_damage    = Seeker_Missile_Damage;
+    missile.nextthink       = time + 0.2;// + cvar("g_balance_seeker_missile_activate_delay");
+    missile.cnt             = time + cvar("g_balance_seeker_missile_lifetime");
+    missile.enemy           = self.enemy;
+    missile.switchweapon           = cvar("g_balance_seeker_missile_speed");
+    missile.effects         = EF_LOWPRECISION | EF_NOSHADOW;// | EF_ROCKET;
+    missile.solid           = SOLID_BBOX;
+    missile.scale           = 2;
+    missile.takedamage          = DAMAGE_YES;
+    missile.damageforcescale    = 4;
+    missile.health              = 5;
+	missile.projectiledeathtype = WEP_SEEKER;
+
+    setorigin (missile, w_shotorg);
+    setmodel  (missile, "models/tagrocket.md3");
+    setsize (missile, '0 0 0', '0 0 0');
+
+
+    missile.movetype    = MOVETYPE_FLYMISSILE;// MOVETYPE_TOSS;
+
+    missile.flags       = FL_PROJECTILE;
+
+    missile.velocity    = (w_shotdir + '0 0 0.45') * missile.switchweapon;
+    W_SetupProjectileVelocity(missile);
+
+    missile.switchweapon = vlen(missile.velocity);
+    missile.angles = vectoangles (missile.velocity);
+
+}
+
+void Seeker_Vollycontroler_Think()
+{
+    entity oldself,oldenemy;
+    self.cnt = self.cnt - 1;
+    if ((self.owner.ammo_rockets < cvar("g_balance_seeker_missile_ammo")) || (self.cnt <= -1))
+    {
+        remove(self);
+        return;
+
+    }
+
+    self.nextthink = time + cvar("g_balance_seeker_missile_delay");
+
+    oldself = self;
+    self = self.owner;
+
+    oldenemy = self.enemy;
+    self.enemy = oldself.enemy;
+
+    switch(oldself.cnt)
+    {
+        case 0:
+            Seeker_Fire_Missile('37.5 17 -22');
+            break;
+        case 1:
+            Seeker_Fire_Missile('37.5 9.5 -22');
+            break;
+        case 2:
+            Seeker_Fire_Missile('40 17 -29');
+            break;
+        case 3:
+            Seeker_Fire_Missile('40 09.5 -29');
+            break;
+    }
+
+
+
+    self.enemy = oldenemy;
+    self = oldself;
+}
+
+void Seeker_Tag_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+    self.health = self.health - damage;
+    if (self.health <= 0)
+        self.think ();
+}
+
+void Seeker_Tag_Explode ()
+{
+    vector	org2;
+    float b;
+
+    //if(other==self.owner)
+    //    return;
+
+    org2 = findbetterlocation (self.origin, 12);
+    te_explosion (org2);
+
+    b = crandom();
+    if (b<-0.7)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp1.ogg", 1, ATTN_NORM);
+    else if (b<0.4)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp2.ogg", 1, ATTN_NORM);
+    else if (b<1)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp3.ogg", 1, ATTN_NORM);
+
+    remove (self);
+}
+
+void Seeker_Tag_Think()
+{
+    remove(self);
+    return;
+}
+
+void Seeker_Tag_Touch()
+{
+    vector dir;
+    vector org2;
+
+	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+	{
+		remove(self);
+		return;
+	}
+
+    if (other == self.owner)
+        return;
+
+    dir     = normalize (self.owner.origin - self.origin);
+    org2    = findbetterlocation (self.origin, 8);
+
+    te_knightspike(org2);
+
+    self.event_damage = SUB_Null;
+    sound (self, CHAN_PROJECTILE, "weapons/laserimpact.wav", 1, ATTN_NORM);
+
+    if (other.classname == "player")
+    {
+
+        entity e;
+        e           = spawn();
+        e.cnt       = cvar("g_balance_seeker_missile_count");
+        e.owner     = self.owner;
+        e.enemy     = other;
+        e.think     = Seeker_Vollycontroler_Think;
+        e.nextthink = time;
+
+        //sprint(self.owner, "^1Target lock ^3[^7 ",other.netname, " ^3]^1 acquired - autofire activated.\n");
+        //sprint(other,"^1You are targeted!\n");
+
+        // stuffcmd(other,"play2 weapons/zany-alarm4.ogg\n");
+        // stuffcmd(self.owner, "play2 weapons/zany-lock4.ogg\n");
+    }
+
+    remove(self);
+    return;
+}
+
+
+
+void Seeker_Fire_Tag()
+{
+    local entity missile;
+    if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+        self.ammo_rockets = self.ammo_rockets - cvar("g_balance_seeker_tag_ammo");
+
+    W_SetupShot (self, '56 13 -15', FALSE, 2, "weapons/hagar_fire.wav");
+
+    missile                 = spawn();
+    missile.owner           = self;
+    missile.classname       = "seeker_tag";
+    missile.bot_dodge       = TRUE;
+    missile.bot_dodgerating = 50;
+    missile.touch           = Seeker_Tag_Touch;
+    missile.think           = Seeker_Tag_Think;
+    missile.nextthink       = time + 15;
+    missile.movetype        = MOVETYPE_FLY;
+    missile.solid           = SOLID_BBOX;
+    missile.owner           = self;
+
+    missile.takedamage       = DAMAGE_YES;
+    missile.event_damage    = Seeker_Tag_Explode;
+    missile.health          = 5;
+
+    setmodel (missile, "models/laser.mdl");
+    setorigin (missile, w_shotorg);
+
+    missile.effects     = EF_BRIGHTFIELD | EF_FULLBRIGHT | EF_NOSHADOW | EF_LOWPRECISION;
+    missile.flags       = FL_PROJECTILE;
+
+    missile.velocity    = w_shotdir  * cvar("g_balance_seeker_tag_speed");
+    missile.movetype    = MOVETYPE_BOUNCEMISSILE;
+    W_SetupProjectileVelocity(missile);
+    missile.angles = vectoangles (missile.velocity);
+}
+
+
+void Seeker_Flac_Explode ()
+{
+    vector	org2;
+    float b;
+    org2 = findbetterlocation (self.origin, 12);
+    te_explosion (org2);
+
+    b = crandom();
+    if (b<-0.7)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp1.ogg", 1, ATTN_NORM);
+    else if (b<0.4)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp2.ogg", 1, ATTN_NORM);
+    else if (b<1)
+        sound (self, CHAN_PROJECTILE, "weapons/hagexp3.ogg", 1, ATTN_NORM);
+
+    self.event_damage = SUB_Null;
+
+    RadiusDamage (self, self.owner, cvar("g_balance_seeker_flac_damage"), cvar("g_balance_seeker_flac_edgedamage"), cvar("g_balance_seeker_flac_radius"), world, cvar("g_balance_seeker_flac_force"), self.projectiledeathtype, other);
+
+    remove (self);
+}
+
+void Seeker_Flac_Touch()
+{
+    if (other == self.owner)
+        return;
+
+    Seeker_Flac_Explode();
+}
+
+void Seeker_Fire_Flac()
+{
+	local entity missile;
+    vector f_org;
+
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_seeker_flac_ammo");
+
+    switch(floor(random() * 3))
+    {
+        case 0:
+            f_org = '37.5 17 -22';
+            break;
+        case 1:
+            f_org = '37.5 9.5 -22';
+            break;
+        case 2:
+            f_org = '40 17 -29';
+            break;
+        case 3:
+            f_org = '40 9.5 -29';
+            break;
+    }
+    W_SetupShot (self, f_org, FALSE, 2, "weapons/hagar_fire.wav");
+
+	pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+
+	missile = spawn ();
+	missile.owner = missile.realowner = self;
+	missile.classname = "missile";
+	missile.bot_dodge = TRUE;
+	missile.bot_dodgerating = cvar("g_balance_seeker_flac_damage");
+	missile.touch = Seeker_Flac_Explode;
+	missile.use = Seeker_Flac_Explode;
+	missile.think = Seeker_Flac_Explode;
+	missile.nextthink = time + cvar("g_balance_seeker_flac_lifetime") + cvar("g_balance_seeker_flac_lifetime_rand");
+	missile.solid = SOLID_BBOX;
+	missile.scale = 0.4; // BUG: the model is too big
+	missile.projectiledeathtype = WEP_SEEKER;
+	setorigin (missile, w_shotorg);
+	setmodel (missile, "models/hagarmissile.mdl"); // precision set below
+	setsize (missile, '0 0 0', '0 0 0');
+	missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY;
+
+	missile.effects = EF_LOWPRECISION;
+	missile.modelflags = MF_GRENADE;
+
+	missile.movetype = MOVETYPE_FLY;
+	w_shotdir = w_shotdir + '0 0 0.3';
+	missile.velocity    = (w_shotdir  + randomvec() * cvar("g_balance_seeker_flac_spread")) * cvar("g_balance_seeker_flac_speed");
+
+	W_SetupProjectileVelocity(missile);
+
+	missile.angles = vectoangles (missile.velocity);
+	missile.flags = FL_PROJECTILE;
+}
+
+void spawnfunc_weapon_seeker (void)
+{
+	weapon_defaultspawnfunc(WEP_SEEKER);
+}
+
+float w_seeker(float req)
+{
+    if (req == WR_AIM)
+        self.BUTTON_ATCK = bot_aim(cvar("g_balance_seeker_tag_speed"), 0, 20, FALSE);
+
+    else if (req == WR_THINK)
+    {
+        if (self.BUTTON_ATCK)
+            if (weapon_prepareattack(0, cvar("g_balance_seeker_tag_refire")))
+            {
+                Seeker_Fire_Tag();
+                weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_seeker_tag_animtime"), w_ready);
+            }
+
+        if (self.BUTTON_ATCK2)
+            if (weapon_prepareattack(1, cvar("g_balance_seeker_flac_refire")))
+            {
+                Seeker_Fire_Flac();
+                weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_seeker_flac_animtime"), w_ready);
+            }
+
+    }
+    else if (req == WR_PRECACHE)
+    {
+        precache_model ("models/tagrocket.md3");
+        precache_model ("models/weapons/g_seeker.md3");
+        precache_model ("models/weapons/v_seeker.md3");
+        precache_model ("models/weapons/w_seeker.zym");
+        precache_sound ("weapons/hagar_fire.wav");
+        precache_sound ("weapons/hagexp1.wav");
+        precache_sound ("weapons/hagexp2.wav");
+        precache_sound ("weapons/hagexp3.wav");
+        precache_sound ("weapons/laserimpact.wav");
+    }
+    else if (req == WR_SETUP)
+        weapon_setup(WEP_SEEKER);
+    else if (req == WR_CHECKAMMO1)
+        return self.ammo_rockets >= cvar("g_balance_seeker_tag_ammo");
+    else if (req == WR_CHECKAMMO2)
+        return self.ammo_rockets >= cvar("g_balance_seeker_secondary_ammo");
+    else if (req == WR_SUICIDEMESSAGE)
+        w_deathtypestring = "played with tiny rockets";
+    else if (req == WR_KILLMESSAGE)
+	{
+		if(w_deathtype & HITTYPE_SECONDARY)
+			w_deathtypestring = "ran into #'s flac";
+		else
+			w_deathtypestring = "was tagged by";
+	}
+    return TRUE;
+};
+

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_shotgun.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_shotgun.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_shotgun.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -16,7 +16,7 @@
 	W_SetupShot (self, '25 8 -8', TRUE, 5, "weapons/shotgun_fire.wav");
 	for (sc = 0;sc < bullets;sc = sc + 1)
 		fireBullet (w_shotorg, w_shotdir, spread, d, f, WEP_SHOTGUN, sc < 3);
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_shells = self.ammo_shells - cvar("g_balance_shotgun_primary_ammo");
 
 	pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, cvar("g_balance_shotgun_primary_ammo"));
@@ -59,7 +59,7 @@
 	W_SetupShot (self, '25 8 -8', TRUE, 5, "weapons/shotgun_fire.wav");
 	for (sc = 0;sc < bullets;sc = sc + 1)
 		fireBullet (w_shotorg, w_shotdir, spread, d, f, WEP_SHOTGUN | HITTYPE_SECONDARY, sc < 3);
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_shells = self.ammo_shells - cvar("g_balance_shotgun_secondary_ammo");
 
 	pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, cvar("g_balance_shotgun_secondary_ammo"));

Modified: branches/nexuiz-2.0/data/qcsrc/server/w_uzi.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_uzi.qc	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_uzi.qc	2008-10-24 09:45:12 UTC (rev 4863)
@@ -15,7 +15,7 @@
 {
 	local entity flash, flash2;
 
-	if not(self.items & IT_UNLIMITED_AMMO)
+	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 	{
 		if (self.uzi_bulletcounter == 1)
 			self.ammo_nails = self.ammo_nails - cvar("g_balance_uzi_first_ammo");

Modified: branches/nexuiz-2.0/data/scripts/entities.def
===================================================================
--- branches/nexuiz-2.0/data/scripts/entities.def	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/scripts/entities.def	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1065,7 +1065,7 @@
 You may want to target this by a race checkpoint, a teleporter, or a trigger_multiple with ALLENTS set (so it removes weapons thrown through the field to avoid getting a weapon through it).
 -------- KEYS --------
 targetname: used to trigger this
-netname: space separated list of items (either weapon short names (like in g_start_weapon_* cvars), or item short names "unlimited_ammo", "invincible" and "strength"
+netname: space separated list of items (either weapon short names (like in g_start_weapon_* cvars), or item short names "unlimited_ammo", "unlimited_weapon_ammo", "unlimited_superweapons", "invincible" and "strength"
 message: message to print
 ammo_shells: amount of shells
 ammo_nails: amount of bullets
@@ -1086,6 +1086,7 @@
 The entity field list is a single string of the form:
 'field' 'value' 'field' 'value' ... 'classname' 'item_bullets' ... 'field' 'value'
 The special "field" name $ calls a void(void) function, for example a spawn function.
+Special function names available are _setmodel and _setsize.
 Field values can use various variable replacements:
 $E
 $E.field
@@ -1112,6 +1113,7 @@
 targetname: used to trigger this
 message: entity field list
 target: when set, target_spawn edits entities, instead of creating new ones
+count: make sure no more than count entities have been created by this (refuse to spawn new ones if exceeded)
 -------- SPAWNFLAGS --------
 ONLOAD: create a first entity on map load
 */
@@ -1132,3 +1134,15 @@
 DISABLED: do not allow damaging this until it is first activated
 INDICATE: indicate amount of damage already taken by coloring
 */
+
+/*QUAKED trigger_relay_if (0 1 0) (-8 -8 -8) (8 8 8) MORETHAN
+Relays the trigger event if there are at most count entities of the given type.
+-------- KEYS --------
+target: The entity/entities to relay the trigger events to
+targetname: The name other entities can use to target this entity
+netname: The name of the field to check (can currently only be targetname, netname, target or classname)
+message: The value of the field to check
+count: The count of entities that must be found
+-------- SPAWNFLAGS --------
+MORETHAN: trigger if there are more than the given count, not at least
+*/

Modified: branches/nexuiz-2.0/data/scripts/turrets.def
===================================================================
--- branches/nexuiz-2.0/data/scripts/turrets.def	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/scripts/turrets.def	2008-10-24 09:45:12 UTC (rev 4863)
@@ -192,3 +192,36 @@
 /*QUAKED turret_targettrigger (.5 .5 .5) ?
 Used to feed turrets capable of it with remote target info. currently only turret_hk supports this.
 */
+
+
+/*QUAKED walker_checkpoint (1 0 1) (-16 -16 -16) (16 16 16)
+-----------KEYS------------
+target: .targetname of next wapoint in chain. 
+
+-----------SPAWNFLAGS-----------
+
+---------NOTES----------
+If a loop is of targets are formed, any walker entering this loop will patrol it indefinitly.
+If the checkpoint chain in not looped, teh walker will go "Roaming" when teh last point is reached. 
+*/
+
+/*QUAKED turret_walker (1 0 0) (-32 -32 0) (32 32 50)
+-----------KEYS------------
+turret_scale_damage: 2 = double damage, 0.5 = half
+turret_scale_range:  2 = double range, 0.5 = half
+turret_scale_refire: 2 = doubble refire (SLOWER!), 0.5 = half (FASTER!)
+turret_scale_ammo:   2 = doubble ammo carry & regen, 0.5 = half ammo carry & regen
+turret_scale_aim:    2 = aim twice as fast, 0,5 = aim at half speed
+turret_scale_health: 2 = double health, 0.5 = half
+
+target : Enter this walker_checkpoint chain
+
+team : 5=red, 14=blue
+-----------SPAWNFLAGS-----------
+---------NOTES----------
+
+A nasty mechanical ceature that will engage longrange target with missiles, midrange with its miniguna and meele things up close and personal.
+
+-------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
+model="models/turrets/radiant/walker.md3"
+*/

Modified: branches/nexuiz-2.0/data/scripts/turrets.shader
===================================================================
--- branches/nexuiz-2.0/data/scripts/turrets.shader	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/scripts/turrets.shader	2008-10-24 09:45:12 UTC (rev 4863)
@@ -39,3 +39,19 @@
 	}
 }
 
+models/turrets/r_fx1
+{
+	surfaceparm nomarks
+	surfaceparm trans
+	surfaceparm pointlight
+	surfaceparm nolightmap	
+	nopicmip
+	qer_editorimage models/turrets/r_fx1_1
+
+	{
+		animmap 10 models/turrets/r_fx1_3 models/turrets/r_fx1_4 models/turrets/r_fx1_5 models/turrets/r_fx1_4 models/turrets/r_fx1_3 models/turrets/r_fx1_2  models/turrets/r_fx1_1 models/turrets/r_fx1_2 
+	}
+
+}
+
+

Copied: branches/nexuiz-2.0/data/textures/hlac.tga (from rev 4862, trunk/data/textures/hlac.tga)
===================================================================
(Binary files differ)

Copied: branches/nexuiz-2.0/data/textures/seeker.tga (from rev 4862, trunk/data/textures/seeker.tga)
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/turrets.cfg
===================================================================
--- branches/nexuiz-2.0/data/turrets.cfg	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/turrets.cfg	2008-10-24 09:45:12 UTC (rev 4863)
@@ -2,19 +2,51 @@
 set g_turrets_reloadcvars 0
 set g_turrets_nofire 0
 
+// Target scanning and validation can be resource intensive
+// Dont let turrets look for new targets more frequently then this
+set g_turrets_targetscan_mindelay 0.5
+
+// Turrets with no target returns to their idle aim after this much time.
+set g_turrets_aimidle_delay 5
+
+// --- Units ---
+
+// Machinegun on a stick. 
+exec unit_machinegun.cfg 
+
+// Hunter killer rocket turret. "smart rockets"
 exec unit_hk.cfg
+
+// Fires a pair of accelerating, simple homing rockets.
+exec unit_hellion.cfg
+
+// Fire lots of dumbfire rockets
+exec unit_mlrs.cfg
+
+// Kills killable enemy missiles.
+exec unit_flac.cfg
+
+// Support unit. Recharges friendly energy based turrets in range
+exec unit_fusreac.cfg	
+
+// "Electro" turret.
 exec unit_plasma.cfg
+
+// The the all new "Electro" turret, same ting with two barrels.
 exec unit_plasma2.cfg
-exec unit_fusreac.cfg	
-exec unit_mlrs.cfg
-exec unit_hellion.cfg
-exec unit_flac.cfg
-exec unit_minigun.cfg
+
+// AAAaaaarg! Bzzaat! yber turret. chain lightning missile and player killing.
 exec unit_tesla.cfg
-exec unit_machinegun.cfg
+
+// Fires a constant beam that slows down and slowly damages its target.
 exec unit_phaser.cfg
 
-// not exec'd: gauss, walker
+// The bastred son of a turret and a quake monster. 
+// A walking minigun with longrage missiles and closerange meele attack.
+exec unit_walker.cfg
 
+// not exec'd: gauss
+
+
 set g_turrets_reloadcvars 1 // reload when this cfg has been exec'd
 alias g_turrets_reload "set g_turrets_reloadcvars 1"

Modified: branches/nexuiz-2.0/data/unit_hellion.cfg
===================================================================
--- branches/nexuiz-2.0/data/unit_hellion.cfg	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/unit_hellion.cfg	2008-10-24 09:45:12 UTC (rev 4863)
@@ -6,37 +6,37 @@
 set g_turrets_unit_hellion_std_shot_radius 100
 
 set g_turrets_unit_hellion_std_shot_speed 750
-set g_turrets_unit_hellion_std_shot_speed_max 2500
-set g_turrets_unit_hellion_std_shot_speed_gain 1.05
+set g_turrets_unit_hellion_std_shot_speed_max 5000
+set g_turrets_unit_hellion_std_shot_speed_gain 1.025
 
 set g_turrets_unit_hellion_std_shot_spread 0.08
 set g_turrets_unit_hellion_std_shot_force 250
 set g_turrets_unit_hellion_std_shot_volly 2
 set g_turrets_unit_hellion_std_shot_volly_refire 4
 
-set g_turrets_unit_hellion_std_target_range 5120
-set g_turrets_unit_hellion_std_target_range_min 256
-set g_turrets_unit_hellion_std_target_range_fire 4096
-set g_turrets_unit_hellion_std_target_range_optimal 3072
+set g_turrets_unit_hellion_std_target_range 6000
+set g_turrets_unit_hellion_std_target_range_min 150
+set g_turrets_unit_hellion_std_target_range_fire 5000
+set g_turrets_unit_hellion_std_target_range_optimal 4500
 
 set g_turrets_unit_hellion_std_target_select_rangebias 0.7
-set g_turrets_unit_hellion_std_target_select_samebias 0.15
-set g_turrets_unit_hellion_std_target_select_anglebias 0.15
+set g_turrets_unit_hellion_std_target_select_samebias 0.01
+set g_turrets_unit_hellion_std_target_select_anglebias 0.01
 set g_turrets_unit_hellion_std_target_select_playerbias 1
 set g_turrets_unit_hellion_std_target_select_missilebias 0
 
-set g_turrets_unit_hellion_std_ammo_max 700
-set g_turrets_unit_hellion_std_ammo 300
+set g_turrets_unit_hellion_std_ammo_max 200
+set g_turrets_unit_hellion_std_ammo 100
 set g_turrets_unit_hellion_std_ammo_recharge 50
 
 set g_turrets_unit_hellion_std_aim_firetolerance_dist 200
 set g_turrets_unit_hellion_std_aim_firetolerance_angle 25
-set g_turrets_unit_hellion_std_aim_speed 96
+set g_turrets_unit_hellion_std_aim_speed 100
 set g_turrets_unit_hellion_std_aim_maxrot 360
-set g_turrets_unit_hellion_std_aim_maxpitch 15
+set g_turrets_unit_hellion_std_aim_maxpitch 20
 
 set g_turrets_unit_hellion_std_track_type 3
 set g_turrets_unit_hellion_std_track_accel_pitch 0.25
-set g_turrets_unit_hellion_std_track_accel_rot 0.25
+set g_turrets_unit_hellion_std_track_accel_rot 0.5
 set g_turrets_unit_hellion_std_track_blendrate 0.75
 

Modified: branches/nexuiz-2.0/data/unit_hk.cfg
===================================================================
--- branches/nexuiz-2.0/data/unit_hk.cfg	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/unit_hk.cfg	2008-10-24 09:45:12 UTC (rev 4863)
@@ -6,25 +6,25 @@
 set g_turrets_unit_hk_std_shot_radius 200
 
 set g_turrets_unit_hk_std_shot_speed 500
-set g_turrets_unit_hk_std_shot_speed_max 850
-set g_turrets_unit_hk_std_shot_speed_accel 1.05
-set g_turrets_unit_hk_std_shot_speed_accel2 1.1
+set g_turrets_unit_hk_std_shot_speed_max 1000
+set g_turrets_unit_hk_std_shot_speed_accel 1.025
+set g_turrets_unit_hk_std_shot_speed_accel2 1.05
 set g_turrets_unit_hk_std_shot_speed_decel 0.9
-set g_turrets_unit_hk_std_shot_speed_turnrate 0.2
+set g_turrets_unit_hk_std_shot_speed_turnrate 0.25
 
 set g_turrets_unit_hk_std_shot_spread 0
-set g_turrets_unit_hk_std_shot_force 800
-set g_turrets_unit_hk_std_shot_volly 1
-set g_turrets_unit_hk_std_shot_volly_refire 5
+set g_turrets_unit_hk_std_shot_force 600
+set g_turrets_unit_hk_std_shot_volly 0
+set g_turrets_unit_hk_std_shot_volly_refire 0
 
-set g_turrets_unit_hk_std_target_range 5120
-set g_turrets_unit_hk_std_target_range_min 256
-set g_turrets_unit_hk_std_target_range_fire 4096
-set g_turrets_unit_hk_std_target_range_optimal 4096
+set g_turrets_unit_hk_std_target_range 6000
+set g_turrets_unit_hk_std_target_range_min 220
+set g_turrets_unit_hk_std_target_range_fire 5000
+set g_turrets_unit_hk_std_target_range_optimal 5000
 
 set g_turrets_unit_hk_std_target_select_rangebias 0.5
-set g_turrets_unit_hk_std_target_select_samebias 0
-set g_turrets_unit_hk_std_target_select_anglebias 0.5
+set g_turrets_unit_hk_std_target_select_samebias 0.01
+set g_turrets_unit_hk_std_target_select_anglebias 0.1
 set g_turrets_unit_hk_std_target_select_playerbias 1
 set g_turrets_unit_hk_std_target_select_missilebias 0
 
@@ -34,12 +34,12 @@
 
 set g_turrets_unit_hk_std_aim_firetolerance_dist 250
 set g_turrets_unit_hk_std_aim_firetolerance_angle 25
-set g_turrets_unit_hk_std_aim_speed 50
+set g_turrets_unit_hk_std_aim_speed 100
 set g_turrets_unit_hk_std_aim_maxrot 360
-set g_turrets_unit_hk_std_aim_maxpitch 10	
+set g_turrets_unit_hk_std_aim_maxpitch 20	
 
-set g_turrets_unit_hk_std_track_type 2
-set g_turrets_unit_hk_std_track_accel_pitch 0.45
-set g_turrets_unit_hk_std_track_accel_rot 0.6
-set g_turrets_unit_hk_std_track_blendrate 0.5
+set g_turrets_unit_hk_std_track_type 3
+set g_turrets_unit_hk_std_track_accel_pitch 0.25
+set g_turrets_unit_hk_std_track_accel_rot 0.5
+set g_turrets_unit_hk_std_track_blendrate 0.25
 

Modified: branches/nexuiz-2.0/data/unit_machinegun.cfg
===================================================================
--- branches/nexuiz-2.0/data/unit_machinegun.cfg	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/unit_machinegun.cfg	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,19 +1,19 @@
 set g_turrets_unit_machinegun_std_health 256	
 set g_turrets_unit_machinegun_std_respawntime 60
 
-set g_turrets_unit_machinegun_std_shot_dmg 20
-set g_turrets_unit_machinegun_std_shot_refire 0.15
-set g_turrets_unit_machinegun_std_shot_spread 0.015
-set g_turrets_unit_machinegun_std_shot_force 45
+set g_turrets_unit_machinegun_std_shot_dmg 12
+set g_turrets_unit_machinegun_std_shot_refire 0.1
+set g_turrets_unit_machinegun_std_shot_spread 0.025
+set g_turrets_unit_machinegun_std_shot_force 15
 set g_turrets_unit_machinegun_std_shot_radius 0
 set g_turrets_unit_machinegun_std_shot_speed 0
 set g_turrets_unit_machinegun_std_shot_volly 5
-set g_turrets_unit_machinegun_std_shot_volly_refire 0.45
+set g_turrets_unit_machinegun_std_shot_volly_refire 1.5
 
-set g_turrets_unit_machinegun_std_target_range 4000
+set g_turrets_unit_machinegun_std_target_range 4500
 set g_turrets_unit_machinegun_std_target_range_min 2
-set g_turrets_unit_machinegun_std_target_range_fire 3000
-set g_turrets_unit_machinegun_std_target_range_optimal 1500
+set g_turrets_unit_machinegun_std_target_range_fire 4000
+set g_turrets_unit_machinegun_std_target_range_optimal 2500
 
 set g_turrets_unit_machinegun_std_target_select_rangebias 0.25
 set g_turrets_unit_machinegun_std_target_select_samebias 0.25
@@ -34,6 +34,6 @@
 set g_turrets_unit_machinegun_std_track_type 3
 set g_turrets_unit_machinegun_std_track_accel_pitch 0.25
 set g_turrets_unit_machinegun_std_track_accel_rot 0.75
-set g_turrets_unit_machinegun_std_track_blendrate 0.25
+set g_turrets_unit_machinegun_std_track_blendrate 0.2
 
 

Deleted: branches/nexuiz-2.0/data/unit_minigun.cfg
===================================================================
--- branches/nexuiz-2.0/data/unit_minigun.cfg	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/unit_minigun.cfg	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,41 +0,0 @@
-set g_turrets_unit_minigun_std_health 256	
-set g_turrets_unit_minigun_std_respawntime 60
-
-set g_turrets_unit_minigun_std_spin_up_time 2.5
-
-set g_turrets_unit_minigun_std_shot_dmg 10
-set g_turrets_unit_minigun_std_shot_refire 0.05
-set g_turrets_unit_minigun_std_shot_spread 0.032
-set g_turrets_unit_minigun_std_shot_force 64
-set g_turrets_unit_minigun_std_shot_radius 0
-set g_turrets_unit_minigun_std_shot_speed 0
-set g_turrets_unit_minigun_std_shot_volly 10
-set g_turrets_unit_minigun_std_shot_volly_refire 0.5
-
-set g_turrets_unit_minigun_std_target_range 4000
-set g_turrets_unit_minigun_std_target_range_min 2
-set g_turrets_unit_minigun_std_target_range_fire 3000
-set g_turrets_unit_minigun_std_target_range_optimal 512
-
-set g_turrets_unit_minigun_std_target_select_rangebias 0.25
-set g_turrets_unit_minigun_std_target_select_samebias 0.25
-set g_turrets_unit_minigun_std_target_select_anglebias 0.5
-set g_turrets_unit_minigun_std_target_select_playerbias 1
-set g_turrets_unit_minigun_std_target_select_missilebias 0
-
-set g_turrets_unit_minigun_std_ammo_max 4000
-set g_turrets_unit_minigun_std_ammo 500
-set g_turrets_unit_minigun_std_ammo_recharge 100
-
-set g_turrets_unit_minigun_std_aim_firetolerance_dist 128
-set g_turrets_unit_minigun_std_aim_firetolerance_angle 16
-set g_turrets_unit_minigun_std_aim_speed 32
-set g_turrets_unit_minigun_std_aim_maxrot 400
-set g_turrets_unit_minigun_std_aim_maxpitch 25
-
-set g_turrets_unit_minigun_std_track_type 1
-set g_turrets_unit_minigun_std_track_accel_pitch 0.25
-set g_turrets_unit_minigun_std_track_accel_rot 0.75
-set g_turrets_unit_minigun_std_track_blendrate 0.25
-
-

Modified: branches/nexuiz-2.0/data/unit_mlrs.cfg
===================================================================
--- branches/nexuiz-2.0/data/unit_mlrs.cfg	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/unit_mlrs.cfg	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,15 +1,16 @@
-set g_turrets_unit_mlrs_std_health 350	
+set g_turrets_unit_mlrs_std_health 500	
 set g_turrets_unit_mlrs_std_respawntime 60
 
 set g_turrets_unit_mlrs_std_shot_dmg 50
-set g_turrets_unit_mlrs_std_shot_refire 0.2
-set g_turrets_unit_mlrs_std_shot_radius 250
+set g_turrets_unit_mlrs_std_shot_refire 0.1
+set g_turrets_unit_mlrs_std_shot_radius 180
 set g_turrets_unit_mlrs_std_shot_speed 2000
 set g_turrets_unit_mlrs_std_shot_spread 0.05
-set g_turrets_unit_mlrs_std_shot_force 150
-set g_turrets_unit_mlrs_std_shot_volly 6
-set g_turrets_unit_mlrs_std_shot_volly_refire 5
+set g_turrets_unit_mlrs_std_shot_force 50
 
+set g_turrets_unit_mlrs_std_shot_volly 3
+set g_turrets_unit_mlrs_std_shot_volly_refire 1.5
+
 set g_turrets_unit_mlrs_std_target_range 4000
 set g_turrets_unit_mlrs_std_target_range_min 500
 set g_turrets_unit_mlrs_std_target_range_fire 3000
@@ -21,17 +22,17 @@
 set g_turrets_unit_mlrs_std_target_select_playerbias 1
 set g_turrets_unit_mlrs_std_target_select_missilebias 0
 
-set g_turrets_unit_mlrs_std_ammo_max 350
-set g_turrets_unit_mlrs_std_ammo 310
-set g_turrets_unit_mlrs_std_ammo_recharge 60
+set g_turrets_unit_mlrs_std_ammo_max 300
+set g_turrets_unit_mlrs_std_ammo 300
+set g_turrets_unit_mlrs_std_ammo_recharge 50
 
-set g_turrets_unit_mlrs_std_aim_firetolerance_dist 200
+set g_turrets_unit_mlrs_std_aim_firetolerance_dist 300
 set g_turrets_unit_mlrs_std_aim_firetolerance_angle 15
-set g_turrets_unit_mlrs_std_aim_speed 100
+set g_turrets_unit_mlrs_std_aim_speed 180
 set g_turrets_unit_mlrs_std_aim_maxrot 360
 set g_turrets_unit_mlrs_std_aim_maxpitch 15
 
 set g_turrets_unit_mlrs_std_track_type 3
 set g_turrets_unit_mlrs_std_track_accel_pitch 0.25
-set g_turrets_unit_mlrs_std_track_accel_rot 0.75
+set g_turrets_unit_mlrs_std_track_accel_rot 0.5
 set g_turrets_unit_mlrs_std_track_blendrate 0.25
\ No newline at end of file

Modified: branches/nexuiz-2.0/data/unit_plasma.cfg
===================================================================
--- branches/nexuiz-2.0/data/unit_plasma.cfg	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/unit_plasma.cfg	2008-10-24 09:45:12 UTC (rev 4863)
@@ -2,59 +2,59 @@
 set g_turrets_unit_plasma_std_respawntime 60
 
 // Do this mutch damage
-set g_turrets_unit_plasma_std_shot_dmg 60
+set g_turrets_unit_plasma_std_shot_dmg 80
 //This often
-set g_turrets_unit_plasma_std_shot_refire 0.7
+set g_turrets_unit_plasma_std_shot_refire 0.6
 //Over this mutch area
 set g_turrets_unit_plasma_std_shot_radius 150
 //Traveling at this speed
-set g_turrets_unit_plasma_std_shot_speed 6000
+set g_turrets_unit_plasma_std_shot_speed 2000
 //With a random direction of
-set g_turrets_unit_plasma_std_shot_spread 0.0125
+set g_turrets_unit_plasma_std_shot_spread 0.0001
 //Pushing things this hard
 set g_turrets_unit_plasma_std_shot_force 100
 //Each volly is this many shots
-set g_turrets_unit_plasma_std_shot_volly 1
+set g_turrets_unit_plasma_std_shot_volly 0
 // Refire upon compleated volly
-set g_turrets_unit_plasma_std_shot_volly_refire 0.7
+set g_turrets_unit_plasma_std_shot_volly_refire 0
 
 // Scan for targets within this range
-set g_turrets_unit_plasma_std_target_range 4000
+set g_turrets_unit_plasma_std_target_range 3500
 // But no close then this
-set g_turrets_unit_plasma_std_target_range_min 240
+set g_turrets_unit_plasma_std_target_range_min 200
 // If thise or closer, fire
-set g_turrets_unit_plasma_std_target_range_fire 3800
+set g_turrets_unit_plasma_std_target_range_fire 3000
 // If we have a choise, prefer the ones closer to this distance
-set g_turrets_unit_plasma_std_target_range_optimal 2000
+set g_turrets_unit_plasma_std_target_range_optimal 1500
 
 
 // Targetselect is made for each turret based on range, angle (turrets needs to turn to aim at), if its a player / missile
 // scale range score this mucth
-set g_turrets_unit_plasma_std_target_select_rangebias 0.25
+set g_turrets_unit_plasma_std_target_select_rangebias 0.5
 // scale 'same' score this mutch (stick with same target)
-set g_turrets_unit_plasma_std_target_select_samebias 0.25
+set g_turrets_unit_plasma_std_target_select_samebias 0.01
 // and so on
-set g_turrets_unit_plasma_std_target_select_anglebias 0.5
+set g_turrets_unit_plasma_std_target_select_anglebias 0.25
 set g_turrets_unit_plasma_std_target_select_playerbias 1
 set g_turrets_unit_plasma_std_target_select_missilebias 0
 
 // Can catty this mutch ammo. one dmg = one ammo
-set g_turrets_unit_plasma_std_ammo_max 600
+set g_turrets_unit_plasma_std_ammo_max 800
 // Start with this mutch ammo
-set g_turrets_unit_plasma_std_ammo 300
+set g_turrets_unit_plasma_std_ammo 400
 // Regain ammo this fast (per sec)
-set g_turrets_unit_plasma_std_ammo_recharge 30
+set g_turrets_unit_plasma_std_ammo_recharge 40
 
 // If predicted emeypos is this or closer to predicted impact, fire is ok
-set g_turrets_unit_plasma_std_aim_firetolerance_dist 256
+set g_turrets_unit_plasma_std_aim_firetolerance_dist 200
 // If angle ofset to predicted emeypos is this or less, fire is ok
-set g_turrets_unit_plasma_std_aim_firetolerance_angle 10
+set g_turrets_unit_plasma_std_aim_firetolerance_angle 5
 // Aim how fast (for g_turrets_unit_plasma_std_track_type=1 this is dgr/sec, for 2 & 3 its the maximum force added each sec)
-set g_turrets_unit_plasma_std_aim_speed 250
+set g_turrets_unit_plasma_std_aim_speed 180
 // Max rottation of head
 set g_turrets_unit_plasma_std_aim_maxrot 360
 // Max tilt of head
-set g_turrets_unit_plasma_std_aim_maxpitch 25
+set g_turrets_unit_plasma_std_aim_maxpitch 30
 
 // How the head turns. 
 //   1 = hard steps, good for aiming preformace, bad for visuals. 
@@ -62,7 +62,7 @@
 //   3 = smmoth with simulated inertia
 set g_turrets_unit_plasma_std_track_type 3
 // Following controls how _track_type = 3 works.
-set g_turrets_unit_plasma_std_track_accel_pitch 0.4
-set g_turrets_unit_plasma_std_track_accel_rot 0.4
-set g_turrets_unit_plasma_std_track_blendrate 0.35
+set g_turrets_unit_plasma_std_track_accel_pitch 0.25
+set g_turrets_unit_plasma_std_track_accel_rot 0.5
+set g_turrets_unit_plasma_std_track_blendrate 0.25
 

Modified: branches/nexuiz-2.0/data/unit_plasma2.cfg
===================================================================
--- branches/nexuiz-2.0/data/unit_plasma2.cfg	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/unit_plasma2.cfg	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,20 +1,20 @@
 set g_turrets_unit_plasma_dual_health 500	
 set g_turrets_unit_plasma_dual_respawntime 60
 
-set g_turrets_unit_plasma_dual_shot_dmg 50
-set g_turrets_unit_plasma_dual_shot_refire 0.3
-set g_turrets_unit_plasma_dual_shot_radius 100
-set g_turrets_unit_plasma_dual_shot_speed 5000
+set g_turrets_unit_plasma_dual_shot_dmg 80
+set g_turrets_unit_plasma_dual_shot_refire 0.1
+set g_turrets_unit_plasma_dual_shot_radius 150
+set g_turrets_unit_plasma_dual_shot_speed 2000
 set g_turrets_unit_plasma_dual_shot_spread 0.015
 set g_turrets_unit_plasma_dual_shot_force 100
 
-set g_turrets_unit_plasma_dual_shot_volly 0
+set g_turrets_unit_plasma_dual_shot_volly 2
 set g_turrets_unit_plasma_dual_shot_volly_refire 0.5
 
-set g_turrets_unit_plasma_dual_target_range 4000
+set g_turrets_unit_plasma_dual_target_range 3000
 set g_turrets_unit_plasma_dual_target_range_min 100
-set g_turrets_unit_plasma_dual_target_range_fire 3000
-set g_turrets_unit_plasma_dual_target_range_optimal 1600
+set g_turrets_unit_plasma_dual_target_range_fire 2500
+set g_turrets_unit_plasma_dual_target_range_optimal 2000
 
 set g_turrets_unit_plasma_dual_target_select_rangebias 0.25
 set g_turrets_unit_plasma_dual_target_select_samebias 0.25
@@ -22,19 +22,19 @@
 set g_turrets_unit_plasma_dual_target_select_playerbias 1
 set g_turrets_unit_plasma_dual_target_select_missilebias 0
 
-set g_turrets_unit_plasma_dual_ammo_max 500
-set g_turrets_unit_plasma_dual_ammo 250
-set g_turrets_unit_plasma_dual_ammo_recharge 50
+set g_turrets_unit_plasma_dual_ammo_max 800
+set g_turrets_unit_plasma_dual_ammo 500
+set g_turrets_unit_plasma_dual_ammo_recharge 40
 
-set g_turrets_unit_plasma_dual_aim_firetolerance_dist 150
+set g_turrets_unit_plasma_dual_aim_firetolerance_dist 250
 set g_turrets_unit_plasma_dual_aim_firetolerance_angle 16
 
-set g_turrets_unit_plasma_dual_aim_speed 50
+set g_turrets_unit_plasma_dual_aim_speed 100
 set g_turrets_unit_plasma_dual_aim_maxrot 360
-set g_turrets_unit_plasma_dual_aim_maxpitch 15
+set g_turrets_unit_plasma_dual_aim_maxpitch 30
 
 set g_turrets_unit_plasma_dual_track_type 3
 set g_turrets_unit_plasma_dual_track_accel_pitch 0.25
-set g_turrets_unit_plasma_dual_track_accel_rot 0.75
-set g_turrets_unit_plasma_dual_track_blendrate 0.5
+set g_turrets_unit_plasma_dual_track_accel_rot 0.5
+set g_turrets_unit_plasma_dual_track_blendrate 0.25
 

Copied: branches/nexuiz-2.0/data/unit_walker.cfg (from rev 4862, trunk/data/unit_walker.cfg)
===================================================================
--- branches/nexuiz-2.0/data/unit_walker.cfg	                        (rev 0)
+++ branches/nexuiz-2.0/data/unit_walker.cfg	2008-10-24 09:45:12 UTC (rev 4863)
@@ -0,0 +1,57 @@
+set g_turrets_unit_walker_std_health 500	
+set g_turrets_unit_walker_std_respawntime 60
+
+// dgr / sec
+set g_turrets_unit_walker_turn_turnrate 90
+set g_turrets_unit_walker_walk_turnrate 45
+set g_turrets_unit_walker_run_turnrate  22.5
+
+// Main machineguns prop's
+set g_turrets_unit_walker_std_shot_dmg 15
+set g_turrets_unit_walker_std_shot_refire 0.1
+set g_turrets_unit_walker_std_shot_spread 0.05
+set g_turrets_unit_walker_std_shot_force 	5
+set g_turrets_unit_walker_std_shot_radius 0
+set g_turrets_unit_walker_std_shot_speed 0
+
+set g_turrets_unit_walker_std_shot_volly 0
+set g_turrets_unit_walker_std_shot_volly_refire 0
+
+// Note this is the effective range for rocket engagement
+set g_turrets_unit_walker_std_target_range 10000
+
+set g_turrets_unit_walker_std_target_range_fire 1500
+set g_turrets_unit_walker_std_target_range_optimal 500
+set g_turrets_unit_walker_std_target_range_min 64
+
+set g_turrets_unit_walker_std_target_select_rangebias 0.25
+set g_turrets_unit_walker_std_target_select_samebias 0.25
+set g_turrets_unit_walker_std_target_select_anglebias 0.5
+set g_turrets_unit_walker_std_target_select_playerbias 1
+set g_turrets_unit_walker_std_target_select_missilebias 0
+
+set g_turrets_unit_walker_std_ammo_max 4000
+set g_turrets_unit_walker_std_ammo 500
+set g_turrets_unit_walker_std_ammo_recharge 100
+
+set g_turrets_unit_walker_std_aim_firetolerance_dist 64
+set g_turrets_unit_walker_std_aim_firetolerance_angle 16
+set g_turrets_unit_walker_std_aim_speed 90
+set g_turrets_unit_walker_std_aim_maxrot 360
+set g_turrets_unit_walker_std_aim_maxpitch 15
+
+set g_turrets_unit_walker_std_track_type 1
+
+// "Swively" homing rockets that sometimes loop
+set g_turrets_unit_walker_std_rocket_refire 10
+set g_turrets_unit_walker_std_rocket_dmg 50
+set g_turrets_unit_walker_std_rocket_radius 150
+set g_turrets_unit_walker_std_rocket_force 150
+set g_turrets_unit_walker_std_rocket_tunrate 0.5
+set g_turrets_unit_walker_std_rocket_speed 650
+set g_turrets_unit_walker_std_rocket_speed_add 2
+
+// Meele attack. Only happens when theres a target directly in front 
+set g_turrets_unit_walker_std_meele_range 160
+set g_turrets_unit_walker_std_meele_dmg 200
+set g_turrets_unit_walker_std_meele_force 1000
\ No newline at end of file

Modified: branches/nexuiz-2.0/data/weapons.cfg
===================================================================
--- branches/nexuiz-2.0/data/weapons.cfg	2008-10-24 09:28:09 UTC (rev 4862)
+++ branches/nexuiz-2.0/data/weapons.cfg	2008-10-24 09:45:12 UTC (rev 4863)
@@ -1,243 +1,332 @@
-set g_start_weapon_laser 1
-set g_start_weapon_shotgun 1
-set g_start_weapon_uzi 0
-set g_start_weapon_grenadelauncher 0
-set g_start_weapon_electro 0
-set g_start_weapon_crylink 0
-set g_start_weapon_nex 0
-set g_start_weapon_hagar 0
-set g_start_weapon_rocketlauncher 0
-set g_start_weapon_minstanex 0
-set g_start_weapon_porto 0
-set g_start_weapon_hook 0
-set g_start_ammo_shells 50
-set g_start_ammo_nails 0
-set g_start_ammo_rockets 0
-set g_start_ammo_cells 0
-set g_pickup_shells 15
-set g_pickup_shells_max 999
-set g_pickup_nails 120
-set g_pickup_nails_max 999
-set g_pickup_rockets 15
-set g_pickup_rockets_max 999
-set g_pickup_cells 25
-set g_pickup_cells_max 999
-set g_pickup_armorsmall 5
-set g_pickup_armorsmall_max 999
-set g_pickup_armormedium 25
-set g_pickup_armormedium_max 999
-set g_pickup_armorlarge 100
-set g_pickup_armorlarge_max 999
-set g_pickup_healthsmall 5
-set g_pickup_healthsmall_max 999
-set g_pickup_healthmedium 25
-set g_pickup_healthmedium_max 999
-set g_pickup_healthlarge 50
-set g_pickup_healthlarge_max 999
-set g_pickup_healthmega 100
-set g_pickup_healthmega_max 999
-set g_pickup_respawntime_short 15
-set g_pickup_respawntime_medium 20
-set g_pickup_respawntime_long 30
-set g_pickup_respawntime_powerup 120
-
-set g_balance_laser_primary_damage 35
-set g_balance_laser_primary_edgedamage 10
-set g_balance_laser_primary_force 400
-set g_balance_laser_primary_radius 70
-set g_balance_laser_primary_speed 9000
-set g_balance_laser_primary_refire 0.7
-set g_balance_laser_primary_animtime 0.3
-set g_balance_laser_primary_lifetime 30
-set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
-set g_balance_laser_secondary_damage 35
-set g_balance_laser_secondary_edgedamage 10
-set g_balance_laser_secondary_force 400
-set g_balance_laser_secondary_radius 70
-set g_balance_laser_secondary_speed 9000
-set g_balance_laser_secondary_refire 0.7
-set g_balance_laser_secondary_animtime 0.3
-set g_balance_laser_secondary_lifetime 30
-
-set g_balance_shotgun_primary_bullets 5
-set g_balance_shotgun_primary_damage 12
-set g_balance_shotgun_primary_force 60
-set g_balance_shotgun_primary_spread 0.08
-set g_balance_shotgun_primary_refire 0.5
-set g_balance_shotgun_primary_animtime 0.2
-set g_balance_shotgun_primary_ammo 1
-set g_balance_shotgun_secondary_bullets 5
-set g_balance_shotgun_secondary_damage 12
-set g_balance_shotgun_secondary_force 60
-set g_balance_shotgun_secondary_spread 0.12
-set g_balance_shotgun_secondary_refire 1.35
-set g_balance_shotgun_secondary_animtime 0.2
-set g_balance_shotgun_secondary_ammo 1
-
-set g_balance_uzi_first_damage 30
-set g_balance_uzi_first_force 50
-set g_balance_uzi_first_spread 0.01
-set g_balance_uzi_first_refire 0.2
-set g_balance_uzi_first_ammo 1
-set g_balance_uzi_sustained_damage 16
-set g_balance_uzi_sustained_force 27
-set g_balance_uzi_sustained_spread 0.05
-set g_balance_uzi_sustained_refire 0.1
-set g_balance_uzi_sustained_ammo 1
-
-set g_balance_grenadelauncher_primary_damage 65
-set g_balance_grenadelauncher_primary_edgedamage 35
-set g_balance_grenadelauncher_primary_force 400
-set g_balance_grenadelauncher_primary_radius 140
-set g_balance_grenadelauncher_primary_speed 2000
-set g_balance_grenadelauncher_primary_speed_up 200
-set g_balance_grenadelauncher_primary_lifetime 30
-set g_balance_grenadelauncher_primary_refire 0.7
-set g_balance_grenadelauncher_primary_animtime 0.3
-set g_balance_grenadelauncher_primary_ammo 2
-set g_balance_grenadelauncher_secondary_damage 65
-set g_balance_grenadelauncher_secondary_edgedamage 35
-set g_balance_grenadelauncher_secondary_force 400
-set g_balance_grenadelauncher_secondary_radius 140
-set g_balance_grenadelauncher_secondary_speed 1400
-set g_balance_grenadelauncher_secondary_speed_up 200
-set g_balance_grenadelauncher_secondary_lifetime 2.5
-set g_balance_grenadelauncher_secondary_refire 0.6
-set g_balance_grenadelauncher_secondary_animtime 0.3
-set g_balance_grenadelauncher_secondary_ammo 2
-set g_balance_grenadelauncher_secondary_health 10
-
-set g_balance_electro_primary_damage 80
-set g_balance_electro_primary_edgedamage 0
-set g_balance_electro_primary_force 200
-set g_balance_electro_primary_radius 150
-set g_balance_electro_primary_speed 2000
-set g_balance_electro_primary_lifetime 30
-set g_balance_electro_primary_refire 0.6
-set g_balance_electro_primary_animtime 0.3
-set g_balance_electro_primary_ammo 2
-set g_balance_electro_secondary_damage 60
-set g_balance_electro_secondary_spread 0.05
-set g_balance_electro_secondary_edgedamage 0
-set g_balance_electro_secondary_force 200
-set g_balance_electro_secondary_radius 150
-set g_balance_electro_secondary_speed 900
-set g_balance_electro_secondary_speed_up 200
-set g_balance_electro_secondary_lifetime 5
-set g_balance_electro_secondary_refire 0.3
-set g_balance_electro_secondary_animtime 0.3
-set g_balance_electro_secondary_ammo 2
-set g_balance_electro_secondary_health 5
-set g_balance_electro_combo_damage 70
-set g_balance_electro_combo_edgedamage 0
-set g_balance_electro_combo_force 200
-set g_balance_electro_combo_radius 250
-
-set g_balance_crylink_primary_damage 20
-set g_balance_crylink_primary_edgedamage 0
-set g_balance_crylink_primary_force -55
-set g_balance_crylink_primary_radius 80
-set g_balance_crylink_primary_speed 7000
-set g_balance_crylink_primary_spread 0.03
-set g_balance_crylink_primary_shots 4
-set g_balance_crylink_primary_bounces 1
-set g_balance_crylink_primary_refire 0.4
-set g_balance_crylink_primary_animtime 0.3
-set g_balance_crylink_primary_ammo 2
-set g_balance_crylink_primary_bouncedamagefactor 0.5
-
-set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
-set g_balance_crylink_primary_middle_fadetime 5
-set g_balance_crylink_primary_star_lifetime 0.1 // range: 700 full, fades to 2100
-set g_balance_crylink_primary_star_fadetime 0.2
-set g_balance_crylink_primary_other_lifetime 0.1 // range: 700 full, fades to 2100
-set g_balance_crylink_primary_other_fadetime 0.2
-
-set g_balance_crylink_secondary_damage 20
-set g_balance_crylink_secondary_edgedamage 0
-set g_balance_crylink_secondary_force -55
-set g_balance_crylink_secondary_radius 3
-set g_balance_crylink_secondary_speed 7000
-set g_balance_crylink_secondary_spread 0.08
-set g_balance_crylink_secondary_shots 7
-set g_balance_crylink_secondary_bounces 0
-set g_balance_crylink_secondary_refire 0.5
-set g_balance_crylink_secondary_animtime 0.3
-set g_balance_crylink_secondary_ammo 2
-set g_balance_crylink_secondary_bouncedamagefactor 0.5
-
-set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
-set g_balance_crylink_secondary_middle_fadetime 5
-set g_balance_crylink_secondary_line_lifetime 2 // range: 35000 full, fades to 70000
-set g_balance_crylink_secondary_line_fadetime 2
-
-set g_balance_nex_damage 140
-set g_balance_nex_force 600
-set g_balance_nex_refire 1.5
-set g_balance_nex_animtime 0.3
-set g_balance_nex_ammo 5
-
-set g_balance_minstanex_refire 1
-set g_balance_minstanex_animtime 0.3
-set g_balance_minstanex_ammo 10
-
-set g_balance_hagar_primary_damage 40
-set g_balance_hagar_primary_edgedamage 15
-set g_balance_hagar_primary_force 100
-set g_balance_hagar_primary_radius 70
-set g_balance_hagar_primary_spread 0.010
-set g_balance_hagar_primary_speed 3000
-set g_balance_hagar_primary_lifetime 30
-set g_balance_hagar_primary_refire 0.15
-set g_balance_hagar_primary_ammo 1
-set g_balance_hagar_secondary_damage 40
-set g_balance_hagar_secondary_edgedamage 15
-set g_balance_hagar_secondary_force 100
-set g_balance_hagar_secondary_radius 70
-set g_balance_hagar_secondary_spread 0.015
-set g_balance_hagar_secondary_speed 1400
-set g_balance_hagar_secondary_lifetime 30
-set g_balance_hagar_secondary_refire 0.15
-set g_balance_hagar_secondary_ammo 1
-
-set g_balance_rocketlauncher_damage 130
-set g_balance_rocketlauncher_edgedamage 50
-set g_balance_rocketlauncher_force 600
-set g_balance_rocketlauncher_radius 170
-set g_balance_rocketlauncher_speed 850
-set g_balance_rocketlauncher_speedaccel 0
-set g_balance_rocketlauncher_speedstart 850
-set g_balance_rocketlauncher_lifetime 30
-set g_balance_rocketlauncher_refire 1
-set g_balance_rocketlauncher_animtime 0.3
-set g_balance_rocketlauncher_ammo 3
-set g_balance_rocketlauncher_health 30
-set g_balance_rocketlauncher_detonatedelay 0.2 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
-set g_balance_rocketlauncher_laserguided_speed 1000  //650
-set g_balance_rocketlauncher_laserguided_speedaccel 0
-set g_balance_rocketlauncher_laserguided_speedstart 1000
-set g_balance_rocketlauncher_laserguided_turnrate	0.75  //0.5
-set g_balance_rocketlauncher_laserguided_allow_steal	1
-
-// TESTING: port-o-launch
-set g_balance_porto_primary_refire 1.5
-set g_balance_porto_primary_speed 2000
-set g_balance_porto_primary_lifetime 30
-set g_balance_porto_primary_ammo 25
-set g_balance_portal_health 200 // these get recharged whenever the portal is used
-set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
-
-// TESTING: on-hand hook with bomb
-set g_balance_hook_primary_ammo 0 // hook monkeys
-set g_balance_hook_primary_refire 0 // hook monkeys
-set g_balance_hook_primary_animtime 0.3 // good shoot anim
-set g_balance_hook_secondary_damage 25 // not much
-set g_balance_hook_secondary_edgedamage 5 // not much
-set g_balance_hook_secondary_radius 800 // LOTS
-set g_balance_hook_secondary_force -2000 // LOTS
-set g_balance_hook_secondary_ammo 25 // a whole pack
-set g_balance_hook_secondary_lifetime 30 // infinite
-set g_balance_hook_secondary_speed 0 // not much throwing
-set g_balance_hook_secondary_gravity 5 // fast falling
-set g_balance_hook_secondary_refire 3 // don't drop too many bombs...
-set g_balance_hook_secondary_animtime 0.3 // good shoot anim
+set g_start_weapon_laser 1
+set g_start_weapon_shotgun 1
+set g_start_weapon_uzi 0
+set g_start_weapon_grenadelauncher 0
+set g_start_weapon_electro 0
+set g_start_weapon_crylink 0
+set g_start_weapon_nex 0
+set g_start_weapon_hagar 0
+set g_start_weapon_rocketlauncher 0
+set g_start_weapon_minstanex 0
+set g_start_weapon_porto 0
+set g_start_weapon_hook 0
+set g_start_weapon_hlac 0
+set g_start_weapon_seeker 0
+set g_start_ammo_shells 50
+set g_start_ammo_nails 0
+set g_start_ammo_rockets 0
+set g_start_ammo_cells 0
+set g_pickup_shells 15
+set g_pickup_shells_max 999
+set g_pickup_nails 120
+set g_pickup_nails_max 999
+set g_pickup_rockets 15
+set g_pickup_rockets_max 999
+set g_pickup_cells 25
+set g_pickup_cells_max 999
+set g_pickup_armorsmall 5
+set g_pickup_armorsmall_max 999
+set g_pickup_armormedium 25
+set g_pickup_armormedium_max 999
+set g_pickup_armorlarge 100
+set g_pickup_armorlarge_max 999
+set g_pickup_healthsmall 5
+set g_pickup_healthsmall_max 999
+set g_pickup_healthmedium 25
+set g_pickup_healthmedium_max 999
+set g_pickup_healthlarge 50
+set g_pickup_healthlarge_max 999
+set g_pickup_healthmega 100
+set g_pickup_healthmega_max 999
+set g_pickup_respawntime_short 15
+set g_pickup_respawntime_medium 20
+set g_pickup_respawntime_long 30
+set g_pickup_respawntime_powerup 120
+
+set g_balance_laser_primary_damage 35
+set g_balance_laser_primary_edgedamage 10
+set g_balance_laser_primary_force 400
+set g_balance_laser_primary_radius 70
+set g_balance_laser_primary_speed 9000
+set g_balance_laser_primary_refire 0.7
+set g_balance_laser_primary_animtime 0.3
+set g_balance_laser_primary_lifetime 30
+set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
+set g_balance_laser_secondary_damage 35
+set g_balance_laser_secondary_edgedamage 10
+set g_balance_laser_secondary_force 400
+set g_balance_laser_secondary_radius 70
+set g_balance_laser_secondary_speed 9000
+set g_balance_laser_secondary_refire 0.7
+set g_balance_laser_secondary_animtime 0.3
+set g_balance_laser_secondary_lifetime 30
+
+set g_balance_shotgun_primary_bullets 5
+set g_balance_shotgun_primary_damage 12
+set g_balance_shotgun_primary_force 60
+set g_balance_shotgun_primary_spread 0.08
+set g_balance_shotgun_primary_refire 0.5
+set g_balance_shotgun_primary_animtime 0.2
+set g_balance_shotgun_primary_ammo 1
+set g_balance_shotgun_secondary_bullets 5
+set g_balance_shotgun_secondary_damage 12
+set g_balance_shotgun_secondary_force 60
+set g_balance_shotgun_secondary_spread 0.12
+set g_balance_shotgun_secondary_refire 1.35
+set g_balance_shotgun_secondary_animtime 0.2
+set g_balance_shotgun_secondary_ammo 1
+
+set g_balance_uzi_first_damage 30
+set g_balance_uzi_first_force 50
+set g_balance_uzi_first_spread 0.01
+set g_balance_uzi_first_refire 0.2
+set g_balance_uzi_first_ammo 1
+set g_balance_uzi_sustained_damage 16
+set g_balance_uzi_sustained_force 27
+set g_balance_uzi_sustained_spread 0.05
+set g_balance_uzi_sustained_refire 0.1
+set g_balance_uzi_sustained_ammo 1
+
+set g_balance_grenadelauncher_primary_damage 65
+set g_balance_grenadelauncher_primary_edgedamage 35
+set g_balance_grenadelauncher_primary_force 400
+set g_balance_grenadelauncher_primary_radius 140
+set g_balance_grenadelauncher_primary_speed 2000
+set g_balance_grenadelauncher_primary_speed_up 200
+set g_balance_grenadelauncher_primary_lifetime 30
+set g_balance_grenadelauncher_primary_refire 0.7
+set g_balance_grenadelauncher_primary_animtime 0.3
+set g_balance_grenadelauncher_primary_ammo 2
+set g_balance_grenadelauncher_secondary_damage 65
+set g_balance_grenadelauncher_secondary_edgedamage 35
+set g_balance_grenadelauncher_secondary_force 400
+set g_balance_grenadelauncher_secondary_radius 140
+set g_balance_grenadelauncher_secondary_speed 1400
+set g_balance_grenadelauncher_secondary_speed_up 200
+set g_balance_grenadelauncher_secondary_lifetime 2.5
+set g_balance_grenadelauncher_secondary_refire 0.6
+set g_balance_grenadelauncher_secondary_animtime 0.3
+set g_balance_grenadelauncher_secondary_ammo 2
+set g_balance_grenadelauncher_secondary_health 10
+
+set g_balance_electro_primary_damage 80
+set g_balance_electro_primary_edgedamage 0
+set g_balance_electro_primary_force 200
+set g_balance_electro_primary_radius 150
+set g_balance_electro_primary_speed 2000
+set g_balance_electro_primary_lifetime 30
+set g_balance_electro_primary_refire 0.6
+set g_balance_electro_primary_animtime 0.3
+set g_balance_electro_primary_ammo 2
+set g_balance_electro_secondary_damage 60
+set g_balance_electro_secondary_spread 0.05
+set g_balance_electro_secondary_edgedamage 0
+set g_balance_electro_secondary_force 200
+set g_balance_electro_secondary_radius 150
+set g_balance_electro_secondary_speed 900
+set g_balance_electro_secondary_speed_up 200
+set g_balance_electro_secondary_lifetime 5
+set g_balance_electro_secondary_refire 0.3
+set g_balance_electro_secondary_animtime 0.3
+set g_balance_electro_secondary_ammo 2
+set g_balance_electro_secondary_health 5
+set g_balance_electro_combo_damage 70
+set g_balance_electro_combo_edgedamage 0
+set g_balance_electro_combo_force 200
+set g_balance_electro_combo_radius 250
+
+set g_balance_crylink_primary_damage 20
+set g_balance_crylink_primary_edgedamage 0
+set g_balance_crylink_primary_force -55
+set g_balance_crylink_primary_radius 80
+set g_balance_crylink_primary_speed 7000
+set g_balance_crylink_primary_spread 0.03
+set g_balance_crylink_primary_shots 4
+set g_balance_crylink_primary_bounces 1
+set g_balance_crylink_primary_refire 0.4
+set g_balance_crylink_primary_animtime 0.3
+set g_balance_crylink_primary_ammo 2
+set g_balance_crylink_primary_bouncedamagefactor 0.5
+
+set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
+set g_balance_crylink_primary_middle_fadetime 5
+set g_balance_crylink_primary_star_lifetime 0.1 // range: 700 full, fades to 2100
+set g_balance_crylink_primary_star_fadetime 0.2
+set g_balance_crylink_primary_other_lifetime 0.1 // range: 700 full, fades to 2100
+set g_balance_crylink_primary_other_fadetime 0.2
+
+set g_balance_crylink_secondary_damage 20
+set g_balance_crylink_secondary_edgedamage 0
+set g_balance_crylink_secondary_force -55
+set g_balance_crylink_secondary_radius 3
+set g_balance_crylink_secondary_speed 7000
+set g_balance_crylink_secondary_spread 0.08
+set g_balance_crylink_secondary_shots 7
+set g_balance_crylink_secondary_bounces 0
+set g_balance_crylink_secondary_refire 0.5
+set g_balance_crylink_secondary_animtime 0.3
+set g_balance_crylink_secondary_ammo 2
+set g_balance_crylink_secondary_bouncedamagefactor 0.5
+
+set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
+set g_balance_crylink_secondary_middle_fadetime 5
+set g_balance_crylink_secondary_line_lifetime 2 // range: 35000 full, fades to 70000
+set g_balance_crylink_secondary_line_fadetime 2
+
+set g_balance_nex_damage 140
+set g_balance_nex_force 600
+set g_balance_nex_refire 1.5
+set g_balance_nex_animtime 0.3
+set g_balance_nex_ammo 5
+
+set g_balance_minstanex_refire 1
+set g_balance_minstanex_animtime 0.3
+set g_balance_minstanex_ammo 10
+
+set g_balance_hagar_primary_damage 40
+set g_balance_hagar_primary_edgedamage 15
+set g_balance_hagar_primary_force 100
+set g_balance_hagar_primary_radius 70
+set g_balance_hagar_primary_spread 0.010
+set g_balance_hagar_primary_speed 3000
+set g_balance_hagar_primary_lifetime 30
+set g_balance_hagar_primary_refire 0.15
+set g_balance_hagar_primary_ammo 1
+set g_balance_hagar_secondary_damage 40
+set g_balance_hagar_secondary_edgedamage 15
+set g_balance_hagar_secondary_force 100
+set g_balance_hagar_secondary_radius 70
+set g_balance_hagar_secondary_spread 0.015
+set g_balance_hagar_secondary_speed 1400
+set g_balance_hagar_secondary_lifetime 30
+set g_balance_hagar_secondary_refire 0.15
+set g_balance_hagar_secondary_ammo 1
+
+set g_balance_rocketlauncher_damage 130
+set g_balance_rocketlauncher_edgedamage 50
+set g_balance_rocketlauncher_force 600
+set g_balance_rocketlauncher_radius 170
+set g_balance_rocketlauncher_speed 850
+set g_balance_rocketlauncher_speedaccel 0
+set g_balance_rocketlauncher_speedstart 850
+set g_balance_rocketlauncher_lifetime 30
+set g_balance_rocketlauncher_refire 1
+set g_balance_rocketlauncher_animtime 0.3
+set g_balance_rocketlauncher_ammo 3
+set g_balance_rocketlauncher_health 30
+set g_balance_rocketlauncher_detonatedelay 0.2 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
+set g_balance_rocketlauncher_laserguided_speed 1000  //650
+set g_balance_rocketlauncher_laserguided_speedaccel 0
+set g_balance_rocketlauncher_laserguided_speedstart 1000
+set g_balance_rocketlauncher_laserguided_turnrate	0.75  //0.5
+set g_balance_rocketlauncher_laserguided_allow_steal	1
+
+// TESTING: port-o-launch
+set g_balance_porto_primary_refire 1.5
+set g_balance_porto_primary_speed 2000
+set g_balance_porto_primary_lifetime 30
+set g_balance_porto_primary_ammo 25
+set g_balance_portal_health 200 // these get recharged whenever the portal is used
+set g_balance_portal_lifetime 15 // these get recharged whenever the portal is used
+
+// TESTING: on-hand hook with bomb
+set g_balance_hook_primary_ammo 0 // hook monkeys
+set g_balance_hook_primary_refire 0 // hook monkeys
+set g_balance_hook_primary_animtime 0.3 // good shoot anim
+set g_balance_hook_secondary_damage 25 // not much
+set g_balance_hook_secondary_edgedamage 5 // not much
+set g_balance_hook_secondary_radius 800 // LOTS
+set g_balance_hook_secondary_force -2000 // LOTS
+set g_balance_hook_secondary_ammo 25 // a whole pack
+set g_balance_hook_secondary_lifetime 30 // infinite
+set g_balance_hook_secondary_speed 0 // not much throwing
+set g_balance_hook_secondary_gravity 5 // fast falling
+set g_balance_hook_secondary_refire 3 // don't drop too many bombs...
+set g_balance_hook_secondary_animtime 0.3 // good shoot anim
+
+// HLAC 
+set g_balance_hlac_primary_spread_min 0.01
+set g_balance_hlac_primary_spread_max 0.25
+set g_balance_hlac_primary_spread_add 0.0045
+set g_balance_hlac_primary_spread_crouchmod 0.25
+
+set g_balance_hlac_primary_damage 30
+set g_balance_hlac_primary_edgedamage 10
+set g_balance_hlac_primary_force 100
+set g_balance_hlac_primary_radius 70
+set g_balance_hlac_primary_speed 9000
+set g_balance_hlac_primary_lifetime 5
+
+set g_balance_hlac_primary_refire 0.1
+set g_balance_hlac_primary_animtime 0.1
+set g_balance_hlac_primary_ammo 1
+
+set g_balance_hlac_secondary_spread 0.15
+set g_balance_hlac_secondary_spread_crouchmod 0.5
+
+set g_balance_hlac_secondary_damage 30
+set g_balance_hlac_secondary_edgedamage 10
+set g_balance_hlac_secondary_force 150
+set g_balance_hlac_secondary_radius 100
+set g_balance_hlac_secondary_speed 9000
+set g_balance_hlac_secondary_lifetime 5
+
+set g_balance_hlac_secondary_refire 1
+set g_balance_hlac_secondary_animtime 0.3
+set g_balance_hlac_secondary_ammo 10
+
+
+// TAG Seeker
+set g_balance_seeker_tag_speed   9000
+set g_balance_seeker_tag_ammo    1
+set g_balance_seeker_tag_animtime 0.1
+set g_balance_seeker_tag_refire  0.7
+
+set g_balance_seeker_missile_delay 0.25
+set g_balance_seeker_missile_activate_delay 0.1
+
+set g_balance_seeker_missile_speed        700
+set g_balance_seeker_missile_accel		1.05
+set g_balance_seeker_missile_decel		0.9
+
+set g_balance_seeker_missile_speed_max    1250
+set g_balance_seeker_missile_turnrate     0.65
+
+set g_balance_seeker_missile_damage       40
+set g_balance_seeker_missile_edgedamage   10
+set g_balance_seeker_missile_radius       80
+set g_balance_seeker_missile_force        250
+
+set g_balance_seeker_missile_count		    4
+set g_balance_seeker_missile_lifetime 	    15
+set g_balance_seeker_missile_refire           0.5
+set g_balance_seeker_missile_animtime 	    0.25
+set g_balance_seeker_missile_ammo             2
+
+set g_balance_seeker_missile_proxy            0
+set g_balance_seeker_missile_proxy_maxrange   45
+set g_balance_seeker_missile_proxy_delay      0.2
+
+// World avoidance
+set g_balance_seeker_missile_smart             1
+set g_balance_seeker_missile_smart_mindist     800
+set g_balance_seeker_missile_smart_trace_max   2500
+set g_balance_seeker_missile_smart_trace_min   1000
+// End new seeker
+
+
+set g_balance_seeker_flac_lifetime      0.1
+set g_balance_seeker_flac_lifetime_rand 0.05
+set g_balance_seeker_flac_speed         3000
+set g_balance_seeker_flac_spread	    0.25
+
+set g_balance_seeker_flac_damage       15
+set g_balance_seeker_flac_edgedamage   10
+set g_balance_seeker_flac_radius       100
+set g_balance_seeker_flac_force        50
+
+set g_balance_seeker_flac_refire       0.1
+set g_balance_seeker_flac_animtime     0.1
+set g_balance_seeker_flac_ammo         0.5
+
+




More information about the nexuiz-commits mailing list